mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: "tip-bot2 for Thomas Gleixner" <tip-bot2@linutronix.de>
To: linux-tip-commits@vger.kernel.org
Cc: Thomas Gleixner <tglx@linutronix.de>,
	"Peter Zijlstra (Intel)" <peterz@infradead.org>,
	Michael Kelley <mikelley@microsoft.com>,
	Oleksandr Natalenko <oleksandr@natalenko.name>,
	Helge Deller <deller@gmx.de>,
	"Guilherme G. Piccoli" <gpiccoli@igalia.com>,
	x86@kernel.org, linux-kernel@vger.kernel.org
Subject: [tip: smp/core] x86/apic: Provide cpu_primary_thread mask
Date: Tue, 16 May 2023 09:09:55 -0000	[thread overview]
Message-ID: <168422819500.404.16598527509892623147.tip-bot2@tip-bot2> (raw)
In-Reply-To: <20230512205257.186599880@linutronix.de>

The following commit has been merged into the smp/core branch of tip:

Commit-ID:     f54d4434c281f38b975d58de47adeca671beff4f
Gitweb:        https://git.kernel.org/tip/f54d4434c281f38b975d58de47adeca671beff4f
Author:        Thomas Gleixner <tglx@linutronix.de>
AuthorDate:    Fri, 12 May 2023 23:07:48 +02:00
Committer:     Peter Zijlstra <peterz@infradead.org>
CommitterDate: Mon, 15 May 2023 13:45:02 +02:00

x86/apic: Provide cpu_primary_thread mask

Make the primary thread tracking CPU mask based in preparation for simpler
handling of parallel bootup.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Tested-by: Michael Kelley <mikelley@microsoft.com>
Tested-by: Oleksandr Natalenko <oleksandr@natalenko.name>
Tested-by: Helge Deller <deller@gmx.de> # parisc
Tested-by: Guilherme G. Piccoli <gpiccoli@igalia.com> # Steam Deck
Link: https://lore.kernel.org/r/20230512205257.186599880@linutronix.de
---
 arch/x86/include/asm/apic.h     |  2 --
 arch/x86/include/asm/topology.h | 19 +++++++++++++++----
 arch/x86/kernel/apic/apic.c     | 20 +++++++++-----------
 arch/x86/kernel/smpboot.c       | 12 +++---------
 4 files changed, 27 insertions(+), 26 deletions(-)

diff --git a/arch/x86/include/asm/apic.h b/arch/x86/include/asm/apic.h
index dc50ed7..030f5fb 100644
--- a/arch/x86/include/asm/apic.h
+++ b/arch/x86/include/asm/apic.h
@@ -506,10 +506,8 @@ extern int default_check_phys_apicid_present(int phys_apicid);
 #endif /* CONFIG_X86_LOCAL_APIC */
 
 #ifdef CONFIG_SMP
-bool apic_id_is_primary_thread(unsigned int id);
 void apic_smt_update(void);
 #else
-static inline bool apic_id_is_primary_thread(unsigned int id) { return false; }
 static inline void apic_smt_update(void) { }
 #endif
 
diff --git a/arch/x86/include/asm/topology.h b/arch/x86/include/asm/topology.h
index 2ba5758..caf41c4 100644
--- a/arch/x86/include/asm/topology.h
+++ b/arch/x86/include/asm/topology.h
@@ -31,9 +31,9 @@
  * CONFIG_NUMA.
  */
 #include <linux/numa.h>
+#include <linux/cpumask.h>
 
 #ifdef CONFIG_NUMA
-#include <linux/cpumask.h>
 
 #include <asm/mpspec.h>
 #include <asm/percpu.h>
@@ -139,9 +139,20 @@ static inline int topology_max_smt_threads(void)
 int topology_update_package_map(unsigned int apicid, unsigned int cpu);
 int topology_update_die_map(unsigned int dieid, unsigned int cpu);
 int topology_phys_to_logical_pkg(unsigned int pkg);
-bool topology_is_primary_thread(unsigned int cpu);
 bool topology_smt_supported(void);
-#else
+
+extern struct cpumask __cpu_primary_thread_mask;
+#define cpu_primary_thread_mask ((const struct cpumask *)&__cpu_primary_thread_mask)
+
+/**
+ * topology_is_primary_thread - Check whether CPU is the primary SMT thread
+ * @cpu:	CPU to check
+ */
+static inline bool topology_is_primary_thread(unsigned int cpu)
+{
+	return cpumask_test_cpu(cpu, cpu_primary_thread_mask);
+}
+#else /* CONFIG_SMP */
 #define topology_max_packages()			(1)
 static inline int
 topology_update_package_map(unsigned int apicid, unsigned int cpu) { return 0; }
