|
@@ -74,6 +74,14 @@ _GLOBAL(kvmppc_handler_\ivor_nr)
|
|
|
bctr
|
|
|
.endm
|
|
|
|
|
|
+.macro KVM_HANDLER_ADDR ivor_nr
|
|
|
+ .long kvmppc_handler_\ivor_nr
|
|
|
+.endm
|
|
|
+
|
|
|
+.macro KVM_HANDLER_END
|
|
|
+ .long kvmppc_handlers_end
|
|
|
+.endm
|
|
|
+
|
|
|
_GLOBAL(kvmppc_handlers_start)
|
|
|
KVM_HANDLER BOOKE_INTERRUPT_CRITICAL SPRN_SPRG_RSCRATCH_CRIT SPRN_CSRR0
|
|
|
KVM_HANDLER BOOKE_INTERRUPT_MACHINE_CHECK SPRN_SPRG_RSCRATCH_MC SPRN_MCSRR0
|
|
@@ -94,9 +102,7 @@ KVM_HANDLER BOOKE_INTERRUPT_DEBUG SPRN_SPRG_RSCRATCH_CRIT SPRN_CSRR0
|
|
|
KVM_HANDLER BOOKE_INTERRUPT_SPE_UNAVAIL SPRN_SPRG_RSCRATCH0 SPRN_SRR0
|
|
|
KVM_HANDLER BOOKE_INTERRUPT_SPE_FP_DATA SPRN_SPRG_RSCRATCH0 SPRN_SRR0
|
|
|
KVM_HANDLER BOOKE_INTERRUPT_SPE_FP_ROUND SPRN_SPRG_RSCRATCH0 SPRN_SRR0
|
|
|
-
|
|
|
-_GLOBAL(kvmppc_handler_len)
|
|
|
- .long kvmppc_handler_1 - kvmppc_handler_0
|
|
|
+_GLOBAL(kvmppc_handlers_end)
|
|
|
|
|
|
/* Registers:
|
|
|
* SPRG_SCRATCH0: guest r4
|
|
@@ -461,6 +467,31 @@ lightweight_exit:
|
|
|
lwz r4, VCPU_GPR(R4)(r4)
|
|
|
rfi
|
|
|
|
|
|
+ .data
|
|
|
+ .align 4
|
|
|
+ .globl kvmppc_booke_handler_addr
|
|
|
+kvmppc_booke_handler_addr:
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_CRITICAL
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_MACHINE_CHECK
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_DATA_STORAGE
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_INST_STORAGE
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_EXTERNAL
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_ALIGNMENT
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_PROGRAM
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_FP_UNAVAIL
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_SYSCALL
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_AP_UNAVAIL
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_DECREMENTER
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_FIT
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_WATCHDOG
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_DTLB_MISS
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_ITLB_MISS
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_DEBUG
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_UNAVAIL
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_FP_DATA
|
|
|
+KVM_HANDLER_ADDR BOOKE_INTERRUPT_SPE_FP_ROUND
|
|
|
+KVM_HANDLER_END /*Always keep this in end*/
|
|
|
+
|
|
|
#ifdef CONFIG_SPE
|
|
|
_GLOBAL(kvmppc_save_guest_spe)
|
|
|
cmpi 0,r3,0
|