Received: by 2002:ab2:1347:0:b0:1f4:ac9d:b246 with SMTP id g7csp308559lqg; Thu, 11 Apr 2024 03:49:09 -0700 (PDT) X-Forwarded-Encrypted: i=3; AJvYcCXch7BfzIaXBT7wKOnjSHa7bn2WbnNv9UWh15AJuvwXftD9wI+kkIK7n+Kq/KpMomcuTMNwMd/0eooHkUBu6PcVexonKjVPgETuBAUmVQ== X-Google-Smtp-Source: AGHT+IEOQgZT4DYzI8mQglXx/zU9UD+sVo4TSLVZbGLv//voCIVbKt8pqJRMUXM7px+CUtpzAz0I X-Received: by 2002:a17:902:7ec1:b0:1e4:24bc:426e with SMTP id p1-20020a1709027ec100b001e424bc426emr4658118plb.28.1712832549269; Thu, 11 Apr 2024 03:49:09 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1712832549; cv=pass; d=google.com; s=arc-20160816; b=weu8A16a+GqoT2z/FaYIwk1Z0OWpmtjyqAfYqhhntuifVdZ0ioy/NKZGE3smUiFcXe TiSJX4kv/t3j0+KeasZ07mHrCRTtj3NBJlYtn9cCVymufTt1F+ynfx8ZOZh7SQsKPUq/ Zv728cUXIPtqWyCQOGu8dN+I6pqmUqrApw5yHZ1TxyI6QD+6o2glt/6zLqw5QoZFk6cU NofZopABCGfEzrQW3IlFm3I2T38ys1z7l+Ps4HGJrthQ3Eg7YN+bDvtfOYZlMBYvouRn v6RhKDmOVp/ZPozDiRlSOTgmXYJI05Y5qjKwbChN+szYrwBz9XHG4EM9E25oEqQo5iE6 bWAg== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:list-unsubscribe :list-subscribe:list-id:precedence:message-id:date:subject:cc:to :from:dkim-signature; bh=5bJYvDUX2KfCIM6eFKHOnKoI4RmxfSGwTtPT7g1dXZw=; fh=fTsvBGRCJ30wcbM+qukBwV1mBYwq/gxe2+STlSGXKvg=; b=DI20ON092GCbhQ8w7V0PfkHRLUpzLWRJV2FdLGhIHAt0FeZZTkjnhQEWnHHBzLNXyr Sjnba13t8YK6qxaHR9cmuKlPNjK6iGMxIcICdE3oheS6cs3LdsXvesihlKrQc0/VvG38 eiPuWBBSwsznZMQDtS8csTHoNkvYhRo9YLomYccLqbXoVxtZbjwgcRblpD/RSlhIO9QU oZuvs/PNfay8eMSCbtMsrj58NGlD7O867lCqSTJhHaZicIfNe3Mc65vkHpYCagCopDPu l/dlnxVyQce19cRbOX9biwHPNNJduZCYtvdKYiu6OAdXFMe3wuaKD5s/+mIXfQ+vb5bo uAuA==; dara=google.com ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@xry111.site header.s=default header.b=niilrmQB; arc=pass (i=1 spf=pass spfdomain=xry111.site dkim=pass dkdomain=xry111.site dmarc=pass fromdomain=xry111.site); spf=pass (google.com: domain of linux-kernel+bounces-140281-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-140281-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=xry111.site Return-Path: Received: from sv.mirrors.kernel.org (sv.mirrors.kernel.org. [139.178.88.99]) by mx.google.com with ESMTPS id mb12-20020a170903098c00b001e44c53feb6si1110855plb.437.2024.04.11.03.49.09 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 11 Apr 2024 03:49:09 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel+bounces-140281-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) client-ip=139.178.88.99; Authentication-Results: mx.google.com; dkim=pass header.i=@xry111.site header.s=default header.b=niilrmQB; arc=pass (i=1 spf=pass spfdomain=xry111.site dkim=pass dkdomain=xry111.site dmarc=pass fromdomain=xry111.site); spf=pass (google.com: domain of linux-kernel+bounces-140281-linux.lists.archive=gmail.com@vger.kernel.org designates 139.178.88.99 as permitted sender) smtp.mailfrom="linux-kernel+bounces-140281-linux.lists.archive=gmail.com@vger.kernel.org"; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=xry111.site Received: from smtp.subspace.kernel.org (wormhole.subspace.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by sv.mirrors.kernel.org (Postfix) with ESMTPS id E5C53281C97 for ; Thu, 11 Apr 2024 10:49:08 +0000 (UTC) Received: from localhost.localdomain (localhost.localdomain [127.0.0.1]) by smtp.subspace.kernel.org (Postfix) with ESMTP id 24C03146A70; Thu, 11 Apr 2024 10:49:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=xry111.site header.i=@xry111.site header.b="niilrmQB" Received: from xry111.site (xry111.site [89.208.246.23]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 97E631465BF for ; Thu, 11 Apr 2024 10:49:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=89.208.246.23 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712832545; cv=none; b=Nt/9CnlQYj3luhY3H5NCWEItOsF9bmk/oGWFCh0Se3KZiJDc/yBBF9oVdw2JtAO2rsAkaXvh8o1k/uVg8wacHrrIh40LmBpZnnjGzc4upuk+SIwavHwU2/KFdX5dOKvS8aSsSeMR9R0S3clcjli2zNHo68vVUvdvuRxVbcA3CmQ= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1712832545; c=relaxed/simple; bh=MrOaFdfd0no6fA3iEfcZVc5Tyeyaoc1HzzmZ0Zdsw8k=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=BErVQxiy3WOQVmmI/b8tRl+QsPm4lB6Q3Sl4bNHoabfF12g+vU9qHVhSwB/WuPs1jyqJCpaAo3Yn/fQ2YkGPbHXWNVHETlsDr50I/sEHvWDeiH8KiA8gKcPMvrI0ESYQNcRIgIMRZnSzAaGb60hKraPwf/zvlkOfddbDTp/IOOc= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=xry111.site; spf=pass smtp.mailfrom=xry111.site; dkim=pass (1024-bit key) header.d=xry111.site header.i=@xry111.site header.b=niilrmQB; arc=none smtp.client-ip=89.208.246.23 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=xry111.site Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=xry111.site DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=xry111.site; s=default; t=1712832540; bh=MrOaFdfd0no6fA3iEfcZVc5Tyeyaoc1HzzmZ0Zdsw8k=; h=From:To:Cc:Subject:Date:From; b=niilrmQBGqSrt0x0L7z9XzjM2aoiskbAQvHTeeg+Kf6+uyGkTyjAQ5W2TRvnqBalk KLXjj3Zp/1jn4xzQuMGtge2Q0IifBU9CDRDhE8jBr3BJc8uoa5A48Ies/Fd7vTXbLt UoyofD+86N09AClV9oaFKJ+KsaPZAu8vu2pgLtBw= Received: from stargazer.. (unknown [IPv6:240e:358:113e:f100:dc73:854d:832e:8]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (Client did not present a certificate) (Authenticated sender: xry111@xry111.site) by xry111.site (Postfix) with ESMTPSA id E080E67232; Thu, 11 Apr 2024 06:48:54 -0400 (EDT) From: Xi Ruoyao To: Dave Hansen , Michael Kelley , Pawan Gupta Cc: Andy Lutomirski , Peter Zijlstra , Thomas Gleixner , Ingo Molnar , Borislav Petkov , "H. Peter Anvin" , x86@kernel.org, linux-kernel@vger.kernel.org, Xi Ruoyao , Sean Christopherson , Andrew Cooper Subject: [PATCH v6] x86/mm: Don't disable INVLPG if "incomplete Global INVLPG flushes" is fixed by microcode or the kernel is running in a hypervisor Date: Thu, 11 Apr 2024 18:48:22 +0800 Message-ID: <20240411104822.6429-1-xry111@xry111.site> X-Mailer: git-send-email 2.44.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Per the "Processor Specification Update" documentations referred by the intel-microcode-20240312 release note, this microcode release has fixed the issue for all affected models. So don't disable INVLPG if the microcode is new enough. The precise minimum microcode revision fixing the issue is provided by engineer from Intel. And the erratum 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. Cc: Dave Hansen Cc: Michael Kelley Cc: Pawan Gupta Cc: Sean Christopherson Cc: Andrew Cooper Link: https://lore.kernel.org/all/168436059559.404.13934972543631851306.tip-bot2@tip-bot2/ Link: https://github.com/intel/Intel-Linux-Processor-Microcode-Data-Files/releases/tag/microcode-20240312 Link: https://cdrdv2.intel.com/v1/dl/getContent/740518 # RPL042, rev. 13 Link: https://cdrdv2.intel.com/v1/dl/getContent/682436 # ADL063, rev. 24 Link: https://lore.kernel.org/all/20240325231300.qrltbzf6twm43ftb@desk/ Signed-off-by: Xi Ruoyao --- arch/x86/mm/init.c | 41 +++++++++++++++++++++++++++++------------ 1 file changed, 29 insertions(+), 12 deletions(-) diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c index 679893ea5e68..e69d227ea123 100644 --- a/arch/x86/mm/init.c +++ b/arch/x86/mm/init.c @@ -261,33 +261,50 @@ static void __init probe_page_size_mask(void) } } -#define INTEL_MATCH(_model) { .vendor = X86_VENDOR_INTEL, \ - .family = 6, \ - .model = _model, \ - } +#define INTEL_MATCH(_model, _fixed_microcode) \ + { \ + .vendor = X86_VENDOR_INTEL, \ + .family = 6, \ + .model = _model, \ + .driver_data = _fixed_microcode, \ + } + /* * INVLPG may not properly flush Global entries - * on these CPUs when PCIDs are enabled. + * on these CPUs when PCIDs are enabled and the + * microcode is not updated to fix the issue. */ static const struct x86_cpu_id invlpg_miss_ids[] = { - INTEL_MATCH(INTEL_FAM6_ALDERLAKE ), - INTEL_MATCH(INTEL_FAM6_ALDERLAKE_L ), - INTEL_MATCH(INTEL_FAM6_ATOM_GRACEMONT ), - INTEL_MATCH(INTEL_FAM6_RAPTORLAKE ), - INTEL_MATCH(INTEL_FAM6_RAPTORLAKE_P), - INTEL_MATCH(INTEL_FAM6_RAPTORLAKE_S), + INTEL_MATCH(INTEL_FAM6_ALDERLAKE, 0x2e), + INTEL_MATCH(INTEL_FAM6_ALDERLAKE_L, 0x42c), + INTEL_MATCH(INTEL_FAM6_ATOM_GRACEMONT, 0x11), + INTEL_MATCH(INTEL_FAM6_RAPTORLAKE, 0x118), + INTEL_MATCH(INTEL_FAM6_RAPTORLAKE_P, 0x4117), + INTEL_MATCH(INTEL_FAM6_RAPTORLAKE_S, 0x2e), {} }; static void setup_pcid(void) { + const struct x86_cpu_id *invlpg_miss_match; + if (!IS_ENABLED(CONFIG_X86_64)) return; if (!boot_cpu_has(X86_FEATURE_PCID)) return; - if (x86_match_cpu(invlpg_miss_ids)) { + invlpg_miss_match = x86_match_cpu(invlpg_miss_ids); + + /* + * 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); return; -- 2.44.0