@@ -152,7 +163,7 @@ static inline int topology_max_die_per_package(void) { return 1; }
 static inline int topology_max_smt_threads(void) { return 1; }
 static inline bool topology_is_primary_thread(unsigned int cpu) { return true; }
 static inline bool topology_smt_supported(void) { return false; }
-#endif
+#endif /* !CONFIG_SMP */
 
 static inline void arch_fix_phys_package_id(int num, u32 slot)
 {
diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c
index 7705571..e17600d 100644
--- a/arch/x86/kernel/apic/apic.c
+++ b/arch/x86/kernel/apic/apic.c
@@ -2386,20 +2386,16 @@ bool arch_match_cpu_phys_id(int cpu, u64 phys_id)
 }
 
 #ifdef CONFIG_SMP
-/**
- * apic_id_is_primary_thread - Check whether APIC ID belongs to a primary thread
- * @apicid: APIC ID to check
- */
-bool apic_id_is_primary_thread(unsigned int apicid)
+static void cpu_mark_primary_thread(unsigned int cpu, unsigned int apicid)
 {
-	u32 mask;
-
-	if (smp_num_siblings == 1)
-		return true;
 	/* Isolate the SMT bit(s) in the APICID and check for 0 */
-	mask = (1U << (fls(smp_num_siblings) - 1)) - 1;
-	return !(apicid & mask);
+	u32 mask = (1U << (fls(smp_num_siblings) - 1)) - 1;
+
+	if (smp_num_siblings == 1 || !(apicid & mask))
+		cpumask_set_cpu(cpu, &__cpu_primary_thread_mask);
 }
+#else
+static inline void cpu_mark_primary_thread(unsigned int cpu, unsigned int apicid) { }
 #endif
 
 /*
@@ -2544,6 +2540,8 @@ int generic_processor_info(int apicid, int version)
 	set_cpu_present(cpu, true);
 	num_processors++;
 
+	cpu_mark_primary_thread(cpu, apicid);
+
 	return cpu;
 }
 
diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
index a27941a..51122f0 100644
--- a/arch/x86/kernel/smpboot.c
+++ b/arch/x86/kernel/smpboot.c
@@ -102,6 +102,9 @@ EXPORT_PER_CPU_SYMBOL(cpu_die_map);
 DEFINE_PER_CPU_READ_MOSTLY(struct cpuinfo_x86, cpu_info);
 EXPORT_PER_CPU_SYMBOL(cpu_info);
 
+/* CPUs which are the primary SMT threads */
+struct cpumask __cpu_primary_thread_mask __read_mostly;
+
 /* Representing CPUs for which sibling maps can be computed */
 static cpumask_var_t cpu_sibling_setup_mask;
 
@@ -277,15 +280,6 @@ static void notrace start_secondary(void *unused)
 }
 
 /**
- * topology_is_primary_thread - Check whether CPU is the primary SMT thread
- * @cpu:	CPU to check
- */
-bool topology_is_primary_thread(unsigned int cpu)
-{
-	return apic_id_is_primary_thread(per_cpu(x86_cpu_to_apicid, cpu));
-}
-
-/**
  * topology_smt_supported - Check whether SMT is supported by the CPUs
  */
 bool topology_smt_supported(void)

  reply	other threads:[~2023-05-16  9:10 UTC|newest]

