summaryrefslogtreecommitdiff
path: root/include/linux/sched/ext.h
diff options
context:
space:
mode:
authorTejun Heo <tj@kernel.org>2024-07-09 03:30:55 +0300
committerTejun Heo <tj@kernel.org>2024-07-09 03:30:55 +0300
commitd4af01c3731ff9c6e224d7183f8226a56d72b56c (patch)
treeb572171f55eaad7f4114970e75f0a58e14f7cfc6 /include/linux/sched/ext.h
parente196c908f92795e76377d2392a16f9fd5d508a61 (diff)
downloadlinux-d4af01c3731ff9c6e224d7183f8226a56d72b56c.tar.xz
sched_ext: Take out ->priq and ->flags from scx_dsq_node
struct scx_dsq_node contains two data structure nodes to link the containing task to a DSQ and a flags field that is protected by the lock of the associated DSQ. One reason why they are grouped into a struct is to use the type independently as a cursor node when iterating tasks on a DSQ. However, when iterating, the cursor only needs to be linked on the FIFO list and the rb_node part ends up inflating the size of the iterator data structure unnecessarily making it potentially too expensive to place it on stack. Take ->priq and ->flags out of scx_dsq_node and put them in sched_ext_entity as ->dsq_priq and ->dsq_flags, respectively. scx_dsq_node is renamed to scx_dsq_list_node and the field names are renamed accordingly. This will help implementing DSQ task iterator that can be allocated on stack. No functional change intended. Signed-off-by: Tejun Heo <tj@kernel.org> Suggested-by: Alexei Starovoitov <ast@kernel.org> Acked-by: Alexei Starovoitov <ast@kernel.org> Cc: David Vernet <void@manifault.com>
Diffstat (limited to 'include/linux/sched/ext.h')
-rw-r--r--include/linux/sched/ext.h10
1 files changed, 5 insertions, 5 deletions
diff --git a/include/linux/sched/ext.h b/include/linux/sched/ext.h
index fe9a67ffe6b1..eb9cfd18a923 100644
--- a/include/linux/sched/ext.h
+++ b/include/linux/sched/ext.h
@@ -121,10 +121,8 @@ enum scx_kf_mask {
__SCX_KF_TERMINAL = SCX_KF_ENQUEUE | SCX_KF_SELECT_CPU | SCX_KF_REST,
};
-struct scx_dsq_node {
- struct list_head list; /* dispatch order */
- struct rb_node priq; /* p->scx.dsq_vtime order */
- u32 flags; /* SCX_TASK_DSQ_* flags */
+struct scx_dsq_list_node {
+ struct list_head node;
};
/*
@@ -133,7 +131,9 @@ struct scx_dsq_node {
*/
struct sched_ext_entity {
struct scx_dispatch_q *dsq;
- struct scx_dsq_node dsq_node; /* protected by dsq lock */
+ struct scx_dsq_list_node dsq_list; /* dispatch order */
+ struct rb_node dsq_priq; /* p->scx.dsq_vtime order */
+ u32 dsq_flags; /* protected by DSQ lock */
u32 flags; /* protected by rq lock */
u32 weight;
s32 sticky_cpu;