Patch "arm64: KVM: VHE: Context switch MDSCR_EL1" has been added to the 4.7-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
arm64: KVM: VHE: Context switch MDSCR_EL1
to the 4.7-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
arm64-kvm-vhe-context-switch-mdscr_el1.patch
and it can be found in the queue-4.7 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
4c47eb1c18c38b755eb4894a6ca38f834de3ec23Mon Sep 17 00:00:00 2001
From: Marc Zyngier <[email protected]>
Date: Tue, 19 Jul 2016 13:56:54 +0100
Subject: arm64: KVM: VHE: Context switch MDSCR_EL1
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
From: Marc Zyngier <[email protected]>
commit 4c47eb1c18c38b755eb4894a6ca38f834de3ec23 upstream.
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.
--- arch/arm64/kvm/hyp/sysreg-sr.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)
arch/arm64/kvm/hyp/sysreg-sr.c +4 -4
@@ -27,8 +27,8 @@ static void __hyp_text __sysreg_do_nothi/* * 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_com 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_sta 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_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_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);
Patches currently in stable-queue which might be from [email protected] are
queue-4.7/arm64-debug-unmask-pstate.d-earlier.patch queue-4.7/arm64-kvm-vhe-context-switch-mdscr_el1.patch