diff --git a/[refs] b/[refs] index 7bc29a446718..12d18dbf0db8 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3055addadbe9bfb2365006a1c13fd342a8d30d52 +refs/heads/master: db1b1fefc2cecbff2e4214062fa8c680cb6e7b7d diff --git a/trunk/include/linux/sched.h b/trunk/include/linux/sched.h index d04186d8cc68..ab84adf5bb9a 100644 --- a/trunk/include/linux/sched.h +++ b/trunk/include/linux/sched.h @@ -100,6 +100,7 @@ DECLARE_PER_CPU(unsigned long, process_counts); extern int nr_processes(void); extern unsigned long nr_running(void); extern unsigned long nr_uninterruptible(void); +extern unsigned long nr_active(void); extern unsigned long nr_iowait(void); #include diff --git a/trunk/kernel/sched.c b/trunk/kernel/sched.c index a9ecac398bb9..6e52e0adff80 100644 --- a/trunk/kernel/sched.c +++ b/trunk/kernel/sched.c @@ -1658,6 +1658,21 @@ unsigned long nr_iowait(void) return sum; } +unsigned long nr_active(void) +{ + unsigned long i, running = 0, uninterruptible = 0; + + for_each_online_cpu(i) { + running += cpu_rq(i)->nr_running; + uninterruptible += cpu_rq(i)->nr_uninterruptible; + } + + if (unlikely((long)uninterruptible < 0)) + uninterruptible = 0; + + return running + uninterruptible; +} + #ifdef CONFIG_SMP /* diff --git a/trunk/kernel/timer.c b/trunk/kernel/timer.c index 9062a82ee8ec..6b812c04737b 100644 --- a/trunk/kernel/timer.c +++ b/trunk/kernel/timer.c @@ -825,7 +825,7 @@ void update_process_times(int user_tick) */ static unsigned long count_active_tasks(void) { - return (nr_running() + nr_uninterruptible()) * FIXED_1; + return nr_active() * FIXED_1; } /*