lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 14 Jun 2007 10:12:30 -0400 From: Gene Heskett <gene.heskett@...il.com> To: Ingo Molnar <mingo@...e.hu> Cc: Linus Torvalds <torvalds@...ux-foundation.org>, Andrew Morton <akpm@...ux-foundation.org>, linux-kernel@...r.kernel.org, Chris Wright <chrisw@...s-sol.org> Subject: Re: [patch] sched: fix SysRq-N (normalize RT tasks) On Thursday 14 June 2007, Ingo Molnar wrote: >From: Ingo Molnar <mingo@...e.hu> >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 <gene.heskett@...il.com> >Signed-off-by: Ingo Molnar <mingo@...e.hu> >--- > 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); > } When I looked at sched.c, I found it about 1000 lines shorter than the offsets listed above. So I took it back out and will test the plain 2.6.22-rc4-cfs-v16 shortly. -- 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) To save a single life is better than to build a seven story pagoda. - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists