]>
Commit | Line | Data |
---|---|---|
2cb7cef9 BS |
1 | From: Mike Travis <travis@sgi.com> |
2 | Date: Fri, 5 Sep 2008 14:40:21 -0700 | |
3 | Subject: [PATCH] x86: reduce stack requirements for send_call_func_ipi | |
4 | References: bnc#425240 FATE304266 | |
5 | Patch-mainline: 2.6.28 | |
6 | ||
7 | * By converting the internal x86 smp_ops function send_call_func_ipi | |
8 | to pass a pointer to the cpumask_t variable, we greatly reduce the | |
9 | stack space required when NR_CPUS=4096. | |
10 | ||
11 | Further reduction will be realized when the send_IPI_mask interface | |
12 | is changed in 2.6.28. | |
13 | ||
14 | Signed-off-by: Mike Travis <travis@sgi.com> | |
15 | Signed-off-by: Ingo Molnar <mingo@elte.hu> | |
16 | Signed-off-by: Jiri Slaby <jslaby@suse.cz> | |
17 | Signed-off-by: Thomas Renninger <trenn@suse.de> | |
18 | --- | |
19 | arch/x86/kernel/smp.c | 6 +++--- | |
20 | arch/x86/xen/smp.c | 6 +++--- | |
21 | include/asm-x86/smp.h | 6 +++--- | |
22 | 3 files changed, 9 insertions(+), 9 deletions(-) | |
23 | ||
24 | diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c | |
25 | index 361b7a4..0708394 100644 | |
26 | --- a/arch/x86/kernel/smp.c | |
27 | +++ b/arch/x86/kernel/smp.c | |
28 | @@ -126,18 +126,18 @@ void native_send_call_func_single_ipi(int cpu) | |
29 | send_IPI_mask(cpumask_of_cpu(cpu), CALL_FUNCTION_SINGLE_VECTOR); | |
30 | } | |
31 | ||
32 | -void native_send_call_func_ipi(cpumask_t mask) | |
33 | +void native_send_call_func_ipi(const cpumask_t *mask) | |
34 | { | |
35 | cpumask_t allbutself; | |
36 | ||
37 | allbutself = cpu_online_map; | |
38 | cpu_clear(smp_processor_id(), allbutself); | |
39 | ||
40 | - if (cpus_equal(mask, allbutself) && | |
41 | + if (cpus_equal(*mask, allbutself) && | |
42 | cpus_equal(cpu_online_map, cpu_callout_map)) | |
43 | send_IPI_allbutself(CALL_FUNCTION_VECTOR); | |
44 | else | |
45 | - send_IPI_mask(mask, CALL_FUNCTION_VECTOR); | |
46 | + send_IPI_mask(*mask, CALL_FUNCTION_VECTOR); | |
47 | } | |
48 | ||
49 | static void stop_this_cpu(void *dummy) | |
50 | diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c | |
51 | index d8faf79..716588b 100644 | |
52 | --- a/arch/x86/xen/smp.c | |
53 | +++ b/arch/x86/xen/smp.c | |
54 | @@ -371,14 +371,14 @@ static void xen_send_IPI_mask(cpumask_t mask, enum ipi_vector vector) | |
55 | xen_send_IPI_one(cpu, vector); | |
56 | } | |
57 | ||
58 | -static void xen_smp_send_call_function_ipi(cpumask_t mask) | |
59 | +static void xen_smp_send_call_function_ipi(const cpumask_t *mask) | |
60 | { | |
61 | int cpu; | |
62 | ||
63 | - xen_send_IPI_mask(mask, XEN_CALL_FUNCTION_VECTOR); | |
64 | + xen_send_IPI_mask(*mask, XEN_CALL_FUNCTION_VECTOR); | |
65 | ||
66 | /* Make sure other vcpus get a chance to run if they need to. */ | |
67 | - for_each_cpu_mask_nr(cpu, mask) { | |
68 | + for_each_cpu_mask_nr(cpu, *mask) { | |
69 | if (xen_vcpu_stolen(cpu)) { | |
70 | HYPERVISOR_sched_op(SCHEDOP_yield, 0); | |
71 | break; | |
72 | diff --git a/include/asm-x86/smp.h b/include/asm-x86/smp.h | |
73 | index 3c877f7..8eee4ef 100644 | |
74 | --- a/include/asm-x86/smp.h | |
75 | +++ b/include/asm-x86/smp.h | |
76 | @@ -53,7 +53,7 @@ struct smp_ops { | |
77 | void (*smp_send_stop)(void); | |
78 | void (*smp_send_reschedule)(int cpu); | |
79 | ||
80 | - void (*send_call_func_ipi)(cpumask_t mask); | |
81 | + void (*send_call_func_ipi)(const cpumask_t *mask); | |
82 | void (*send_call_func_single_ipi)(int cpu); | |
83 | }; | |
84 | ||
85 | @@ -103,14 +103,14 @@ static inline void arch_send_call_function_single_ipi(int cpu) | |
86 | ||
87 | static inline void arch_send_call_function_ipi(cpumask_t mask) | |
88 | { | |
89 | - smp_ops.send_call_func_ipi(mask); | |
90 | + smp_ops.send_call_func_ipi(&mask); | |
91 | } | |
92 | ||
93 | void native_smp_prepare_boot_cpu(void); | |
94 | void native_smp_prepare_cpus(unsigned int max_cpus); | |
95 | void native_smp_cpus_done(unsigned int max_cpus); | |
96 | int native_cpu_up(unsigned int cpunum); | |
97 | -void native_send_call_func_ipi(cpumask_t mask); | |
98 | +void native_send_call_func_ipi(const cpumask_t *mask); | |
99 | void native_send_call_func_single_ipi(int cpu); | |
100 | ||
101 | extern int __cpu_disable(void); | |
102 | -- | |
103 | 1.6.0.2 | |
104 |