diff options
author | Roman Gushchin <klamm@yandex-team.ru> | 2014-01-30 18:45:48 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-01-30 19:56:54 -0500 |
commit | 73f945505b9bf798d8c3ee830cb330dd6d7fb4c7 (patch) | |
tree | be2309d3d55b40f1830f0c51b3f14d941228b562 /kernel | |
parent | 6897fc22ea01b562b55c6168592bcbd3ee62b006 (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')
-rw-r--r-- | kernel/smp.c | 17 |
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 { | |||
23 | struct call_function_data { | 23 | struct 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 | ||
29 | static DEFINE_PER_CPU_SHARED_ALIGNED(struct call_function_data, cfd_data); | 28 | static 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) { |