• Xiaoyao Li's avatar
    x86/kvm: Use separate percpu variable to track the enabling of asyncpf · ccb2280e
    Xiaoyao Li authored
    Refer to commit fd10cde9 ("KVM paravirt: Add async PF initialization
    to PV guest") and commit 344d9588 ("KVM: Add PV MSR to enable
    asynchronous page faults delivery"). It turns out that at the time when
    asyncpf was introduced, the purpose was defining the shared PV data 'struct
    kvm_vcpu_pv_apf_data' with the size of 64 bytes. However, it made a mistake
    and defined the size to 68 bytes, which failed to make fit in a cache line
    and made the code inconsistent with the documentation.
    
    Below justification quoted from Sean[*]
    
      KVM (the host side) has *never* read kvm_vcpu_pv_apf_data.enabled, and
      the documentation clearly states that enabling is based solely on the
      bit in the synthetic MSR.
    
      So rather than update the documentation, fix the goof by removing the
      enabled filed and use the separate percpu variable instread.
      KVM-as-a-host obviously doesn't enforce anything or consume the size,
      and changing the header will only affect guests that are rebuilt against
      the new header, so there's no chance of ABI breakage between KVM and its
      guests. The only possible breakage is if some other hypervisor is
      emulating KVM's async #PF (LOL) and relies on the guest to set
      kvm_vcpu_pv_apf_data.enabled. But (a) I highly doubt such a hypervisor
      exists, (b) that would arguably be a violation of KVM's "spec", and
      (c) the worst case scenario is that the guest would simply lose async
      #PF functionality.
    
    [*] https://lore.kernel.org/all/ZS7ERnnRqs8Fl0ZF@google.com/T/#uSuggested-by: default avatarSean Christopherson <seanjc@google.com>
    Signed-off-by: default avatarXiaoyao Li <xiaoyao.li@intel.com>
    Link: https://lore.kernel.org/r/20231025055914.1201792-2-xiaoyao.li@intel.com
    [sean: use true/false instead of 1/0 for booleans]
    Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
    ccb2280e
msr.rst 13.4 KB