linux/arch/arm64/kvm
James Morse 4e76efda1f KVM: arm64: Disable MPAM visibility by default and ignore VMM writes
commit 6685f5d572 upstream.

commit 011e5f5bf5 ("arm64/cpufeature: Add remaining feature bits in
ID_AA64PFR0 register") exposed the MPAM field of AA64PFR0_EL1 to guests,
but didn't add trap handling. A previous patch supplied the missing trap
handling.

Existing VMs that have the MPAM field of ID_AA64PFR0_EL1 set need to
be migratable, but there is little point enabling the MPAM CPU
interface on new VMs until there is something a guest can do with it.

Clear the MPAM field from the guest's ID_AA64PFR0_EL1 and on hardware
that supports MPAM, politely ignore the VMMs attempts to set this bit.

Guests exposed to this bug have the sanitised value of the MPAM field,
so only the correct value needs to be ignored. This means the field
can continue to be used to block migration to incompatible hardware
(between MPAM=1 and MPAM=5), and the VMM can't rely on the field
being ignored.

Signed-off-by: James Morse <james.morse@arm.com>
Co-developed-by: Joey Gouly <joey.gouly@arm.com>
Signed-off-by: Joey Gouly <joey.gouly@arm.com>
Reviewed-by: Gavin Shan <gshan@redhat.com>
Tested-by: Shameer Kolothum <shameerali.kolothum.thodi@huawei.com>
Reviewed-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20241030160317.2528209-7-joey.gouly@arm.com
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
Acked-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2024-12-19 18:11:34 +01:00
..
hyp KVM: arm64: Add memory length checks and remove inline in do_ffa_mem_xfer 2024-10-04 16:29:46 +02:00
vgic KVM: arm64: vgic-its: Clear DTE when MAPD unmaps a device 2024-12-09 10:32:44 +01:00
.gitignore KVM: arm64: Generate hyp_constants.h for the host 2021-12-06 08:37:03 +00:00
arch_timer.c KVM: arm64: Get rid of userspace_irqchip_in_use 2024-12-09 10:32:44 +01:00
arm.c KVM: arm64: Change kvm_handle_mmio_return() return polarity 2024-12-14 19:59:40 +01:00
debug.c arm64/sysreg: Rename TRBIDR_EL1 fields per auto-gen tools format 2023-06-14 14:37:33 +01:00
emulate-nested.c KVM: arm64: Add nPIR{E0}_EL1 to HFG traps 2023-10-12 16:38:50 +01:00
fpsimd.c KVM: arm64: Rework CPTR_EL2 programming for HVHE configuration 2023-06-12 23:17:24 +00:00
guest.c KVM: arm64: Allow AArch32 PSTATE.M to be restored as System mode 2024-06-16 13:47:38 +02:00
handle_exit.c KVM: arm64: nv: Expand ERET trap forwarding to handle FGT 2023-08-17 10:00:27 +01:00
hypercalls.c s390: 2023-05-01 12:06:20 -07:00
inject_fault.c KVM: arm64: Fix repeated words in comments 2023-04-21 13:46:04 +01:00
Kconfig Merge branch kvm-arm64/tlbi-range into kvmarm-master/next 2023-08-28 09:29:02 +01:00
Makefile KVM: arm64: nv: Filter out unsupported features from ID regs 2023-02-11 10:13:30 +00:00
mmio.c KVM: arm64: Don't retire aborted MMIO instruction 2024-12-14 19:59:40 +01:00
mmu.c KVM: arm64: Properly return allocated EL2 VA from hyp_alloc_private_va_range() 2023-09-12 12:58:25 +01:00
nested.c KVM: arm64: nv: Add support for HCRX_EL2 2023-08-17 10:00:28 +01:00
pkvm.c KVM: arm64: Fix circular locking dependency 2024-02-23 09:25:13 +01:00
pmu-emul.c KVM: arm64: Ignore PMCNTENSET_EL0 while checking for overflow status 2024-12-09 10:32:43 +01:00
pmu.c KVM: arm64: pmu: Drop redundant check for non-NULL kvm_pmu_events 2023-10-12 16:13:39 +01:00
psci.c Merge branch kvm-arm64/smccc-filtering into kvmarm-master/next 2023-04-21 09:44:32 +01:00
pvtime.c KVM: MMU: Make the definition of 'INVALID_GPA' common 2023-01-19 21:48:38 +00:00
reset.c KVM: arm64: Delete pointless switch statement in kvm_reset_vcpu() 2023-07-11 09:40:52 +01:00
stacktrace.c arm64: stacktrace: track hyp stacks in unwinder's address space 2022-09-09 12:30:08 +01:00
sys_regs.c KVM: arm64: Disable MPAM visibility by default and ignore VMM writes 2024-12-19 18:11:34 +01:00
sys_regs.h KVM: arm64: Save ID registers' sanitized value per guest 2023-06-15 12:55:08 +00:00
trace.h KVM: arm64: Move virt/kvm/arm to arch/arm64 2020-05-16 15:03:59 +01:00
trace_arm.h KVM: arm64: nv: Add trap forwarding infrastructure 2023-08-17 10:00:27 +01:00
trace_handle_exit.h KVM: arm64: Upgrade trace_kvm_arm_set_dreg32() to 64bit 2021-08-20 11:12:18 +01:00
trng.c KVM: arm64: Implement the TRNG hypervisor call 2021-01-25 22:19:31 +00:00
va_layout.c arm64: alternatives: kvm: prepare for cap changes 2022-09-16 17:15:02 +01:00
vgic-sys-reg-v3.c KVM: arm64: vgic-v3: Convert userspace accessors over to FIELD_GET/FIELD_PREP 2022-07-17 11:55:33 +01:00
vmid.c KVM: arm64: Use the bitmap API to allocate bitmaps 2023-04-20 09:10:28 +01:00