mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-02 07:13:54 -06:00
shutdown: Add source information to SHUTDOWN and RESET
Time to wire up all the call sites that request a shutdown or reset to use the enum added in the previous patch. It would have been less churn to keep the common case with no arguments as meaning guest-triggered, and only modified the host-triggered code paths, via a wrapper function, but then we'd still have to audit that I didn't miss any host-triggered spots; changing the signature forces us to double-check that I correctly categorized all callers. Since command line options can change whether a guest reset request causes an actual reset vs. a shutdown, it's easy to also add the information to reset requests. Signed-off-by: Eric Blake <eblake@redhat.com> Acked-by: David Gibson <david@gibson.dropbear.id.au> [ppc parts] Reviewed-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> [SPARC part] Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com> [s390x parts] Message-Id: <20170515214114.15442-5-eblake@redhat.com> Reviewed-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
This commit is contained in:
parent
802f045a5f
commit
cf83f14005
60 changed files with 98 additions and 98 deletions
|
@ -60,9 +60,9 @@ void helper_tb_flush(CPUAlphaState *env)
|
|||
void helper_halt(uint64_t restart)
|
||||
{
|
||||
if (restart) {
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
} else {
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -137,7 +137,7 @@ void arm_handle_psci_call(ARMCPU *cpu)
|
|||
}
|
||||
break;
|
||||
case QEMU_PSCI_0_2_FN_SYSTEM_RESET:
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
/* QEMU reset and shutdown are async requests, but PSCI
|
||||
* mandates that we never return from the reset/shutdown
|
||||
* call, so power the CPU off now so it doesn't execute
|
||||
|
@ -145,7 +145,7 @@ void arm_handle_psci_call(ARMCPU *cpu)
|
|||
*/
|
||||
goto cpu_off;
|
||||
case QEMU_PSCI_0_2_FN_SYSTEM_OFF:
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
goto cpu_off;
|
||||
case QEMU_PSCI_0_1_FN_CPU_ON:
|
||||
case QEMU_PSCI_0_2_FN_CPU_ON:
|
||||
|
|
|
@ -59,7 +59,7 @@ static int check_exception(CPUX86State *env, int intno, int *error_code,
|
|||
|
||||
qemu_log_mask(CPU_LOG_RESET, "Triple fault\n");
|
||||
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
return EXCP_HLT;
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -540,14 +540,14 @@ static int hax_vcpu_hax_exec(CPUArchState *env)
|
|||
/* Guest state changed, currently only for shutdown */
|
||||
case HAX_EXIT_STATECHANGE:
|
||||
fprintf(stdout, "VCPU shutdown request\n");
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
hax_vcpu_sync_state(env, 0);
|
||||
ret = 1;
|
||||
break;
|
||||
case HAX_EXIT_UNKNOWN_VMEXIT:
|
||||
fprintf(stderr, "Unknown VMX exit %x from guest\n",
|
||||
ht->_exit_reason);
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
hax_vcpu_sync_state(env, 0);
|
||||
cpu_dump_state(cpu, stderr, fprintf, 0);
|
||||
ret = -1;
|
||||
|
@ -578,7 +578,7 @@ static int hax_vcpu_hax_exec(CPUArchState *env)
|
|||
break;
|
||||
default:
|
||||
fprintf(stderr, "Unknown exit %x from HAX\n", ht->_exit_status);
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
hax_vcpu_sync_state(env, 0);
|
||||
cpu_dump_state(cpu, stderr, fprintf, 0);
|
||||
ret = 1;
|
||||
|
|
|
@ -1212,7 +1212,7 @@ static void do_inject_x86_mce(CPUState *cs, run_on_cpu_data data)
|
|||
" triple fault\n",
|
||||
cs->cpu_index);
|
||||
qemu_log_mask(CPU_LOG_RESET, "Triple fault\n");
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
return;
|
||||
}
|
||||
if (banks[1] & MCI_STATUS_VAL) {
|
||||
|
|
|
@ -2930,7 +2930,7 @@ int kvm_arch_process_async_events(CPUState *cs)
|
|||
|
||||
if (env->exception_injected == EXCP08_DBLE) {
|
||||
/* this means triple fault */
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
cs->exit_request = 1;
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -266,7 +266,7 @@ void load_psw(CPUS390XState *env, uint64_t mask, uint64_t addr)
|
|||
S390CPU *cpu = s390_env_get_cpu(env);
|
||||
if (s390_cpu_halt(cpu) == 0) {
|
||||
#ifndef CONFIG_USER_ONLY
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1927,7 +1927,7 @@ static int handle_intercept(S390CPU *cpu)
|
|||
cpu_synchronize_state(cs);
|
||||
if (s390_cpu_halt(cpu) == 0) {
|
||||
if (is_special_wait_psw(cs)) {
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
} else {
|
||||
qemu_system_guest_panicked(NULL);
|
||||
}
|
||||
|
@ -1936,7 +1936,7 @@ static int handle_intercept(S390CPU *cpu)
|
|||
break;
|
||||
case ICPT_CPU_STOP:
|
||||
if (s390_cpu_set_state(CPU_STATE_STOPPED, cpu) == 0) {
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
}
|
||||
if (cpu->env.sigp_order == SIGP_STOP_STORE_STATUS) {
|
||||
kvm_s390_store_status(cpu, KVM_S390_STORE_STATUS_DEF_ADDR,
|
||||
|
|
|
@ -532,11 +532,11 @@ uint32_t HELPER(sigp)(CPUS390XState *env, uint64_t order_code, uint32_t r1,
|
|||
break;
|
||||
#if !defined(CONFIG_USER_ONLY)
|
||||
case SIGP_RESTART:
|
||||
qemu_system_reset_request();
|
||||
qemu_system_reset_request(SHUTDOWN_CAUSE_GUEST_RESET);
|
||||
cpu_loop_exit(CPU(s390_env_get_cpu(env)));
|
||||
break;
|
||||
case SIGP_STOP:
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
cpu_loop_exit(CPU(s390_env_get_cpu(env)));
|
||||
break;
|
||||
#endif
|
||||
|
|
|
@ -109,7 +109,7 @@ void sparc_cpu_do_interrupt(CPUState *cs)
|
|||
if (env->psret == 0) {
|
||||
if (cs->exception_index == 0x80 &&
|
||||
env->def->features & CPU_FEATURE_TA0_SHUTDOWN) {
|
||||
qemu_system_shutdown_request();
|
||||
qemu_system_shutdown_request(SHUTDOWN_CAUSE_GUEST_SHUTDOWN);
|
||||
} else {
|
||||
cpu_abort(cs, "Trap 0x%02x while interrupts disabled, Error state",
|
||||
cs->exception_index);
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue