Merge branch kvm-arm64/mpam-ni into kvmarm/next
authorOliver Upton <oliver.upton@linux.dev>
Mon, 11 Nov 2024 18:38:30 +0000 (18:38 +0000)
committerOliver Upton <oliver.upton@linux.dev>
Mon, 11 Nov 2024 18:38:30 +0000 (18:38 +0000)
* kvm-arm64/mpam-ni:
  : Hiding FEAT_MPAM from KVM guests, courtesy of James Morse + Joey Gouly
  :
  : Fix a longstanding bug where FEAT_MPAM was accidentally exposed to KVM
  : guests + the EL2 trap configuration was not explicitly configured. As
  : part of this, bring in skeletal support for initialising the MPAM CPU
  : context so KVM can actually set traps for its guests.
  :
  : Be warned -- if this series leads to boot failures on your system,
  : you're running on turd firmware.
  :
  : As an added bonus (that builds upon the infrastructure added by the MPAM
  : series), allow userspace to configure CTR_EL0.L1Ip, courtesy of Shameer
  : Kolothum.
  KVM: arm64: Make L1Ip feature in CTR_EL0 writable from userspace
  KVM: arm64: selftests: Test ID_AA64PFR0.MPAM isn't completely ignored
  KVM: arm64: Disable MPAM visibility by default and ignore VMM writes
  KVM: arm64: Add a macro for creating filtered sys_reg_descs entries
  KVM: arm64: Fix missing traps of guest accesses to the MPAM registers
  arm64: cpufeature: discover CPU support for MPAM
  arm64: head.S: Initialise MPAM EL2 registers and disable traps
  arm64/sysreg: Convert existing MPAM sysregs and add the remaining entries

Signed-off-by: Oliver Upton <oliver.upton@linux.dev>
1  2 
arch/arm64/kvm/sys_regs.c
arch/arm64/tools/sysreg

@@@ -2945,13 -2935,18 +3027,24 @@@ static const struct sys_reg_desc sys_re
        EL2_REG(HPFAR_EL2, access_rw, reset_val, 0),
  
        EL2_REG(MAIR_EL2, access_rw, reset_val, 0),
 +      EL2_REG_FILTERED(PIRE0_EL2, access_rw, reset_val, 0,
 +                       s1pie_el2_visibility),
 +      EL2_REG_FILTERED(PIR_EL2, access_rw, reset_val, 0,
 +                       s1pie_el2_visibility),
 +      EL2_REG_FILTERED(POR_EL2, access_rw, reset_val, 0,
 +                       s1poe_el2_visibility),
        EL2_REG(AMAIR_EL2, access_rw, reset_val, 0),
+       { SYS_DESC(SYS_MPAMHCR_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPMV_EL2), undef_access },
+       { SYS_DESC(SYS_MPAM2_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPM0_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPM1_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPM2_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPM3_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPM4_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPM5_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPM6_EL2), undef_access },
+       { SYS_DESC(SYS_MPAMVPM7_EL2), undef_access },
  
        EL2_REG(VBAR_EL2, access_rw, reset_val, 0),
        EL2_REG(RVBAR_EL2, access_rw, reset_val, 0),
Simple merge