• Gerd Hoffmann's avatar
    KVM: x86: Advertise max mappable GPA in CPUID.0x80000008.GuestPhysBits · b628cb52
    Gerd Hoffmann authored
    Use the GuestPhysBits field in CPUID.0x80000008 to communicate the max
    mappable GPA to userspace, i.e. the max GPA that is addressable by the
    CPU itself.  Typically this is identical to the max effective GPA, except
    in the case where the CPU supports MAXPHYADDR > 48 but does not support
    5-level TDP (the CPU consults bits 51:48 of the GPA only when walking the
    fifth level TDP page table entry).
    
    Enumerating the max mappable GPA via CPUID will allow guest firmware to
    map resources like PCI bars in the highest possible address space, while
    ensuring that the GPA is addressable by the CPU.  Without precise
    knowledge about the max mappable GPA, the guest must assume that 5-level
    paging is unsupported and thus restrict its mappings to the lower 48 bits.
    
    Advertise the max mappable GPA via KVM_GET_SUPPORTED_CPUID as userspace
    doesn't have easy access to whether or not 5-level paging is supported,
    and to play nice with userspace VMMs that reflect the supported CPUID
    directly into the guest.
    
    AMD's APM (3.35) defines GuestPhysBits (EAX[23:16]) as:
    
      Maximum guest physical address size in bits.  This number applies
      only to guests using nested paging.  When this field is zero, refer
      to the PhysAddrSize field for the maximum guest physical address size.
    
    Tom Lendacky confirmed that the purpose of GuestPhysBits is software use
    and KVM can use it as described above.  Real hardware always returns zero.
    
    Leave GuestPhysBits as '0' when TDP is disabled in order to comply with
    the APM's statement that GuestPhysBits "applies only to guest using nested
    paging".  As above, guest firmware will likely create suboptimal mappings,
    but that is a very minor issue and not a functional concern.
    Signed-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
    Reviewed-by: default avatarXiaoyao Li <xiaoyao.li@intel.com>
    Link: https://lore.kernel.org/r/20240313125844.912415-3-kraxel@redhat.com
    [sean: massage changelog]
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    b628cb52
mmu.h 10 KB