[PATCH v2] arm64: KVM: VHE: Context switch MDSCR_EL1

Subsystems: arm64 port (aarch64 architecture), kernel virtual machine for arm64 (kvm/arm64), the rest

STALE3721d REVIEWED: 1 (0M)

1 review trailer.

5 messages, 2 authors, 2016-07-21 · open the first message on its own page

[PATCH v2] arm64: KVM: VHE: Context switch MDSCR_EL1

From: Marc Zyngier <hidden>
Date: 2016-07-19 12:56:54

The kprobe enablement work has uncovered that changes made by
a guest to MDSCR_EL1 were propagated to the host when VHE was
enabled, leading to unexpected exception being delivered.

Moving this register to the list of registers that are always
context-switched fixes the issue.

Fixes: 9c6c35683286 ("arm64: KVM: VHE: Split save/restore of registers shared between guest and host")
Cc: stable at vger.kernel.org #4.6
Reported-by: Tirumalesh Chalamarla <redacted>
Tested-by: Tirumalesh Chalamarla <redacted>
Signed-off-by: Marc Zyngier <redacted>
---
v2: added missing Fixes and Cc-stable tags

 arch/arm64/kvm/hyp/sysreg-sr.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/arch/arm64/kvm/hyp/sysreg-sr.c b/arch/arm64/kvm/hyp/sysreg-sr.c
index 0f7c40e..9341376 100644
--- a/arch/arm64/kvm/hyp/sysreg-sr.c
+++ b/arch/arm64/kvm/hyp/sysreg-sr.c
@@ -27,8 +27,8 @@ static void __hyp_text __sysreg_do_nothing(struct kvm_cpu_context *ctxt) { }
 /*
  * Non-VHE: Both host and guest must save everything.
  *
- * VHE: Host must save tpidr*_el[01], actlr_el1, sp0, pc, pstate, and
- * guest must save everything.
+ * VHE: Host must save tpidr*_el[01], actlr_el1, mdscr_el1, sp0, pc,
+ * pstate, and guest must save everything.
  */
 
 static void __hyp_text __sysreg_save_common_state(struct kvm_cpu_context *ctxt)
@@ -37,6 +37,7 @@ static void __hyp_text __sysreg_save_common_state(struct kvm_cpu_context *ctxt)
 	ctxt->sys_regs[TPIDR_EL0]	= read_sysreg(tpidr_el0);
 	ctxt->sys_regs[TPIDRRO_EL0]	= read_sysreg(tpidrro_el0);
 	ctxt->sys_regs[TPIDR_EL1]	= read_sysreg(tpidr_el1);
+	ctxt->sys_regs[MDSCR_EL1]	= read_sysreg(mdscr_el1);
 	ctxt->gp_regs.regs.sp		= read_sysreg(sp_el0);
 	ctxt->gp_regs.regs.pc		= read_sysreg_el2(elr);
 	ctxt->gp_regs.regs.pstate	= read_sysreg_el2(spsr);
@@ -61,7 +62,6 @@ static void __hyp_text __sysreg_save_state(struct kvm_cpu_context *ctxt)
 	ctxt->sys_regs[AMAIR_EL1]	= read_sysreg_el1(amair);
 	ctxt->sys_regs[CNTKCTL_EL1]	= read_sysreg_el1(cntkctl);
 	ctxt->sys_regs[PAR_EL1]		= read_sysreg(par_el1);
-	ctxt->sys_regs[MDSCR_EL1]	= read_sysreg(mdscr_el1);
 
 	ctxt->gp_regs.sp_el1		= read_sysreg(sp_el1);
 	ctxt->gp_regs.elr_el1		= read_sysreg_el1(elr);
