All of lore.kernel.org
 help / color / mirror / Atom feed
From: Keith Packard <keithp@keithp.com>
To: linux-kernel@vger.kernel.org
Cc: "Abbott Liu" <liuwenliang@huawei.com>,
	"Alexander Sverdlin" <alexander.sverdlin@gmail.com>,
	"Al Viro" <viro@zeniv.linux.org.uk>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Anshuman Khandual" <anshuman.khandual@arm.com>,
	"Ard Biesheuvel" <ardb@kernel.org>,
	"Arnd Bergmann" <arnd@arndb.de>,
	"Bjorn Andersson" <bjorn.andersson@linaro.org>,
	"Florian Fainelli" <f.fainelli@gmail.com>,
	"Geert Uytterhoeven" <geert+renesas@glider.be>,
	"Hartley Sweeten" <hsweeten@visionengravers.com>,
	"Jens Axboe" <axboe@kernel.dk>, "Jian Cai" <jiancai@google.com>,
	"Joe Perches" <joe@perches.com>,
	"Keith Packard" <keithp@keithp.com>,
	"Linus Walleij" <linus.walleij@linaro.org>,
	linux-arm-kernel@lists.infradead.org,
	"Maninder Singh" <maninder1.s@samsung.com>,
	"Manivannan Sadhasivam" <mani@kernel.org>,
	"Marc Zyngier" <maz@kernel.org>,
	"Masahiro Yamada" <masahiroy@kernel.org>,
	"Mike Rapoport" <rppt@kernel.org>,
	"Nick Desaulniers" <ndesaulniers@google.com>,
	"Nick Desaulniers" <ndesaulniers@gooogle.com>,
	"Nicolas Pitre" <nico@fluxnic.net>,
	"Peter Zijlstra" <peterz@infradead.org>,
	"Russell King" <linux@armlinux.org.uk>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
	"Valentin Schneider" <valentin.schneider@arm.com>,
	"Vaneet Narang" <v.narang@samsung.com>,
	"Wolfram Sang (Renesas)" <wsa+renesas@sang-engineering.com>,
	"YiFei Zhu" <yifeifz2@illinois.edu>,
	"Keith Packard" <keithpac@amazon.com>
Subject: [PATCH 1/2] ARM: Add per-cpu variable holding cpu number
Date: Thu,  2 Sep 2021 08:54:27 -0700	[thread overview]
Message-ID: <20210902155429.3987201-2-keithp@keithp.com> (raw)
In-Reply-To: <20210902155429.3987201-1-keithp@keithp.com>

To help move thread_info into task_struct, stop using the cpu number
contained in the thread_info block in C code and use a per-cpu
variable instead. This value will be initialized long before the
task_struct cpu value for the various idle threads are set, which
avoids ordering issues during CPU startup.

Signed-off-by: Keith Packard <keithpac@amazon.com>
---
 arch/arm/include/asm/smp.h |  5 ++++-
 arch/arm/kernel/smp.c      | 14 ++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/arch/arm/include/asm/smp.h b/arch/arm/include/asm/smp.h
index 5d508f5d56c4..3aca2c2089bc 100644
--- a/arch/arm/include/asm/smp.h
+++ b/arch/arm/include/asm/smp.h
@@ -15,7 +15,10 @@
 # error "<asm/smp.h> included in non-SMP build"
 #endif
 
-#define raw_smp_processor_id() (current_thread_info()->cpu)
+#define raw_smp_processor_id() this_cpu_read(cpu_number)
+#define __smp_processor_id() __this_cpu_read(cpu_number)
+
+DECLARE_PER_CPU_READ_MOSTLY(unsigned int, cpu_number);
 
 struct seq_file;
 
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 74679240a9d8..0457e25109c6 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -51,6 +51,9 @@
 #define CREATE_TRACE_POINTS
 #include <trace/events/ipi.h>
 
+DEFINE_PER_CPU_READ_MOSTLY(unsigned int, cpu_number);
+EXPORT_PER_CPU_SYMBOL(cpu_number);
+
 /*
  * as from 2.5, kernels no longer have an init_tasks structure
  * so we need some other way of telling a new secondary core
@@ -495,6 +498,7 @@ void __init smp_prepare_boot_cpu(void)
 void __init smp_prepare_cpus(unsigned int max_cpus)
 {
 	unsigned int ncores = num_possible_cpus();
+	unsigned int cpu;
 
 	init_cpu_topology();
 
@@ -505,6 +509,16 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
 	 */
 	if (max_cpus > ncores)
 		max_cpus = ncores;
