[PATCH] x86-64: Account for module percpu space separately from kernel percpu
Rather than using a single constant PERCPU_ENOUGH_ROOM, compute it as the sum of kernel_percpu + PERCPU_MODULE_RESERVE. This is now common to all architectures; if an architecture wants to set PERCPU_ENOUGH_ROOM to something special, then it may do so (ia64 is the only one which does). Signed-off-by: Jeremy Fitzhardinge <jeremy@xensource.com> Signed-off-by: Andi Kleen <ak@suse.de> Cc: Rusty Russell <rusty@rustcorp.com.au> Cc: Eric W. Biederman <ebiederm@xmission.com> Cc: Andi Kleen <ak@suse.de>
This commit is contained in:
parent
bbba11c35b
commit
b00742d399
5 changed files with 9 additions and 36 deletions
|
@ -1,20 +1,6 @@
|
|||
#ifndef __ALPHA_PERCPU_H
|
||||
#define __ALPHA_PERCPU_H
|
||||
|
||||
/*
|
||||
* Increase the per cpu area for Alpha so that
|
||||
* modules using percpu area can load.
|
||||
*/
|
||||
#ifdef CONFIG_MODULES
|
||||
# define PERCPU_MODULE_RESERVE 8192
|
||||
#else
|
||||
# define PERCPU_MODULE_RESERVE 0
|
||||
#endif
|
||||
|
||||
#define PERCPU_ENOUGH_ROOM \
|
||||
(ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES) + \
|
||||
PERCPU_MODULE_RESERVE)
|
||||
|
||||
#include <asm-generic/percpu.h>
|
||||
|
||||
#endif /* __ALPHA_PERCPU_H */
|
||||
|
|
|
@ -5,16 +5,6 @@
|
|||
|
||||
#ifdef CONFIG_SMP
|
||||
|
||||
#ifdef CONFIG_MODULES
|
||||
# define PERCPU_MODULE_RESERVE 8192
|
||||
#else
|
||||
# define PERCPU_MODULE_RESERVE 0
|
||||
#endif
|
||||
|
||||
#define PERCPU_ENOUGH_ROOM \
|
||||
(ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES) + \
|
||||
PERCPU_MODULE_RESERVE)
|
||||
|
||||
extern void setup_per_cpu_areas(void);
|
||||
|
||||
extern unsigned long __per_cpu_base;
|
||||
|
|
|
@ -11,16 +11,6 @@
|
|||
|
||||
#include <asm/pda.h>
|
||||
|
||||
#ifdef CONFIG_MODULES
|
||||
# define PERCPU_MODULE_RESERVE 8192
|
||||
#else
|
||||
# define PERCPU_MODULE_RESERVE 0
|
||||
#endif
|
||||
|
||||
#define PERCPU_ENOUGH_ROOM \
|
||||
(ALIGN(__per_cpu_end - __per_cpu_start, SMP_CACHE_BYTES) + \
|
||||
PERCPU_MODULE_RESERVE)
|
||||
|
||||
#define __per_cpu_offset(cpu) (cpu_pda(cpu)->data_offset)
|
||||
#define __my_cpu_offset() read_pda(data_offset)
|
||||
|
||||
|
|
|
@ -11,9 +11,16 @@
|
|||
|
||||
/* Enough to cover all DEFINE_PER_CPUs in kernel, including modules. */
|
||||
#ifndef PERCPU_ENOUGH_ROOM
|
||||
#define PERCPU_ENOUGH_ROOM 32768
|
||||
#ifdef CONFIG_MODULES
|
||||
#define PERCPU_MODULE_RESERVE 8192
|
||||
#else
|
||||
#define PERCPU_MODULE_RESERVE 0
|
||||
#endif
|
||||
|
||||
#define PERCPU_ENOUGH_ROOM \
|
||||
(__per_cpu_end - __per_cpu_start + PERCPU_MODULE_RESERVE)
|
||||
#endif /* PERCPU_ENOUGH_ROOM */
|
||||
|
||||
/*
|
||||
* Must be an lvalue. Since @var must be a simple identifier,
|
||||
* we force a syntax error here if it isn't.
|
||||
|
|
|
@ -430,7 +430,7 @@ static int percpu_modinit(void)
|
|||
pcpu_size = kmalloc(sizeof(pcpu_size[0]) * pcpu_num_allocated,
|
||||
GFP_KERNEL);
|
||||
/* Static in-kernel percpu data (used). */
|
||||
pcpu_size[0] = -ALIGN(__per_cpu_end-__per_cpu_start, SMP_CACHE_BYTES);
|
||||
pcpu_size[0] = -(__per_cpu_end-__per_cpu_start);
|
||||
/* Free room. */
|
||||
pcpu_size[1] = PERCPU_ENOUGH_ROOM + pcpu_size[0];
|
||||
if (pcpu_size[1] < 0) {
|
||||
|
|
Loading…
Reference in a new issue