From: Keir Fraser Date: Mon, 19 Apr 2010 16:48:20 +0000 (+0100) Subject: Synchronise lazy execstate before calling tasklet handlers. X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~12338 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=346da00456eb20d41406a72e2e28f27429aca810;p=xen.git Synchronise lazy execstate before calling tasklet handlers. 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 --- diff --git a/xen/common/stop_machine.c b/xen/common/stop_machine.c index 99604cde32..9f5dd1e799 100644 --- a/xen/common/stop_machine.c +++ b/xen/common/stop_machine.c @@ -98,7 +98,6 @@ int stop_machine_run(int (*fn)(void *), void *data, unsigned int cpu) 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(); @@ -121,7 +120,6 @@ static void stopmachine_action(unsigned long unused) { enum stopmachine_state state = STOPMACHINE_START; - sync_local_execstate(); smp_mb(); while ( state != STOPMACHINE_EXIT ) diff --git a/xen/common/tasklet.c b/xen/common/tasklet.c index 1ee2758663..05665ebc5d 100644 --- a/xen/common/tasklet.c +++ b/xen/common/tasklet.c @@ -76,6 +76,7 @@ void do_tasklet(void) t->is_running = 1; spin_unlock_irq(&tasklet_lock); + sync_local_execstate(); t->func(t->data); spin_lock_irq(&tasklet_lock);