[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [PATCH v2] cpu: Move cpu state syncs up into cpu_dump_state()
From: |
James Hogan |
Subject: |
[Qemu-ppc] [PATCH v2] cpu: Move cpu state syncs up into cpu_dump_state() |
Date: |
Tue, 27 Aug 2013 12:19:10 +0100 |
The x86 and ppc targets call cpu_synchronize_state() from their
*_cpu_dump_state() callbacks to ensure that up to date state is dumped
when KVM is enabled (for example when a KVM internal error occurs).
Move this call up into the generic cpu_dump_state() function so that
other KVM targets (namely MIPS) can take advantage of it.
This requires kvm_cpu_synchronize_state() and cpu_synchronize_state() to
be moved out of the #ifdef NEED_CPU_H in <sysemu/kvm.h> so that they're
accessible to qom/cpu.c.
Signed-off-by: James Hogan <address@hidden>
Cc: Andreas Färber <address@hidden>
Cc: Alexander Graf <address@hidden>
Cc: Gleb Natapov <address@hidden>
Cc: address@hidden
Cc: address@hidden
---
Changes in v2 (was kvm: sync cpu state on internal error before dump)
- rewrite to fix in cpu_dump_state() (Gleb Natapov)
---
include/sysemu/kvm.h | 20 ++++++++++----------
qom/cpu.c | 1 +
target-i386/helper.c | 2 --
target-ppc/translate.c | 2 --
4 files changed, 11 insertions(+), 14 deletions(-)
diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h
index de74411..71a0186 100644
--- a/include/sysemu/kvm.h
+++ b/include/sysemu/kvm.h
@@ -270,16 +270,6 @@ int kvm_check_extension(KVMState *s, unsigned int
extension);
uint32_t kvm_arch_get_supported_cpuid(KVMState *env, uint32_t function,
uint32_t index, int reg);
-void kvm_cpu_synchronize_state(CPUState *cpu);
-
-/* generic hooks - to be moved/refactored once there are more users */
-
-static inline void cpu_synchronize_state(CPUState *cpu)
-{
- if (kvm_enabled()) {
- kvm_cpu_synchronize_state(cpu);
- }
-}
#if !defined(CONFIG_USER_ONLY)
int kvm_physical_memory_addr_from_host(KVMState *s, void *ram_addr,
@@ -288,9 +278,19 @@ int kvm_physical_memory_addr_from_host(KVMState *s, void
*ram_addr,
#endif /* NEED_CPU_H */
+void kvm_cpu_synchronize_state(CPUState *cpu);
void kvm_cpu_synchronize_post_reset(CPUState *cpu);
void kvm_cpu_synchronize_post_init(CPUState *cpu);
+/* generic hooks - to be moved/refactored once there are more users */
+
+static inline void cpu_synchronize_state(CPUState *cpu)
+{
+ if (kvm_enabled()) {
+ kvm_cpu_synchronize_state(cpu);
+ }
+}
+
static inline void cpu_synchronize_post_reset(CPUState *cpu)
{
if (kvm_enabled()) {
diff --git a/qom/cpu.c b/qom/cpu.c
index aa95108..cfe7e24 100644
--- a/qom/cpu.c
+++ b/qom/cpu.c
@@ -174,6 +174,7 @@ void cpu_dump_state(CPUState *cpu, FILE *f,
fprintf_function cpu_fprintf,
CPUClass *cc = CPU_GET_CLASS(cpu);
if (cc->dump_state) {
+ cpu_synchronize_state(cpu);
cc->dump_state(cpu, f, cpu_fprintf, flags);
}
}
diff --git a/target-i386/helper.c b/target-i386/helper.c
index bf3e2ac..2aecfd0 100644
--- a/target-i386/helper.c
+++ b/target-i386/helper.c
@@ -188,8 +188,6 @@ void x86_cpu_dump_state(CPUState *cs, FILE *f,
fprintf_function cpu_fprintf,
char cc_op_name[32];
static const char *seg_name[6] = { "ES", "CS", "SS", "DS", "FS", "GS" };
- cpu_synchronize_state(cs);
-
eflags = cpu_compute_eflags(env);
#ifdef TARGET_X86_64
if (env->hflags & HF_CS64_MASK) {
diff --git a/target-ppc/translate.c b/target-ppc/translate.c
index f07d70d..c6a6ff8 100644
--- a/target-ppc/translate.c
+++ b/target-ppc/translate.c
@@ -9536,8 +9536,6 @@ void ppc_cpu_dump_state(CPUState *cs, FILE *f,
fprintf_function cpu_fprintf,
CPUPPCState *env = &cpu->env;
int i;
- cpu_synchronize_state(cs);
-
cpu_fprintf(f, "NIP " TARGET_FMT_lx " LR " TARGET_FMT_lx " CTR "
TARGET_FMT_lx " XER " TARGET_FMT_lx "\n",
env->nip, env->lr, env->ctr, cpu_read_xer(env));
--
1.8.1.2
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [Qemu-ppc] [PATCH v2] cpu: Move cpu state syncs up into cpu_dump_state(),
James Hogan <=