From: Jan Beulich Date: Mon, 19 Feb 2018 13:00:31 +0000 (+0100) Subject: shut down domain when last vCPU goes down X-Git-Tag: archive/raspbian/4.11.1-1+rpi1~1^2~66^2~560 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=d3b230fc46ee9853064e167f6cb4da8ea0a08112;p=xen.git shut down domain when last vCPU goes down I've just had to deal with an early boot crash of Linux which occurred so early that even "earlyprintk=xen" did not produce any useful output. Hence the domain appeared to hang, while in fact it had brought down its only vCPU. By translating this to a shutdown, the situation will be better recognizable. Signed-off-by: Jan Beulich Reviewed-by: Andrew Cooper Reviewed-by: Roger Pau Monné --- diff --git a/xen/common/domain.c b/xen/common/domain.c index 4567773fe2..e1c003d71e 100644 --- a/xen/common/domain.c +++ b/xen/common/domain.c @@ -1321,6 +1321,22 @@ long do_vcpu_op(int cmd, unsigned int vcpuid, XEN_GUEST_HANDLE_PARAM(void) arg) break; case VCPUOP_down: + for_each_vcpu ( d, v ) + if ( v->vcpu_id != vcpuid && !test_bit(_VPF_down, &v->pause_flags) ) + { + rc = 1; + break; + } + + if ( !rc ) /* Last vcpu going down? */ + { + domain_shutdown(d, SHUTDOWN_poweroff); + break; + } + + rc = 0; + v = d->vcpu[vcpuid]; + #ifdef CONFIG_X86 if ( pv_shim ) rc = continue_hypercall_on_cpu(0, pv_shim_cpu_down, v);