From: Jeff D. <jd...@ka...> - 2001-06-14 16:04:30
|
mi...@st... said: > it does not do an infinate loop it does return back to do_ilde in the > idle task until the irq_handle gets called again with the timer but > nothing happens In that case, the thing to do is figure out what should be running and why it's not. Usually, there is an obvious process that should not have slept. The first thing to do is get a stack from it. BTW, that task_list thing you've got is pretty nice. Mind sending it over? I'll have to think about how to include it in my stuff, but it seems pretty useful. PID: 0 EPID: 2637 State: 0 Command: swapper PID: 1 EPID: 2651 State: 1 Command: init PID: 2 EPID: 2644 State: 1 Command: keventd PID: 3 EPID: 2645 State: 1 Command: kswapd PID: 4 EPID: 2646 State: 1 Command: kreclaimd PID: 5 EPID: 2647 State: 1 Command: bdflush PID: 6 EPID: 2648 State: 1 Command: kupdated PID: 7 EPID: 2653 State: 4 Command: init PID: 12 EPID: 2669 State: 4 Command: update Is this the complete list? i.e. ps on the host says the same thing? Those 2 zombies suggest that init (1) isn't waiting for init(7), which in turn isn't waiting for update (12), which suggests that SIGCHLD isn't being delivered properly. And that would cause the boot to hang. And I also just changed that code :-) What I would do is put a breakpoint on update calling do_exit, make sure that the SIGCHLD gets delivered to its parent properly, the parent is woken up, and the signal handler is called. Something along that chain seems not to be happening. Jeff |