Merge tag 'sched-urgent-2025-07-20' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull scheduler fix from Thomas Gleixner: "A single fix for the scheduler. A recent commit changed the runqueue counter nr_uninterruptible to an unsigned int. Due to the fact that the counters are not updated on migration of a uninterruptble task to a different CPU, these counters can exceed INT_MAX. The counter is cast to long in the load average calculation, which means that the cast expands into negative space resulting in bogus load average values. Convert it back to unsigned long to fix this. * tag 'sched-urgent-2025-07-20' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: sched: Change nr_uninterruptible type to unsigned long
This commit is contained in:
@@ -80,7 +80,7 @@ long calc_load_fold_active(struct rq *this_rq, long adjust)
|
||||
long nr_active, delta = 0;
|
||||
|
||||
nr_active = this_rq->nr_running - adjust;
|
||||
nr_active += (int)this_rq->nr_uninterruptible;
|
||||
nr_active += (long)this_rq->nr_uninterruptible;
|
||||
|
||||
if (nr_active != this_rq->calc_load_active) {
|
||||
delta = nr_active - this_rq->calc_load_active;
|
||||
|
||||
@@ -1149,7 +1149,7 @@ struct rq {
|
||||
* one CPU and if it got migrated afterwards it may decrease
|
||||
* it on another CPU. Always updated under the runqueue lock:
|
||||
*/
|
||||
unsigned int nr_uninterruptible;
|
||||
unsigned long nr_uninterruptible;
|
||||
|
||||
union {
|
||||
struct task_struct __rcu *donor; /* Scheduler context */
|
||||
|
||||
Reference in New Issue
Block a user