From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44154) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VG4Lf-0000gm-FV for qemu-devel@nongnu.org; Sun, 01 Sep 2013 05:53:39 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VG4Lb-0004pT-86 for qemu-devel@nongnu.org; Sun, 01 Sep 2013 05:53:35 -0400 Date: Sun, 1 Sep 2013 12:53:25 +0300 From: Gleb Natapov Message-ID: <20130901095325.GH22899@redhat.com> References: <1377602350-32004-1-git-send-email-james.hogan@imgtec.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable In-Reply-To: <1377602350-32004-1-git-send-email-james.hogan@imgtec.com> Subject: Re: [Qemu-devel] [PATCH v2] cpu: Move cpu state syncs up into cpu_dump_state() List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: James Hogan Cc: Alexander Graf , qemu-ppc@nongnu.org, qemu-devel@nongnu.org, kvm@vger.kernel.org, Andreas =?utf-8?Q?F=C3=A4rber?= 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). >=20 > Move this call up into the generic cpu_dump_state() function so that > other KVM targets (namely MIPS) can take advantage of it. >=20 > 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. >=20 Applied, thanks. > 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 > --- > 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(-) >=20 > 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 ex= tension); > =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 aa95108..cfe7e24 100644 > --- a/qom/cpu.c > +++ b/qom/cpu.c > @@ -174,6 +174,7 @@ void cpu_dump_state(CPUState *cpu, FILE *f, fprintf_f= unction 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 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, fprint= f_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 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, fpri= ntf_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.1.2 >=20 -- Gleb.