]> Pileus Git - ~andy/linux/blobdiff - kernel/cpu.c
Input: cypress_ps2 - don't report as a button pads
[~andy/linux] / kernel / cpu.c
index 973d034acf844b25c1f1d35cd66dd7ff17e2c31d..deff2e693766997a259b4b3ac2fc4f789e554f1d 100644 (file)
@@ -306,7 +306,6 @@ static int __ref _cpu_down(unsigned int cpu, int tasks_frozen)
                                __func__, cpu);
                goto out_release;
        }
-       smpboot_park_threads(cpu);
 
        /*
         * By now we've cleared cpu_active_mask, wait for all preempt-disabled
@@ -315,12 +314,16 @@ static int __ref _cpu_down(unsigned int cpu, int tasks_frozen)
         *
         * For CONFIG_PREEMPT we have preemptible RCU and its sync_rcu() might
         * not imply sync_sched(), so explicitly call both.
+        *
+        * Do sync before park smpboot threads to take care the rcu boost case.
         */
 #ifdef CONFIG_PREEMPT
        synchronize_sched();
 #endif
        synchronize_rcu();
 
+       smpboot_park_threads(cpu);
+
        /*
         * So now all preempt/rcu users must observe !cpu_active().
         */