>From f53e105a9789b6d268e7fe4d05e4b989b9143338 Mon Sep 17 00:00:00 2001 From: Juergen Gross To: xen-devel@xxxxxxxxxxxxxxxxxxxx Cc: George Dunlap Cc: Dario Faggioli Date: Sun, 5 Jan 2020 09:21:41 +0100 Subject: [PATCH] xen/sched: fix resuming from S3 with smt=0 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"). Signed-off-by: Juergen Gross --- xen/common/schedule.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) 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; -- 2.16.4