From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paolo Bonzini Subject: [PULL 02/13] cpu: Move cpu state syncs up into cpu_dump_state() Date: Fri, 20 Sep 2013 18:24:41 +0200 Message-ID: <1379694292-1601-3-git-send-email-pbonzini@redhat.com> References: <1379694292-1601-1-git-send-email-pbonzini@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: QUOTED-PRINTABLE Cc: James Hogan , =?UTF-8?q?Andreas=20F=C3=A4rber?= , Alexander Graf , Gleb Natapov , qemu-ppc@nongnu.org, kvm@vger.kernel.org To: qemu-devel@nongnu.org Return-path: Received: from mail-ee0-f53.google.com ([74.125.83.53]:54433 "EHLO mail-ee0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752995Ab3ITQZD (ORCPT ); Fri, 20 Sep 2013 12:25:03 -0400 Received: by mail-ee0-f53.google.com with SMTP id b15so385293eek.12 for ; Fri, 20 Sep 2013 09:25:01 -0700 (PDT) In-Reply-To: <1379694292-1601-1-git-send-email-pbonzini@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: =46rom: James Hogan 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() t= o be moved out of the #ifdef NEED_CPU_H in so that they're accessible to qom/cpu.c. Signed-off-by: James Hogan Cc: Andreas F=C3=A4rber Cc: Alexander Graf Cc: Gleb Natapov Cc: qemu-ppc@nongnu.org Cc: kvm@vger.kernel.org Signed-off-by: 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 8e76685..3b0ef46 100644 --- a/include/sysemu/kvm.h +++ b/include/sysemu/kvm.h @@ -270,16 +270,6 @@ int kvm_check_extension(KVMState *s, unsigned int = extension); =20 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); - } -} =20 #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, =20 #endif /* NEED_CPU_H */ =20 +void kvm_cpu_synchronize_state(CPUState *cpu); void kvm_cpu_synchronize_post_reset(CPUState *cpu); void kvm_cpu_synchronize_post_init(CPUState *cpu); =20 +/* 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 fa7ec6b..818fb26 100644 --- a/qom/cpu.c +++ b/qom/cpu.c @@ -162,6 +162,7 @@ void cpu_dump_state(CPUState *cpu, FILE *f, fprintf= _function cpu_fprintf, CPUClass *cc =3D CPU_GET_CLASS(cpu); =20 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 7c58e27..0ad7c8e 100644 --- a/target-i386/helper.c +++ b/target-i386/helper.c @@ -188,8 +188,6 @@ void x86_cpu_dump_state(CPUState *cs, FILE *f, fpri= ntf_function cpu_fprintf, char cc_op_name[32]; static const char *seg_name[6] =3D { "ES", "CS", "SS", "DS", "FS",= "GS" }; =20 - cpu_synchronize_state(cs); - eflags =3D 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 2da7bc7..9c59f69 100644 --- a/target-ppc/translate.c +++ b/target-ppc/translate.c @@ -9536,8 +9536,6 @@ void ppc_cpu_dump_state(CPUState *cs, FILE *f, fp= rintf_function cpu_fprintf, CPUPPCState *env =3D &cpu->env; int i; =20 - 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)); --=20 1.8.3.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:42012) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VN3Vz-0001FW-Mt for qemu-devel@nongnu.org; Fri, 20 Sep 2013 12:25:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VN3Vv-0006YJ-2T for qemu-devel@nongnu.org; Fri, 20 Sep 2013 12:25:07 -0400 Sender: Paolo Bonzini From: Paolo Bonzini Date: Fri, 20 Sep 2013 18:24:41 +0200 Message-Id: <1379694292-1601-3-git-send-email-pbonzini@redhat.com> In-Reply-To: <1379694292-1601-1-git-send-email-pbonzini@redhat.com> References: <1379694292-1601-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Subject: [Qemu-devel] [PULL 02/13] cpu: Move cpu state syncs up into cpu_dump_state() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: James Hogan , Gleb Natapov , kvm@vger.kernel.org, Alexander Graf , qemu-ppc@nongnu.org, =?UTF-8?q?Andreas=20F=C3=A4rber?= From: James Hogan 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 so that they're accessible to qom/cpu.c. Signed-off-by: James Hogan Cc: Andreas Färber Cc: Alexander Graf Cc: Gleb Natapov Cc: qemu-ppc@nongnu.org Cc: kvm@vger.kernel.org Signed-off-by: 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 8e76685..3b0ef46 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 fa7ec6b..818fb26 100644 --- a/qom/cpu.c +++ b/qom/cpu.c @@ -162,6 +162,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 7c58e27..0ad7c8e 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 2da7bc7..9c59f69 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.3.1