• Jordan Niethe's avatar
    KVM: PPC: Book3s HV: Hold LPIDs in an unsigned long · dfcaacc8
    Jordan Niethe authored
    The LPID register is 32 bits long. The host keeps the lpids for each
    guest in an unsigned word struct kvm_arch. Currently, LPIDs are already
    limited by mmu_lpid_bits and KVM_MAX_NESTED_GUESTS_SHIFT.
    
    The nestedv2 API returns a 64 bit "Guest ID" to be used be the L1 host
    for each L2 guest. This value is used as an lpid, e.g. it is the
    parameter used by H_RPT_INVALIDATE. To minimize needless special casing
    it makes sense to keep this "Guest ID" in struct kvm_arch::lpid.
    
    This means that struct kvm_arch::lpid is too small so prepare for this
    and make it an unsigned long. This is not a problem for the KVM-HV and
    nestedv1 cases as their lpid values are already limited to valid ranges
    so in those contexts the lpid can be used as an unsigned word safely as
    needed.
    
    In the PAPR, the H_RPT_INVALIDATE pid/lpid parameter is already
    specified as an unsigned long so change pseries_rpt_invalidate() to
    match that.  Update the callers of pseries_rpt_invalidate() to also take
    an unsigned long if they take an lpid value.
    Signed-off-by: default avatarJordan Niethe <jniethe5@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    Link: https://msgid.link/20230914030600.16993-10-jniethe5@gmail.com
    dfcaacc8
book3s_hv_nested.c 43.5 KB