All of lore.kernel.org
 help / color / mirror / Atom feed
From: Gleb Natapov <gleb@redhat.com>
To: James Hogan <james.hogan@imgtec.com>
Cc: qemu-devel@nongnu.org, "Andreas Färber" <afaerber@suse.de>,
	"Alexander Graf" <agraf@suse.de>,
	qemu-ppc@nongnu.org, kvm@vger.kernel.org
Subject: Re: [PATCH v2] cpu: Move cpu state syncs up into cpu_dump_state()
Date: Sun, 1 Sep 2013 12:53:25 +0300	[thread overview]
Message-ID: <20130901095325.GH22899@redhat.com> (raw)
In-Reply-To: <1377602350-32004-1-git-send-email-james.hogan@imgtec.com>

On Tue, Aug 27, 2013 at 12:19:10PM +0100, James Hogan wrote:
> 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.
> 
Applied, thanks.

> Signed-off-by: James Hogan <james.hogan@imgtec.com>
> Cc: Andreas Färber <afaerber@suse.de>
> Cc: Alexander Graf <agraf@suse.de>
> Cc: Gleb Natapov <gleb@redhat.com>
> Cc: qemu-ppc@nongnu.org
> Cc: kvm@vger.kernel.org
> ---
> 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
> 

--
			Gleb.

WARNING: multiple messages have this Message-ID (diff)
From: Gleb Natapov <gleb@redhat.com>
To: James Hogan <james.hogan@imgtec.com>
Cc: "Alexander Graf" <agraf@suse.de>,
	qemu-ppc@nongnu.org, qemu-devel@nongnu.org, kvm@vger.kernel.org,
	"Andreas Färber" <afaerber@suse.de>
Subject: Re: [Qemu-devel] [PATCH v2] cpu: Move cpu state syncs up into cpu_dump_state()
Date: Sun, 1 Sep 2013 12:53:25 +0300	[thread overview]
Message-ID: <20130901095325.GH22899@redhat.com> (raw)
In-Reply-To: <1377602350-32004-1-git-send-email-james.hogan@imgtec.com>

On Tue, Aug 27, 2013 at 12:19:10PM +0100, James Hogan wrote:
> 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.
> 
Applied, thanks.

> Signed-off-by: James Hogan <james.hogan@imgtec.com>
> Cc: Andreas Färber <afaerber@suse.de>
> Cc: Alexander Graf <agraf@suse.de>
> Cc: Gleb Natapov <gleb@redhat.com>
> Cc: qemu-ppc@nongnu.org
> Cc: kvm@vger.kernel.org
> ---
> 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
> 

--
			Gleb.

  reply	other threads:[~2013-09-01  9:53 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-08-27 11:19 [PATCH v2] cpu: Move cpu state syncs up into cpu_dump_state() James Hogan
2013-08-27 11:19 ` [Qemu-devel] " James Hogan
2013-09-01  9:53 ` Gleb Natapov [this message]
2013-09-01  9:53   ` Gleb Natapov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20130901095325.GH22899@redhat.com \
    --to=gleb@redhat.com \
    --cc=afaerber@suse.de \
    --cc=agraf@suse.de \
    --cc=james.hogan@imgtec.com \
    --cc=kvm@vger.kernel.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.