2002-06-27 13:49:51

by anton wilson

[permalink] [raw]
Subject: printks in the scheduler freeze during scripts



I'm running linux 2.4.17 and Redhat 7.2 with the preemptive and low latency
patches, and whenever I stick printks in the scheduler(void) my system
freezes somewhere after it tries to load the system font. Where it stops
seems to be random. I can only run under single user mode without my system
freezing. Does anyone have any clues why? Or any better ways to go about
tracking the scheduling of processes in the scheduler?


Anton
--
Camotion
Software Development
678-471-0895


2002-06-27 14:20:33

by Andrew Morton

[permalink] [raw]
Subject: Re: printks in the scheduler freeze during scripts

anton wilson wrote:
>
> I'm running linux 2.4.17 and Redhat 7.2 with the preemptive and low latency
> patches, and whenever I stick printks in the scheduler(void) my system
> freezes somewhere after it tries to load the system font. Where it stops
> seems to be random. I can only run under single user mode without my system
> freezing. Does anyone have any clues why? Or any better ways to go about
> tracking the scheduling of processes in the scheduler?
>

printk() calls wake_up(), to give klogd a kick. So a printk
from the scheduler tends to deadlock. Just delete the
last two lines of kernel/printk.c:release_console_sem() and it
should work OK.

2002-06-28 12:03:17

by Michael S. Zick

[permalink] [raw]
Subject: Re: printks in the scheduler freeze during scripts

On Thursday 27 June 2002 09:03 am, anton wilson wrote:
> I'm running linux 2.4.17 and Redhat 7.2 with the preemptive and low latency
> patches, and whenever I stick printks in the scheduler(void) my system
> freezes somewhere after it tries to load the system font. Where it stops
> seems to be random. I can only run under single user mode without my system
> freezing. Does anyone have any clues why? Or any better ways to go about
> tracking the scheduling of processes in the scheduler?

Something I have used in my testing:

Add, in the task structure:

task_t *sched_from;

In schedule, prior to context_switch:

next->sched_from = prior; /* at this point still == get_current ()*/

Somewhere else (so you don't inadvertantly side-effect to death schedule()):

Follow the back-link and printk whatever for the task that you are interested
in, being careful not to reference task structures that no longer exist.

Mike
>
>
> Anton