Messages in this thread Patch in this message | | | From | Xi Ruoyao <> | Subject | [PATCH v7 2/2] x86/mm: Don't disable INVLPG if the kernel is running on a hypervisor | Date | Thu, 11 Apr 2024 22:43:22 +0800 |
| |
The Intel erratum for "incomplete Global INVLPG flushes" says:
This erratum does not apply in VMX non-root operation. It applies only when PCIDs are enabled and either in VMX root operation or outside VMX operation.
So if the kernel is running in a hypervisor, we are in VMX non-root operation and we should be safe to use INVLPG.
Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: Michael Kelley <mhklinux@outlook.com> Cc: Pawan Gupta <pawan.kumar.gupta@linux.intel.com> Cc: Sean Christopherson <seanjc@google.com> Cc: Andrew Cooper <andrew.cooper3@citrix.com> Link: https://lore.kernel.org/all/168436059559.404.13934972543631851306.tip-bot2@tip-bot2/ Link: https://cdrdv2.intel.com/v1/dl/getContent/740518 # RPL042, rev. 13 Link: https://cdrdv2.intel.com/v1/dl/getContent/682436 # ADL063, rev. 24 Signed-off-by: Xi Ruoyao <xry111@xry111.site> --- arch/x86/mm/init.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c index c318cdc35467..e69d227ea123 100644 --- a/arch/x86/mm/init.c +++ b/arch/x86/mm/init.c @@ -296,7 +296,14 @@ static void setup_pcid(void) invlpg_miss_match = x86_match_cpu(invlpg_miss_ids); - if (invlpg_miss_match && + /* + * The Intel errata claims: "this erratum does not apply in VMX + * non-root operation. It applies only when PCIDs are enabled + * and either in VMX root operation or outside VMX operation." + * So we are safe if we are surely running in a hypervisor. + */ + if (!boot_cpu_has(X86_FEATURE_HYPERVISOR) && + invlpg_miss_match && boot_cpu_data.microcode < invlpg_miss_match->driver_data) { pr_info("Incomplete global flushes, disabling PCID"); setup_clear_cpu_cap(X86_FEATURE_PCID); -- 2.44.0
| |