From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50678) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W3ZFB-000821-TP for qemu-devel@nongnu.org; Wed, 15 Jan 2014 17:47:36 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1W3ZF5-0000RV-Je for qemu-devel@nongnu.org; Wed, 15 Jan 2014 17:47:29 -0500 Received: from mail-pd0-f179.google.com ([209.85.192.179]:52070) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1W3ZF5-0000RL-Cn for qemu-devel@nongnu.org; Wed, 15 Jan 2014 17:47:23 -0500 Received: by mail-pd0-f179.google.com with SMTP id y10so1742198pdj.38 for ; Wed, 15 Jan 2014 14:47:22 -0800 (PST) Message-ID: <52D70FF3.80808@ozlabs.ru> Date: Thu, 16 Jan 2014 09:47:15 +1100 From: Alexey Kardashevskiy MIME-Version: 1.0 References: <1389761859-10150-1-git-send-email-aik@ozlabs.ru> In-Reply-To: <1389761859-10150-1-git-send-email-aik@ozlabs.ru> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] spapr: reset @kvm_vcpu_dirty before starting CPU List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Alexey Kardashevskiy , Paolo Bonzini , qemu-ppc@nongnu.org, =?UTF-8?B?QW5kcmVhcyBGw6RyYmVy?= , Alexander Graf On 01/15/2014 03:57 PM, Alexey Kardashevskiy wrote: > Normally QEMU kvm_arch_get_registers() reads registers and sets a dirty > flag which prevents further registers reading from KVM till > kvm_arch_put_registers() executes and resets the flag. > > However if we run QEMU with "-S" ("suspended"), then execute "info cpus" > from the QEMU monitor, we end up with not reading registers in > rtas_start_cpu() as qmp_query_cpus() calls kvm_cpu_synchronize_state() > which leaves @kvm_vcpu_dirty=true what prevents kvm_cpu_synchronize_state() > from synchronizing registers and we loose the values. > > This resets @kvm_vcpu_dirty flag as we do not have content which we really want to > keep at this point as the CPU is halted. > > Signed-off-by: Alexey Kardashevskiy > --- Alex, ping. Is it complicated or controversial patch? ;) > > We could also reset @kvm_vcpu_dirty in qmp_query_cpus() but that would be > racy. > --- > hw/ppc/spapr_rtas.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/hw/ppc/spapr_rtas.c b/hw/ppc/spapr_rtas.c > index 1cb276d..3dade5e 100644 > --- a/hw/ppc/spapr_rtas.c > +++ b/hw/ppc/spapr_rtas.c > @@ -185,6 +185,8 @@ static void rtas_start_cpu(PowerPCCPU *cpu_, sPAPREnvironment *spapr, > /* This will make sure qemu state is up to date with kvm, and > * mark it dirty so our changes get flushed back before the > * new cpu enters */ > + > + cs->kvm_vcpu_dirty = false; > kvm_cpu_synchronize_state(cs); > > env->msr = (1ULL << MSR_SF) | (1ULL << MSR_ME); > -- Alexey