summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorMilton Miller <miltonm@bga.com>2011-03-15 13:27:17 -0600
committerGreg Kroah-Hartman <gregkh@suse.de>2011-03-23 13:04:08 -0700
commitd1342fed517f89ad4c3d956d9e214d72c06bb7c1 (patch)
treea20315a3c4851e5636b93c9b04bea363eee1f7fe /arch
parent4718af584c9db2b2002a89b856462cedaaf3d7da (diff)
smp_call_function_many: handle concurrent clearing of mask
commit 723aae25d5cdb09962901d36d526b44d4be1051c upstream. Mike Galbraith reported finding a lockup ("perma-spin bug") where the cpumask passed to smp_call_function_many was cleared by other cpu(s) while a cpu was preparing its call_data block, resulting in no cpu to clear the last ref and unlock the block. Having cpus clear their bit asynchronously could be useful on a mask of cpus that might have a translation context, or cpus that need a push to complete an rcu window. Instead of adding a BUG_ON and requiring yet another cpumask copy, just detect the race and handle it. Note: arch_send_call_function_ipi_mask must still handle an empty cpumask because the data block is globally visible before the that arch callback is made. And (obviously) there are no guarantees to which cpus are notified if the mask is changed during the call; only cpus that were online and had their mask bit set during the whole call are guaranteed to be called. Reported-by: Mike Galbraith <efault@gmx.de> Reported-by: Jan Beulich <JBeulich@novell.com> Acked-by: Jan Beulich <jbeulich@novell.com> Signed-off-by: Milton Miller <miltonm@bga.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'arch')
0 files changed, 0 insertions, 0 deletions