This is a note to let you know that I've just added the patch titled x86/hyperv: Stop suppressing X86_FEATURE_PCID
to the 4.14-stable tree which can be found at: http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary The filename of the patch is: x86-hyperv-stop-suppressing-x86_feature_pcid.patch and it can be found in the queue-4.14 subdirectory. If you, or anyone else, feels it should not be added to the stable tree, please let <sta...@vger.kernel.org> know about it. >From foo@baz Tue Apr 24 15:29:20 CEST 2018 From: Vitaly Kuznetsov <vkuzn...@redhat.com> Date: Wed, 24 Jan 2018 11:36:29 +0100 Subject: x86/hyperv: Stop suppressing X86_FEATURE_PCID From: Vitaly Kuznetsov <vkuzn...@redhat.com> [ Upstream commit 617ab45c9a8900e64a78b43696c02598b8cad68b ] 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: Vitaly Kuznetsov <vkuzn...@redhat.com> Signed-off-by: Thomas Gleixner <t...@linutronix.de> Cc: David Zhang <daz...@microsoft.com> Cc: Stephen Hemminger <sthem...@microsoft.com> Cc: Haiyang Zhang <haiya...@microsoft.com> Cc: "Michael Kelley (EOSG)" <michael.h.kel...@microsoft.com> Cc: Andy Lutomirski <l...@kernel.org> Cc: de...@linuxdriverproject.org Cc: "K. Y. Srinivasan" <k...@microsoft.com> Cc: Aditya Bhandari <adity...@microsoft.com> Link: https://lkml.kernel.org/r/20180124103629.29980-1-vkuzn...@redhat.com Signed-off-by: Sasha Levin <alexander.le...@microsoft.com> Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org> --- arch/x86/hyperv/mmu.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) --- a/arch/x86/hyperv/mmu.c +++ b/arch/x86/hyperv/mmu.c @@ -137,7 +137,12 @@ static void hyperv_flush_tlb_others(cons } if (info->mm) { + /* + * AddressSpace argument must match the CR3 with PCID bits + * stripped out. + */ flush->address_space = virt_to_phys(info->mm->pgd); + flush->address_space &= CR3_ADDR_MASK; flush->flags = 0; } else { flush->address_space = 0; @@ -219,7 +224,12 @@ static void hyperv_flush_tlb_others_ex(c } if (info->mm) { + /* + * AddressSpace argument must match the CR3 with PCID bits + * stripped out. + */ flush->address_space = virt_to_phys(info->mm->pgd); + flush->address_space &= CR3_ADDR_MASK; flush->flags = 0; } else { flush->address_space = 0; @@ -278,8 +288,6 @@ void hyperv_setup_mmu_ops(void) if (!(ms_hyperv.hints & HV_X64_REMOTE_TLB_FLUSH_RECOMMENDED)) return; - setup_clear_cpu_cap(X86_FEATURE_PCID); - if (!(ms_hyperv.hints & HV_X64_EX_PROCESSOR_MASKS_RECOMMENDED)) { pr_info("Using hypercall for remote TLB flush\n"); pv_mmu_ops.flush_tlb_others = hyperv_flush_tlb_others; Patches currently in stable-queue which might be from vkuzn...@redhat.com are queue-4.14/x86-hyperv-stop-suppressing-x86_feature_pcid.patch queue-4.14/x86-kvm-vmx-do-not-use-vm-exit-instruction-length-for-fast-mmio-when-running-nested.patch queue-4.14/x86-hyperv-check-for-required-priviliges-in-hyperv_init.patch _______________________________________________ devel mailing list de...@linuxdriverproject.org http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel