mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 10:11:27 +01:00
allow cpu_down() to be called earlier
The function's use of the stop-machine logic has so far prevented its
use ahead of the processing of the "ordinary" initcalls. Since at this
early time we're in a controlled environment anyway, there's no need for
such a heavy tool. Additionally this ought to have less of a performance
impact especially on large systems, compared to the alternative of
making stop-machine functionality available earlier.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Reviewed-by: Wei Liu <wei.liu2@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
master commit: 5894c0a2da
master date: 2018-07-16 15:15:12 +0200
This commit is contained in:
1 parent
2d69b6d00d
commit
c39cd00893
1 file changed
+9
-2
+9
-2
@@ -68,12 +68,17 @@ void __init register_cpu_notifier(struct notifier_block *nb)
|
||||
spin_unlock(&cpu_add_remove_lock);
|
||||
}
|
||||
|
||||
static int take_cpu_down(void *unused)
|
||||
static void _take_cpu_down(void *unused)
|
||||
{
|
||||
void *hcpu = (void *)(long)smp_processor_id();
|
||||
int notifier_rc = notifier_call_chain(&cpu_chain, CPU_DYING, hcpu, NULL);
|
||||
BUG_ON(notifier_rc != NOTIFY_DONE);
|
||||
__cpu_disable();
|
||||
}
|
||||
|
||||
static int take_cpu_down(void *arg)
|
||||
{
|
||||
_take_cpu_down(arg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -99,7 +104,9 @@ int cpu_down(unsigned int cpu)
|
||||
goto fail;
|
||||
}
|
||||
|
||||
if ( (err = stop_machine_run(take_cpu_down, NULL, cpu)) < 0 )
|
||||
if ( unlikely(system_state < SYS_STATE_active) )
|
||||
on_selected_cpus(cpumask_of(cpu), _take_cpu_down, NULL, 1);
|
||||
else if ( (err = stop_machine_run(take_cpu_down, NULL, cpu)) < 0 )
|
||||
goto fail;
|
||||
|
||||
__cpu_die(cpu);
|
||||
|
||||