Re: 2.4.7p6 hang

From: Andrea Arcangeli (andrea@suse.de)
Date: Wed Jul 11 2001 - 10:58:09 EST


On Wed, Jul 11, 2001 at 04:22:04PM +0200, Trond Myklebust wrote:
> >>>>> " " == Andrew Morton <andrewm@uow.edu.au> writes:
>
> > Trond Myklebust wrote:
> >>
> >> ... I have the same problem on my setup. To me, it looks like
> >> the loop in spawn_ksoftirqd() is suffering from some sort of
> >> atomicity problem.
>
> > Does a `set_current_state(TASK_RUNNING);' in spawn_ksoftirqd()
> > fix it? If so we have a rogue initcall...
>
> Nope. The same thing happens as before.
>
> A couple of debugging statements show that ksoftirqd_CPU0 gets created
> fine, and that ksoftirqd_task(0) is indeed getting set correctly
> before we loop in spawn_ksoftirqd().
> After this the second call to kernel_thread() succeeds, but
> ksoftirqd() itself never gets called before the hang occurs.

ksoftirqd is quite scheduler intensive, and while its startup is
correct (no need of any change there), it tends to trigger scheduler
bugs (one of those bugs was just fixed in pre5). The reason I never seen
the deadlock I also fixed this other scheduler bug in my tree:

        ftp://ftp.us.kernel.org/pub/linux/kernel/people/andrea/kernels/v2.4/2.4.7pre5aa1/00_sched-yield-1

this one I forgot to sumbit but here it is now for easy merging:

--- 2.4.4aa3/kernel/sched.c.~1~ Sun Apr 29 17:37:05 2001
+++ 2.4.4aa3/kernel/sched.c Tue May 1 16:39:42 2001
@@ -674,8 +674,10 @@
 #endif
         spin_unlock_irq(&runqueue_lock);
 
- if (prev == next)
+ if (prev == next) {
+ current->policy &= ~SCHED_YIELD;
                 goto same_process;
+ }
 
 #ifdef CONFIG_SMP
          /*

Andrea
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Sun Jul 15 2001 - 21:00:14 EST