heh.
I'm actually planning on grabbing console_lock and thoroughly strangling
it
next week. It can block interrupts for up to a second. That just isn't
civil.
- Use a semaphore for serialisation.
- For printk in interrupt context, grab the
semaphore (yes, you can do this).
- If it couldn't be acquired from interrupt context,
buffer the text in the log buffer and return. The text will be
printed by whoever holds the semaphore before they
drop it.
- Special "system booting" mode which bypasses all this
stuff.
- Special "oops in progress" mode which just
punches through everything.
- Get rid of the special printk buffer - share the
log buffer. (Implies writes to console
devices will be broken into two writes when they
wrap around).
- Teach vsprintf to print into a circular buffer
(snprintf thus comes for free).
- Get rid of all the printk deadlock opportunities (fourth
attempt).
- Get rid of console_tasklet. Do it in process context callback
or just do it synchronously.
Assumption:
- Once the system is up and running, it's always safe to
call down() when in_interrupt() returns false - probably
not the case in parts of the exit path - tough.
Anyway, that's the thoughtware. Sound sane?
-
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/