From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:32789) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1WnogO-00075D-BH for qemu-devel@nongnu.org; Fri, 23 May 2014 08:34:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1WnogH-0000yG-CV for qemu-devel@nongnu.org; Fri, 23 May 2014 08:34:44 -0400 Message-ID: <537F405B.6070200@suse.de> Date: Fri, 23 May 2014 14:34:35 +0200 From: Alexander Graf MIME-Version: 1.0 References: <1400812018-23430-1-git-send-email-aik@ozlabs.ru> <1400812018-23430-10-git-send-email-aik@ozlabs.ru> In-Reply-To: <1400812018-23430-10-git-send-email-aik@ozlabs.ru> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v3 9/9] KVM: PPC: Enable compatibility mode List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Alexey Kardashevskiy , qemu-devel@nongnu.org Cc: qemu-ppc@nongnu.org On 23.05.14 04:26, Alexey Kardashevskiy wrote: > The host kernel implements a KVM_REG_PPC_ARCH_COMPAT register which > this uses to enable a compatibility mode if any chosen. > > This sets the KVM_REG_PPC_ARCH_COMPAT register in KVM. ppc_set_compat() > signals the caller if the mode cannot be enabled by the host kernel. > > Signed-off-by: Alexey Kardashevskiy > --- > target-ppc/kvm.c | 5 +++++ > target-ppc/kvm_ppc.h | 6 ++++++ > target-ppc/translate_init.c | 5 +++++ > 3 files changed, 16 insertions(+) > > diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c > index ca31027..05952d0 100644 > --- a/target-ppc/kvm.c > +++ b/target-ppc/kvm.c > @@ -1514,6 +1514,11 @@ void kvmppc_set_papr(PowerPCCPU *cpu) > cap_papr = 1; > } > > +int kvmppc_set_compat(PowerPCCPU *cpu, uint32_t cpu_version) > +{ > + return kvm_set_one_reg(CPU(cpu), KVM_REG_PPC_ARCH_COMPAT, &cpu_version); > +} > + > void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy) > { > CPUState *cs = CPU(cpu); > diff --git a/target-ppc/kvm_ppc.h b/target-ppc/kvm_ppc.h > index ff077ec..716c33d 100644 > --- a/target-ppc/kvm_ppc.h > +++ b/target-ppc/kvm_ppc.h > @@ -23,6 +23,7 @@ int kvmppc_get_hasidle(CPUPPCState *env); > int kvmppc_get_hypercall(CPUPPCState *env, uint8_t *buf, int buf_len); > int kvmppc_set_interrupt(PowerPCCPU *cpu, int irq, int level); > void kvmppc_set_papr(PowerPCCPU *cpu); > +int kvmppc_set_compat(PowerPCCPU *cpu, uint32_t cpu_version); > void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy); > int kvmppc_smt_threads(void); > int kvmppc_clear_tsr_bits(PowerPCCPU *cpu, uint32_t tsr_bits); > @@ -95,6 +96,11 @@ static inline void kvmppc_set_papr(PowerPCCPU *cpu) > { > } > > +static inline int kvmppc_set_compat(PowerPCCPU *cpu, uint32_t cpu_version) > +{ > + return 0; > +} > + > static inline void kvmppc_set_mpic_proxy(PowerPCCPU *cpu, int mpic_proxy) > { > } > diff --git a/target-ppc/translate_init.c b/target-ppc/translate_init.c > index 56d3b97..ad5c27d 100644 > --- a/target-ppc/translate_init.c > +++ b/target-ppc/translate_init.c > @@ -8970,6 +8970,11 @@ int ppc_set_compat(PowerPCCPU *cpu, uint32_t cpu_version) > break; > } > > + if (kvmppc_set_compat(cpu, cpu->max_compat) < 0) { This breaks with TCG. I've added a kvm_enabled() && check to make it work. Alex