Re: overlaping printk

From: Andi Kleen
Date: Fri May 21 2004 - 18:29:03 EST


Ingo Molnar <mingo@xxxxxxx> writes:

> * Ricky Beam <jfbeam@xxxxxxxxxxxxxx> wrote:
>
>> It looks like somewhere in the path of release_console_sem() more than
>> one CPU is running the log. [...]
>
> the problem is this code in printk:
>
> if (oops_in_progress) {
> /* If a crash is occurring, make sure we can't deadlock */
> spin_lock_init(&logbuf_lock);
> /* And make sure that we print immediately */
> init_MUTEX(&console_sem);
> }
>
> so two crashes on two separate CPUs can go on in parallel. The problem
> is not constrained to the serial line - i've seen it on VGA too (albeit
> there it's much more rare).

One alternative way would be to use locks with timeouts for these two
locks (e.g. checking the TSC on x86, since the timer interrupt
may not be running anymore) and only break the lock when the
wait time is too long.

Of course serial lines can be quite slow so even that may not help
always (for unknown reasons far too many people use 9600 baud for
their serial line)

-Andi


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