From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexander Graf Subject: Re: [PATCH 3/3] KVM: PPC: booke: Added debug handler Date: Tue, 7 Aug 2012 12:47:35 +0200 Message-ID: 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 (Apple Message framework v1278) Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 8BIT Cc: , , Bharat Bhushan To: Bharat Bhushan Return-path: In-Reply-To: <1343977723-25341-3-git-send-email-Bharat.Bhushan@freescale.com> Sender: kvm-ppc-owner@vger.kernel.org List-Id: kvm.vger.kernel.org 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? 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 > > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alexander Graf Date: Tue, 07 Aug 2012 10:47:35 +0000 Subject: Re: [PATCH 3/3] KVM: PPC: booke: Added debug handler Message-Id: 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: <1343977723-25341-3-git-send-email-Bharat.Bhushan@freescale.com> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Bharat Bhushan Cc: kvm-ppc@vger.kernel.org, kvm@vger.kernel.org, Bharat Bhushan 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? 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 > >