From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bhushan Bharat-R65777 Subject: RE: [PATCH 3/3] KVM: PPC: booke: Added debug handler Date: Tue, 7 Aug 2012 16:02:12 +0000 Message-ID: <6A3DF150A5B70D4F9B66A25E3F7C888D03DF31BE@039-SN2MPN1-022.039d.mgd.msft.net> References: <1343977723-25341-1-git-send-email-Bharat.Bhushan@freescale.com> <1343977723-25341-3-git-send-email-Bharat.Bhushan@freescale.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 8BIT Cc: "kvm-ppc@vger.kernel.org" , "kvm@vger.kernel.org" To: Alexander Graf Return-path: In-Reply-To: Content-Language: en-US Sender: kvm-ppc-owner@vger.kernel.org List-Id: kvm.vger.kernel.org > -----Original Message----- > From: kvm-ppc-owner@vger.kernel.org [mailto:kvm-ppc-owner@vger.kernel.org] On > Behalf Of Alexander Graf > Sent: Tuesday, August 07, 2012 4:18 PM > To: Bhushan Bharat-R65777 > Cc: kvm-ppc@vger.kernel.org; kvm@vger.kernel.org; Bhushan Bharat-R65777 > Subject: Re: [PATCH 3/3] KVM: PPC: booke: Added debug handler > > > On 03.08.2012, at 09:08, Bharat Bhushan wrote: > > > Installed debug handler will be used for guest debug support and debug > > facility emulation features (patches for these features will follow > > this patch). > > > > Signed-off-by: Liu Yu > > [bharat.bhushan@freescale.com: Substantial changes] > > Signed-off-by: Bharat Bhushan > > > > Signed-off-by: Bharat Bhushan > > --- > > arch/powerpc/include/asm/kvm_host.h | 1 + > > arch/powerpc/kernel/asm-offsets.c | 1 + > > arch/powerpc/kvm/booke_interrupts.S | 45 +++++++++++++++++++++++++++++++++++ > > 3 files changed, 47 insertions(+), 0 deletions(-) > > > > diff --git a/arch/powerpc/include/asm/kvm_host.h > > b/arch/powerpc/include/asm/kvm_host.h > > index dcee499..bd78523 100644 > > --- a/arch/powerpc/include/asm/kvm_host.h > > +++ b/arch/powerpc/include/asm/kvm_host.h > > @@ -494,6 +494,7 @@ struct kvm_vcpu_arch { > > u32 tlbcfg[4]; > > u32 mmucfg; > > u32 epr; > > + u32 crit_save; > > #endif > > gpa_t paddr_accessed; > > gva_t vaddr_accessed; > > diff --git a/arch/powerpc/kernel/asm-offsets.c > > b/arch/powerpc/kernel/asm-offsets.c > > index 85b05c4..92f149b 100644 > > --- a/arch/powerpc/kernel/asm-offsets.c > > +++ b/arch/powerpc/kernel/asm-offsets.c > > @@ -563,6 +563,7 @@ int main(void) > > DEFINE(VCPU_LAST_INST, offsetof(struct kvm_vcpu, arch.last_inst)); > > DEFINE(VCPU_FAULT_DEAR, offsetof(struct kvm_vcpu, arch.fault_dear)); > > DEFINE(VCPU_FAULT_ESR, offsetof(struct kvm_vcpu, arch.fault_esr)); > > + DEFINE(VCPU_CRIT_SAVE, offsetof(struct kvm_vcpu, arch.crit_save)); > > #endif /* CONFIG_PPC_BOOK3S */ > > #endif /* CONFIG_KVM */ > > > > diff --git a/arch/powerpc/kvm/booke_interrupts.S > > b/arch/powerpc/kvm/booke_interrupts.S > > index 3539805..890673c 100644 > > --- a/arch/powerpc/kvm/booke_interrupts.S > > +++ b/arch/powerpc/kvm/booke_interrupts.S > > @@ -73,6 +73,51 @@ _GLOBAL(kvmppc_handler_\ivor_nr) > > bctr > > .endm > > > > +.macro KVM_DBG_HANDLER ivor_nr scratch srr0 > > This is a lot of asm code. Any chance to share a good share of it with the > generic handler? Yes it is a lot of code but I am finding it difficult. Thanks -Bharat > > > Alex > > > +_GLOBAL(kvmppc_handler_\ivor_nr) > > + mtspr \scratch, r4 > > + mfspr r4, SPRN_SPRG_THREAD > > + lwz r4, THREAD_KVM_VCPU(r4) > > + stw r3, VCPU_CRIT_SAVE(r4) > > + mfcr r3 > > + mfspr r4, SPRN_CSRR1 > > + andi. r4, r4, MSR_PR > > + bne 1f > > + /* debug interrupt happened in enter/exit path */ > > + mfspr r4, SPRN_CSRR1 > > + rlwinm r4, r4, 0, ~MSR_DE > > + mtspr SPRN_CSRR1, r4 > > + lis r4, 0xffff > > + ori r4, r4, 0xffff > > + mtspr SPRN_DBSR, r4 > > + mfspr r4, SPRN_SPRG_THREAD > > + lwz r4, THREAD_KVM_VCPU(r4) > > + mtcr r3 > > + lwz r3, VCPU_CRIT_SAVE(r4) > > + mfspr r4, \scratch > > + rfci > > +1: /* debug interrupt happened in guest */ > > + mfspr r4, \scratch > > + mtcr r3 > > + mr r3, r4 > > + mfspr r4, SPRN_SPRG_THREAD > > + lwz r4, THREAD_KVM_VCPU(r4) > > + stw r3, VCPU_GPR(R4)(r4) > > + stw r5, VCPU_GPR(R5)(r4) > > + stw r6, VCPU_GPR(R6)(r4) > > + lwz r3, VCPU_CRIT_SAVE(r4) > > + mfspr r5, \srr0 > > + stw r3, VCPU_GPR(R3)(r4) > > + stw r5, VCPU_PC(r4) > > + mfctr r5 > > + lis r6, kvmppc_resume_host@h > > + stw r5, VCPU_CTR(r4) > > + li r5, \ivor_nr > > + ori r6, r6, kvmppc_resume_host@l > > + mtctr r6 > > + bctr > > +.endm > > + > > .macro KVM_HANDLER_ADDR ivor_nr > > .long kvmppc_handler_\ivor_nr > > .endm > > -- > > 1.7.0.4 > > > > > > -- > To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body > of a message to majordomo@vger.kernel.org More majordomo info at > http://vger.kernel.org/majordomo-info.html From mboxrd@z Thu Jan 1 00:00:00 1970 From: Bhushan Bharat-R65777 Date: Tue, 07 Aug 2012 16:02:12 +0000 Subject: RE: [PATCH 3/3] KVM: PPC: booke: Added debug handler Message-Id: <6A3DF150A5B70D4F9B66A25E3F7C888D03DF31BE@039-SN2MPN1-022.039d.mgd.msft.net> List-Id: References: <1343977723-25341-1-git-send-email-Bharat.Bhushan@freescale.com> <1343977723-25341-3-git-send-email-Bharat.Bhushan@freescale.com> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Alexander Graf Cc: "kvm-ppc@vger.kernel.org" , "kvm@vger.kernel.org" > -----Original Message----- > From: kvm-ppc-owner@vger.kernel.org [mailto:kvm-ppc-owner@vger.kernel.org] On > Behalf Of Alexander Graf > Sent: Tuesday, August 07, 2012 4:18 PM > To: Bhushan Bharat-R65777 > Cc: kvm-ppc@vger.kernel.org; kvm@vger.kernel.org; Bhushan Bharat-R65777 > Subject: Re: [PATCH 3/3] KVM: PPC: booke: Added debug handler > > > On 03.08.2012, at 09:08, Bharat Bhushan wrote: > > > Installed debug handler will be used for guest debug support and debug > > facility emulation features (patches for these features will follow > > this patch). > > > > Signed-off-by: Liu Yu > > [bharat.bhushan@freescale.com: Substantial changes] > > Signed-off-by: Bharat Bhushan > > > > Signed-off-by: Bharat Bhushan > > --- > > arch/powerpc/include/asm/kvm_host.h | 1 + > > arch/powerpc/kernel/asm-offsets.c | 1 + > > arch/powerpc/kvm/booke_interrupts.S | 45 +++++++++++++++++++++++++++++++++++ > > 3 files changed, 47 insertions(+), 0 deletions(-) > > > > diff --git a/arch/powerpc/include/asm/kvm_host.h > > b/arch/powerpc/include/asm/kvm_host.h > > index dcee499..bd78523 100644 > > --- a/arch/powerpc/include/asm/kvm_host.h > > +++ b/arch/powerpc/include/asm/kvm_host.h > > @@ -494,6 +494,7 @@ struct kvm_vcpu_arch { > > u32 tlbcfg[4]; > > u32 mmucfg; > > u32 epr; > > + u32 crit_save; > > #endif > > gpa_t paddr_accessed; > > gva_t vaddr_accessed; > > diff --git a/arch/powerpc/kernel/asm-offsets.c > > b/arch/powerpc/kernel/asm-offsets.c > > index 85b05c4..92f149b 100644 > > --- a/arch/powerpc/kernel/asm-offsets.c > > +++ b/arch/powerpc/kernel/asm-offsets.c > > @@ -563,6 +563,7 @@ int main(void) > > DEFINE(VCPU_LAST_INST, offsetof(struct kvm_vcpu, arch.last_inst)); > > DEFINE(VCPU_FAULT_DEAR, offsetof(struct kvm_vcpu, arch.fault_dear)); > > DEFINE(VCPU_FAULT_ESR, offsetof(struct kvm_vcpu, arch.fault_esr)); > > + DEFINE(VCPU_CRIT_SAVE, offsetof(struct kvm_vcpu, arch.crit_save)); > > #endif /* CONFIG_PPC_BOOK3S */ > > #endif /* CONFIG_KVM */ > > > > diff --git a/arch/powerpc/kvm/booke_interrupts.S > > b/arch/powerpc/kvm/booke_interrupts.S > > index 3539805..890673c 100644 > > --- a/arch/powerpc/kvm/booke_interrupts.S > > +++ b/arch/powerpc/kvm/booke_interrupts.S > > @@ -73,6 +73,51 @@ _GLOBAL(kvmppc_handler_\ivor_nr) > > bctr > > .endm > > > > +.macro KVM_DBG_HANDLER ivor_nr scratch srr0 > > This is a lot of asm code. Any chance to share a good share of it with the > generic handler? Yes it is a lot of code but I am finding it difficult. Thanks -Bharat > > > Alex > > > +_GLOBAL(kvmppc_handler_\ivor_nr) > > + mtspr \scratch, r4 > > + mfspr r4, SPRN_SPRG_THREAD > > + lwz r4, THREAD_KVM_VCPU(r4) > > + stw r3, VCPU_CRIT_SAVE(r4) > > + mfcr r3 > > + mfspr r4, SPRN_CSRR1 > > + andi. r4, r4, MSR_PR > > + bne 1f > > + /* debug interrupt happened in enter/exit path */ > > + mfspr r4, SPRN_CSRR1 > > + rlwinm r4, r4, 0, ~MSR_DE > > + mtspr SPRN_CSRR1, r4 > > + lis r4, 0xffff > > + ori r4, r4, 0xffff > > + mtspr SPRN_DBSR, r4 > > + mfspr r4, SPRN_SPRG_THREAD > > + lwz r4, THREAD_KVM_VCPU(r4) > > + mtcr r3 > > + lwz r3, VCPU_CRIT_SAVE(r4) > > + mfspr r4, \scratch > > + rfci > > +1: /* debug interrupt happened in guest */ > > + mfspr r4, \scratch > > + mtcr r3 > > + mr r3, r4 > > + mfspr r4, SPRN_SPRG_THREAD > > + lwz r4, THREAD_KVM_VCPU(r4) > > + stw r3, VCPU_GPR(R4)(r4) > > + stw r5, VCPU_GPR(R5)(r4) > > + stw r6, VCPU_GPR(R6)(r4) > > + lwz r3, VCPU_CRIT_SAVE(r4) > > + mfspr r5, \srr0 > > + stw r3, VCPU_GPR(R3)(r4) > > + stw r5, VCPU_PC(r4) > > + mfctr r5 > > + lis r6, kvmppc_resume_host@h > > + stw r5, VCPU_CTR(r4) > > + li r5, \ivor_nr > > + ori r6, r6, kvmppc_resume_host@l > > + mtctr r6 > > + bctr > > +.endm > > + > > .macro KVM_HANDLER_ADDR ivor_nr > > .long kvmppc_handler_\ivor_nr > > .endm > > -- > > 1.7.0.4 > > > > > > -- > To unsubscribe from this list: send the line "unsubscribe kvm-ppc" in the body > of a message to majordomo@vger.kernel.org More majordomo info at > http://vger.kernel.org/majordomo-info.html