* Peter Zijlstra<peterz@xxxxxxxxxxxxx> wrote:
On Mon, 2011-06-06 at 18:08 +0200, Ingo Molnar wrote:* Peter Zijlstra<peterz@xxxxxxxxxxxxx> wrote:
On Mon, 2011-06-06 at 17:52 +0200, Ingo Molnar wrote:* Peter Zijlstra<peterz@xxxxxxxxxxxxx> wrote:
Needs more staring at, preferably by someone who actually
understands that horrid mess :/ Also, this all still doesn't make
printk() work reliably while holding rq->lock.
So, what about my suggestion to just *remove* the wakeup from there
and use the deferred wakeup mechanism that klogd uses.
That would make printk() *visibly* more robust in practice.
That's currently done from the jiffy tick, do you want to effectively
delay releasing the console_sem for the better part of a jiffy?
Yes, and we already do it in some other circumstances.
We do?
Yes, see the whole printk_pending logic, it delays:
wake_up_interruptible(&log_wait);
to the next jiffies tick.
Can you see
any problem with that? klogd is an utter slowpath anyway.
but console_sem isn't klogd. We delay klogd and that's perfectly
fine, but afaict we don't delay console_sem.
But console_sem is really a similar special case as klogd. See, it's
about a *printk*. That's rare by definition.
If someone on the console sees it he'll be startled by at least 10
msecs ;-) So delaying the wakeup to the next jiffy really fits into
the same approach as we already do with&log_wait, hm?
This would solve a real nightmare that has plagued us ever since
printk() has done wakeups directly - i.e. like forever.
Thanks,
Ingo