|
@@ -292,15 +292,26 @@ decrementer_pSeries:
|
|
|
. = 0xc00
|
|
|
.globl system_call_pSeries
|
|
|
system_call_pSeries:
|
|
|
- HMT_MEDIUM
|
|
|
+ /*
|
|
|
+ * If CONFIG_KVM_BOOK3S_64_HANDLER is set, save the PPR (on systems
|
|
|
+ * that support it) before changing to HMT_MEDIUM. That allows the KVM
|
|
|
+ * code to save that value into the guest state (it is the guest's PPR
|
|
|
+ * value). Otherwise just change to HMT_MEDIUM as userspace has
|
|
|
+ * already saved the PPR.
|
|
|
+ */
|
|
|
#ifdef CONFIG_KVM_BOOK3S_64_HANDLER
|
|
|
SET_SCRATCH0(r13)
|
|
|
GET_PACA(r13)
|
|
|
std r9,PACA_EXGEN+EX_R9(r13)
|
|
|
+ OPT_GET_SPR(r9, SPRN_PPR, CPU_FTR_HAS_PPR);
|
|
|
+ HMT_MEDIUM;
|
|
|
std r10,PACA_EXGEN+EX_R10(r13)
|
|
|
+ OPT_SAVE_REG_TO_PACA(PACA_EXGEN+EX_PPR, r9, CPU_FTR_HAS_PPR);
|
|
|
mfcr r9
|
|
|
KVMTEST(0xc00)
|
|
|
GET_SCRATCH0(r13)
|
|
|
+#else
|
|
|
+ HMT_MEDIUM;
|
|
|
#endif
|
|
|
SYSCALL_PSERIES_1
|
|
|
SYSCALL_PSERIES_2_RFID
|