[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 13/16] s390x: Add shutdown for TCG s390-virtio machi
From: |
Alexander Graf |
Subject: |
[Qemu-devel] [PATCH 13/16] s390x: Add shutdown for TCG s390-virtio machine |
Date: |
Fri, 11 Nov 2011 18:49:20 +0100 |
Now that we have code in place to do refcounting of online CPUs, we
can drag the TCG code along and implement shutdown for that one too,
so it doesn't feel left out by its KVM counterpart.
Signed-off-by: Alexander Graf <address@hidden>
---
target-s390x/cpu.h | 9 +++++++++
target-s390x/helper.c | 15 ++++++++++++---
2 files changed, 21 insertions(+), 3 deletions(-)
diff --git a/target-s390x/cpu.h b/target-s390x/cpu.h
index a66aa01..202c098 100644
--- a/target-s390x/cpu.h
+++ b/target-s390x/cpu.h
@@ -315,6 +315,15 @@ unsigned s390_del_running_cpu(CPUState *env);
/* from s390-virtio-bus */
extern const target_phys_addr_t virtio_size;
+#else
+static inline void s390_add_running_cpu(CPUState *env)
+{
+}
+
+static inline unsigned s390_del_running_cpu(CPUState *env)
+{
+ return 0;
+}
#endif
void cpu_lock(void);
void cpu_unlock(void);
diff --git a/target-s390x/helper.c b/target-s390x/helper.c
index 4145104..10cc9dd 100644
--- a/target-s390x/helper.c
+++ b/target-s390x/helper.c
@@ -26,6 +26,9 @@
#include "gdbstub.h"
#include "qemu-common.h"
#include "qemu-timer.h"
+#ifndef CONFIG_USER_ONLY
+#include "sysemu.h"
+#endif
//#define DEBUG_S390
//#define DEBUG_S390_PTE
@@ -131,6 +134,7 @@ void cpu_reset(CPUS390XState *env)
memset(env, 0, offsetof(CPUS390XState, breakpoints));
/* FIXME: reset vector? */
tlb_flush(env, 1);
+ s390_add_running_cpu(env);
}
#ifndef CONFIG_USER_ONLY
@@ -466,11 +470,15 @@ target_phys_addr_t cpu_get_phys_page_debug(CPUState *env,
target_ulong vaddr)
void load_psw(CPUState *env, uint64_t mask, uint64_t addr)
{
if (mask & PSW_MASK_WAIT) {
- env->halted = 1;
- env->exception_index = EXCP_HLT;
if (!(mask & (PSW_MASK_IO | PSW_MASK_EXT | PSW_MASK_MCHECK))) {
- /* XXX disabled wait state - CPU is dead */
+ if (s390_del_running_cpu(env) == 0) {
+#ifndef CONFIG_USER_ONLY
+ qemu_system_shutdown_request();
+#endif
+ }
}
+ env->halted = 1;
+ env->exception_index = EXCP_HLT;
}
env->psw.addr = addr;
@@ -599,6 +607,7 @@ void do_interrupt (CPUState *env)
qemu_log("%s: %d at pc=%" PRIx64 "\n", __FUNCTION__, env->exception_index,
env->psw.addr);
+ s390_add_running_cpu(env);
/* handle external interrupts */
if ((env->psw.mask & PSW_MASK_EXT) &&
env->exception_index == -1) {
--
1.6.0.2
- [Qemu-devel] [PULL 00/16] s390 patch queue 2011-11-11 for 1.0, Alexander Graf, 2011/11/11
- [Qemu-devel] [PATCH 02/16] Compile device-hotplug on all targets, Alexander Graf, 2011/11/11
- [Qemu-devel] [PATCH 05/16] s390x: add ldeb instruction, Alexander Graf, 2011/11/11
- [Qemu-devel] [PATCH 04/16] Expose drive_add on all architectures, Alexander Graf, 2011/11/11
- [Qemu-devel] [PATCH 06/16] s390x: make ipte 31-bit aware, Alexander Graf, 2011/11/11
- [Qemu-devel] [PATCH 13/16] s390x: Add shutdown for TCG s390-virtio machine,
Alexander Graf <=
- [Qemu-devel] [PATCH 07/16] s390x: update R and C bits in storage key, Alexander Graf, 2011/11/11
- [Qemu-devel] [PATCH 14/16] tcg: Standardize on TCGReg as the enum for hard registers, Alexander Graf, 2011/11/11
- [Qemu-devel] [PATCH 09/16] s390x: implement SIGP restart and shutdown, Alexander Graf, 2011/11/11
- [Qemu-devel] [PATCH 03/16] Add generic drive hotplugging, Alexander Graf, 2011/11/11
- [Qemu-devel] [PATCH 10/16] s390: fix reset hypercall to reset the status, Alexander Graf, 2011/11/11
- [Qemu-devel] [PATCH 16/16] s390x: initialize virtio dev region, Alexander Graf, 2011/11/11
- [Qemu-devel] [PATCH 12/16] s390: Fix cpu shutdown for KVM, Alexander Graf, 2011/11/11
- [Qemu-devel] [PATCH 01/16] [S390] Add hotplug support, Alexander Graf, 2011/11/11