+
+	/*
+	 * Initialize the cpu_number value for each cpu before we
+	 * start it. This ensures that the value is valid during cpu
+	 * initialization, even before the idle task_struct cpu member
+	 * is set
+	 */
+	for_each_possible_cpu(cpu)
+		per_cpu(cpu_number, cpu) = cpu;
+
 	if (ncores > 1 && max_cpus) {
 		/*
 		 * Initialise the present map, which describes the set of CPUs
-- 
2.33.0


WARNING: multiple messages have this Message-ID (diff)
From: Keith Packard <keithp@keithp.com>
To: linux-kernel@vger.kernel.org
Cc: "Abbott Liu" <liuwenliang@huawei.com>,
	"Alexander Sverdlin" <alexander.sverdlin@gmail.com>,
	"Al Viro" <viro@zeniv.linux.org.uk>,
	"Andrew Morton" <akpm@linux-foundation.org>,
	"Anshuman Khandual" <anshuman.khandual@arm.com>,
	"Ard Biesheuvel" <ardb@kernel.org>,
	"Arnd Bergmann" <arnd@arndb.de>,
	"Bjorn Andersson" <bjorn.andersson@linaro.org>,
	"Florian Fainelli" <f.fainelli@gmail.com>,
	"Geert Uytterhoeven" <geert+renesas@glider.be>,
	"Hartley Sweeten" <hsweeten@visionengravers.com>,
	"Jens Axboe" <axboe@kernel.dk>, "Jian Cai" <jiancai@google.com>,
	"Joe Perches" <joe@perches.com>,
	"Keith Packard" <keithp@keithp.com>,
	"Linus Walleij" <linus.walleij@linaro.org>,
	linux-arm-kernel@lists.infradead.org,
	"Maninder Singh" <maninder1.s@samsung.com>,
	"Manivannan Sadhasivam" <mani@kernel.org>,
	"Marc Zyngier" <maz@kernel.org>,
	"Masahiro Yamada" <masahiroy@kernel.org>,
	"Mike Rapoport" <rppt@kernel.org>,
	"Nick Desaulniers" <ndesaulniers@google.com>,
	"Nick Desaulniers" <ndesaulniers@gooogle.com>,
	"Nicolas Pitre" <nico@fluxnic.net>,
	"Peter Zijlstra" <peterz@infradead.org>,
	"Russell King" <linux@armlinux.org.uk>,
	"Thomas Gleixner" <tglx@linutronix.de>,
	"Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>,
	"Valentin Schneider" <valentin.schneider@arm.com>,
	"Vaneet Narang" <v.narang@samsung.com>,
	"Wolfram Sang (Renesas)" <wsa+renesas@sang-engineering.com>,
	"YiFei Zhu" <yifeifz2@illinois.edu>,
	"Keith Packard" <keithpac@amazon.com>
Subject: [PATCH 1/2] ARM: Add per-cpu variable holding cpu number
Date: Thu,  2 Sep 2021 08:54:27 -0700	[thread overview]
Message-ID: <20210902155429.3987201-2-keithp@keithp.com> (raw)
In-Reply-To: <20210902155429.3987201-1-keithp@keithp.com>

To help move thread_info into task_struct, stop using the cpu number
contained in the thread_info block in C code and use a per-cpu
variable instead. This value will be initialized long before the
task_struct cpu value for the various idle threads are set, which
avoids ordering issues during CPU startup.

Signed-off-by: Keith Packard <keithpac@amazon.com>
---
 arch/arm/include/asm/smp.h |  5 ++++-
 arch/arm/kernel/smp.c      | 14 ++++++++++++++
 2 files changed, 18 insertions(+), 1 deletion(-)

diff --git a/arch/arm/include/asm/smp.h b/arch/arm/include/asm/smp.h
index 5d508f5d56c4..3aca2c2089bc 100644
--- a/arch/arm/include/asm/smp.h
+++ b/arch/arm/include/asm/smp.h
@@ -15,7 +15,10 @@
 # error "<asm/smp.h> included in non-SMP build"
 #endif
 
-#define raw_smp_processor_id() (current_thread_info()->cpu)
+#define raw_smp_processor_id() this_cpu_read(cpu_number)
+#define __smp_processor_id() __this_cpu_read(cpu_number)
+
+DECLARE_PER_CPU_READ_MOSTLY(unsigned int, cpu_number);
 
 struct seq_file;
 
diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c
index 74679240a9d8..0457e25109c6 100644
--- a/arch/arm/kernel/smp.c
+++ b/arch/arm/kernel/smp.c
@@ -51,6 +51,9 @@
 #define CREATE_TRACE_POINTS
 #include <trace/events/ipi.h>
 
+DEFINE_PER_CPU_READ_MOSTLY(unsigned int, cpu_number);
+EXPORT_PER_CPU_SYMBOL(cpu_number);
+
 /*
  * as from 2.5, kernels no longer have an init_tasks structure
  * so we need some other way of telling a new secondary core
@@ -495,6 +498,7 @@ void __init smp_prepare_boot_cpu(void)
 void __init smp_prepare_cpus(unsigned int max_cpus)
 {
 	unsigned int ncores = num_possible_cpus();
+	unsigned int cpu;
 
 	init_cpu_topology();
 
@@ -505,6 +509,16 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
 	 */
 	if (max_cpus > ncores)
 		max_cpus = ncores;
+
+	/*
+	 * Initialize the cpu_number value for each cpu before we
+	 * start it. This ensures that the value is valid during cpu
+	 * initialization, even before the idle task_struct cpu member
+	 * is set
+	 */
+	for_each_possible_cpu(cpu)
+		per_cpu(cpu_number, cpu) = cpu;
+
 	if (ncores > 1 && max_cpus) {
 		/*
 		 * Initialise the present map, which describes the set of CPUs
-- 
2.33.0


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2021-09-02 15:55 UTC|newest]

Thread overview: 72+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-09-02 15:54 [PATCH 0/2]: ARM: Enable THREAD_INFO_IN_TASK Keith Packard
2021-09-02 15:54 ` Keith Packard
2021-09-02 15:54 ` Keith Packard [this message]
2021-09-02 15:54   ` [PATCH 1/2] ARM: Add per-cpu variable holding cpu number Keith Packard
2021-09-02 15:54 ` [PATCH 2/2] ARM: Move thread_info into task_struct Keith Packard
2021-09-02 15:54   ` Keith Packard
2021-09-02 16:07 ` [PATCH 0/2]: ARM: Enable THREAD_INFO_IN_TASK Kees Cook
2021-09-02 16:07   ` Kees Cook
2021-09-02 16:18   ` Ard Biesheuvel
2021-09-02 16:18     ` Ard Biesheuvel
2021-09-02 17:37     ` Kees Cook
2021-09-02 17:37       ` Kees Cook
2021-09-02 16:54   ` Russell King (Oracle)
2021-09-02 16:54     ` Russell King (Oracle)
2021-09-02 16:53 ` Russell King (Oracle)
2021-09-02 16:53   ` Russell King (Oracle)
2021-09-02 17:35   ` Kees Cook
2021-09-02 17:35     ` Kees Cook
2021-09-02 17:58   ` Keith Packard
2021-09-02 17:58     ` Keith Packard
2021-09-04  6:09 ` [PATCH 0/2] ARM: support THREAD_INFO_IN_TASK (v7 only) (v2) Keith Packard
2021-09-04  6:09   ` Keith Packard
2021-09-04  6:09   ` [PATCH 1/3] ARM: Pass cpu number to secondary_start_kernel Keith Packard
2021-09-04  6:09     ` Keith Packard
2021-09-05 20:25     ` Ard Biesheuvel
2021-09-05 20:25       ` Ard Biesheuvel
2021-09-04  6:09   ` [PATCH 2/3] ARM: Move thread_info into task_struct (v7 only) Keith Packard
2021-09-04  6:09     ` Keith Packard
2021-09-05 20:56     ` Ard Biesheuvel
2021-09-05 20:56       ` Ard Biesheuvel
2021-09-06  6:14       ` Keith Packard
2021-09-06  6:14         ` Keith Packard
2021-09-06  7:49         ` Ard Biesheuvel
2021-09-06  7:49           ` Ard Biesheuvel
2021-09-07 15:24           ` Keith Packard
2021-09-07 15:24             ` Keith Packard
2021-09-07 16:05             ` Ard Biesheuvel
2021-09-07 16:05               ` Ard Biesheuvel
2021-09-07 22:17               ` Keith Packard
2021-09-07 22:17                 ` Keith Packard
2021-09-06  6:20       ` Keith Packard
2021-09-06  6:20         ` Keith Packard
2021-09-04  6:09   ` [PATCH 3/3] ARM: Add per-cpu variable cpu_number " Keith Packard
2021-09-04  6:09     ` Keith Packard
2021-09-07 22:00   ` [PATCH 0/7] ARM: support THREAD_INFO_IN_TASK (v3) Keith Packard
2021-09-07 22:00     ` Keith Packard
2021-09-07 22:00     ` [PATCH 1/7] ARM: Pass cpu number to secondary_start_kernel Keith Packard
2021-09-07 22:00       ` Keith Packard
2021-09-07 22:00     ` [PATCH 2/7] ARM: Pass task " Keith Packard
2021-09-07 22:00       ` Keith Packard
2021-09-07 22:00     ` [PATCH 3/7] ARM: Use smp_processor_id() in vfp_pm_suspend instead of ti->cpu Keith Packard
2021-09-07 22:00       ` Keith Packard
2021-09-07 22:00     ` [PATCH 4/7] ARM: Use hack from powerpc to get current cpu number Keith Packard
2021-09-07 22:00       ` Keith Packard
2021-09-08  7:45       ` Ard Biesheuvel
2021-09-08  7:45         ` Ard Biesheuvel
2021-09-07 22:00     ` [PATCH 5/7] ARM: Stop using TPIDRPRW to hold per_cpu_offset Keith Packard
2021-09-07 22:00       ` Keith Packard
2021-09-09 13:54       ` Ard Biesheuvel
2021-09-09 13:54         ` Ard Biesheuvel
2021-09-07 22:00     ` [PATCH 6/7] ARM: Use TPIDRPRW for current Keith Packard
2021-09-07 22:00       ` Keith Packard
2021-09-09 13:56       ` Ard Biesheuvel
2021-09-09 13:56         ` Ard Biesheuvel
2021-09-07 22:00     ` [PATCH 7/7] ARM: Move thread_info into task_struct (v7 only) Keith Packard
2021-09-07 22:00       ` Keith Packard
2021-09-08  7:01     ` [PATCH 0/7] ARM: support THREAD_INFO_IN_TASK (v3) Krzysztof Kozlowski
2021-09-08  7:01       ` Krzysztof Kozlowski
2021-09-08  7:47       ` Ard Biesheuvel
2021-09-08  7:47         ` Ard Biesheuvel
2021-09-08  7:50         ` Geert Uytterhoeven
2021-09-08  7:50           ` Geert Uytterhoeven

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=20210902155429.3987201-2-keithp@keithp.com \
    --to=keithp@keithp.com \
    --cc=akpm@linux-foundation.org \
    --cc=alexander.sverdlin@gmail.com \
    --cc=anshuman.khandual@arm.com \
    --cc=ardb@kernel.org \
    --cc=arnd@arndb.de \
    --cc=axboe@kernel.dk \
    --cc=bjorn.andersson@linaro.org \
    --cc=f.fainelli@gmail.com \
    --cc=geert+renesas@glider.be \
    --cc=hsweeten@visionengravers.com \
    --cc=jiancai@google.com \
    --cc=joe@perches.com \
    --cc=keithpac@amazon.com \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=liuwenliang@huawei.com \
    --cc=mani@kernel.org \
    --cc=maninder1.s@samsung.com \
    --cc=masahiroy@kernel.org \
    --cc=maz@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=ndesaulniers@gooogle.com \
    --cc=nico@fluxnic.net \
    --cc=peterz@infradead.org \
    --cc=rppt@kernel.org \
    --cc=tglx@linutronix.de \
    --cc=u.kleine-koenig@pengutronix.de \
    --cc=v.narang@samsung.com \
    --cc=valentin.schneider@arm.com \
    --cc=viro@zeniv.linux.org.uk \
    --cc=wsa+renesas@sang-engineering.com \
    --cc=yifeifz2@illinois.edu \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.