powerpc: Mask smp_processor_id() false positive
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Thu, 10 Feb 2011 11:57:27 +0000 (11:57 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 2 Mar 2011 05:50:25 +0000 (16:50 +1100)
The rtas_event_scan() function uses smp_processor_id() to select a
starting point in cpu_online_mask, and does so under the protection
of get_online_cpus().  This might not select the current processor
in any case, so switch to raw_smp_processor_id().

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/kernel/rtasd.c

index 049dbecb5dbc7908eb991642bb629e695590341f..7980ec0e1e1a98f318630bb5e7226848416fc71a 100644 (file)
@@ -412,7 +412,8 @@ static void rtas_event_scan(struct work_struct *w)
 
        get_online_cpus();
 
-       cpu = cpumask_next(smp_processor_id(), cpu_online_mask);
+       /* raw_ OK because just using CPU as starting point. */
+       cpu = cpumask_next(raw_smp_processor_id(), cpu_online_mask);
         if (cpu >= nr_cpu_ids) {
                cpu = cpumask_first(cpu_online_mask);