svn commit: r336047 - in head/sys: amd64/include i386/include sys
Konstantin Belousov
kib at FreeBSD.org
Fri Jul 6 19:50:46 UTC 2018
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 *
More information about the svn-src-all
mailing list