diff options
author | Eric Blake <eblake@redhat.com> | 2017-05-15 16:41:13 -0500 |
---|---|---|
committer | Markus Armbruster <armbru@redhat.com> | 2017-05-23 13:28:17 +0200 |
commit | cf83f140059f21d4629ae4b61d468c3baef2bb4c (patch) | |
tree | 4c39ace51dc5ca17a6a3edf9800844b08b55ab1f /target | |
parent | 802f045a5f61b781df55e4492d896b4d20503ba7 (diff) |
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>
Diffstat (limited to 'target')
-rw-r--r-- | target/alpha/sys_helper.c | 4 | ||||
-rw-r--r-- | target/arm/psci.c | 4 | ||||
-rw-r--r-- | target/i386/excp_helper.c | 2 | ||||
-rw-r--r-- | target/i386/hax-all.c | 6 | ||||
-rw-r--r-- | target/i386/helper.c | 2 | ||||
-rw-r--r-- | target/i386/kvm.c | 2 | ||||
-rw-r--r-- | target/s390x/helper.c | 2 | ||||
-rw-r--r-- | target/s390x/kvm.c | 4 | ||||
-rw-r--r-- | target/s390x/misc_helper.c | 4 | ||||
-rw-r--r-- | target/sparc/int32_helper.c | 2 |
10 files changed, 16 insertions, 16 deletions
diff --git a/target/alpha/sys_helper.c b/target/alpha/sys_helper.c index 652195de6f..ac22323191 100644 --- a/target/alpha/sys_helper.c +++ b/target/alpha/sys_helper.c @@ -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); } } diff --git a/target/arm/psci.c b/target/arm/psci.c index ade9fe2ede..fc34b263d3 100644 --- a/target/arm/psci.c +++ b/target/arm/psci.c @@ -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: diff --git a/target/i386/excp_helper.c b/target/i386/excp_helper.c index ee596c6082..b76977243f 100644 --- a/target/i386/excp_helper.c +++ b/target/i386/excp_helper.c @@ -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 diff --git a/target/i386/hax-all.c b/target/i386/hax-all.c index ef13015215..73469311d6 100644 --- a/target/i386/hax-all.c +++ b/target/i386/hax-all.c @@ -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; diff --git a/target/i386/helper.c b/target/i386/helper.c index f11cac63a1..ee7eff2f6f 100644 --- a/target/i386/helper.c +++ b/target/i386/helper.c @@ -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) { diff --git a/target/i386/kvm.c b/target/i386/kvm.c index 011d4a55b1..49b6115eae 100644 --- a/target/i386/kvm.c +++ b/target/i386/kvm.c @@ -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; } diff --git a/target/s390x/helper.c b/target/s390x/helper.c index 997849008f..4f8aadf305 100644 --- a/target/s390x/helper.c +++ b/target/s390x/helper.c @@ -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 } } diff --git a/target/s390x/kvm.c b/target/s390x/kvm.c index fb105429be..ba1e60f8a6 100644 --- a/target/s390x/kvm.c +++ b/target/s390x/kvm.c @@ -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, diff --git a/target/s390x/misc_helper.c b/target/s390x/misc_helper.c index 23ec52cf35..1b9f448875 100644 --- a/target/s390x/misc_helper.c +++ b/target/s390x/misc_helper.c @@ -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 diff --git a/target/sparc/int32_helper.c b/target/sparc/int32_helper.c index 09afe136e5..eec9a4d49f 100644 --- a/target/sparc/int32_helper.c +++ b/target/sparc/int32_helper.c @@ -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); |