From: Marc Zyngier <maz@kernel.org>
To: kvmarm@lists.linux.dev
Cc: Steffen Eiden <seiden@linux.ibm.com>,
Joey Gouly <joey.gouly@arm.com>,
Suzuki K Poulose <suzuki.poulose@arm.com>,
Oliver Upton <oupton@kernel.org>,
Zenghui Yu <yuzenghui@huawei.com>,
Fuad Tabba <fuad.tabba@linux.dev>,
Mark Rutland <mark.rutland@arm.com>
Subject: [PATCH] KVM: arm64: Don't let a guest overwrite HCRX_EL2.MCE2
Date: Mon, 26 Oct 2026 08:26:33 +0000 [thread overview]
Message-ID: <20261026082633.2515820-1-maz@kernel.org> (raw)
FEAT_MOPS is fun. CPUs are allowed to implement any of two ways to
perform the memory copy, and the hypervisor is in charge of hiding
the difference between implementation when the vcpu migrates from
one to another. This is unhelpfully signalled with an exception,
which KVM diligently handles.
Today, we don't really make a good job of it in the sense that
if L1 also has the trap bit set, we don't forward the trap as
the architecture would require us to do.
But there is no good reason to forward this to the L1 guest if
L2 generates the "I'm on the wrong implementation". KVM can fix
it up in place and return to L2 directly, as if the physical CPU
was able to implement both options.
Conversely, allowing L1 to clear HCRX_EL2.MCE2 is counter-productive,
and violates the abstraction that KVM aims to give.
Implement this behaviour by never allowing the guest's view of
HCRX_EL2.MCE2 to make it into the HW, and document that KVM is in
charge of the A/B handling.
Signed-off-by: Marc Zyngier <maz@kernel.org>
---
arch/arm64/kvm/hyp/include/hyp/switch.h | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/arch/arm64/kvm/hyp/include/hyp/switch.h b/arch/arm64/kvm/hyp/include/hyp/switch.h
index a2a054fec2e2f..e18cf84a4993e 100644
--- a/arch/arm64/kvm/hyp/include/hyp/switch.h
+++ b/arch/arm64/kvm/hyp/include/hyp/switch.h
@@ -330,7 +330,7 @@ static inline void __deactivate_traps_mpam(void)
* Just like for HCR_EL2, we can't let the guest mess with some of the
* basics we rely on in HCRX_EL2. However, the major difference is that
* HCRX_EL2 only affects EL1, and never EL2 (sudden outburst of sanity, I
- * guess). So it is always the guest inflicting it on its own guestx.
+ * guess). So it is always the guest inflicting it on its own guest.
*
* Things we don't want to let the guest control are:
*
@@ -339,10 +339,14 @@ static inline void __deactivate_traps_mpam(void)
* - PTTWI: Similarly, it is for us to decide whether Reduced Coherency for
* the PTW is a thing. It really isn't.
*
+ * - MCE2: FEAT_MOPS generated exceptions for Option-{A,B} interoperability
+ * are always handled on the host and not forwarded to a guest hypervisor
+ * in order to give the (poor) illusion of a homogeneous system.
+ *
* - EnIDCP128: We don't allow IMPDEF sysregs -- full stop.
*/
#define NV_HCRX_GUEST_EXCLUDE (HCRX_EL2_TMEA | HCRX_EL2_PTTWI | \
- HCRX_EL2_EnIDCP128)
+ HCRX_EL2_MCE2 | HCRX_EL2_EnIDCP128)
static inline void __activate_traps_common(struct kvm_vcpu *vcpu)
{
--
2.47.3
next reply other threads:[~2026-10-26 8:26 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-26 8:26 Marc Zyngier [this message]
2026-10-26 11:50 ` [PATCH] KVM: arm64: Don't let a guest overwrite HCRX_EL2.MCE2 Fuad Tabba
2026-10-28 0:12 ` Oliver Upton
2026-10-28 9:38 ` Marc Zyngier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261026082633.2515820-1-maz@kernel.org \
--to=maz@kernel.org \
--cc=fuad.tabba@linux.dev \
--cc=joey.gouly@arm.com \
--cc=kvmarm@lists.linux.dev \
--cc=mark.rutland@arm.com \
--cc=oupton@kernel.org \
--cc=seiden@linux.ibm.com \
--cc=suzuki.poulose@arm.com \
--cc=yuzenghui@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.