From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 83971C021B5 for ; Fri, 21 Feb 2025 18:04:41 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1D30A28000B; Fri, 21 Feb 2025 13:04:41 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 18355280001; Fri, 21 Feb 2025 13:04:41 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 04BAA28000B; Fri, 21 Feb 2025 13:04:41 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0013.hostedemail.com [216.40.44.13]) by kanga.kvack.org (Postfix) with ESMTP id DA5B6280001 for ; Fri, 21 Feb 2025 13:04:40 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay01.hostedemail.com (Postfix) with ESMTP id 6697B1CC06E for ; Fri, 21 Feb 2025 18:04:40 +0000 (UTC) X-FDA: 83144727120.09.05D6323 Received: from shelob.surriel.com (shelob.surriel.com [96.67.55.147]) by imf11.hostedemail.com (Postfix) with ESMTP id B161C40036 for ; Fri, 21 Feb 2025 18:04:37 +0000 (UTC) Authentication-Results: imf11.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf11.hostedemail.com: domain of riel@shelob.surriel.com designates 96.67.55.147 as permitted sender) smtp.mailfrom=riel@shelob.surriel.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740161078; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=SMrTPVFkaiz1Gl14Dw90w6ze0gbn37hwlc7WbFIxRcg=; b=SL8+vpmS6Egj9kV6AyeAf2kd1WEbGKGB00TNU7G0qWyOHft062VxArcq7rnGsQw3C76UD7 WQW87sKleM/aCDlGkTN/F+RmSmqGsrY7XbeGT3rz+lhSNyelxkfM4QJD6Qx01xB5nvzVD6 LBvX4X6xu902tjUJFjzjiIHCpVuF5/g= ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740161078; a=rsa-sha256; cv=none; b=0mKGrYeaJNEkF82703Uz05xV01AZWHXCHGt2ipXl7SpuK6XXtiX5BwnUnk9xb8s9/850fC aL9tgmB4PTAFUrvrR9NfySxEzCxT3NHADKXpmIOFCG7UYBeI8flUyn1+nbpmCxGQUglGiZ sxOgxrQm6hQNmjC3cyPnHKSJzSaXB8k= ARC-Authentication-Results: i=1; imf11.hostedemail.com; dkim=none; dmarc=none; spf=pass (imf11.hostedemail.com: domain of riel@shelob.surriel.com designates 96.67.55.147 as permitted sender) smtp.mailfrom=riel@shelob.surriel.com Received: from [2601:18c:8180:83cc:5a47:caff:fe78:8708] (helo=fangorn) by shelob.surriel.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.97.1) (envelope-from ) id 1tlXMx-000000006Py-0uBL; Fri, 21 Feb 2025 13:03:23 -0500 Date: Fri, 21 Feb 2025 13:03:22 -0500 From: Rik van Riel To: Borislav Petkov Cc: x86@kernel.org, linux-kernel@vger.kernel.org, peterz@infradead.org, dave.hansen@linux.intel.com, zhengqi.arch@bytedance.com, nadav.amit@gmail.com, thomas.lendacky@amd.com, kernel-team@meta.com, linux-mm@kvack.org, akpm@linux-foundation.org, jackmanb@google.com, jannh@google.com, mhklinux@outlook.com, andrew.cooper3@citrix.com, Manali.Shukla@amd.com, Dave Hansen Subject: Re: [PATCH v12.1 04/16] x86/mm: get INVLPGB count max from CPUID Message-ID: <20250221130322.1c87b284@fangorn> In-Reply-To: <20250221015801.GHZ7fdqaGFEvsG6qW1@fat_crate.local> References: <20250221005345.2156760-1-riel@surriel.com> <20250221005345.2156760-5-riel@surriel.com> <20250221015801.GHZ7fdqaGFEvsG6qW1@fat_crate.local> X-Mailer: Claws Mail 4.3.0 (GTK 3.24.43; x86_64-redhat-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable X-Rspam-User: X-Rspamd-Queue-Id: B161C40036 X-Rspamd-Server: rspam07 X-Stat-Signature: w7tgy15tc15sdbbsrdguctjkfc33dsjr X-HE-Tag: 1740161077-265732 X-HE-Meta: U2FsdGVkX1/lJUwIngN4RI05EYNulyVC3HDqmw8dueqPe3Wd7zBEZPNbSHrIVeGz8wwN/nkeE3FZ3s5HE+e3DC/k/D6dX+7MoC8z8P8LlYGrgY+dI0aFHCAUQKT0GBWO641nsl3lNCNVBGmkbRtDYlQ0k7Q8NrdQTfh4IF8Mm4K2KPCyqaejzZ4Gg4PLSDg8rbmYba70yAtP981DBCcNr+A2H+LTcgEUFzka9+0vXeFILfHoa8VQJBUzc9Nn1fMYOFtLDKOQbXBkUWy+UC7MWZAmCoG9KOse/uG3KxUkSVucxv9bAIqHW0U0GvT0qbmCwb/v1hemlajECNOUT4jBFqVnjditDZY6KSMAi4Se6syuHrvD4yOXxACPHhFMkOkUaGGBYK3s2jNWpXa+tgsY8Bb0jhUKrW0Fx1XjAXj/36r/EIocElh3vkfDHRISEGTG0UEx06FjHubWf2cYx5iaY72YSJ/SytCMfNdNudVhZHbweth2N45qdefdOdTw2LVxtgvOrLNzbq9ZtMXZYFLpKCxGrInKluQQAzubdLr/xPpm4H1obKIZIlCLbS9uirxQPUe3eHZvkNsuV0wGkLIwD3ZFuHx/D1194CASwgIYxQ4Ytnmn/zjUhJXjtl2GSjb5XHuERs+BZ5F8jEpkDkzXYRDzNIxBlwMSO59vJOl2/1xIcMh0uuaFLO9JLS1TkfCVYQgbaZ9/QFAn9BMNfGiZlDnLKt492SxVo3A1GS4IJltONnCfjn8dnho1phWn8ZhcrQpJvq8uKgqU6gwBy0orm30Tl36LXWgXAPwF1jjbHNhjd5svW3I+61/vtbeLPaFlNGhQOm1SCpk8qhMdw9OqS1562Vr444jMySxnPnf4aGGBicKI2r0qthQaodpjDzFMhYL7Js3Ck6KGpLvAUUBsO5WJaYA73VisgiM4wXQTidIqCC+r68VeDrAMjhwNujHbHNLLN+60MRfirZLVtwy H/oE5Jen vyBu1AkMu27l1kCAMOQxrvBRNqD6pSWBT2AnmCUQ11x9zGk6fxNeiVRRihlPsU+q0ti2ywqOv2avM8lk26zgQxxCdBZ8SrTwI8yZLzRkzo1DCT6iLDJE0Y9RHUI3xRrKTO1aYcf0qU+yTzCv8mkEutT8fx/6kRyUYHRV2XrUGOWxtUXKHNnTFhnb9vq1KU7m1bor78Rk0vEHew7aUB+gdLYqxJ3cCgHw/PAnyi7nCT7FXlQ4hNQX+VVUHIn68FySyMMAjFOvaLOPOE9HZ9YHrVRWrycOb2YXD88tuzD9tg+feZ62b4uXR8fdbvfH6eDQTzKK+FQb98AGOYeeqIi4zSbD4Nc8rkHEShYdHImOxQOagtWH5VfJyqAwnv3lrvbUCNAXkyWcZWIXS0oFaACHnn1a6W80cbifB2l1ksbpGrk6yfBEE+UYP/BbfKE7w/s9cpAQV385eHjudEPzl8b/7OCaKRmhvs8SfyFRiHHBjY+Z5YM90cEYQDvRshFxhE3QTVGnn X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Fri, 21 Feb 2025 02:58:01 +0100 Borislav Petkov wrote: > CPU_SUP_AMD selects X86_BROADCAST_TLB_FLUSH which depends on CPU_SUP_AMD = which > selects X86_BROADCAST_TLB_FLUSH which depends on CPU_SUP_AMD... >=20 > You need to make up your mind in which way the dependency should be. Cert= ainly > not circular. I've attached the new version below: ---8<--- =46rom 8da3d9f792427e434900a45e6d6391b28cf834d1 Mon Sep 17 00:00:00 2001 From: Rik van Riel Date: Thu, 20 Feb 2025 21:25:08 -0500 Subject: [PATCH 04/16] x86/mm: get INVLPGB count max from CPUID The CPU advertises the maximum number of pages that can be shot down with one INVLPGB instruction in the CPUID data. Save that information for later use. Signed-off-by: Rik van Riel Tested-by: Manali Shukla Tested-by: Brendan Jackman Tested-by: Michael Kelley Acked-by: Dave Hansen --- arch/x86/Kconfig.cpu | 5 +++++ arch/x86/include/asm/cpufeatures.h | 1 + arch/x86/include/asm/tlbflush.h | 3 +++ arch/x86/kernel/cpu/common.c | 3 +++ 4 files changed, 12 insertions(+) diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu index 2a7279d80460..c371b94aa5d7 100644 --- a/arch/x86/Kconfig.cpu +++ b/arch/x86/Kconfig.cpu @@ -401,6 +401,10 @@ menuconfig PROCESSOR_SELECT This lets you choose what x86 vendor support code your kernel will include. =20 +config X86_BROADCAST_TLB_FLUSH + def_bool y + depends on 64BIT + config CPU_SUP_INTEL default y bool "Support Intel processors" if PROCESSOR_SELECT @@ -431,6 +435,7 @@ config CPU_SUP_CYRIX_32 config CPU_SUP_AMD default y bool "Support AMD processors" if PROCESSOR_SELECT + select X86_BROADCAST_TLB_FLUSH help This enables detection, tunings and quirks for AMD processors =20 diff --git a/arch/x86/include/asm/cpufeatures.h b/arch/x86/include/asm/cpuf= eatures.h index 508c0dad116b..b5c66b7465ba 100644 --- a/arch/x86/include/asm/cpufeatures.h +++ b/arch/x86/include/asm/cpufeatures.h @@ -338,6 +338,7 @@ #define X86_FEATURE_CLZERO (13*32+ 0) /* "clzero" CLZERO instruction */ #define X86_FEATURE_IRPERF (13*32+ 1) /* "irperf" Instructions Retired Co= unt */ #define X86_FEATURE_XSAVEERPTR (13*32+ 2) /* "xsaveerptr" Always save/res= tore FP error pointers */ +#define X86_FEATURE_INVLPGB (13*32+ 3) /* INVLPGB and TLBSYNC instruction= supported. */ #define X86_FEATURE_RDPRU (13*32+ 4) /* "rdpru" Read processor register a= t user level */ #define X86_FEATURE_WBNOINVD (13*32+ 9) /* "wbnoinvd" WBNOINVD instructio= n */ #define X86_FEATURE_AMD_IBPB (13*32+12) /* Indirect Branch Prediction Bar= rier */ diff --git a/arch/x86/include/asm/tlbflush.h b/arch/x86/include/asm/tlbflus= h.h index 3da645139748..09463a2fb05f 100644 --- a/arch/x86/include/asm/tlbflush.h +++ b/arch/x86/include/asm/tlbflush.h @@ -183,6 +183,9 @@ static inline void cr4_init_shadow(void) extern unsigned long mmu_cr4_features; extern u32 *trampoline_cr4_features; =20 +/* How many pages can we invalidate with one INVLPGB. */ +extern u16 invlpgb_count_max; + extern void initialize_tlbstate_and_flush(void); =20 /* diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c index 7cce91b19fb2..742bdb0c4846 100644 --- a/arch/x86/kernel/cpu/common.c +++ b/arch/x86/kernel/cpu/common.c @@ -95,6 +95,8 @@ EXPORT_SYMBOL(__num_cores_per_package); unsigned int __num_threads_per_package __ro_after_init =3D 1; EXPORT_SYMBOL(__num_threads_per_package); =20 +u16 invlpgb_count_max __ro_after_init; + static struct ppin_info { int feature; int msr_ppin_ctl; @@ -1030,6 +1032,7 @@ void get_cpu_cap(struct cpuinfo_x86 *c) if (c->extended_cpuid_level >=3D 0x80000008) { cpuid(0x80000008, &eax, &ebx, &ecx, &edx); c->x86_capability[CPUID_8000_0008_EBX] =3D ebx; + invlpgb_count_max =3D (edx & 0xffff) + 1; } =20 if (c->extended_cpuid_level >=3D 0x8000000a) --=20 2.47.1