aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/smp.c
diff options
context:
space:
mode:
authorRoman Gushchin <klamm@yandex-team.ru>2014-01-30 18:45:48 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2014-01-30 19:56:54 -0500
commit73f945505b9bf798d8c3ee830cb330dd6d7fb4c7 (patch)
treebe2309d3d55b40f1830f0c51b3f14d941228b562 /kernel/smp.c
parent6897fc22ea01b562b55c6168592bcbd3ee62b006 (diff)
kernel/smp.c: remove cpumask_ipi
After commit 9a46ad6d6df3 ("smp: make smp_call_function_many() use logic similar to smp_call_function_single()"), cfd->cpumask is accessed only in smp_call_function_many(). So there is no more need to copy it into cfd->cpumask_ipi before putting csd into the list. The cpumask_ipi field is obsolete and can be removed. Signed-off-by: Roman Gushchin <klamm@yandex-team.ru> Cc: Ingo Molnar <mingo@kernel.org> Cc: Christoph Hellwig <hch@lst.de> Cc: Wang YanQing <udknight@gmail.com> Cc: Xie XiuQi <xiexiuqi@huawei.com> Cc: Shaohua Li <shli@fusionio.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'kernel/smp.c')
-rw-r--r--kernel/smp.c17
1 files changed, 1 insertions, 16 deletions
diff --git a/kernel/smp.c b/kernel/smp.c
index 4ad913e7c253..ffee35bef179 100644
--- a/kernel/smp.c
+++ b/kernel/smp.c
@@ -23,7 +23,6 @@ enum {
23struct call_function_data { 23struct call_function_data {
24 struct call_single_data __percpu *csd; 24 struct call_single_data __percpu *csd;
25 cpumask_var_t cpumask; 25 cpumask_var_t cpumask;
26 cpumask_var_t cpumask_ipi;
27}; 26};
28 27
29static DEFINE_PER_CPU_SHARED_ALIGNED(struct call_function_data, cfd_data); 28static DEFINE_PER_CPU_SHARED_ALIGNED(struct call_function_data, cfd_data);
@@ -42,14 +41,8 @@ hotplug_cfd(struct notifier_block *nfb, unsigned long action, void *hcpu)
42 if (!zalloc_cpumask_var_node(&cfd->cpumask, GFP_KERNEL, 41 if (!zalloc_cpumask_var_node(&cfd->cpumask, GFP_KERNEL,
43 cpu_to_node(cpu))) 42 cpu_to_node(cpu)))
44 return notifier_from_errno(-ENOMEM); 43 return notifier_from_errno(-ENOMEM);
45 if (!zalloc_cpumask_var_node(&cfd->cpumask_ipi, GFP_KERNEL,
46 cpu_to_node(cpu))) {
47 free_cpumask_var(cfd->cpumask);
48 return notifier_from_errno(-ENOMEM);
49 }
50 cfd->csd = alloc_percpu(struct call_single_data); 44 cfd->csd = alloc_percpu(struct call_single_data);
51 if (!cfd->csd) { 45 if (!cfd->csd) {
52 free_cpumask_var(cfd->cpumask_ipi);
53 free_cpumask_var(cfd->cpumask); 46 free_cpumask_var(cfd->cpumask);
54 return notifier_from_errno(-ENOMEM); 47 return notifier_from_errno(-ENOMEM);
55 } 48 }
@@ -62,7 +55,6 @@ hotplug_cfd(struct notifier_block *nfb, unsigned long action, void *hcpu)
62 case CPU_DEAD: 55 case CPU_DEAD:
63 case CPU_DEAD_FROZEN: 56 case CPU_DEAD_FROZEN:
64 free_cpumask_var(cfd->cpumask); 57 free_cpumask_var(cfd->cpumask);
65 free_cpumask_var(cfd->cpumask_ipi);
66 free_percpu(cfd->csd); 58 free_percpu(cfd->csd);
67 break; 59 break;
68#endif 60#endif
@@ -383,13 +375,6 @@ void smp_call_function_many(const struct cpumask *mask,
383 if (unlikely(!cpumask_weight(cfd->cpumask))) 375 if (unlikely(!cpumask_weight(cfd->cpumask)))
384 return; 376 return;
385 377
386 /*
387 * After we put an entry into the list, cfd->cpumask may be cleared
388 * again when another CPU sends another IPI for a SMP function call, so
389 * cfd->cpumask will be zero.
390 */
391 cpumask_copy(cfd->cpumask_ipi, cfd->cpumask);
392
393 for_each_cpu(cpu, cfd->cpumask) { 378 for_each_cpu(cpu, cfd->cpumask) {
394 struct call_single_data *csd = per_cpu_ptr(cfd->csd, cpu); 379 struct call_single_data *csd = per_cpu_ptr(cfd->csd, cpu);
395 380
@@ -400,7 +385,7 @@ void smp_call_function_many(const struct cpumask *mask,
400 } 385 }
401 386
402 /* Send a message to all CPUs in the map */ 387 /* Send a message to all CPUs in the map */
403 arch_send_call_function_ipi_mask(cfd->cpumask_ipi); 388 arch_send_call_function_ipi_mask(cfd->cpumask);
404 389
405 if (wait) { 390 if (wait) {
406 for_each_cpu(cpu, cfd->cpumask) { 391 for_each_cpu(cpu, cfd->cpumask) {