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 <yu.liu@xxxxxxxxxxxxx> > [bharat.bhushan@xxxxxxxxxxxxx: Substantial changes] > Signed-off-by: Bharat Bhushan <bharat.bhushan@xxxxxxxxxxxxx> > > Signed-off-by: Bharat Bhushan <bharat.bhushan@xxxxxxxxxxxxx> > --- > 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 > > -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html