lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
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

Powered by Openwall GNU/*/Linux Powered by OpenVZ