Author: kib
Date: Fri Jul  6 19:50:44 2018
New Revision: 336047
URL: https://svnweb.freebsd.org/changeset/base/336047

Log:
  Expand x86 struct pcpus to UMA_PCPU_ALLOC_SIZE AKA PAGE_SIZE.
  
  This restores counters(9) operation.
  Revert r336024. Improve assert of pcpu size on x86.
  
  Reviewed by:  mmacy
  Sponsored by: The FreeBSD Foundation
  Differential revision:        https://reviews.freebsd.org/D16163

Modified:
  head/sys/amd64/include/counter.h
  head/sys/amd64/include/pcpu.h
  head/sys/i386/include/pcpu.h
  head/sys/sys/pcpu.h

Modified: head/sys/amd64/include/counter.h
==============================================================================
--- head/sys/amd64/include/counter.h    Fri Jul  6 19:50:25 2018        
(r336046)
+++ head/sys/amd64/include/counter.h    Fri Jul  6 19:50:44 2018        
(r336047)
@@ -83,18 +83,11 @@ counter_u64_zero_inline(counter_u64_t c)
 static inline void
 counter_u64_add(counter_u64_t c, int64_t inc)
 {
-       int64_t *p;
-#ifdef notyet
+
        __asm __volatile("addq\t%1,%%gs:(%0)"
            :
            : "r" ((char *)c - (char *)&__pcpu[0]), "ri" (inc)
            : "memory", "cc");
-#endif
-       /* temporary */
-       critical_enter();
-       p = zpcpu_get(c);
-       *p += inc;
-       critical_exit();
 }
 
 #endif /* ! __MACHINE_COUNTER_H__ */

Modified: head/sys/amd64/include/pcpu.h
==============================================================================
--- head/sys/amd64/include/pcpu.h       Fri Jul  6 19:50:25 2018        
(r336046)
+++ head/sys/amd64/include/pcpu.h       Fri Jul  6 19:50:44 2018        
(r336047)
@@ -76,8 +76,7 @@
        uint32_t pc_pcid_gen;                                           \
        uint32_t pc_smp_tlb_done;       /* TLB op acknowledgement */    \
        uint32_t pc_ibpb_set;                                           \
-       char    __pad[216]              /* be divisor of PAGE_SIZE      \
-                                          after cache alignment */
+       char    __pad[3288]             /* pad to UMA_PCPU_ALLOC_SIZE */
 
 #define        PC_DBREG_CMD_NONE       0
 #define        PC_DBREG_CMD_LOAD       1

Modified: head/sys/i386/include/pcpu.h
==============================================================================
--- head/sys/i386/include/pcpu.h        Fri Jul  6 19:50:25 2018        
(r336046)
+++ head/sys/i386/include/pcpu.h        Fri Jul  6 19:50:44 2018        
(r336047)
@@ -80,7 +80,7 @@
        caddr_t pc_pmap_eh_ptep;                                                
\
        uint32_t pc_smp_tlb_done;       /* TLB op acknowledgement */    \
        uint32_t pc_ibpb_set;                                           \
-       char    __pad[538]
+       char    __pad[3610]
 
 #ifdef _KERNEL
 

Modified: head/sys/sys/pcpu.h
==============================================================================
--- head/sys/sys/pcpu.h Fri Jul  6 19:50:25 2018        (r336046)
+++ head/sys/sys/pcpu.h Fri Jul  6 19:50:44 2018        (r336047)
@@ -185,14 +185,6 @@ struct pcpu {
        PCPU_MD_FIELDS;
 } __aligned(CACHE_LINE_SIZE);
 
-#ifdef CTASSERT
-/*
- * To minimize memory waste in per-cpu UMA zones, size of struct pcpu
- * should be denominator of PAGE_SIZE.
- */
-CTASSERT((PAGE_SIZE / sizeof(struct pcpu)) * sizeof(struct pcpu) == PAGE_SIZE);
-#endif
-
 #ifdef _KERNEL
 
 STAILQ_HEAD(cpuhead, pcpu);
@@ -208,6 +200,19 @@ extern struct pcpu *cpuid_to_pcpu[];
 #define        curvidata       PCPU_GET(vidata)
 
 #define UMA_PCPU_ALLOC_SIZE            PAGE_SIZE
+
+#ifdef CTASSERT
+#if defined(__i386__) || defined(__amd64__)
+/* Required for counters(9) to work on x86. */
+CTASSERT(sizeof(struct pcpu) == UMA_PCPU_ALLOC_SIZE);
+#else
+/*
+ * To minimize memory waste in per-cpu UMA zones, size of struct pcpu
+ * should be denominator of PAGE_SIZE.
+ */
+CTASSERT((PAGE_SIZE / sizeof(struct pcpu)) * sizeof(struct pcpu) == PAGE_SIZE);
+#endif /* UMA_PCPU_ALLOC_SIZE && x86 */
+#endif /* CTASSERT */
 
 /* Accessor to elements allocated via UMA_ZONE_PCPU zone. */
 static inline void *
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to