• Vitaly Kuznetsov's avatar
    x86/hyperv: Stop suppressing X86_FEATURE_PCID · 617ab45c
    Vitaly Kuznetsov authored
    When hypercall-based TLB flush was enabled for Hyper-V guests PCID feature
    was deliberately suppressed as a precaution: back then PCID was never
    exposed to Hyper-V guests and it wasn't clear what will happen if some day
    it becomes available. The day came and PCID/INVPCID features are already
    exposed on certain Hyper-V hosts.
    
    From TLFS (as of 5.0b) it is unclear how TLB flush hypercalls combine with
    PCID. In particular the usage of PCID is per-cpu based: the same mm gets
    different CR3 values on different CPUs. If the hypercall does exact
    matching this will fail. However, this is not the case. David Zhang
    explains:
    
     "In practice, the AddressSpace argument is ignored on any VM that supports
      PCIDs.
    
      Architecturally, the AddressSpace argument must match the CR3 with PCID
      bits stripped out (i.e., the low 12 bits of AddressSpace should be 0 in
      long mode). The flush hypercalls flush all PCIDs for the specified
      AddressSpace."
    
    With this, PCID can be enabled.
    Signed-off-by: default avatarVitaly Kuznetsov <vkuznets@redhat.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: David Zhang <dazhan@microsoft.com>
    Cc: Stephen Hemminger <sthemmin@microsoft.com>
    Cc: Haiyang Zhang <haiyangz@microsoft.com>
    Cc: "Michael Kelley (EOSG)" <Michael.H.Kelley@microsoft.com>
    Cc: Andy Lutomirski <luto@kernel.org>
    Cc: devel@linuxdriverproject.org
    Cc: "K. Y. Srinivasan" <kys@microsoft.com>
    Cc: Aditya Bhandari <adityabh@microsoft.com>
    Link: https://lkml.kernel.org/r/20180124103629.29980-1-vkuznets@redhat.com
    617ab45c
mmu.c 7.57 KB