From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44312) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1X5CKP-0003nV-HP for qemu-devel@nongnu.org; Thu, 10 Jul 2014 07:16:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1X5CKJ-0001JP-8q for qemu-devel@nongnu.org; Thu, 10 Jul 2014 07:15:53 -0400 Message-ID: <53BE75E1.6070808@suse.de> Date: Thu, 10 Jul 2014 13:15:45 +0200 From: Alexander Graf MIME-Version: 1.0 References: <1404989882-17362-1-git-send-email-Bharat.Bhushan@freescale.com> <1404989882-17362-4-git-send-email-Bharat.Bhushan@freescale.com> In-Reply-To: <1404989882-17362-4-git-send-email-Bharat.Bhushan@freescale.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH 3/6 v6] ppc: synchronize excp_vectors for injecting exception List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Bharat Bhushan Cc: maddy@linux.vnet.ibm.com, qemu-ppc@nongnu.org, qemu-devel@nongnu.org On 10.07.14 12:57, Bharat Bhushan wrote: > This patch synchronizes env->excp_vectors[] with env->iovr[]. > This is required for using the existing interrupt injection mechanism > for kvm. > > Signed-off-by: Bharat Bhushan > --- > v5->v6 > - new patch > > target-ppc/kvm.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 44 insertions(+) > > diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c > index 673c369..329a38b 100644 > --- a/target-ppc/kvm.c > +++ b/target-ppc/kvm.c > @@ -1008,35 +1008,79 @@ int kvm_arch_get_registers(CPUState *cs) > > if (sregs.u.e.features & KVM_SREGS_E_IVOR) { > env->spr[SPR_BOOKE_IVOR0] = sregs.u.e.ivor_low[0]; > + env->excp_vectors[POWERPC_EXCP_CRITICAL] = > + env->spr[SPR_BOOKE_IVOR0] + env->spr[SPR_BOOKE_IVPR]; This is quite hard to read. How about static void kvm_sync_excp(CPUPPCState *env, int vector, int ivor) { env->excp_vectors[vector] = env->spr[ivor] + env->spr[SPR_BOOKE_IVPR]; } kvm_sync_excp(env, POWERPC_EXCP_CRITICAL, SPR_BOOKE_IVOR0); Alex > env->spr[SPR_BOOKE_IVOR1] = sregs.u.e.ivor_low[1]; > + env->excp_vectors[POWERPC_EXCP_MCHECK] = > + env->spr[SPR_BOOKE_IVOR1] + env->spr[SPR_BOOKE_IVPR]; > env->spr[SPR_BOOKE_IVOR2] = sregs.u.e.ivor_low[2]; > + env->excp_vectors[POWERPC_EXCP_DSI] = > + env->spr[SPR_BOOKE_IVOR2] + env->spr[SPR_BOOKE_IVPR]; > env->spr[SPR_BOOKE_IVOR3] = sregs.u.e.ivor_low[3]; > + env->excp_vectors[POWERPC_EXCP_ISI] = > + env->spr[SPR_BOOKE_IVOR3] + env->spr[SPR_BOOKE_IVPR]; > env->spr[SPR_BOOKE_IVOR4] = sregs.u.e.ivor_low[4]; > + env->excp_vectors[POWERPC_EXCP_EXTERNAL] = > + env->spr[SPR_BOOKE_IVOR4] + env->spr[SPR_BOOKE_IVPR]; > env->spr[SPR_BOOKE_IVOR5] = sregs.u.e.ivor_low[5]; > + env->excp_vectors[POWERPC_EXCP_ALIGN] = > + env->spr[SPR_BOOKE_IVOR5] + env->spr[SPR_BOOKE_IVPR]; > env->spr[SPR_BOOKE_IVOR6] = sregs.u.e.ivor_low[6]; > + env->excp_vectors[POWERPC_EXCP_PROGRAM] = > + env->spr[SPR_BOOKE_IVOR6] + env->spr[SPR_BOOKE_IVPR]; > env->spr[SPR_BOOKE_IVOR7] = sregs.u.e.ivor_low[7]; > + env->excp_vectors[POWERPC_EXCP_FPU] = > + env->spr[SPR_BOOKE_IVOR7] + env->spr[SPR_BOOKE_IVPR]; > env->spr[SPR_BOOKE_IVOR8] = sregs.u.e.ivor_low[8]; > + env->excp_vectors[POWERPC_EXCP_SYSCALL] = > + env->spr[SPR_BOOKE_IVOR8] + env->spr[SPR_BOOKE_IVPR]; > env->spr[SPR_BOOKE_IVOR9] = sregs.u.e.ivor_low[9]; > + env->excp_vectors[POWERPC_EXCP_APU] = > + env->spr[SPR_BOOKE_IVOR9] + env->spr[SPR_BOOKE_IVPR]; > env->spr[SPR_BOOKE_IVOR10] = sregs.u.e.ivor_low[10]; > + env->excp_vectors[POWERPC_EXCP_DECR] = > + env->spr[SPR_BOOKE_IVOR10] + env->spr[SPR_BOOKE_IVPR]; > env->spr[SPR_BOOKE_IVOR11] = sregs.u.e.ivor_low[11]; > + env->excp_vectors[POWERPC_EXCP_FIT] = > + env->spr[SPR_BOOKE_IVOR11] + env->spr[SPR_BOOKE_IVPR]; > env->spr[SPR_BOOKE_IVOR12] = sregs.u.e.ivor_low[12]; > + env->excp_vectors[POWERPC_EXCP_WDT] = > + env->spr[SPR_BOOKE_IVOR12] + env->spr[SPR_BOOKE_IVPR]; > env->spr[SPR_BOOKE_IVOR13] = sregs.u.e.ivor_low[13]; > + env->excp_vectors[POWERPC_EXCP_DTLB] = > + env->spr[SPR_BOOKE_IVOR13] + env->spr[SPR_BOOKE_IVPR]; > env->spr[SPR_BOOKE_IVOR14] = sregs.u.e.ivor_low[14]; > + env->excp_vectors[POWERPC_EXCP_ITLB] = > + env->spr[SPR_BOOKE_IVOR14] + env->spr[SPR_BOOKE_IVPR]; > env->spr[SPR_BOOKE_IVOR15] = sregs.u.e.ivor_low[15]; > + env->excp_vectors[POWERPC_EXCP_DEBUG] = > + env->spr[SPR_BOOKE_IVOR15] + env->spr[SPR_BOOKE_IVPR]; > > if (sregs.u.e.features & KVM_SREGS_E_SPE) { > env->spr[SPR_BOOKE_IVOR32] = sregs.u.e.ivor_high[0]; > + env->excp_vectors[POWERPC_EXCP_SPEU] = > + env->spr[SPR_BOOKE_IVOR32] + env->spr[SPR_BOOKE_IVPR]; > env->spr[SPR_BOOKE_IVOR33] = sregs.u.e.ivor_high[1]; > + env->excp_vectors[POWERPC_EXCP_EFPDI] = > + env->spr[SPR_BOOKE_IVOR33] + env->spr[SPR_BOOKE_IVPR]; > env->spr[SPR_BOOKE_IVOR34] = sregs.u.e.ivor_high[2]; > + env->excp_vectors[POWERPC_EXCP_EFPRI] = > + env->spr[SPR_BOOKE_IVOR34] + env->spr[SPR_BOOKE_IVPR]; > } > > if (sregs.u.e.features & KVM_SREGS_E_PM) { > env->spr[SPR_BOOKE_IVOR35] = sregs.u.e.ivor_high[3]; > + env->excp_vectors[POWERPC_EXCP_EPERFM] = > + env->spr[SPR_BOOKE_IVOR35] + env->spr[SPR_BOOKE_IVPR]; > } > > if (sregs.u.e.features & KVM_SREGS_E_PC) { > env->spr[SPR_BOOKE_IVOR36] = sregs.u.e.ivor_high[4]; > + env->excp_vectors[POWERPC_EXCP_DOORI] = > + env->spr[SPR_BOOKE_IVOR36] + env->spr[SPR_BOOKE_IVPR]; > env->spr[SPR_BOOKE_IVOR37] = sregs.u.e.ivor_high[5]; > + env->excp_vectors[POWERPC_EXCP_DOORCI] = > + env->spr[SPR_BOOKE_IVOR37] + env->spr[SPR_BOOKE_IVPR]; > } > } >