hc
2024-05-10 61598093bbdd283a7edc367d900f223070ead8d2
kernel/kernel/sched/loadavg.c
....@@ -231,21 +231,34 @@
231231 return calc_load_idx & 1;
232232 }
233233
234
-void calc_load_nohz_start(void)
234
+static void calc_load_nohz_fold(struct rq *rq)
235235 {
236
- struct rq *this_rq = this_rq();
237236 long delta;
238237
239
- /*
240
- * We're going into NO_HZ mode, if there's any pending delta, fold it
241
- * into the pending NO_HZ delta.
242
- */
243
- delta = calc_load_fold_active(this_rq, 0);
238
+ delta = calc_load_fold_active(rq, 0);
244239 if (delta) {
245240 int idx = calc_load_write_idx();
246241
247242 atomic_long_add(delta, &calc_load_nohz[idx]);
248243 }
244
+}
245
+
246
+void calc_load_nohz_start(void)
247
+{
248
+ /*
249
+ * We're going into NO_HZ mode, if there's any pending delta, fold it
250
+ * into the pending NO_HZ delta.
251
+ */
252
+ calc_load_nohz_fold(this_rq());
253
+}
254
+
255
+/*
256
+ * Keep track of the load for NOHZ_FULL, must be called between
257
+ * calc_load_nohz_{start,stop}().
258
+ */
259
+void calc_load_nohz_remote(struct rq *rq)
260
+{
261
+ calc_load_nohz_fold(rq);
249262 }
250263
251264 void calc_load_nohz_stop(void)
....@@ -268,7 +281,7 @@
268281 this_rq->calc_load_update += LOAD_FREQ;
269282 }
270283
271
-static long calc_load_nohz_fold(void)
284
+static long calc_load_nohz_read(void)
272285 {
273286 int idx = calc_load_read_idx();
274287 long delta = 0;
....@@ -323,7 +336,7 @@
323336 }
324337 #else /* !CONFIG_NO_HZ_COMMON */
325338
326
-static inline long calc_load_nohz_fold(void) { return 0; }
339
+static inline long calc_load_nohz_read(void) { return 0; }
327340 static inline void calc_global_nohz(void) { }
328341
329342 #endif /* CONFIG_NO_HZ_COMMON */
....@@ -334,7 +347,7 @@
334347 *
335348 * Called from the global timer code.
336349 */
337
-void calc_global_load(unsigned long ticks)
350
+void calc_global_load(void)
338351 {
339352 unsigned long sample_window;
340353 long active, delta;
....@@ -346,7 +359,7 @@
346359 /*
347360 * Fold the 'old' NO_HZ-delta to include all NO_HZ CPUs.
348361 */
349
- delta = calc_load_nohz_fold();
362
+ delta = calc_load_nohz_read();
350363 if (delta)
351364 atomic_long_add(delta, &calc_load_tasks);
352365