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.
prev parent reply other threads:[~2013-09-01 9:53 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-27 11:19 [Qemu-devel] [PATCH v2] cpu: Move cpu state syncs up into cpu_dump_state() James Hogan
2013-09-01 9:53 ` Gleb Natapov [this message]
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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).