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 | |
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')
-rw-r--r-- | arch/powerpc/include/asm/exception-64s.h | 11 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_hv_rmhandlers.S | 9 | ||||
-rw-r--r-- | arch/powerpc/kvm/book3s_segment.S | 4 |
3 files changed, 20 insertions, 4 deletions
diff --git a/arch/powerpc/include/asm/exception-64s.h b/arch/powerpc/include/asm/exception-64s.h index a22c9854a633..894662a5d4d5 100644 --- a/arch/powerpc/include/asm/exception-64s.h +++ b/arch/powerpc/include/asm/exception-64s.h | |||
@@ -198,6 +198,17 @@ END_FTR_SECTION_NESTED(ftr,ftr,943) | |||
198 | cmpwi r10,0; \ | 198 | cmpwi r10,0; \ |
199 | bne do_kvm_##n | 199 | bne do_kvm_##n |
200 | 200 | ||
201 | #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE | ||
202 | /* | ||
203 | * If hv is possible, interrupts come into to the hv version | ||
204 | * of the kvmppc_interrupt code, which then jumps to the PR handler, | ||
205 | * kvmppc_interrupt_pr, if the guest is a PR guest. | ||
206 | */ | ||
207 | #define kvmppc_interrupt kvmppc_interrupt_hv | ||
208 | #else | ||
209 | #define kvmppc_interrupt kvmppc_interrupt_pr | ||
210 | #endif | ||
211 | |||
201 | #define __KVM_HANDLER(area, h, n) \ | 212 | #define __KVM_HANDLER(area, h, n) \ |
202 | do_kvm_##n: \ | 213 | do_kvm_##n: \ |
203 | BEGIN_FTR_SECTION_NESTED(947) \ | 214 | BEGIN_FTR_SECTION_NESTED(947) \ |
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 | * |