diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2010-04-15 12:21:00 +0100 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2010-04-15 12:21:00 +0100 |
commit | 0e697bad53d50888b82c2fb1b024709244a52b7c (patch) | |
tree | 01a2ed76d3915491443661897dff4b1cf6cc9415 | |
parent | b1d62eecbba151d4dde4f803e87c3c82ca934fab (diff) | |
download | xen-0e697bad53d50888b82c2fb1b024709244a52b7c.tar.gz xen-0e697bad53d50888b82c2fb1b024709244a52b7c.tar.bz2 xen-0e697bad53d50888b82c2fb1b024709244a52b7c.zip |
acpi sleep: domain_freeze() pauses all vcpus, but does not sync the
current vcpu (since that would obviously deadlock).
This simplifies thaw_domains() which is required now that thawing can
happen in deifferent context to freeze_domains().
Signed-off-by: Keir Fraser <keir.fraser@citrix.com>
-rw-r--r-- | xen/arch/x86/acpi/power.c | 27 |
1 files changed, 7 insertions, 20 deletions
diff --git a/xen/arch/x86/acpi/power.c b/xen/arch/x86/acpi/power.c index 0252ff4fbc..7978e01de2 100644 --- a/xen/arch/x86/acpi/power.c +++ b/xen/arch/x86/acpi/power.c @@ -82,16 +82,12 @@ static void freeze_domains(void) rcu_read_lock(&domlist_read_lock); for_each_domain ( d ) { - switch ( d->domain_id ) + for_each_vcpu ( d, v ) { - case 0: - for_each_vcpu ( d, v ) - if ( v != current ) - vcpu_pause(v); - break; - default: - domain_pause(d); - break; + if ( v != current ) + vcpu_pause(v); + else + vcpu_pause_nosync(v); } } rcu_read_unlock(&domlist_read_lock); @@ -105,17 +101,8 @@ static void thaw_domains(void) rcu_read_lock(&domlist_read_lock); for_each_domain ( d ) { - switch ( d->domain_id ) - { - case 0: - for_each_vcpu ( d, v ) - if ( v != current ) - vcpu_unpause(v); - break; - default: - domain_unpause(d); - break; - } + for_each_vcpu ( d, v ) + vcpu_unpause(v); } rcu_read_unlock(&domlist_read_lock); } |