Message ID | 20200105123323.12492-1-jgross@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | xen/sched: fix resuming from S3 with smt=0 | expand |
On 1/5/20 12:33 PM, Juergen Gross wrote: > When resuming from S3 and smt=0 or maxcpus= are specified we must not > do anything in cpu_schedule_callback(). This is not true today for > taking down a cpu during resume. > > If anything goes wrong during resume all the scheduler related error > handling is in cpupool.c, so we can just bail out early from > cpu_schedule_callback() when suspending or resuming. > > This fixes commit 0763cd2687897b55e7 ("xen/sched: don't disable > scheduler on cpus during suspend"). > > Reported-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> > Tested-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com> > Signed-off-by: Juergen Gross <jgross@suse.com> Acked-by: George Dunlap <george.dunlap@citrix.com>
diff --git a/xen/common/schedule.c b/xen/common/schedule.c index e70cc70a65..54a07ff9e8 100644 --- a/xen/common/schedule.c +++ b/xen/common/schedule.c @@ -2562,6 +2562,13 @@ static int cpu_schedule_callback( unsigned int cpu = (unsigned long)hcpu; int rc = 0; + /* + * All scheduler related suspend/resume handling needed is done in + * cpupool.c. + */ + if ( system_state > SYS_STATE_active ) + return NOTIFY_DONE; + rcu_read_lock(&sched_res_rculock); /* @@ -2589,8 +2596,7 @@ static int cpu_schedule_callback( switch ( action ) { case CPU_UP_PREPARE: - if ( system_state != SYS_STATE_resume ) - rc = cpu_schedule_up(cpu); + rc = cpu_schedule_up(cpu); break; case CPU_DOWN_PREPARE: rcu_read_lock(&domlist_read_lock); @@ -2598,13 +2604,10 @@ static int cpu_schedule_callback( rcu_read_unlock(&domlist_read_lock); break; case CPU_DEAD: - if ( system_state == SYS_STATE_suspend ) - break; sched_rm_cpu(cpu); break; case CPU_UP_CANCELED: - if ( system_state != SYS_STATE_resume ) - cpu_schedule_down(cpu); + cpu_schedule_down(cpu); break; default: break;