mirror of https://github.com/proxmox/mirror_qemu
S390: dont call system_shutdown on disabled wait
A disabled wait usually indicates a guest problem. Dont shutdown the guest to allow guest dumping. Have some special cases, e.g. a quiesce disabled wait. In that case we want to shutdown. Long term solution might be a crashed/panic indication. Signed-off-by: Christian Borntraeger <borntraeger@de.ibm.com> Signed-off-by: Alexander Graf <agraf@suse.de>master
parent
ad0bbc5600
commit
eca3ed0343
|
@ -407,6 +407,12 @@ static int handle_instruction(CPUS390XState *env, struct kvm_run *run)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool is_special_wait_psw(CPUS390XState *env)
|
||||||
|
{
|
||||||
|
/* signal quiesce */
|
||||||
|
return env->kvm_run->psw_addr == 0xfffUL;
|
||||||
|
}
|
||||||
|
|
||||||
static int handle_intercept(CPUS390XState *env)
|
static int handle_intercept(CPUS390XState *env)
|
||||||
{
|
{
|
||||||
struct kvm_run *run = env->kvm_run;
|
struct kvm_run *run = env->kvm_run;
|
||||||
|
@ -420,6 +426,12 @@ static int handle_intercept(CPUS390XState *env)
|
||||||
r = handle_instruction(env, run);
|
r = handle_instruction(env, run);
|
||||||
break;
|
break;
|
||||||
case ICPT_WAITPSW:
|
case ICPT_WAITPSW:
|
||||||
|
if (s390_del_running_cpu(env) == 0 &&
|
||||||
|
is_special_wait_psw(env)) {
|
||||||
|
qemu_system_shutdown_request();
|
||||||
|
}
|
||||||
|
r = EXCP_HALTED;
|
||||||
|
break;
|
||||||
case ICPT_CPU_STOP:
|
case ICPT_CPU_STOP:
|
||||||
if (s390_del_running_cpu(env) == 0) {
|
if (s390_del_running_cpu(env) == 0) {
|
||||||
qemu_system_shutdown_request();
|
qemu_system_shutdown_request();
|
||||||
|
|
Loading…
Reference in New Issue