Merge branch kvm-arm64/nv-at-pan into kvmarm-master/next
authorMarc Zyngier <maz@kernel.org>
Thu, 12 Sep 2024 07:37:47 +0000 (08:37 +0100)
committerMarc Zyngier <maz@kernel.org>
Thu, 12 Sep 2024 07:37:47 +0000 (08:37 +0100)
* kvm-arm64/nv-at-pan:
  : .
  : Add NV support for the AT family of instructions, which mostly results
  : in adding a page table walker that deals with most of the complexity
  : of the architecture.
  :
  : From the cover letter:
  :
  : "Another task that a hypervisor supporting NV on arm64 has to deal with
  : is to emulate the AT instruction, because we multiplex all the S1
  : translations on a single set of registers, and the guest S2 is never
  : truly resident on the CPU.
  :
  : So given that we lie about page tables, we also have to lie about
  : translation instructions, hence the emulation. Things are made
  : complicated by the fact that guest S1 page tables can be swapped out,
  : and that our shadow S2 is likely to be incomplete. So while using AT
  : to emulate AT is tempting (and useful), it is not going to always
  : work, and we thus need a fallback in the shape of a SW S1 walker."
  : .
  KVM: arm64: nv: Add support for FEAT_ATS1A
  KVM: arm64: nv: Plumb handling of AT S1* traps from EL2
  KVM: arm64: nv: Make AT+PAN instructions aware of FEAT_PAN3
  KVM: arm64: nv: Sanitise SCTLR_EL1.EPAN according to VM configuration
  KVM: arm64: nv: Add SW walker for AT S1 emulation
  KVM: arm64: nv: Make ps_to_output_size() generally available
  KVM: arm64: nv: Add emulation of AT S12E{0,1}{R,W}
  KVM: arm64: nv: Add basic emulation of AT S1E2{R,W}
  KVM: arm64: nv: Add basic emulation of AT S1E1{R,W}P
  KVM: arm64: nv: Add basic emulation of AT S1E{0,1}{R,W}
  KVM: arm64: nv: Honor absence of FEAT_PAN2
  KVM: arm64: nv: Turn upper_attr for S2 walk into the full descriptor
  KVM: arm64: nv: Enforce S2 alignment when contiguous bit is set
  arm64: Add ESR_ELx_FSC_ADDRSZ_L() helper
  arm64: Add system register encoding for PSTATE.PAN
  arm64: Add PAR_EL1 field description
  arm64: Add missing APTable and TCR_ELx.HPD masks
  KVM: arm64: Make kvm_at() take an OP_AT_*

Signed-off-by: Marc Zyngier <maz@kernel.org>
# Conflicts:
# arch/arm64/kvm/nested.c

1  2 
arch/arm64/kvm/Makefile
arch/arm64/kvm/emulate-nested.c
arch/arm64/kvm/nested.c
arch/arm64/kvm/sys_regs.c

Simple merge
Simple merge
index e2067c594e4ace74a67d288dc46250dabd3986a1,133cc2f9530dfd9e65646cb603f780125a332cb4..638b6205526fa7f99dcb574e98be6dc7a8043207
@@@ -1193,5 -1179,15 +1176,12 @@@ int kvm_init_nv_sysregs(struct kvm *kvm
                res0 |= ~(res0 | res1);
        set_sysreg_masks(kvm, HAFGRTR_EL2, res0, res1);
  
 -out:
 -      mutex_unlock(&kvm->arch.config_lock);
 -
 -      return ret;
+       /* SCTLR_EL1 */
+       res0 = SCTLR_EL1_RES0;
+       res1 = SCTLR_EL1_RES1;
+       if (!kvm_has_feat(kvm, ID_AA64MMFR1_EL1, PAN, PAN3))
+               res0 |= SCTLR_EL1_EPAN;
+       set_sysreg_masks(kvm, SCTLR_EL1, res0, res1);
 +      return 0;
  }
Simple merge