diff options
author | Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> | 2013-10-07 12:47:55 -0400 |
---|---|---|
committer | Alexander Graf <agraf@suse.de> | 2013-10-17 09:26:31 -0400 |
commit | dd96b2c2dc408faf2213bc0a05897c1359f7969c (patch) | |
tree | 28babcca69ad51b78a8a7f58a4b743b9be3b035f /arch/powerpc/kvm | |
parent | 3a167beac07cba597856c12b87638a06b0d53db7 (diff) |
kvm: powerpc: book3s: Cleanup interrupt handling code
With this patch if HV is included, interrupts come in to the HV version
of the kvmppc_interrupt code, which then jumps to the PR handler,
renamed to kvmppc_interrupt_pr, if the guest is a PR guest. This helps
in enabling both HV and PR, which we do in later patch
Signed-off-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com>
Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'arch/powerpc/kvm')
-rw-r--r-- | arch/powerpc/kvm/book3s_hv_rmhandlers.S | 9 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_segment.S | 4 |
2 files changed, 9 insertions, 4 deletions
diff --git a/arch/powerpc/kvm/book3s_hv_rmhandlers.S b/arch/powerpc/kvm/book3s_hv_rmhandlers.S index 84105eb18a0e..f7e24c6cb8eb 100644 --- a/arch/powerpc/kvm/book3s_hv_rmhandlers.S +++ b/arch/powerpc/kvm/book3s_hv_rmhandlers.S | |||
@@ -742,8 +742,8 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR) | |||
742 | /* | 742 | /* |
743 | * We come here from the first-level interrupt handlers. | 743 | * We come here from the first-level interrupt handlers. |
744 | */ | 744 | */ |
745 | .globl kvmppc_interrupt | 745 | .globl kvmppc_interrupt_hv |
746 | kvmppc_interrupt: | 746 | kvmppc_interrupt_hv: |
747 | /* | 747 | /* |
748 | * Register contents: | 748 | * Register contents: |
749 | * R12 = interrupt vector | 749 | * R12 = interrupt vector |
@@ -757,6 +757,11 @@ kvmppc_interrupt: | |||
757 | lbz r9, HSTATE_IN_GUEST(r13) | 757 | lbz r9, HSTATE_IN_GUEST(r13) |
758 | cmpwi r9, KVM_GUEST_MODE_HOST_HV | 758 | cmpwi r9, KVM_GUEST_MODE_HOST_HV |
759 | beq kvmppc_bad_host_intr | 759 | beq kvmppc_bad_host_intr |
760 | #ifdef CONFIG_KVM_BOOK3S_PR_POSSIBLE | ||
761 | cmpwi r9, KVM_GUEST_MODE_GUEST | ||
762 | ld r9, HSTATE_HOST_R2(r13) | ||
763 | beq kvmppc_interrupt_pr | ||
764 | #endif | ||
760 | /* We're now back in the host but in guest MMU context */ | 765 | /* We're now back in the host but in guest MMU context */ |
761 | li r9, KVM_GUEST_MODE_HOST_HV | 766 | li r9, KVM_GUEST_MODE_HOST_HV |
762 | stb r9, HSTATE_IN_GUEST(r13) | 767 | stb r9, HSTATE_IN_GUEST(r13) |
diff --git a/arch/powerpc/kvm/book3s_segment.S b/arch/powerpc/kvm/book3s_segment.S index 1abe4788191a..bc50c97751d3 100644 --- a/arch/powerpc/kvm/book3s_segment.S +++ b/arch/powerpc/kvm/book3s_segment.S | |||
@@ -161,8 +161,8 @@ kvmppc_handler_trampoline_enter_end: | |||
161 | .global kvmppc_handler_trampoline_exit | 161 | .global kvmppc_handler_trampoline_exit |
162 | kvmppc_handler_trampoline_exit: | 162 | kvmppc_handler_trampoline_exit: |
163 | 163 | ||
164 | .global kvmppc_interrupt | 164 | .global kvmppc_interrupt_pr |
165 | kvmppc_interrupt: | 165 | kvmppc_interrupt_pr: |
166 | 166 | ||
167 | /* Register usage at this point: | 167 | /* Register usage at this point: |
168 | * | 168 | * |