From b3bbfdfe91277d28ad72f44e87c48fc8173bbc09 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Tue, 12 Feb 2019 08:29:55 +0100 Subject: ZONE(9): Fix UMA_PCPU_ALLOC_SIZE Using CACHE_LINE_SIZE for UMA_PCPU_ALLOC_SIZE was a huge memory waste since the backend memory allocator is page based. --- freebsd/sys/sys/pcpu.h | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'freebsd') diff --git a/freebsd/sys/sys/pcpu.h b/freebsd/sys/sys/pcpu.h index 7aad9f2e..de5936f6 100644 --- a/freebsd/sys/sys/pcpu.h +++ b/freebsd/sys/sys/pcpu.h @@ -170,6 +170,7 @@ extern uintptr_t dpcpu_off[]; #endif /* _KERNEL */ +#ifndef __rtems__ /* * This structure maps out the global data that needs to be kept on a * per-cpu basis. The members are accessed via the PCPU_GET/SET/PTR @@ -177,7 +178,6 @@ extern uintptr_t dpcpu_off[]; * defined in the PCPU_MD_FIELDS macro defined in . */ struct pcpu { -#ifndef __rtems__ struct thread *pc_curthread; /* Current thread */ struct thread *pc_idlethread; /* Idle thread */ struct thread *pc_fpcurthread; /* Fp state owner */ @@ -208,10 +208,10 @@ struct pcpu { * if only to make kernel debugging easier. */ PCPU_MD_FIELDS; +} __aligned(CACHE_LINE_SIZE); #else /* __rtems__ */ - int pc_dummy; +struct pcpu; #endif /* __rtems__ */ -} __aligned(CACHE_LINE_SIZE); #ifdef _KERNEL @@ -227,9 +227,9 @@ extern struct pcpu *cpuid_to_pcpu[]; #endif #define curvidata PCPU_GET(vidata) -#ifndef __rtems__ #define UMA_PCPU_ALLOC_SIZE PAGE_SIZE +#ifndef __rtems__ #ifdef CTASSERT #if defined(__i386__) || defined(__amd64__) /* Required for counters(9) to work on x86. */ @@ -242,8 +242,6 @@ CTASSERT(sizeof(struct pcpu) == UMA_PCPU_ALLOC_SIZE); CTASSERT((PAGE_SIZE / sizeof(struct pcpu)) * sizeof(struct pcpu) == PAGE_SIZE); #endif /* UMA_PCPU_ALLOC_SIZE && x86 */ #endif /* CTASSERT */ -#else /* __rtems__ */ -#define UMA_PCPU_ALLOC_SIZE sizeof(struct pcpu) #endif /* __rtems__ */ /* Accessor to elements allocated via UMA_ZONE_PCPU zone. */ -- cgit v1.2.3