[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20140324122025.GB18300@opentech.at>
Date: Mon, 24 Mar 2014 13:20:25 +0100
From: Nicholas Mc Guire <der.herr@...r.at>
To: linux-rt-users@...r.kernel.org
Cc: linux-kernel@...r.kernel.org, rostedt@...dmis.org,
tglx@...utronix.de,
Sebastian Andrzej Siewior <bigeasy@...utronix.de>,
Peter Zijlstra <peterz@...radead.org>
Subject: [PATCH RT] drop migrate_disabled section in _cpu_down
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@...r.at>
---
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-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists