summaryrefslogtreecommitdiff
path: root/arch/powerpc/kvm
diff options
context:
space:
mode:
authorMichael Ellerman <mpe@ellerman.id.au>2022-05-18 17:11:51 +0300
committerMichael Ellerman <mpe@ellerman.id.au>2022-05-18 17:11:51 +0300
commita5fc286f69fc9590c22995fe05dca461fd6295b1 (patch)
tree358fb26ef57cef5ad7c88009c83c5dc977624b9b /arch/powerpc/kvm
parentb6b1c3ce06ca438eb24e0f45bf0e63ecad0369f5 (diff)
parentee8348496c77e3737d0a6cda307a521f2cff954f (diff)
downloadlinux-a5fc286f69fc9590c22995fe05dca461fd6295b1.tar.xz
Merge branch 'fixes' into next
Merge our fixes branch from this cycle. In particular this brings in a papr_scm.c change which a subsequent patch has a dependency on.
Diffstat (limited to 'arch/powerpc/kvm')
-rw-r--r--arch/powerpc/kvm/book3s_32_sr.S26
1 files changed, 21 insertions, 5 deletions
diff --git a/arch/powerpc/kvm/book3s_32_sr.S b/arch/powerpc/kvm/book3s_32_sr.S
index e3ab9df6cf19..6cfcd20d4668 100644
--- a/arch/powerpc/kvm/book3s_32_sr.S
+++ b/arch/powerpc/kvm/book3s_32_sr.S
@@ -122,11 +122,27 @@
/* 0x0 - 0xb */
- /* 'current->mm' needs to be in r4 */
- tophys(r4, r2)
- lwz r4, MM(r4)
- tophys(r4, r4)
- /* This only clobbers r0, r3, r4 and r5 */
+ /* switch_mmu_context() needs paging, let's enable it */
+ mfmsr r9
+ ori r11, r9, MSR_DR
+ mtmsr r11
+ sync
+
+ /* switch_mmu_context() clobbers r12, rescue it */
+ SAVE_GPR(12, r1)
+
+ /* Calling switch_mmu_context(<inv>, current->mm, <inv>); */
+ lwz r4, MM(r2)
bl switch_mmu_context
+ /* restore r12 */
+ REST_GPR(12, r1)
+
+ /* Disable paging again */
+ mfmsr r9
+ li r6, MSR_DR
+ andc r9, r9, r6
+ mtmsr r9
+ sync
+
.endm