Thread (9 messages) flat view 9 messages, 2 authors, 2021-09-10
STALE1789d

[PATCH v4 4/7] Make sure task_struct is available for raw_smp_processor_id

From: Keith Packard <hidden>
Date: 2021-09-08 19:07:06
Also in: bpf, kvm, linux-arch, linux-devicetree, linux-mm, lkml
Subsystem: arm port, bpf [general] (safe dynamic programs and tools), generic include/asm header files, library code, open firmware and flattened device tree, random number driver, scheduler, the rest, virtio host (vhost) · Maintainers: Russell King, Alexei Starovoitov, Daniel Borkmann, Andrii Nakryiko, Eduard Zingerman, Kumar Kartikeya Dwivedi, Arnd Bergmann, Andrew Morton, Rob Herring, Saravana Kannan, "Theodore Ts'o", Jason A. Donenfeld, Ingo Molnar, Peter Zijlstra, Juri Lelli, Vincent Guittot, Linus Torvalds, "Michael S. Tsirkin", Jason Wang

To allow architectures to use the 'cpu' field in task_struct for cpu
identification, the task_struct must be visible whereever the
raw_smp_processor_id macro is used. It would be simplest to include
linux/sched.h from the relevant asm/smp.h file, but that file is
included from linux/sched.h, and the recursive include ends up with
several declarations in the wrong order.

To avoid this, the PowerPC architecture code has this ugly hack:

	#define raw_smp_processor_id() \
		(*(unsigned int *)((void *)current + _TASK_CPU))

As an alternative, placing includes of linux/sched.h in a few files
that are used along with asm/smp.h means we can use the task_struct
field directly.

Signed-off-by: Keith Packard <redacted>
---
 arch/arm/mm/proc-v7-bugs.c     | 1 +
 drivers/vhost/vhost.c          | 1 +
 drivers/vhost/vhost.h          | 1 +
 include/asm-generic/irq_regs.h | 1 +
 include/linux/of_address.h     | 1 +
 include/linux/random.h         | 1 +
 include/linux/topology.h       | 1 +
 init/calibrate.c               | 1 +
 kernel/bpf/bpf_lru_list.h      | 1 +
 kernel/bpf/percpu_freelist.h   | 1 +
 kernel/sched/cpuacct.c         | 2 +-
 lib/irq_regs.c                 | 1 +
 12 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/arch/arm/mm/proc-v7-bugs.c b/arch/arm/mm/proc-v7-bugs.c
index 114c05ab4dd9..9ea078c619a7 100644
--- a/arch/arm/mm/proc-v7-bugs.c
+++ b/arch/arm/mm/proc-v7-bugs.c
@@ -1,4 +1,5 @@
 // SPDX-License-Identifier: GPL-2.0
+#include <linux/sched.h>
 #include <linux/arm-smccc.h>
 #include <linux/kernel.h>
 #include <linux/smp.h>
diff --git a/drivers/vhost/vhost.c b/drivers/vhost/vhost.c
index 5ccb0705beae..e5a073bb5b1e 100644
--- a/drivers/vhost/vhost.c
+++ b/drivers/vhost/vhost.c
@@ -10,6 +10,7 @@
  * Generic code for virtio server in host kernel.
  */
 
+#include <linux/sched.h>
 #include <linux/eventfd.h>
 #include <linux/vhost.h>
 #include <linux/uio.h>
diff --git a/drivers/vhost/vhost.h b/drivers/vhost/vhost.h
index b063324c7669..963d08ff2a62 100644
--- a/drivers/vhost/vhost.h
+++ b/drivers/vhost/vhost.h
@@ -2,6 +2,7 @@
 #ifndef _VHOST_H
 #define _VHOST_H
 
+#include <linux/sched.h>
 #include <linux/eventfd.h>
 #include <linux/vhost.h>
 #include <linux/mm.h>
diff --git a/include/asm-generic/irq_regs.h b/include/asm-generic/irq_regs.h
index 2e7c6e89d42e..ab4ca7ab362c 100644
--- a/include/asm-generic/irq_regs.h
+++ b/include/asm-generic/irq_regs.h
@@ -8,6 +8,7 @@
 #ifndef _ASM_GENERIC_IRQ_REGS_H
 #define _ASM_GENERIC_IRQ_REGS_H
 