@@ -90,6 +90,7 @@ static void __hyp_text __sysreg_restore_common_state(struct kvm_cpu_context *ctx
 	write_sysreg(ctxt->sys_regs[TPIDR_EL0],	  tpidr_el0);
 	write_sysreg(ctxt->sys_regs[TPIDRRO_EL0], tpidrro_el0);
 	write_sysreg(ctxt->sys_regs[TPIDR_EL1],	  tpidr_el1);
+	write_sysreg(ctxt->sys_regs[MDSCR_EL1],	  mdscr_el1);
 	write_sysreg(ctxt->gp_regs.regs.sp,	  sp_el0);
 	write_sysreg_el2(ctxt->gp_regs.regs.pc,	  elr);
 	write_sysreg_el2(ctxt->gp_regs.regs.pstate, spsr);
@@ -114,7 +115,6 @@ static void __hyp_text __sysreg_restore_state(struct kvm_cpu_context *ctxt)
 	write_sysreg_el1(ctxt->sys_regs[AMAIR_EL1],	amair);
 	write_sysreg_el1(ctxt->sys_regs[CNTKCTL_EL1], 	cntkctl);
 	write_sysreg(ctxt->sys_regs[PAR_EL1],		par_el1);
-	write_sysreg(ctxt->sys_regs[MDSCR_EL1],		mdscr_el1);
 
 	write_sysreg(ctxt->gp_regs.sp_el1,		sp_el1);
 	write_sysreg_el1(ctxt->gp_regs.elr_el1,		elr);
-- 
2.1.4

[PATCH v2] arm64: KVM: VHE: Context switch MDSCR_EL1

From: Radim Krčmář <hidden>
Date: 2016-07-21 13:17:20

2016-07-19 13:56+0100, Marc Zyngier:
The kprobe enablement work has uncovered that changes made by
a guest to MDSCR_EL1 were propagated to the host when VHE was
enabled, leading to unexpected exception being delivered.

Moving this register to the list of registers that are always
context-switched fixes the issue.

Fixes: 9c6c35683286 ("arm64: KVM: VHE: Split save/restore of registers shared between guest and host")
Cc: stable at vger.kernel.org #4.6
Reported-by: Tirumalesh Chalamarla <redacted>
Tested-by: Tirumalesh Chalamarla <redacted>
Signed-off-by: Marc Zyngier <redacted>
---
I would take this patch to 4.7 directly through the main tree.
Are your plans different?

Thanks.

[PATCH v2] arm64: KVM: VHE: Context switch MDSCR_EL1

From: Marc Zyngier <hidden>
Date: 2016-07-21 13:24:51

On Thu, 21 Jul 2016 15:17:20 +0200
Radim Kr?m?? [off-list ref] wrote:

Hi Radim,
2016-07-19 13:56+0100, Marc Zyngier:
quoted
The kprobe enablement work has uncovered that changes made by
a guest to MDSCR_EL1 were propagated to the host when VHE was
enabled, leading to unexpected exception being delivered.

Moving this register to the list of registers that are always
context-switched fixes the issue.

Fixes: 9c6c35683286 ("arm64: KVM: VHE: Split save/restore of registers shared between guest and host")
Cc: stable at vger.kernel.org #4.6
Reported-by: Tirumalesh Chalamarla <redacted>
Tested-by: Tirumalesh Chalamarla <redacted>
Signed-off-by: Marc Zyngier <redacted>
---  
I would take this patch to 4.7 directly through the main tree.
Are your plans different?
If you're happy to take it now, that works for me. I can either send a
PR right away, or you can apply it directly, whichever works best for
you.

Thanks,

	M.
-- 
Jazz is not dead. It just smells funny.

[PATCH v2] arm64: KVM: VHE: Context switch MDSCR_EL1

From: Radim Krčmář <hidden>
Date: 2016-07-21 13:49:38

2016-07-21 14:24+0100, Marc Zyngier:
On Thu, 21 Jul 2016 15:17:20 +0200
Radim Kr?m?? [off-list ref] wrote:

Hi Radim,
quoted
2016-07-19 13:56+0100, Marc Zyngier:
quoted
The kprobe enablement work has uncovered that changes made by
a guest to MDSCR_EL1 were propagated to the host when VHE was
enabled, leading to unexpected exception being delivered.

Moving this register to the list of registers that are always
context-switched fixes the issue.

Fixes: 9c6c35683286 ("arm64: KVM: VHE: Split save/restore of registers shared between guest and host")
Cc: stable at vger.kernel.org #4.6
Reported-by: Tirumalesh Chalamarla <redacted>
Tested-by: Tirumalesh Chalamarla <redacted>
Signed-off-by: Marc Zyngier <redacted>
---  
I would take this patch to 4.7 directly through the main tree.
Are your plans different?
If you're happy to take it now, that works for me.
The fix is clear, tested, and would go to 4.7.stable.  Better to have it
in 4.7, IMO.
                                                   I can either send a
PR right away, or you can apply it directly, whichever works best for
you.
It is just one patch so I'll apply it and send a pull request to Linus
on Saturday;  less cummulative work that way. :)

[PATCH v2] arm64: KVM: VHE: Context switch MDSCR_EL1

From: Marc Zyngier <hidden>
Date: 2016-07-21 13:53:46

On Thu, 21 Jul 2016 15:49:38 +0200
Radim Kr?m?? [off-list ref] wrote:
2016-07-21 14:24+0100, Marc Zyngier:
quoted
On Thu, 21 Jul 2016 15:17:20 +0200
Radim Kr?m?? [off-list ref] wrote:

Hi Radim,
  
quoted
2016-07-19 13:56+0100, Marc Zyngier:  
quoted
The kprobe enablement work has uncovered that changes made by
a guest to MDSCR_EL1 were propagated to the host when VHE was
enabled, leading to unexpected exception being delivered.

Moving this register to the list of registers that are always
context-switched fixes the issue.

Fixes: 9c6c35683286 ("arm64: KVM: VHE: Split save/restore of registers shared between guest and host")
Cc: stable at vger.kernel.org #4.6
Reported-by: Tirumalesh Chalamarla <redacted>
Tested-by: Tirumalesh Chalamarla <redacted>
Signed-off-by: Marc Zyngier <redacted>
---    
I would take this patch to 4.7 directly through the main tree.
Are your plans different?  
If you're happy to take it now, that works for me.  
The fix is clear, tested, and would go to 4.7.stable.  Better to have it
in 4.7, IMO.
Agreed.
quoted
                                                   I can either send a
PR right away, or you can apply it directly, whichever works best for
you.  
It is just one patch so I'll apply it and send a pull request to Linus
on Saturday;  less cummulative work that way. :)
Brilliant. Thanks Radim.

	M.
-- 
Jazz is not dead. It just smells funny.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help