Thread overview: 94+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-12 21:06 [patch V4 00/37] cpu/hotplug, x86: Reworked parallel CPU bringup Thomas Gleixner
2023-05-12 21:06 ` [patch V4 01/37] x86/smpboot: Cleanup topology_phys_to_logical_pkg()/die() Thomas Gleixner
2023-05-16  9:10   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 02/37] cpu/hotplug: Mark arch_disable_smp_support() and bringup_nonboot_cpus() __init Thomas Gleixner
2023-05-16  9:10   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 03/37] x86/smpboot: Avoid pointless delay calibration if TSC is synchronized Thomas Gleixner
2023-05-16  9:10   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 04/37] x86/smpboot: Rename start_cpu0() to soft_restart_cpu() Thomas Gleixner
2023-05-16  9:10   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-06-12 23:45   ` [patch V4 04/37] " Philippe Mathieu-Daudé
2023-05-12 21:07 ` [patch V4 05/37] x86/topology: Remove CPU0 hotplug option Thomas Gleixner
2023-05-16  9:10   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 06/37] x86/smpboot: Remove the CPU0 hotplug kludge Thomas Gleixner
2023-05-16  9:10   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 07/37] x86/smpboot: Restrict soft_restart_cpu() to SEV Thomas Gleixner
2023-05-16  9:10   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-06-12 23:46   ` [patch V4 07/37] " Philippe Mathieu-Daudé
2023-05-12 21:07 ` [patch V4 08/37] x86/smpboot: Remove unnecessary barrier() Thomas Gleixner
2023-05-16  9:10   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 09/37] x86/smpboot: Split up native_cpu_up() into separate phases and document them Thomas Gleixner
2023-05-16  9:10   ` [tip: smp/core] " tip-bot2 for David Woodhouse
2023-05-12 21:07 ` [patch V4 10/37] x86/smpboot: Get rid of cpu_init_secondary() Thomas Gleixner
2023-05-16  9:10   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-06-12 23:49   ` [patch V4 10/37] " Philippe Mathieu-Daudé
2023-05-12 21:07 ` [patch V4 11/37] x86/cpu/cacheinfo: Remove cpu_callout_mask dependency Thomas Gleixner
2023-05-16  9:10   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 12/37] x86/smpboot: Move synchronization masks to SMP boot code Thomas Gleixner
2023-05-16  9:10   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 13/37] x86/smpboot: Make TSC synchronization function call based Thomas Gleixner
2023-05-16  9:10   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 14/37] x86/smpboot: Remove cpu_callin_mask Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 15/37] cpu/hotplug: Rework sparse_irq locking in bringup_cpu() Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 16/37] x86/smpboot: Remove wait for cpu_online() Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 17/37] x86/xen/smp_pv: Remove wait for CPU online Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 18/37] x86/xen/hvm: Get rid of DEAD_FROZEN handling Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 19/37] cpu/hotplug: Add CPU state tracking and synchronization Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 20/37] x86/smpboot: Switch to hotplug core state synchronization Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 21/37] cpu/hotplug: Remove cpu_report_state() and related unused cruft Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 22/37] ARM: smp: Switch to hotplug core state synchronization Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 23/37] arm64: " Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 24/37] csky/smp: " Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 25/37] MIPS: SMP_CPS: " Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 26/37] parisc: " Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 27/37] riscv: " Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 28/37] cpu/hotplug: Remove unused state functions Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 29/37] cpu/hotplug: Reset task stack state in _cpu_up() Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for David Woodhouse
2023-05-12 21:07 ` [patch V4 30/37] cpu/hotplug: Provide a split up CPUHP_BRINGUP mechanism Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 31/37] x86/smpboot: Enable split CPU startup Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 32/37] x86/apic: Provide cpu_primary_thread mask Thomas Gleixner
2023-05-16  9:09   ` tip-bot2 for Thomas Gleixner [this message]
2023-05-12 21:07 ` [patch V4 33/37] cpu/hotplug: Allow "parallel" bringup up to CPUHP_BP_KICK_AP_STATE Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-22 19:45   ` [patch V4 33/37] " Mark Brown
2023-05-22 21:04     ` Thomas Gleixner
2023-05-22 22:27       ` Mark Brown
2023-05-22 23:12         ` Thomas Gleixner
2023-05-23 10:19           ` Mark Brown
2023-05-23 16:13           ` [tip: smp/core] cpu/hotplug: Fix off by one in cpuhp_bringup_mask() tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 34/37] x86/apic: Save the APIC virtual base address Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 35/37] x86/smpboot: Implement a bit spinlock to protect the realmode stack Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-12 21:07 ` [patch V4 36/37] x86/smpboot: Support parallel startup of secondary CPUs Thomas Gleixner
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for David Woodhouse
2023-05-19 16:28   ` [patch V4 36/37] " Jeffrey Hugo
2023-05-19 16:57     ` Andrew Cooper
2023-05-19 17:44       ` Jeffrey Hugo
2023-05-12 21:07 ` [patch V4 37/37] x86/smpboot/64: Implement arch_cpuhp_init_parallel_bringup() and enable it Thomas Gleixner
2023-05-15 12:00   ` Peter Zijlstra
2023-05-16  9:09   ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-13 18:32 ` [patch V4 00/37] cpu/hotplug, x86: Reworked parallel CPU bringup Oleksandr Natalenko
2023-05-13 21:00   ` Helge Deller
2023-05-14 21:48 ` Guilherme G. Piccoli
2023-05-22 10:57 ` [PATCH] x86/apic: Fix use of X{,2}APIC_ENABLE in asm with older binutils Andrew Cooper
2023-05-22 11:17   ` Russell King (Oracle)
2023-05-22 12:12   ` [tip: smp/core] " tip-bot2 for Andrew Cooper

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=168422819500.404.16598527509892623147.tip-bot2@tip-bot2 \
    --to=tip-bot2@linutronix.de \
    --cc=deller@gmx.de \
    --cc=gpiccoli@igalia.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=mikelley@microsoft.com \
    --cc=oleksandr@natalenko.name \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®