+#include <linux/sched.h>
 #include <linux/percpu.h>
 
 /*
diff --git a/include/linux/of_address.h b/include/linux/of_address.h
index 88bc943405cd..60c30168d48d 100644
--- a/include/linux/of_address.h
+++ b/include/linux/of_address.h
@@ -1,6 +1,7 @@
 /* SPDX-License-Identifier: GPL-2.0 */
 #ifndef __OF_ADDRESS_H
 #define __OF_ADDRESS_H
+#include <linux/sched.h>
 #include <linux/ioport.h>
 #include <linux/errno.h>
 #include <linux/of.h>
diff --git a/include/linux/random.h b/include/linux/random.h
index f45b8be3e3c4..0accd9277e95 100644
--- a/include/linux/random.h
+++ b/include/linux/random.h
@@ -7,6 +7,7 @@
 #ifndef _LINUX_RANDOM_H
 #define _LINUX_RANDOM_H
 
+#include <linux/sched.h>
 #include <linux/bug.h>
 #include <linux/kernel.h>
 #include <linux/list.h>
diff --git a/include/linux/topology.h b/include/linux/topology.h
index 7634cd737061..4bd993bc9513 100644
--- a/include/linux/topology.h
+++ b/include/linux/topology.h
@@ -27,6 +27,7 @@
 #ifndef _LINUX_TOPOLOGY_H
 #define _LINUX_TOPOLOGY_H
 
+#include <linux/sched.h>
 #include <linux/arch_topology.h>
 #include <linux/cpumask.h>
 #include <linux/bitops.h>
diff --git a/init/calibrate.c b/init/calibrate.c
index f3831272f113..45002e27e385 100644
--- a/init/calibrate.c
+++ b/init/calibrate.c
@@ -10,6 +10,7 @@
 #include <linux/init.h>
 #include <linux/timex.h>
 #include <linux/smp.h>
+#include <linux/sched.h>
 #include <linux/percpu.h>
 
 unsigned long lpj_fine;
diff --git a/kernel/bpf/bpf_lru_list.h b/kernel/bpf/bpf_lru_list.h
index 6b12f06ee18c..5aed0c288c76 100644
--- a/kernel/bpf/bpf_lru_list.h
+++ b/kernel/bpf/bpf_lru_list.h
@@ -4,6 +4,7 @@
 #ifndef __BPF_LRU_LIST_H_
 #define __BPF_LRU_LIST_H_
 
+#include <linux/sched.h>
 #include <linux/list.h>
 #include <linux/spinlock_types.h>
 
diff --git a/kernel/bpf/percpu_freelist.h b/kernel/bpf/percpu_freelist.h
index 3c76553cfe57..3bc7a2bbe79b 100644
--- a/kernel/bpf/percpu_freelist.h
+++ b/kernel/bpf/percpu_freelist.h
@@ -3,6 +3,7 @@
  */
 #ifndef __PERCPU_FREELIST_H__
 #define __PERCPU_FREELIST_H__
+#include <linux/sched.h>
 #include <linux/spinlock.h>
 #include <linux/percpu.h>
 
diff --git a/kernel/sched/cpuacct.c b/kernel/sched/cpuacct.c
index 104a1bade14f..fb5f52e889a4 100644
--- a/kernel/sched/cpuacct.c
+++ b/kernel/sched/cpuacct.c
@@ -5,8 +5,8 @@
  * Based on the work by Paul Menage (menage@google.com) and Balbir Singh
  * (balbir@in.ibm.com).
  */
-#include <asm/irq_regs.h>
 #include "sched.h"
+#include <asm/irq_regs.h>
 
 /* Time spent by the tasks of the CPU accounting group executing in ... */
 enum cpuacct_stat_index {
diff --git a/lib/irq_regs.c b/lib/irq_regs.c
index 0d545a93070e..c9d8235f6444 100644
--- a/lib/irq_regs.c
+++ b/lib/irq_regs.c
@@ -5,6 +5,7 @@
  * Written by David Howells (dhowells@redhat.com)
  */
 #include <linux/export.h>
+#include <linux/sched.h>
 #include <linux/percpu.h>
 #include <asm/irq_regs.h>
 
-- 
2.33.0
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help