HI ! Minor cleanup: drop unnecessary migrate_disable in _cpu_down in kernel/cpu.c:_cpu_down ... cpumask_andnot(cpumask, cpu_online_mask, cpumask_of(cpu)); set_cpus_allowed_ptr(current, cpumask); ... migrate_disable(); mycpu = smp_processor_id(); if (mycpu == cpu) { printk(KERN_ERR "Yuck! Still on unplug CPU\n!"); migrate_enable(); err = -EBUSY; goto restore_cpus; } migrate_enable(); If we got migrated off "cpu" then we can not get migrate back as the cpus_allowed was updated. so if smp_processor_id(); returns anything != cpu we are fine even if migrated off to a third cpu between the mycpu = smp_processor_id() and the if (mycpu == cpu). No need for migration protection here. Further the migrate disable is effectively only needed for the condition check in the if statement - so I think it could be replaced by: if (cpu==smp_processor_id()) { pr_err("Yuck! Still on unplug CPU\n!"); err = -EBUSY; goto restore_cpus; } even in the case that the cpus_allowed had not been updated. Patch is against 3.12.13-rt21 Signed-off-by: Nicholas Mc Guire <der.herr@xxxxxxx> --- kernel/cpu.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/kernel/cpu.c b/kernel/cpu.c index ba7416b..fc5566a 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -565,7 +565,7 @@ static int __ref take_cpu_down(void *_param) /* Requires cpu_add_remove_lock to be held */ static int __ref _cpu_down(unsigned int cpu, int tasks_frozen) { - int mycpu, err, nr_calls = 0; + int err, nr_calls = 0; void *hcpu = (void *)(long)cpu; unsigned long mod = tasks_frozen ? CPU_TASKS_FROZEN : 0; struct take_cpu_down_param tcd_param = { @@ -593,15 +593,11 @@ static int __ref _cpu_down(unsigned int cpu, int tasks_frozen) cpumask_andnot(cpumask, cpu_online_mask, cpumask_of(cpu)); set_cpus_allowed_ptr(current, cpumask); free_cpumask_var(cpumask); - migrate_disable(); - mycpu = smp_processor_id(); - if (mycpu == cpu) { + if (cpu == smp_processor_id()) { printk(KERN_ERR "Yuck! Still on unplug CPU\n!"); - migrate_enable(); err = -EBUSY; goto restore_cpus; } - migrate_enable(); cpu_hotplug_begin(); err = cpu_unplug_begin(cpu); -- 1.7.10.4 -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html