Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp535704rwb; Thu, 10 Nov 2022 04:25:02 -0800 (PST) X-Google-Smtp-Source: AMsMyM5OPq/S3q9NQkvy8vVbgg54g+rZvmkw7eWpNCV1SFMThRG+fup8GhKBHfSaO7ibfKRCYYLq X-Received: by 2002:a05:6a02:207:b0:46f:53ca:cab8 with SMTP id bh7-20020a056a02020700b0046f53cacab8mr53602849pgb.242.1668083102657; Thu, 10 Nov 2022 04:25:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1668083102; cv=none; d=google.com; s=arc-20160816; b=CFZ9UzhEWJPrte2vb191LD3JbK0uTECxH02heBd5JgEm4CF25V224RHOJx1B+9DpPU PABqg87vzQcIvxbxiB1eFDp/yhgeAYkxBh6THBshbN6dr34o87kGw/XglxgiGmrRly/J 3JP7wH/smK2bkDlxGuCX5+XyDa6Tg5nOvMan5G1p1ZzRrObYCt2v4vrBo6LhwRoLaaBL ZH3bRns42JZEbIeaPowXvNu10aB4p6yfXO58iJgNjdCFd9wl+w5h8gejy5xZyBNhqZ7p 6arPk2UfO5X6a58aEqHRFP5pyBe8uLtzm0YyR6PAl+dOY+ua1a2fPFE9z7RGaHwGdJdv eDpg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:robot-unsubscribe :robot-id:message-id:mime-version:references:in-reply-to:cc:subject :to:reply-to:sender:from:dkim-signature:dkim-signature:date; bh=tV/NJzlD6MkwFiPfqG2D/PJiggHs2S5WYz2H+Qe/tIY=; b=WatC4t2VzhqYKQxvX1Y7kUlhfdb+eqvsJy+tLCTZmBvM/7DvJH2qzfpKi0fHPHo6xR jqV/2bJf+HNLBDS8+mN6c/602DXCm7UyWv6sznwAmLrPp524v0IWac31n4H4pjqlVOOU /qS1hLrJfsFvfqbkacYssn+8fwI/WE9eHdzQlihjZJslbKJGQbED9YF6o9IpiQTmA3Pc vnAiwihftz0tSj4bY87zFWssmyekSKtANqdBV2ac+72yFRowfS5LMtlyfqPACGhS29r9 IaeTqY/uK7InQVmwe6JcRofCxhzqxHMV+RKiNOEKiYgEc3raB+kikgqDVi4Csfg2MkXB 6IPw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=pUYvnudY; dkim=neutral (no key) header.i=@linutronix.de header.s=2020e; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x6-20020a1709028ec600b001836e51050esi18344248plo.572.2022.11.10.04.24.49; Thu, 10 Nov 2022 04:25:02 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=pUYvnudY; dkim=neutral (no key) header.i=@linutronix.de header.s=2020e; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229725AbiKJMWX (ORCPT + 93 others); Thu, 10 Nov 2022 07:22:23 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:37110 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231133AbiKJMV7 (ORCPT ); Thu, 10 Nov 2022 07:21:59 -0500 Received: from galois.linutronix.de (Galois.linutronix.de [193.142.43.55]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7E975725C5; Thu, 10 Nov 2022 04:21:57 -0800 (PST) Date: Thu, 10 Nov 2022 12:21:54 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1668082916; h=from:from:sender:sender:reply-to: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=tV/NJzlD6MkwFiPfqG2D/PJiggHs2S5WYz2H+Qe/tIY=; b=pUYvnudY6tYMZscuYBWcP9vK9hGq265zJuyf1KBESwjcfMldIkGfcvEEnIam684CQO+eUh xC1h6b+Yy+FiRXywumZxocuH3TsPYbHxDFCzgKvthKpcHPaRt8aI0Tx96JQEzROGl0X3ND J6wLXnuOC45yGp6auiAJcfzifM0zvSFtywp4TLGIDsdK37x0iDMqQ2sA28GBJwcF5Z+p8T BEW8uqKCxGE340heSmxoQmeEl6p72NOogXDyrTcNYM5BLKQGO7hkaVMv+2w2on/0yUzum6 wT/s9KHXTsCAVGyySV1N0EX2R+Swzrt+MHzKDby2m8ncpkZ25Ayyh19TKCabbA== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1668082916; h=from:from:sender:sender:reply-to: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=tV/NJzlD6MkwFiPfqG2D/PJiggHs2S5WYz2H+Qe/tIY=; b=NOxV4IZdZmZSGS4vNmA+POuk/GVqlGjpvhu2cTXK5/LgH5BG1Wc//aIqiYJmgnGyzPkXOD eui8THs4PXl1q5AQ== From: "tip-bot2 for Juergen Gross" Sender: tip-bot2@linutronix.de Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: x86/cpu] x86/mtrr: Disentangle MTRR init from PAT init Cc: Juergen Gross , Borislav Petkov , x86@kernel.org, linux-kernel@vger.kernel.org In-Reply-To: <20221102074713.21493-8-jgross@suse.com> References: <20221102074713.21493-8-jgross@suse.com> MIME-Version: 1.0 Message-ID: <166808291487.4906.17792517900400429986.tip-bot2@tip-bot2> Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The following commit has been merged into the x86/cpu branch of tip: Commit-ID: 7d71db537b01a6beadbe45a4e6e302272110c2c0 Gitweb: https://git.kernel.org/tip/7d71db537b01a6beadbe45a4e6e302272110c2c0 Author: Juergen Gross AuthorDate: Wed, 02 Nov 2022 08:47:04 +01:00 Committer: Borislav Petkov CommitterDate: Thu, 10 Nov 2022 13:12:44 +01:00 x86/mtrr: Disentangle MTRR init from PAT init Add a main cache_cpu_init() init routine which initializes MTRR and/or PAT support depending on what has been detected on the system. Leave the MTRR-specific initialization in a MTRR-specific init function where the smp_changes_mask setting happens now with caches disabled. This global mask update was done with caches enabled before probably because atomic operations while running uncached might have been quite expensive. But since only systems with a broken BIOS should ever require to set any bit in smp_changes_mask, hurting those devices with a penalty of a few microseconds during boot shouldn't be a real issue. Signed-off-by: Juergen Gross Signed-off-by: Borislav Petkov Link: https://lore.kernel.org/r/20221102074713.21493-8-jgross@suse.com Signed-off-by: Borislav Petkov --- arch/x86/include/asm/cacheinfo.h | 1 + arch/x86/include/asm/mtrr.h | 2 ++ arch/x86/kernel/cpu/cacheinfo.c | 17 +++++++++++++++++ arch/x86/kernel/cpu/mtrr/generic.c | 15 ++------------- 4 files changed, 22 insertions(+), 13 deletions(-) diff --git a/arch/x86/include/asm/cacheinfo.h b/arch/x86/include/asm/cacheinfo.h index 6159874..978bac7 100644 --- a/arch/x86/include/asm/cacheinfo.h +++ b/arch/x86/include/asm/cacheinfo.h @@ -12,5 +12,6 @@ void cacheinfo_hygon_init_llc_id(struct cpuinfo_x86 *c, int cpu); void cache_disable(void); void cache_enable(void); +void cache_cpu_init(void); #endif /* _ASM_X86_CACHEINFO_H */ diff --git a/arch/x86/include/asm/mtrr.h b/arch/x86/include/asm/mtrr.h index 12a16ca..986249a 100644 --- a/arch/x86/include/asm/mtrr.h +++ b/arch/x86/include/asm/mtrr.h @@ -50,6 +50,7 @@ extern int mtrr_trim_uncached_memory(unsigned long end_pfn); extern int amd_special_default_mtrr(void); void mtrr_disable(void); void mtrr_enable(void); +void mtrr_generic_set_state(void); # else static inline u8 mtrr_type_lookup(u64 addr, u64 end, u8 *uniform) { @@ -91,6 +92,7 @@ static inline void mtrr_centaur_report_mcr(int mcr, u32 lo, u32 hi) #define mtrr_bp_restore() do {} while (0) #define mtrr_disable() do {} while (0) #define mtrr_enable() do {} while (0) +#define mtrr_generic_set_state() do {} while (0) # endif #ifdef CONFIG_COMPAT diff --git a/arch/x86/kernel/cpu/cacheinfo.c b/arch/x86/kernel/cpu/cacheinfo.c index 0cbacec..31684bf 100644 --- a/arch/x86/kernel/cpu/cacheinfo.c +++ b/arch/x86/kernel/cpu/cacheinfo.c @@ -1120,3 +1120,20 @@ void cache_enable(void) __releases(cache_disable_lock) raw_spin_unlock(&cache_disable_lock); } + +void cache_cpu_init(void) +{ + unsigned long flags; + + local_irq_save(flags); + cache_disable(); + + if (memory_caching_control & CACHE_MTRR) + mtrr_generic_set_state(); + + if (memory_caching_control & CACHE_PAT) + pat_init(); + + cache_enable(); + local_irq_restore(flags); +} diff --git a/arch/x86/kernel/cpu/mtrr/generic.c b/arch/x86/kernel/cpu/mtrr/generic.c index 396cb1e..d409c38 100644 --- a/arch/x86/kernel/cpu/mtrr/generic.c +++ b/arch/x86/kernel/cpu/mtrr/generic.c @@ -731,30 +731,19 @@ void mtrr_enable(void) mtrr_wrmsr(MSR_MTRRdefType, deftype_lo, deftype_hi); } -static void generic_set_all(void) +void mtrr_generic_set_state(void) { unsigned long mask, count; - unsigned long flags; - - local_irq_save(flags); - cache_disable(); /* Actually set the state */ mask = set_mtrr_state(); - /* also set PAT */ - pat_init(); - - cache_enable(); - local_irq_restore(flags); - /* Use the atomic bitops to update the global mask */ for (count = 0; count < sizeof(mask) * 8; ++count) { if (mask & 0x01) set_bit(count, &smp_changes_mask); mask >>= 1; } - } /** @@ -854,7 +843,7 @@ int positive_have_wrcomb(void) * Generic structure... */ const struct mtrr_ops generic_mtrr_ops = { - .set_all = generic_set_all, + .set_all = cache_cpu_init, .get = generic_get_mtrr, .get_free_region = generic_get_free_region, .set = generic_set_mtrr,