|
@@ -650,6 +650,32 @@ slb_miss_user_pseries:
|
|
|
b . /* prevent spec. execution */
|
|
|
#endif /* __DISABLED__ */
|
|
|
|
|
|
+#ifdef CONFIG_KVM_BOOK3S_64_HANDLER
|
|
|
+kvmppc_skip_interrupt:
|
|
|
+ /*
|
|
|
+ * Here all GPRs are unchanged from when the interrupt happened
|
|
|
+ * except for r13, which is saved in SPRG_SCRATCH0.
|
|
|
+ */
|
|
|
+ mfspr r13, SPRN_SRR0
|
|
|
+ addi r13, r13, 4
|
|
|
+ mtspr SPRN_SRR0, r13
|
|
|
+ GET_SCRATCH0(r13)
|
|
|
+ rfid
|
|
|
+ b .
|
|
|
+
|
|
|
+kvmppc_skip_Hinterrupt:
|
|
|
+ /*
|
|
|
+ * Here all GPRs are unchanged from when the interrupt happened
|
|
|
+ * except for r13, which is saved in SPRG_SCRATCH0.
|
|
|
+ */
|
|
|
+ mfspr r13, SPRN_HSRR0
|
|
|
+ addi r13, r13, 4
|
|
|
+ mtspr SPRN_HSRR0, r13
|
|
|
+ GET_SCRATCH0(r13)
|
|
|
+ hrfid
|
|
|
+ b .
|
|
|
+#endif
|
|
|
+
|
|
|
/*
|
|
|
* Code from here down to __end_handlers is invoked from the
|
|
|
* exception prologs above. Because the prologs assemble the
|