diff options
author | Bharat Bhushan <Bharat.Bhushan@freescale.com> | 2014-07-21 01:53:26 -0400 |
---|---|---|
committer | Alexander Graf <agraf@suse.de> | 2014-07-28 09:23:14 -0400 |
commit | 99e99d19a86dc596703ed79dcecf9ca6b32a6a8a (patch) | |
tree | 9b7f2622633ad9f922a569b3403d18b83f7ede6f /arch/powerpc | |
parent | f5250471b2d6ad27d536cb34ce39d76b91b2b36b (diff) |
kvm: ppc: bookehv: Save restore SPRN_SPRG9 on guest entry exit
SPRN_SPRG is used by debug interrupt handler, so this is required for
debug support.
Signed-off-by: Bharat Bhushan <Bharat.Bhushan@freescale.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/include/asm/kvm_host.h | 1 | ||||
-rw-r--r-- | arch/powerpc/kernel/asm-offsets.c | 1 | ||||
-rw-r--r-- | arch/powerpc/kvm/bookehv_interrupts.S | 4 |
3 files changed, 6 insertions, 0 deletions
diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h index 855ba4d9539d..562f685d1678 100644 --- a/arch/powerpc/include/asm/kvm_host.h +++ b/arch/powerpc/include/asm/kvm_host.h | |||
@@ -587,6 +587,7 @@ struct kvm_vcpu_arch { | |||
587 | u32 mmucfg; | 587 | u32 mmucfg; |
588 | u32 eptcfg; | 588 | u32 eptcfg; |
589 | u32 epr; | 589 | u32 epr; |
590 | u64 sprg9; | ||
590 | u32 pwrmgtcr0; | 591 | u32 pwrmgtcr0; |
591 | u32 crit_save; | 592 | u32 crit_save; |
592 | /* guest debug registers*/ | 593 | /* guest debug registers*/ |
diff --git a/arch/powerpc/kernel/asm-offsets.c b/arch/powerpc/kernel/asm-offsets.c index 17ffcb4f27f9..ab9ae0411e8f 100644 --- a/arch/powerpc/kernel/asm-offsets.c +++ b/arch/powerpc/kernel/asm-offsets.c | |||
@@ -668,6 +668,7 @@ int main(void) | |||
668 | DEFINE(VCPU_LR, offsetof(struct kvm_vcpu, arch.lr)); | 668 | DEFINE(VCPU_LR, offsetof(struct kvm_vcpu, arch.lr)); |
669 | DEFINE(VCPU_CTR, offsetof(struct kvm_vcpu, arch.ctr)); | 669 | DEFINE(VCPU_CTR, offsetof(struct kvm_vcpu, arch.ctr)); |
670 | DEFINE(VCPU_PC, offsetof(struct kvm_vcpu, arch.pc)); | 670 | DEFINE(VCPU_PC, offsetof(struct kvm_vcpu, arch.pc)); |
671 | DEFINE(VCPU_SPRG9, offsetof(struct kvm_vcpu, arch.sprg9)); | ||
671 | DEFINE(VCPU_LAST_INST, offsetof(struct kvm_vcpu, arch.last_inst)); | 672 | DEFINE(VCPU_LAST_INST, offsetof(struct kvm_vcpu, arch.last_inst)); |
672 | DEFINE(VCPU_FAULT_DEAR, offsetof(struct kvm_vcpu, arch.fault_dear)); | 673 | DEFINE(VCPU_FAULT_DEAR, offsetof(struct kvm_vcpu, arch.fault_dear)); |
673 | DEFINE(VCPU_FAULT_ESR, offsetof(struct kvm_vcpu, arch.fault_esr)); | 674 | DEFINE(VCPU_FAULT_ESR, offsetof(struct kvm_vcpu, arch.fault_esr)); |
diff --git a/arch/powerpc/kvm/bookehv_interrupts.S b/arch/powerpc/kvm/bookehv_interrupts.S index e000b397ece3..b4f8fbafee7a 100644 --- a/arch/powerpc/kvm/bookehv_interrupts.S +++ b/arch/powerpc/kvm/bookehv_interrupts.S | |||
@@ -398,6 +398,7 @@ _GLOBAL(kvmppc_resume_host) | |||
398 | #ifdef CONFIG_64BIT | 398 | #ifdef CONFIG_64BIT |
399 | PPC_LL r3, PACA_SPRG_VDSO(r13) | 399 | PPC_LL r3, PACA_SPRG_VDSO(r13) |
400 | #endif | 400 | #endif |
401 | mfspr r5, SPRN_SPRG9 | ||
401 | PPC_STD(r6, VCPU_SHARED_SPRG4, r11) | 402 | PPC_STD(r6, VCPU_SHARED_SPRG4, r11) |
402 | mfspr r8, SPRN_SPRG6 | 403 | mfspr r8, SPRN_SPRG6 |
403 | PPC_STD(r7, VCPU_SHARED_SPRG5, r11) | 404 | PPC_STD(r7, VCPU_SHARED_SPRG5, r11) |
@@ -405,6 +406,7 @@ _GLOBAL(kvmppc_resume_host) | |||
405 | #ifdef CONFIG_64BIT | 406 | #ifdef CONFIG_64BIT |
406 | mtspr SPRN_SPRG_VDSO_WRITE, r3 | 407 | mtspr SPRN_SPRG_VDSO_WRITE, r3 |
407 | #endif | 408 | #endif |
409 | PPC_STD(r5, VCPU_SPRG9, r4) | ||
408 | PPC_STD(r8, VCPU_SHARED_SPRG6, r11) | 410 | PPC_STD(r8, VCPU_SHARED_SPRG6, r11) |
409 | mfxer r3 | 411 | mfxer r3 |
410 | PPC_STD(r9, VCPU_SHARED_SPRG7, r11) | 412 | PPC_STD(r9, VCPU_SHARED_SPRG7, r11) |
@@ -639,7 +641,9 @@ lightweight_exit: | |||
639 | mtspr SPRN_SPRG5W, r6 | 641 | mtspr SPRN_SPRG5W, r6 |
640 | PPC_LD(r8, VCPU_SHARED_SPRG7, r11) | 642 | PPC_LD(r8, VCPU_SHARED_SPRG7, r11) |
641 | mtspr SPRN_SPRG6W, r7 | 643 | mtspr SPRN_SPRG6W, r7 |
644 | PPC_LD(r5, VCPU_SPRG9, r4) | ||
642 | mtspr SPRN_SPRG7W, r8 | 645 | mtspr SPRN_SPRG7W, r8 |
646 | mtspr SPRN_SPRG9, r5 | ||
643 | 647 | ||
644 | /* Load some guest volatiles. */ | 648 | /* Load some guest volatiles. */ |
645 | PPC_LL r3, VCPU_LR(r4) | 649 | PPC_LL r3, VCPU_LR(r4) |