This ensures we are properly running on idle-vcpu state, which certain
things (e.g., use of vmx_vmcs_{enter,exit}) rely on. It also means we
don't need to do the same thing in the stopmachine_run handler.
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
for_each_cpu_mask ( i, allbutself )
tasklet_schedule_on_cpu(&per_cpu(stopmachine_tasklet, i), i);
- sync_local_execstate();
stopmachine_set_state(STOPMACHINE_PREPARE);
local_irq_disable();
{
enum stopmachine_state state = STOPMACHINE_START;
- sync_local_execstate();
smp_mb();
while ( state != STOPMACHINE_EXIT )
t->is_running = 1;
spin_unlock_irq(&tasklet_lock);
+ sync_local_execstate();
t->func(t->data);
spin_lock_irq(&tasklet_lock);