diff -r 4b476378fc35 -r b7fa7fdaad59 xen/common/cpu.c --- a/xen/common/cpu.c Mon Jan 21 17:03:10 2013 +0000 +++ b/xen/common/cpu.c Thu Jan 24 13:40:31 2013 +0000 @@ -5,6 +5,7 @@ #include #include #include +#include unsigned int __read_mostly nr_cpu_ids = NR_CPUS; #ifndef nr_cpumask_bits @@ -212,6 +213,8 @@ BUG_ON(error == -EBUSY); printk("Error taking CPU%d up: %d\n", cpu, error); } + if (system_state == SYS_STATE_resume) + cpumask_set_cpu(cpu, cpupool0->cpu_valid); } cpumask_clear(&frozen_cpus); diff -r 4b476378fc35 -r b7fa7fdaad59 xen/common/schedule.c --- a/xen/common/schedule.c Mon Jan 21 17:03:10 2013 +0000 +++ b/xen/common/schedule.c Thu Jan 24 13:40:31 2013 +0000 @@ -545,7 +545,7 @@ int ret = 0; c = per_cpu(cpupool, cpu); - if ( (c == NULL) || (system_state == SYS_STATE_suspend) ) + if ( c == NULL ) return ret; for_each_domain_in_cpupool ( d, c ) @@ -556,7 +556,8 @@ cpumask_and(&online_affinity, v->cpu_affinity, c->cpu_valid); if ( cpumask_empty(&online_affinity) && - cpumask_test_cpu(cpu, v->cpu_affinity) ) + cpumask_test_cpu(cpu, v->cpu_affinity) && + system_state != SYS_STATE_suspend ) { printk("Breaking vcpu affinity for domain %d vcpu %d\n", v->domain->domain_id, v->vcpu_id);