linux-riscv.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [RFC PATCH 0/8] Move task_struct::cpu back into thread_info
@ 2021-09-14 12:10 Ard Biesheuvel
  2021-09-14 12:10 ` [RFC PATCH 1/8] arm64: add CPU field to struct thread_info Ard Biesheuvel
                   ` (9 more replies)
  0 siblings, 10 replies; 32+ messages in thread
From: Ard Biesheuvel @ 2021-09-14 12:10 UTC (permalink / raw)
  To: linux-kernel
  Cc: Ard Biesheuvel, Keith Packard, Russell King, Catalin Marinas,
	Will Deacon, Michael Ellerman, Benjamin Herrenschmidt,
	Christophe Leroy, Paul Mackerras, Paul Walmsley, Palmer Dabbelt,
	Albert Ou, Heiko Carstens, Vasily Gorbik, Christian Borntraeger,
	Thomas Gleixner, Ingo Molnar, Borislav Petkov, Peter Zijlstra,
	Kees Cook, Andy Lutomirski, Linus Torvalds, Arnd Bergmann,
	linux-arm-kernel, linuxppc-dev, linux-riscv, linux-s390

Commit c65eacbe290b ("sched/core: Allow putting thread_info into
task_struct") mentions that, along with moving thread_info into
task_struct, the cpu field is moved out of the former into the latter,
but does not explain why.

While collaborating with Keith on adding THREAD_INFO_IN_TASK support to
ARM, we noticed that keeping CPU in task_struct is problematic for
architectures that define raw_smp_processor_id() in terms of this field,
as it requires linux/sched.h to be included, which causes a lot of pain
in terms of circular dependencies (or 'header soup', as the original
commit refers to it).

For examples of how existing architectures work around this, please
refer to patches #6 or #7. In the former case, it uses an awful
asm-offsets hack to index thread_info/current without using its type
definition. The latter approach simply keeps a copy of the task_struct
CPU field in thread_info, and keeps it in sync at context switch time.

Patch #8 reverts this latter approach for ARM, but this code is still
under review so it does not currently apply to mainline.

We also discussed introducing yet another Kconfig symbol to indicate
that the arch has THREAD_INFO_IN_TASK enabled but still prefers to keep
its CPU field in thread_info, but simply keeping it in thread_info in
all cases seems to be the cleanest approach here.

Cc: Keith Packard <keithpac@amazon.com>
Cc: Russell King <linux@armlinux.org.uk>
Cc: Catalin Marinas <catalin.marinas@arm.com>
Cc: Will Deacon <will@kernel.org>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Christophe Leroy <christophe.leroy@csgroup.eu>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Paul Walmsley <paul.walmsley@sifive.com>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
Cc: Albert Ou <aou@eecs.berkeley.edu>
Cc: Heiko Carstens <hca@linux.ibm.com>
Cc: Vasily Gorbik <gor@linux.ibm.com>
Cc: Christian Borntraeger <borntraeger@de.ibm.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Kees Cook <keescook@chromium.org>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: linux-arm-kernel@lists.infradead.org
Cc: linuxppc-dev@lists.ozlabs.org
Cc: linux-riscv@lists.infradead.org
Cc: linux-s390@vger.kernel.org

Ard Biesheuvel (8):
  arm64: add CPU field to struct thread_info
  x86: add CPU field to struct thread_info
  s390: add CPU field to struct thread_info
  powerpc: add CPU field to struct thread_info
  sched: move CPU field back into thread_info if THREAD_INFO_IN_TASK=y
  powerpc: smp: remove hack to obtain offset of task_struct::cpu
  riscv: rely on core code to keep thread_info::cpu updated
  ARM: rely on core code to keep thread_info::cpu updated

 arch/arm/include/asm/switch_to.h       | 14 --------------
 arch/arm/kernel/smp.c                  |  3 ---
 arch/arm64/include/asm/thread_info.h   |  1 +
 arch/arm64/kernel/asm-offsets.c        |  2 +-
 arch/arm64/kernel/head.S               |  2 +-
 arch/powerpc/Makefile                  | 11 -----------
 arch/powerpc/include/asm/smp.h         | 17 +----------------
 arch/powerpc/include/asm/thread_info.h |  3 +++
 arch/powerpc/kernel/asm-offsets.c      |  4 +---
 arch/powerpc/kernel/smp.c              |  2 +-
 arch/riscv/kernel/asm-offsets.c        |  1 -
 arch/riscv/kernel/entry.S              |  5 -----
 arch/riscv/kernel/head.S               |  1 -
 arch/s390/include/asm/thread_info.h    |  1 +
 arch/x86/include/asm/thread_info.h     |  3 +++
 include/linux/sched.h                  |  6 +-----
 kernel/sched/sched.h                   |  4 ----
 17 files changed, 14 insertions(+), 66 deletions(-)

-- 
2.30.2


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

^ permalink raw reply	[flat|nested] 32+ messages in thread

end of thread, other threads:[~2021-10-05  1:56 UTC | newest]

Thread overview: 32+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-14 12:10 [RFC PATCH 0/8] Move task_struct::cpu back into thread_info Ard Biesheuvel
2021-09-14 12:10 ` [RFC PATCH 1/8] arm64: add CPU field to struct thread_info Ard Biesheuvel
2021-09-14 15:41   ` Linus Torvalds
2021-09-14 15:42     ` Ard Biesheuvel
2021-09-16 14:41   ` Catalin Marinas
2021-09-21 12:04     ` Ard Biesheuvel
2021-09-14 12:10 ` [RFC PATCH 2/8] x86: " Ard Biesheuvel
2021-09-21 12:54   ` Borislav Petkov
2021-09-14 12:10 ` [RFC PATCH 3/8] s390: " Ard Biesheuvel
2021-09-28 13:52   ` Ard Biesheuvel
2021-09-14 12:10 ` [RFC PATCH 4/8] powerpc: " Ard Biesheuvel
2021-09-27 15:12   ` Ard Biesheuvel
2021-09-27 23:13     ` Michael Ellerman
2021-09-28  0:16       ` Michael Ellerman
2021-09-28 13:18         ` Ard Biesheuvel
2021-09-29 22:46           ` Michael Ellerman
2021-09-29 23:10             ` Kees Cook
2021-09-30 17:47             ` Kees Cook
2021-10-05  1:55               ` Michael Ellerman
2021-09-14 12:10 ` [RFC PATCH 5/8] sched: move CPU field back into thread_info if THREAD_INFO_IN_TASK=y Ard Biesheuvel
2021-09-14 15:46   ` Linus Torvalds
2021-09-14 15:52     ` Ard Biesheuvel
2021-09-14 15:58       ` Linus Torvalds
2021-09-14 16:10         ` Ard Biesheuvel
2021-09-21 13:12   ` Catalin Marinas
2021-09-14 12:10 ` [RFC PATCH 6/8] powerpc: smp: remove hack to obtain offset of task_struct::cpu Ard Biesheuvel
2021-09-14 12:10 ` [RFC PATCH 7/8] riscv: rely on core code to keep thread_info::cpu updated Ard Biesheuvel
2021-09-28 22:07   ` Palmer Dabbelt
2021-09-14 12:10 ` [RFC PATCH 8/8] ARM: " Ard Biesheuvel
2021-09-14 13:49 ` [RFC PATCH 0/8] Move task_struct::cpu back into thread_info Christophe Leroy
2021-09-14 13:55 ` Mark Rutland
2021-09-21 12:06   ` Ard Biesheuvel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).