lkml.org 
[lkml]   [2014]   [Mar]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
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@hofr.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


\
 
 \ /
  Last update: 2014-03-24 14:01    [W:0.220 / U:0.048 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site