* [openeuler:OLK-6.6 3355/3355] kernel/xsched/cfs.c:22:6: warning: no previous prototype for function 'xs_rq_add'
@ 2025-11-28 15:27 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2025-11-28 15:27 UTC (permalink / raw)
To: kernel, Zicheng Qu; +Cc: oe-kbuild-all
tree: https://gitee.com/openeuler/kernel.git OLK-6.6
head: ae3faae9efa6dabe1e7613b5e5d3758ffaefb86a
commit: 024b851138509252da4531dc2e69b1e8df50fd3b [3355/3355] xsched: Add xsched CFS class
config: loongarch-allyesconfig (https://download.01.org/0day-ci/archive/20251128/202511282349.cceTk3rf-lkp@intel.com/config)
compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project 9e9fe08b16ea2c4d9867fb4974edf2a3776d6ece)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20251128/202511282349.cceTk3rf-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202511282349.cceTk3rf-lkp@intel.com/
All warnings (new ones prefixed by >>):
>> kernel/xsched/cfs.c:22:6: warning: no previous prototype for function 'xs_rq_add' [-Wmissing-prototypes]
22 | void xs_rq_add(struct xsched_entity_cfs *xse)
| ^
kernel/xsched/cfs.c:22:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
22 | void xs_rq_add(struct xsched_entity_cfs *xse)
| ^
| static
>> kernel/xsched/cfs.c:45:6: warning: no previous prototype for function 'xs_rq_remove' [-Wmissing-prototypes]
45 | void xs_rq_remove(struct xsched_entity_cfs *xse)
| ^
kernel/xsched/cfs.c:45:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
45 | void xs_rq_remove(struct xsched_entity_cfs *xse)
| ^
| static
>> kernel/xsched/cfs.c:159:6: warning: no previous prototype for function 'rq_init_fair' [-Wmissing-prototypes]
159 | void rq_init_fair(struct xsched_cu *xcu)
| ^
kernel/xsched/cfs.c:159:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
159 | void rq_init_fair(struct xsched_cu *xcu)
| ^
| static
>> kernel/xsched/cfs.c:164:6: warning: no previous prototype for function 'xse_init_fair' [-Wmissing-prototypes]
164 | void xse_init_fair(struct xsched_entity *xse)
| ^
kernel/xsched/cfs.c:164:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
164 | void xse_init_fair(struct xsched_entity *xse)
| ^
| static
>> kernel/xsched/cfs.c:169:6: warning: no previous prototype for function 'xse_deinit_fair' [-Wmissing-prototypes]
169 | void xse_deinit_fair(struct xsched_entity *xse)
| ^
kernel/xsched/cfs.c:169:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
169 | void xse_deinit_fair(struct xsched_entity *xse)
| ^
| static
5 warnings generated.
vim +/xs_rq_add +22 kernel/xsched/cfs.c
18
19 #define CFS_INNER_RQ_EMPTY(cfs_xse) \
20 ((cfs_xse)->xruntime == XSCHED_TIME_INF)
21
> 22 void xs_rq_add(struct xsched_entity_cfs *xse)
23 {
24 struct xsched_rq_cfs *cfs_rq = xse->cfs_rq;
25 struct rb_node **link = &cfs_rq->ctx_timeline.rb_root.rb_node;
26 struct rb_node *parent = NULL;
27 struct xsched_entity_cfs *entry;
28 bool leftmost = true;
29
30 while (*link) {
31 parent = *link;
32 entry = rb_entry(parent, struct xsched_entity_cfs, run_node);
33 if (xse->xruntime <= entry->xruntime) {
34 link = &parent->rb_left;
35 } else {
36 link = &parent->rb_right;
37 leftmost = false;
38 }
39 }
40
41 rb_link_node(&xse->run_node, parent, link);
42 rb_insert_color_cached(&xse->run_node, &cfs_rq->ctx_timeline, leftmost);
43 }
44
> 45 void xs_rq_remove(struct xsched_entity_cfs *xse)
46 {
47 struct xsched_rq_cfs *cfs_rq = xse->cfs_rq;
48
49 rb_erase_cached(&xse->run_node, &cfs_rq->ctx_timeline);
50 }
51
52 /**
53 * xs_cfs_rq_update() - Update entity's runqueue position with new xruntime
54 */
55 static void xs_cfs_rq_update(struct xsched_entity_cfs *xse_cfs, u64 new_xrt)
56 {
57 xs_rq_remove(xse_cfs);
58 xse_cfs->xruntime = new_xrt;
59 xs_rq_add(xse_cfs);
60 }
61
62 static inline struct xsched_entity_cfs *
63 xs_pick_first(struct xsched_rq_cfs *cfs_rq)
64 {
65 struct xsched_entity_cfs *xse_cfs;
66 struct rb_node *left = rb_first_cached(&cfs_rq->ctx_timeline);
67
68 if (!left)
69 return NULL;
70
71 xse_cfs = rb_entry(left, struct xsched_entity_cfs, run_node);
72 return xse_cfs;
73 }
74
75 /**
76 * xs_update() - Account xruntime and runtime metrics.
77 * @xse_cfs: Point to CFS scheduling entity.
78 * @delta: Execution time in last period
79 */
80 static void xs_update(struct xsched_entity_cfs *xse_cfs, u64 delta)
81 {
82 u64 new_xrt = xse_cfs->xruntime + delta * xse_cfs->weight;
83
84 xs_cfs_rq_update(xse_cfs, new_xrt);
85 xse_cfs->sum_exec_runtime += delta;
86 }
87
88 /*
89 * Xsched Fair class methods
90 * For rq manipulation we rely on root runqueue lock already acquired in core.
91 * Access xsched_group_xcu_priv requires no locks because one thread per XCU.
92 */
93 static void dequeue_ctx_fair(struct xsched_entity *xse)
94 {
95 struct xsched_cu *xcu = xse->xcu;
96 struct xsched_entity_cfs *first;
97 struct xsched_entity_cfs *xse_cfs = &xse->cfs;
98
99 xs_rq_remove(xse_cfs);
100
101 first = xs_pick_first(&xcu->xrq.cfs);
102 xcu->xrq.cfs.min_xruntime = (first) ? first->xruntime : XSCHED_TIME_INF;
103 }
104
105 /**
106 * enqueue_ctx_fair() - Add context to the runqueue
107 * @xse: xsched entity of context
108 * @xcu: executor
109 *
110 * In contrary to enqueue_task it is called once on context init.
111 * Although groups reside in tree, their nodes not counted in nr_running.
112 * The xruntime of a group xsched entitry represented by min xruntime inside.
113 */
114 static void enqueue_ctx_fair(struct xsched_entity *xse, struct xsched_cu *xcu)
115 {
116 struct xsched_entity_cfs *first;
117 struct xsched_rq_cfs *rq;
118 struct xsched_entity_cfs *xse_cfs = &xse->cfs;
119
120 rq = xse_cfs->cfs_rq = &xcu->xrq.cfs;
121
122 /* If no XSE of only empty groups */
123 if (xs_pick_first(rq) == NULL || rq->min_xruntime == XSCHED_TIME_INF)
124 rq->min_xruntime = xse_cfs->xruntime;
125 else
126 xse_cfs->xruntime = max(xse_cfs->xruntime, rq->min_xruntime);
127
128 xs_rq_add(xse_cfs);
129
130 first = xs_pick_first(&xcu->xrq.cfs);
131 xcu->xrq.cfs.min_xruntime = (first) ? first->xruntime : XSCHED_TIME_INF;
132 }
133
134 static struct xsched_entity *pick_next_ctx_fair(struct xsched_cu *xcu)
135 {
136 struct xsched_entity_cfs *xse;
137 struct xsched_rq_cfs *rq = &xcu->xrq.cfs;
138
139 xse = xs_pick_first(rq);
140 if (!xse)
141 return NULL;
142
143 return container_of(xse, struct xsched_entity, cfs);
144 }
145
146 static inline bool
147 xs_should_preempt_fair(struct xsched_entity *xse)
148 {
149 return (atomic_read(&xse->submitted_one_kick) >= XSCHED_CFS_KICK_SLICE);
150 }
151
152 static void put_prev_ctx_fair(struct xsched_entity *xse)
153 {
154 struct xsched_entity_cfs *prev = &xse->cfs;
155
156 xs_update(prev, xse->last_exec_runtime);
157 }
158
> 159 void rq_init_fair(struct xsched_cu *xcu)
160 {
161 xcu->xrq.cfs.ctx_timeline = RB_ROOT_CACHED;
162 }
163
> 164 void xse_init_fair(struct xsched_entity *xse)
165 {
166 xse->cfs.weight = XSCHED_CFS_WEIGHT_DFLT;
167 }
168
> 169 void xse_deinit_fair(struct xsched_entity *xse)
170 {
171 /* TODO Cgroup exit */
172 }
173
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2025-11-28 15:28 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-11-28 15:27 [openeuler:OLK-6.6 3355/3355] kernel/xsched/cfs.c:22:6: warning: no previous prototype for function 'xs_rq_add' kernel test robot
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.