From: Keith Packard <keithpac@amazon.com> To: linux-kernel@vger.kernel.org Cc: "Abbott Liu" <liuwenliang@huawei.com>, "Andrew Morton" <akpm@linux-foundation.org>, "Andrey Ryabinin" <ryabinin.a.a@gmail.com>, "Anshuman Khandual" <anshuman.khandual@arm.com>, "Ard Biesheuvel" <ardb@kernel.org>, "Arnd Bergmann" <arnd@arndb.de>, "Bjorn Andersson" <bjorn.andersson@linaro.org>, "Christoph Lameter" <cl@linux.com>, "Dennis Zhou" <dennis@kernel.org>, "Geert Uytterhoeven" <geert+renesas@glider.be>, "Jens Axboe" <axboe@kernel.dk>, "Joe Perches" <joe@perches.com>, "Kees Cook" <keescook@chromium.org>, "Keith Packard" <keithpac@amazon.com>, "Krzysztof Kozlowski" <krzysztof.kozlowski@canonical.com>, "Linus Walleij" <linus.walleij@linaro.org>, linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, "Manivannan Sadhasivam" <mani@kernel.org>, "Marc Zyngier" <maz@kernel.org>, "Masahiro Yamada" <masahiroy@kernel.org>, "Mike Rapoport" <rppt@kernel.org>, "Nathan Chancellor" <nathan@kernel.org>, "Nick Desaulniers" <ndesaulniers@google.com>, "Nick Desaulniers" <ndesaulniers@gooogle.com>, "Nicolas Pitre" <nico@fluxnic.net>, "Russell King" <linux@armlinux.org.uk>, "Tejun Heo" <tj@kernel.org>, "Thomas Gleixner" <tglx@linutronix.de>, "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>, "Valentin Schneider" <valentin.schneider@arm.com>, "Viresh Kumar" <viresh.kumar@linaro.org>, "Wolfram Sang (Renesas)" <wsa+renesas@sang-engineering.com>, "YiFei Zhu" <yifeifz2@illinois.edu> Subject: [PATCH 4/7] ARM: Use hack from powerpc to get current cpu number Date: Tue, 7 Sep 2021 15:00:35 -0700 [thread overview] Message-ID: <20210907220038.91021-5-keithpac@amazon.com> (raw) In-Reply-To: <20210907220038.91021-1-keithpac@amazon.com> When we enable THREAD_INFO_IN_TASK, the cpu number will disappear from thread_info and reappear in task_struct. As we cannot include linux/sched.h in asm/smp.h, there's no way to use that struct type in the raw_smp_processor_id macro. Instead, a hack from the powerpc code is used. This pulls the TI_CPU offset out of asm-offsets.h and uses that to find the cpu value. Signed-off-by: Keith Packard <keithpac@amazon.com> --- arch/arm/Makefile | 8 ++++++++ arch/arm/include/asm/smp.h | 18 +++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 415c3514573a..6752995d2914 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -284,6 +284,14 @@ stack_protector_prepare: prepare0 $(eval GCC_PLUGINS_CFLAGS += $(SSP_PLUGIN_CFLAGS)) endif +ifdef CONFIG_SMP +prepare: task_cpu_prepare + +PHONY += task_cpu_prepare +task_cpu_prepare: prepare0 + $(eval KBUILD_CFLAGS += -D_TI_CPU=$(shell awk '{if ($$2 == "TI_CPU") print $$3;}' include/generated/asm-offsets.h)) +endif + all: $(notdir $(KBUILD_IMAGE)) diff --git a/arch/arm/include/asm/smp.h b/arch/arm/include/asm/smp.h index d43b64635d77..f77ba3753bc4 100644 --- a/arch/arm/include/asm/smp.h +++ b/arch/arm/include/asm/smp.h @@ -15,7 +15,23 @@ # error "<asm/smp.h> included in non-SMP build" #endif -#define raw_smp_processor_id() (current_thread_info()->cpu) +/* + * This is particularly ugly: it appears we can't actually get the + * definition of task_struct here, but we need access to the CPU this + * task is running on, which is stored in task_struct when + * THREAD_INFO_IN_TASK is set. Instead of using task_struct we're + * using TI_CPU which is extracted from asm-offsets.h by kbuild to get + * the current processor ID. + * + * This also needs to be safeguarded when building asm-offsets.s + * because at that time TI_CPU is not defined yet. + */ +#ifndef _TI_CPU +#define raw_smp_processor_id() (0) +#else +#define raw_smp_processor_id() \ + (*(unsigned int *)((void *)current_thread_info() + _TI_CPU)) +#endif struct seq_file; -- 2.33.0
WARNING: multiple messages have this Message-ID (diff)
From: Keith Packard <keithpac@amazon.com> To: linux-kernel@vger.kernel.org Cc: "Abbott Liu" <liuwenliang@huawei.com>, "Andrew Morton" <akpm@linux-foundation.org>, "Andrey Ryabinin" <ryabinin.a.a@gmail.com>, "Anshuman Khandual" <anshuman.khandual@arm.com>, "Ard Biesheuvel" <ardb@kernel.org>, "Arnd Bergmann" <arnd@arndb.de>, "Bjorn Andersson" <bjorn.andersson@linaro.org>, "Christoph Lameter" <cl@linux.com>, "Dennis Zhou" <dennis@kernel.org>, "Geert Uytterhoeven" <geert+renesas@glider.be>, "Jens Axboe" <axboe@kernel.dk>, "Joe Perches" <joe@perches.com>, "Kees Cook" <keescook@chromium.org>, "Keith Packard" <keithpac@amazon.com>, "Krzysztof Kozlowski" <krzysztof.kozlowski@canonical.com>, "Linus Walleij" <linus.walleij@linaro.org>, linux-arm-kernel@lists.infradead.org, linux-mm@kvack.org, "Manivannan Sadhasivam" <mani@kernel.org>, "Marc Zyngier" <maz@kernel.org>, "Masahiro Yamada" <masahiroy@kernel.org>, "Mike Rapoport" <rppt@kernel.org>, "Nathan Chancellor" <nathan@kernel.org>, "Nick Desaulniers" <ndesaulniers@google.com>, "Nick Desaulniers" <ndesaulniers@gooogle.com>, "Nicolas Pitre" <nico@fluxnic.net>, "Russell King" <linux@armlinux.org.uk>, "Tejun Heo" <tj@kernel.org>, "Thomas Gleixner" <tglx@linutronix.de>, "Uwe Kleine-König" <u.kleine-koenig@pengutronix.de>, "Valentin Schneider" <valentin.schneider@arm.com>, "Viresh Kumar" <viresh.kumar@linaro.org>, "Wolfram Sang (Renesas)" <wsa+renesas@sang-engineering.com>, "YiFei Zhu" <yifeifz2@illinois.edu> Subject: [PATCH 4/7] ARM: Use hack from powerpc to get current cpu number Date: Tue, 7 Sep 2021 15:00:35 -0700 [thread overview] Message-ID: <20210907220038.91021-5-keithpac@amazon.com> (raw) In-Reply-To: <20210907220038.91021-1-keithpac@amazon.com> When we enable THREAD_INFO_IN_TASK, the cpu number will disappear from thread_info and reappear in task_struct. As we cannot include linux/sched.h in asm/smp.h, there's no way to use that struct type in the raw_smp_processor_id macro. Instead, a hack from the powerpc code is used. This pulls the TI_CPU offset out of asm-offsets.h and uses that to find the cpu value. Signed-off-by: Keith Packard <keithpac@amazon.com> --- arch/arm/Makefile | 8 ++++++++ arch/arm/include/asm/smp.h | 18 +++++++++++++++++- 2 files changed, 25 insertions(+), 1 deletion(-) diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 415c3514573a..6752995d2914 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -284,6 +284,14 @@ stack_protector_prepare: prepare0 $(eval GCC_PLUGINS_CFLAGS += $(SSP_PLUGIN_CFLAGS)) endif +ifdef CONFIG_SMP +prepare: task_cpu_prepare + +PHONY += task_cpu_prepare +task_cpu_prepare: prepare0 + $(eval KBUILD_CFLAGS += -D_TI_CPU=$(shell awk '{if ($$2 == "TI_CPU") print $$3;}' include/generated/asm-offsets.h)) +endif + all: $(notdir $(KBUILD_IMAGE)) diff --git a/arch/arm/include/asm/smp.h b/arch/arm/include/asm/smp.h index d43b64635d77..f77ba3753bc4 100644 --- a/arch/arm/include/asm/smp.h +++ b/arch/arm/include/asm/smp.h @@ -15,7 +15,23 @@ # error "<asm/smp.h> included in non-SMP build" #endif -#define raw_smp_processor_id() (current_thread_info()->cpu) +/* + * This is particularly ugly: it appears we can't actually get the + * definition of task_struct here, but we need access to the CPU this + * task is running on, which is stored in task_struct when + * THREAD_INFO_IN_TASK is set. Instead of using task_struct we're + * using TI_CPU which is extracted from asm-offsets.h by kbuild to get + * the current processor ID. + * + * This also needs to be safeguarded when building asm-offsets.s + * because at that time TI_CPU is not defined yet. + */ +#ifndef _TI_CPU +#define raw_smp_processor_id() (0) +#else +#define raw_smp_processor_id() \ + (*(unsigned int *)((void *)current_thread_info() + _TI_CPU)) +#endif struct seq_file; -- 2.33.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2021-09-07 22:00 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 ` [PATCH 1/2] ARM: Add per-cpu variable holding cpu number Keith Packard 2021-09-02 15:54 ` 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 ` Keith Packard [this message] 2021-09-07 22:00 ` [PATCH 4/7] ARM: Use hack from powerpc to get current cpu number 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=20210907220038.91021-5-keithpac@amazon.com \ --to=keithpac@amazon.com \ --cc=akpm@linux-foundation.org \ --cc=anshuman.khandual@arm.com \ --cc=ardb@kernel.org \ --cc=arnd@arndb.de \ --cc=axboe@kernel.dk \ --cc=bjorn.andersson@linaro.org \ --cc=cl@linux.com \ --cc=dennis@kernel.org \ --cc=geert+renesas@glider.be \ --cc=joe@perches.com \ --cc=keescook@chromium.org \ --cc=krzysztof.kozlowski@canonical.com \ --cc=linus.walleij@linaro.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=linux@armlinux.org.uk \ --cc=liuwenliang@huawei.com \ --cc=mani@kernel.org \ --cc=masahiroy@kernel.org \ --cc=maz@kernel.org \ --cc=nathan@kernel.org \ --cc=ndesaulniers@google.com \ --cc=ndesaulniers@gooogle.com \ --cc=nico@fluxnic.net \ --cc=rppt@kernel.org \ --cc=ryabinin.a.a@gmail.com \ --cc=tglx@linutronix.de \ --cc=tj@kernel.org \ --cc=u.kleine-koenig@pengutronix.de \ --cc=valentin.schneider@arm.com \ --cc=viresh.kumar@linaro.org \ --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: linkBe 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.