* [android-common:android14-kiwi-6.1 166/166] kernel/sched/pelt.c:180:1: warning: no previous prototype for function '___update_load_sum'
@ 2026-07-02 11:49 kernel test robot
0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2026-07-02 11:49 UTC (permalink / raw)
To: cros-kernel-buildreports; +Cc: oe-kbuild-all
tree: https://android.googlesource.com/kernel/common android14-kiwi-6.1
head: 2a9e8b82544e3c1e2678c2c07bef3d3706156ee4
commit: eb9686932be35a47b6d621cc033a861b51e42741 [166/166] ANDROID: sched: Export symbols needed for vendor hooks
config: arm64-allmodconfig (https://download.01.org/0day-ci/archive/20260702/202607021907.SLt4sGGE-lkp@intel.com/config)
compiler: clang version 23.0.0git (https://github.com/llvm/llvm-project 6cc609bb250b21b47fc7d394b4019101e9983597)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20260702/202607021907.SLt4sGGE-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/202607021907.SLt4sGGE-lkp@intel.com/
All warnings (new ones prefixed by >>):
In file included from <built-in>:3:
In file included from include/linux/compiler_types.h:94:
include/linux/compiler-clang.h:24:9: warning: '__SANITIZE_ADDRESS__' macro redefined [-Wmacro-redefined]
24 | #define __SANITIZE_ADDRESS__
| ^
<built-in>:368:9: note: previous definition is here
368 | #define __SANITIZE_ADDRESS__ 1
| ^
In file included from kernel/sched/build_policy.c:49:
>> kernel/sched/pelt.c:180:1: warning: no previous prototype for function '___update_load_sum' [-Wmissing-prototypes]
180 | ___update_load_sum(u64 now, struct sched_avg *sa,
| ^
kernel/sched/pelt.c:179:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
179 | int
| ^
| static
>> kernel/sched/pelt.c:258:1: warning: no previous prototype for function '___update_load_avg' [-Wmissing-prototypes]
258 | ___update_load_avg(struct sched_avg *sa, unsigned long load)
| ^
kernel/sched/pelt.c:257:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
257 | void
| ^
| static
kernel/sched/pelt.c:480:5: warning: no previous prototype for function 'sched_pelt_multiplier' [-Wmissing-prototypes]
480 | int sched_pelt_multiplier(struct ctl_table *table, int write, void *buffer,
| ^
kernel/sched/pelt.c:480:1: note: declare 'static' if the function is not intended to be used outside of this translation unit
480 | int sched_pelt_multiplier(struct ctl_table *table, int write, void *buffer,
| ^
| static
4 warnings generated.
vim +/___update_load_sum +180 kernel/sched/pelt.c
c079629862b20c Vincent Guittot 2018-06-28 150
c079629862b20c Vincent Guittot 2018-06-28 151 /*
c079629862b20c Vincent Guittot 2018-06-28 152 * We can represent the historical contribution to runnable average as the
c079629862b20c Vincent Guittot 2018-06-28 153 * coefficients of a geometric series. To do this we sub-divide our runnable
c079629862b20c Vincent Guittot 2018-06-28 154 * history into segments of approximately 1ms (1024us); label the segment that
c079629862b20c Vincent Guittot 2018-06-28 155 * occurred N-ms ago p_N, with p_0 corresponding to the current period, e.g.
c079629862b20c Vincent Guittot 2018-06-28 156 *
c079629862b20c Vincent Guittot 2018-06-28 157 * [<- 1024us ->|<- 1024us ->|<- 1024us ->| ...
c079629862b20c Vincent Guittot 2018-06-28 158 * p0 p1 p2
c079629862b20c Vincent Guittot 2018-06-28 159 * (now) (~1ms ago) (~2ms ago)
c079629862b20c Vincent Guittot 2018-06-28 160 *
c079629862b20c Vincent Guittot 2018-06-28 161 * Let u_i denote the fraction of p_i that the entity was runnable.
c079629862b20c Vincent Guittot 2018-06-28 162 *
c079629862b20c Vincent Guittot 2018-06-28 163 * We then designate the fractions u_i as our co-efficients, yielding the
c079629862b20c Vincent Guittot 2018-06-28 164 * following representation of historical load:
c079629862b20c Vincent Guittot 2018-06-28 165 * u_0 + u_1*y + u_2*y^2 + u_3*y^3 + ...
c079629862b20c Vincent Guittot 2018-06-28 166 *
c079629862b20c Vincent Guittot 2018-06-28 167 * We choose y based on the with of a reasonably scheduling period, fixing:
c079629862b20c Vincent Guittot 2018-06-28 168 * y^32 = 0.5
c079629862b20c Vincent Guittot 2018-06-28 169 *
c079629862b20c Vincent Guittot 2018-06-28 170 * This means that the contribution to load ~32ms ago (u_32) will be weighted
c079629862b20c Vincent Guittot 2018-06-28 171 * approximately half as much as the contribution to load within the last ms
c079629862b20c Vincent Guittot 2018-06-28 172 * (u_0).
c079629862b20c Vincent Guittot 2018-06-28 173 *
c079629862b20c Vincent Guittot 2018-06-28 174 * When a period "rolls over" and we have new u_0`, multiplying the previous
c079629862b20c Vincent Guittot 2018-06-28 175 * sum again by y is sufficient to update:
c079629862b20c Vincent Guittot 2018-06-28 176 * load_avg = u_0` + y*(u_0 + u_1*y + u_2*y^2 + ... )
c079629862b20c Vincent Guittot 2018-06-28 177 * = u_0 + u_1*y + u_2*y^2 + ... [re-labeling u_i --> u_{i+1}]
c079629862b20c Vincent Guittot 2018-06-28 178 */
eb9686932be35a Rick Yiu 2023-08-28 179 int
23127296889fe8 Vincent Guittot 2019-01-23 @180 ___update_load_sum(u64 now, struct sched_avg *sa,
9f68395333ad7f Vincent Guittot 2020-02-24 181 unsigned long load, unsigned long runnable, int running)
c079629862b20c Vincent Guittot 2018-06-28 182 {
c079629862b20c Vincent Guittot 2018-06-28 183 u64 delta;
c079629862b20c Vincent Guittot 2018-06-28 184
c079629862b20c Vincent Guittot 2018-06-28 185 delta = now - sa->last_update_time;
c079629862b20c Vincent Guittot 2018-06-28 186 /*
c079629862b20c Vincent Guittot 2018-06-28 187 * This should only happen when time goes backwards, which it
c079629862b20c Vincent Guittot 2018-06-28 188 * unfortunately does during sched clock init when we swap over to TSC.
c079629862b20c Vincent Guittot 2018-06-28 189 */
c079629862b20c Vincent Guittot 2018-06-28 190 if ((s64)delta < 0) {
c079629862b20c Vincent Guittot 2018-06-28 191 sa->last_update_time = now;
c079629862b20c Vincent Guittot 2018-06-28 192 return 0;
c079629862b20c Vincent Guittot 2018-06-28 193 }
c079629862b20c Vincent Guittot 2018-06-28 194
c079629862b20c Vincent Guittot 2018-06-28 195 /*
c079629862b20c Vincent Guittot 2018-06-28 196 * Use 1024ns as the unit of measurement since it's a reasonable
c079629862b20c Vincent Guittot 2018-06-28 197 * approximation of 1us and fast to compute.
c079629862b20c Vincent Guittot 2018-06-28 198 */
c079629862b20c Vincent Guittot 2018-06-28 199 delta >>= 10;
c079629862b20c Vincent Guittot 2018-06-28 200 if (!delta)
c079629862b20c Vincent Guittot 2018-06-28 201 return 0;
c079629862b20c Vincent Guittot 2018-06-28 202
c079629862b20c Vincent Guittot 2018-06-28 203 sa->last_update_time += delta << 10;
c079629862b20c Vincent Guittot 2018-06-28 204
c079629862b20c Vincent Guittot 2018-06-28 205 /*
c079629862b20c Vincent Guittot 2018-06-28 206 * running is a subset of runnable (weight) so running can't be set if
c079629862b20c Vincent Guittot 2018-06-28 207 * runnable is clear. But there are some corner cases where the current
c079629862b20c Vincent Guittot 2018-06-28 208 * se has been already dequeued but cfs_rq->curr still points to it.
c079629862b20c Vincent Guittot 2018-06-28 209 * This means that weight will be 0 but not running for a sched_entity
c079629862b20c Vincent Guittot 2018-06-28 210 * but also for a cfs_rq if the latter becomes idle. As an example,
c079629862b20c Vincent Guittot 2018-06-28 211 * this happens during idle_balance() which calls
d040e0734fb3de Peng Wang 2019-12-13 212 * update_blocked_averages().
d040e0734fb3de Peng Wang 2019-12-13 213 *
d040e0734fb3de Peng Wang 2019-12-13 214 * Also see the comment in accumulate_sum().
c079629862b20c Vincent Guittot 2018-06-28 215 */
c079629862b20c Vincent Guittot 2018-06-28 216 if (!load)
9f68395333ad7f Vincent Guittot 2020-02-24 217 runnable = running = 0;
c079629862b20c Vincent Guittot 2018-06-28 218
c079629862b20c Vincent Guittot 2018-06-28 219 /*
c079629862b20c Vincent Guittot 2018-06-28 220 * Now we know we crossed measurement unit boundaries. The *_avg
c079629862b20c Vincent Guittot 2018-06-28 221 * accrues by two steps:
c079629862b20c Vincent Guittot 2018-06-28 222 *
c079629862b20c Vincent Guittot 2018-06-28 223 * Step 1: accumulate *_sum since last_update_time. If we haven't
c079629862b20c Vincent Guittot 2018-06-28 224 * crossed period boundaries, finish.
c079629862b20c Vincent Guittot 2018-06-28 225 */
9f68395333ad7f Vincent Guittot 2020-02-24 226 if (!accumulate_sum(delta, sa, load, runnable, running))
c079629862b20c Vincent Guittot 2018-06-28 227 return 0;
c079629862b20c Vincent Guittot 2018-06-28 228
c079629862b20c Vincent Guittot 2018-06-28 229 return 1;
c079629862b20c Vincent Guittot 2018-06-28 230 }
eb9686932be35a Rick Yiu 2023-08-28 231 EXPORT_SYMBOL_GPL(___update_load_sum);
c079629862b20c Vincent Guittot 2018-06-28 232
95d685935a2edf Vincent Guittot 2020-05-06 233 /*
95d685935a2edf Vincent Guittot 2020-05-06 234 * When syncing *_avg with *_sum, we must take into account the current
95d685935a2edf Vincent Guittot 2020-05-06 235 * position in the PELT segment otherwise the remaining part of the segment
95d685935a2edf Vincent Guittot 2020-05-06 236 * will be considered as idle time whereas it's not yet elapsed and this will
95d685935a2edf Vincent Guittot 2020-05-06 237 * generate unwanted oscillation in the range [1002..1024[.
95d685935a2edf Vincent Guittot 2020-05-06 238 *
95d685935a2edf Vincent Guittot 2020-05-06 239 * The max value of *_sum varies with the position in the time segment and is
95d685935a2edf Vincent Guittot 2020-05-06 240 * equals to :
95d685935a2edf Vincent Guittot 2020-05-06 241 *
95d685935a2edf Vincent Guittot 2020-05-06 242 * LOAD_AVG_MAX*y + sa->period_contrib
95d685935a2edf Vincent Guittot 2020-05-06 243 *
95d685935a2edf Vincent Guittot 2020-05-06 244 * which can be simplified into:
95d685935a2edf Vincent Guittot 2020-05-06 245 *
95d685935a2edf Vincent Guittot 2020-05-06 246 * LOAD_AVG_MAX - 1024 + sa->period_contrib
95d685935a2edf Vincent Guittot 2020-05-06 247 *
95d685935a2edf Vincent Guittot 2020-05-06 248 * because LOAD_AVG_MAX*y == LOAD_AVG_MAX-1024
95d685935a2edf Vincent Guittot 2020-05-06 249 *
95d685935a2edf Vincent Guittot 2020-05-06 250 * The same care must be taken when a sched entity is added, updated or
95d685935a2edf Vincent Guittot 2020-05-06 251 * removed from a cfs_rq and we need to update sched_avg. Scheduler entities
95d685935a2edf Vincent Guittot 2020-05-06 252 * and the cfs rq, to which they are attached, have the same position in the
95d685935a2edf Vincent Guittot 2020-05-06 253 * time segment because they use the same clock. This means that we can use
95d685935a2edf Vincent Guittot 2020-05-06 254 * the period_contrib of cfs_rq when updating the sched_avg of a sched_entity
95d685935a2edf Vincent Guittot 2020-05-06 255 * if it's more convenient.
95d685935a2edf Vincent Guittot 2020-05-06 256 */
eb9686932be35a Rick Yiu 2023-08-28 257 void
0dacee1bfa70e1 Vincent Guittot 2020-02-24 @258 ___update_load_avg(struct sched_avg *sa, unsigned long load)
c079629862b20c Vincent Guittot 2018-06-28 259 {
87e867b4269f29 Vincent Guittot 2020-06-12 260 u32 divider = get_pelt_divider(sa);
c079629862b20c Vincent Guittot 2018-06-28 261
c079629862b20c Vincent Guittot 2018-06-28 262 /*
c079629862b20c Vincent Guittot 2018-06-28 263 * Step 2: update *_avg.
c079629862b20c Vincent Guittot 2018-06-28 264 */
c079629862b20c Vincent Guittot 2018-06-28 265 sa->load_avg = div_u64(load * sa->load_sum, divider);
9f68395333ad7f Vincent Guittot 2020-02-24 266 sa->runnable_avg = div_u64(sa->runnable_sum, divider);
523e979d316481 Vincent Guittot 2018-06-28 267 WRITE_ONCE(sa->util_avg, sa->util_sum / divider);
c079629862b20c Vincent Guittot 2018-06-28 268 }
eb9686932be35a Rick Yiu 2023-08-28 269 EXPORT_SYMBOL_GPL(___update_load_avg);
c079629862b20c Vincent Guittot 2018-06-28 270
:::::: The code at line 180 was first introduced by commit
:::::: 23127296889fe84b0762b191b5d041e8ba6f2599 sched/fair: Update scale invariance of PELT
:::::: TO: Vincent Guittot <vincent.guittot@linaro.org>
:::::: CC: Ingo Molnar <mingo@kernel.org>
--
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:[~2026-07-02 11:50 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-02 11:49 [android-common:android14-kiwi-6.1 166/166] kernel/sched/pelt.c:180:1: warning: no previous prototype for function '___update_load_sum' 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.