• Oliver Upton's avatar
    Merge branch kvm-arm64/shadow-mmu into kvmarm/next · 435a9f60
    Oliver Upton authored
    * kvm-arm64/shadow-mmu:
      : Shadow stage-2 MMU support for NV, courtesy of Marc Zyngier
      :
      : Initial implementation of shadow stage-2 page tables to support a guest
      : hypervisor. In the author's words:
      :
      :   So here's the 10000m (approximately 30000ft for those of you stuck
      :   with the wrong units) view of what this is doing:
      :
      :     - for each {VMID,VTTBR,VTCR} tuple the guest uses, we use a
      :       separate shadow s2_mmu context. This context has its own "real"
      :       VMID and a set of page tables that are the combination of the
      :       guest's S2 and the host S2, built dynamically one fault at a time.
      :
      :     - these shadow S2 contexts are ephemeral, and behave exactly as
      :       TLBs. For all intent and purposes, they *are* TLBs, and we discard
      :       them pretty often.
      :
      :     - TLB invalidation takes three possible paths:
      :
      :       * either this is an EL2 S1 invalidation, and we directly emulate
      :         it as early as possible
      :
      :       * or this is an EL1 S1 invalidation, and we need to apply it to
      :         the shadow S2s (plural!) that match the VMID set by the L1 guest
      :
      :       * or finally, this is affecting S2, and we need to teardown the
      :         corresponding part of the shadow S2s, which invalidates the TLBs
      KVM: arm64: nv: Truely enable nXS TLBI operations
      KVM: arm64: nv: Add handling of NXS-flavoured TLBI operations
      KVM: arm64: nv: Add handling of range-based TLBI operations
      KVM: arm64: nv: Add handling of outer-shareable TLBI operations
      KVM: arm64: nv: Invalidate TLBs based on shadow S2 TTL-like information
      KVM: arm64: nv: Tag shadow S2 entries with guest's leaf S2 level
      KVM: arm64: nv: Handle FEAT_TTL hinted TLB operations
      KVM: arm64: nv: Handle TLBI IPAS2E1{,IS} operations
      KVM: arm64: nv: Handle TLBI ALLE1{,IS} operations
      KVM: arm64: nv: Handle TLBI VMALLS12E1{,IS} operations
      KVM: arm64: nv: Handle TLB invalidation targeting L2 stage-1
      KVM: arm64: nv: Handle EL2 Stage-1 TLB invalidation
      KVM: arm64: nv: Add Stage-1 EL2 invalidation primitives
      KVM: arm64: nv: Unmap/flush shadow stage 2 page tables
      KVM: arm64: nv: Handle shadow stage 2 page faults
      KVM: arm64: nv: Implement nested Stage-2 page table walk logic
      KVM: arm64: nv: Support multiple nested Stage-2 mmu structures
    Signed-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
    435a9f60
arm.c 70.1 KB