[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] avoid crash when doing shutdown with active cpupools
commit 05377dede434c746e6708f055858378d20f619db Author: Juergen Gross <jgross@xxxxxxxx> AuthorDate: Wed Jul 23 18:03:19 2014 +0200 Commit: Jan Beulich <jbeulich@xxxxxxxx> CommitDate: Wed Jul 23 18:03:19 2014 +0200 avoid crash when doing shutdown with active cpupools When shutting down the machine while there are cpus in a cpupool other than Pool-0 a crash is triggered due to cpupool handling rejecting offlining the non-boot cpus in other cpupools. It is easy to detect this case and allow offlining those cpus. Reported-by: Stefan Bader <stefan.bader@xxxxxxxxxxxxx> Signed-off-by: Juergen Gross <jgross@xxxxxxxx> Tested-by: Stefan Bader <stefan.bader@xxxxxxxxxxxxx> --- xen/common/cpupool.c | 18 +++++++++++++++--- 1 files changed, 15 insertions(+), 3 deletions(-) diff --git a/xen/common/cpupool.c b/xen/common/cpupool.c index 4a0e569..73249d3 100644 --- a/xen/common/cpupool.c +++ b/xen/common/cpupool.c @@ -471,12 +471,24 @@ static void cpupool_cpu_add(unsigned int cpu) */ static int cpupool_cpu_remove(unsigned int cpu) { - int ret = 0; + int ret = -EBUSY; + struct cpupool **c; spin_lock(&cpupool_lock); - if ( !cpumask_test_cpu(cpu, cpupool0->cpu_valid)) - ret = -EBUSY; + if ( cpumask_test_cpu(cpu, cpupool0->cpu_valid) ) + ret = 0; else + { + for_each_cpupool(c) + { + if ( cpumask_test_cpu(cpu, (*c)->cpu_suspended ) ) + { + ret = 0; + break; + } + } + } + if ( !ret ) cpumask_set_cpu(cpu, &cpupool_locked_cpus); spin_unlock(&cpupool_lock); -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |