On Thursday 14 June 2007, Ingo Molnar wrote: >From: Ingo Molnar <[EMAIL PROTECTED]> >Subject: [patch] sched: fix SysRq-N (normalize RT tasks) > >Gene Heskett reported the following problem while testing CFS: SysRq-N >is not always effective in normalizing tasks back to SCHED_OTHER. > >the reason for that turns out to be the following bug: >normalize_rt_tasks() uses for_each_process() to iterate through all >tasks in the system. The problem is, this method does not iterate >through all tasks, it iterates through all thread groups. The proper >mechanism to enumerate all tasks is to use a do_each_thread() + >while_each_thread() loop. > >obvious bugfix for v2.6.22 inclusion. -stable candidate as well. > >Reported-by: Gene Heskett <[EMAIL PROTECTED]> >Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]> >--- > kernel/sched.c | 8 +++++--- > 1 file changed, 5 insertions(+), 3 deletions(-) > >Index: linux/kernel/sched.c >=================================================================== >--- linux/kernel/sched.c >+++ linux/kernel/sched.c >@@ -7071,12 +7071,13 @@ EXPORT_SYMBOL(__might_sleep); > void normalize_rt_tasks(void) > { > struct prio_array *array; >- struct task_struct *p; >+ struct task_struct *g, *p; > unsigned long flags; > struct rq *rq; > > read_lock_irq(&tasklist_lock); >- for_each_process(p) { >+ >+ do_each_thread(g, p) { > if (!rt_task(p)) > continue; > >@@ -7094,7 +7095,8 @@ void normalize_rt_tasks(void) > > __task_rq_unlock(rq); > spin_unlock_irqrestore(&p->pi_lock, flags); >- } >+ } while_each_thread(g, p); >+ > read_unlock_irq(&tasklist_lock); > }
Ingo: I appended this patch to the cfs-v16 patch for 2.6.22-rc4, and got this while applying it: patching file kernel/sched.c Hunk #1 FAILED at 7071. Hunk #2 FAILED at 7095. 2 out of 2 hunks FAILED -- saving rejects to file kernel/sched.c.rej done -- Cheers, Gene "There are four boxes to be used in defense of liberty: soap, ballot, jury, and ammo. Please use in that order." -Ed Howdershelt (Author) One man tells a falsehood, a hundred repeat it as true. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/