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....@freescale.com>
> [bharat.bhus...@freescale.com: Substantial changes]
> Signed-off-by: Bharat Bhushan <bharat.bhus...@freescale.com>
> 
> Signed-off-by: Bharat Bhushan <bharat.bhus...@freescale.com>
> ---
> 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-ppc" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to