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 07C79C021B2 for ; Sat, 22 Feb 2025 03:36:56 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DFD1E6B007B; Fri, 21 Feb 2025 22:36:55 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id D861C6B0082; Fri, 21 Feb 2025 22:36:55 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id C268E6B0083; Fri, 21 Feb 2025 22:36:55 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0010.hostedemail.com [216.40.44.10]) by kanga.kvack.org (Postfix) with ESMTP id A47AE6B007B for ; Fri, 21 Feb 2025 22:36:55 -0500 (EST) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay03.hostedemail.com (Postfix) with ESMTP id 528ACA339D for ; Sat, 22 Feb 2025 03:36:55 +0000 (UTC) X-FDA: 83146169190.30.F46AFB7 Received: from shelob.surriel.com (shelob.surriel.com [96.67.55.147]) by imf10.hostedemail.com (Postfix) with ESMTP id B7A10C0005 for ; Sat, 22 Feb 2025 03:36:52 +0000 (UTC) Authentication-Results: imf10.hostedemail.com; dkim=none; spf=pass (imf10.hostedemail.com: domain of riel@shelob.surriel.com designates 96.67.55.147 as permitted sender) smtp.mailfrom=riel@shelob.surriel.com; dmarc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740195412; 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=RkZP8nt848aem6HxHAVFNYWpESlKbswv91gahOVEysA=; b=hZc71b+ODfBCeCJofBagGhMuFv71OjE3znpFQHJSJWn8e/BZE6xSM5ErxNida1pq0OKgew cAXyFbuFtYENfl6/EIhobDfPdaUwgHe8JIazfzRrvdVfVSdRKpk2DGLSqo+SvFF8BXkL0q 5Z3Ud6G+o4L2lK8ve0WuRk+7+kEB3Wk= ARC-Authentication-Results: i=1; imf10.hostedemail.com; dkim=none; spf=pass (imf10.hostedemail.com: domain of riel@shelob.surriel.com designates 96.67.55.147 as permitted sender) smtp.mailfrom=riel@shelob.surriel.com; dmarc=none ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1740195412; a=rsa-sha256; cv=none; b=HQ7X9hk0eReZpgPQIByTPJ4en6NgPHj7eDysFFd3YpBK4UF+BJZ0KLyhR0YEAqoE13Ci2s 301gAObeFEqvCH0iPDoRO01+Pv6EVvchv2IQJc4JdJghpQYQUvB3Gv4u1XKaJuSpCeXt/8 K6nJuBeenziyfEOu0+CBmUG0CDX34GU= 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 1tlgIK-000000002Cc-10FN; Fri, 21 Feb 2025 22:35:12 -0500 Date: Fri, 21 Feb 2025 22:35:11 -0500 From: Rik van Riel To: Tom Lendacky Cc: Borislav Petkov , x86@kernel.org, linux-kernel@vger.kernel.org, peterz@infradead.org, dave.hansen@linux.intel.com, zhengqi.arch@bytedance.com, nadav.amit@gmail.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.2 04/16] x86/mm: get INVLPGB count max from CPUID Message-ID: <20250221223511.10f98927@fangorn> In-Reply-To: <2435a1ed-d8dc-935b-9e96-b709d785a46a@amd.com> References: <20250221005345.2156760-1-riel@surriel.com> <20250221005345.2156760-5-riel@surriel.com> <20250221015801.GHZ7fdqaGFEvsG6qW1@fat_crate.local> <20250221130322.1c87b284@fangorn> <2435a1ed-d8dc-935b-9e96-b709d785a46a@amd.com> 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: B7A10C0005 X-Stat-Signature: cwrd8rd374kz9dnssrdbdk8gbt78bdn7 X-Rspamd-Server: rspam03 X-HE-Tag: 1740195412-380192 X-HE-Meta: U2FsdGVkX1/Xw4s4imrMwUxl3hviL0ess3qUlh4p0QQAP5U8EYj8xNikfw7MqxqwWFGn2TGQkeHYRdqQHuSicFFPvwKkgVxa5gO0mf/oHPamAHOV67+J5O8yvePNbpeUT3ik/fQJ+P8QZTJlRh2LMy2yJwXc0aNXPhxBah7fyMSusCslfCppFIWdiEdKN+Uxo5kBXASKsbVsrlkjxGL/lkdgmlJ2LxMdx7X9qbR2PviHEAeiL/B6iwPhFbAK8mHy6iGHbvLtHbtzRD+gJ5Uo7xF3jltWusx+jbuoHxxKQDaTRm5oMLZ4r9oEHfvbUHvPV3zKt1SYg0TFv1IKCwd1MnECX9q8PtqNttUCoQeQY4MAubIHsUD1gW7bycG1etBNTgV6RRzJ30HP1+OcEuyg4u2zzx0ck/vdC7uTIRsLuMYwiQKbpzcGsJVg6u+nQHT6nGamNfSG20k+KdUpsUe2Pvb7k5ULj/Mcb3Wb6b47BIYBHUFeddcSTpxrlv9k3JoiejwHBWm6O8KxLhnUUSlJ9OFGdHjgAcOJLhL+AO+tbTn4bGETlFNFDor0LYg7jym+XB6icEorfh1T75MgVYB2ZNCVuOQcPhRIxe3E3MZXcs5oPSUPTm5Y0xVa8YHqRZ8qdxAU1WgDeonFaH2KIPb26+/WD8zLWjS32bp3iOwdVPWxpxWtyE8tpRd8A+WUS1NRfLvHTm8EsaQgUwgUvNBLmWpSSQp/6hHj8xL/BB0lhmlvSkrNbeAiFNWcQeMG3tVEnZ3OysP9/gJd8ZRRJvi1wEaxyhj1kNdBoeiska/My8xAVwe51GAnjRNcZSaxV498MB5e/dtOuQhPaByErPCkG3sKoPD6MKUoMBm/Ue9JRCSZmqVHjTU9ENcGPjLPXqN8lAlCOzBvsQVYaTyXvAfpaPxeNA1V8RIuC4iWy9IYoWVuMq5c9SljP+rDkW9zUAjs4CN/zXlLTjQd2AJOn9C J5kjT5TT dBdRvi1L9KYDmJHg9xjblZXj4pe/9pfd5SuzDy5e/usdiUQ2DEzmyS018JBbKnLrUUGiCc1AwqMxuMLW7ZBWKNlVj+QB9hLiP8PLrKN12HAXVaSMGjaT8PAPRk1R4ax67dZE1CFo/d/4rRW8q+GuMbFKQTzwstZa0whT4QSlAYeW2Tk9a1vgHmkKY2EVHwsu2fXXSaKp0qzfYzGDsBvHhg0CCfE32P1T1qMmQSf/e2J9ZCkx2+lnh3r68XMO7H+PK5SsYJoFutZjvxjjlBprW2PS8hxZJG8YnhrIBN2f7HEmJjE6+CSzBcMIgi7HrDT8Vc00r+m6sBLo6pCX/7WWupstKAtG9dSfmbi+UVEUyygfx3ix1qXp5ez7FkyiUcU+jllzuLufiDCyMy3aVacA1Ix3jjg8Krqu3JZmMIgpECRXDkiXeX6AccPbb6ShY7efLvk3uQn/VwiJd4j8/Vqg1tXIjIRSj7V4dH44vK2VVo/nr3x8gWfKQp1zprsmC2/YLlxIt 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 12:41:40 -0600 Tom Lendacky wrote: > I think what you really want is: >=20 > depends on CPU_SUP_AMD && 64BIT >=20 > And then delete the select X86_BROADCAST_TLB_FLUSH below. >=20 > Otherwise, won't it be y even if CPU_SUP_AMD isn't y? I think you're right. Good catch. I currently have this in my tree: ---8<--- =46rom 49edabe3a1f338b4386c41ff5d378584a320e3db Mon Sep 17 00:00:00 2001 From: Rik van Riel Date: Fri, 21 Feb 2025 15:28:39 -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 | 4 ++++ arch/x86/include/asm/cpufeatures.h | 1 + arch/x86/include/asm/tlbflush.h | 3 +++ arch/x86/kernel/cpu/common.c | 3 +++ 4 files changed, 11 insertions(+) diff --git a/arch/x86/Kconfig.cpu b/arch/x86/Kconfig.cpu index 2a7279d80460..981def9cbfac 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 CPU_SUP_AMD && 64BIT + config CPU_SUP_INTEL default y bool "Support Intel processors" if PROCESSOR_SELECT 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