]> git.ipfire.org Git - people/pmueller/ipfire-2.x.git/blame - src/patches/suse-2.6.27.31/patches.arch/x86_sgi_cpus4096-02-fix-send_call_func_ip.patch
Move xen patchset to new version's subdir.
[people/pmueller/ipfire-2.x.git] / src / patches / suse-2.6.27.31 / patches.arch / x86_sgi_cpus4096-02-fix-send_call_func_ip.patch
CommitLineData
00e5a55c
BS
1From: Mike Travis <travis@sgi.com>
2Date: Fri, 5 Sep 2008 14:40:21 -0700
3Subject: [PATCH] x86: reduce stack requirements for send_call_func_ipi
4References: bnc#425240 FATE304266
5Patch-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
14Signed-off-by: Mike Travis <travis@sgi.com>
15Signed-off-by: Ingo Molnar <mingo@elte.hu>
16Signed-off-by: Jiri Slaby <jslaby@suse.cz>
17Signed-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
24diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c
25index 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)
50diff --git a/arch/x86/xen/smp.c b/arch/x86/xen/smp.c
51index 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;
72diff --git a/include/asm-x86/smp.h b/include/asm-x86/smp.h
73index 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--
1031.6.0.2
104