|
@@ -2159,7 +2159,7 @@ void console_unlock(void)
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- * Console drivers are called under logbuf_lock, so
|
|
|
+ * Console drivers are called with interrupts disabled, so
|
|
|
* @console_may_schedule should be cleared before; however, we may
|
|
|
* end up dumping a lot of lines, for example, if called from
|
|
|
* console registration path, and should invoke cond_resched()
|
|
@@ -2167,11 +2167,15 @@ void console_unlock(void)
|
|
|
* scheduling stall on a slow console leading to RCU stall and
|
|
|
* softlockup warnings which exacerbate the issue with more
|
|
|
* messages practically incapacitating the system.
|
|
|
+ *
|
|
|
+ * console_trylock() is not able to detect the preemptive
|
|
|
+ * context reliably. Therefore the value must be stored before
|
|
|
+ * and cleared after the the "again" goto label.
|
|
|
*/
|
|
|
do_cond_resched = console_may_schedule;
|
|
|
+again:
|
|
|
console_may_schedule = 0;
|
|
|
|
|
|
-again:
|
|
|
/*
|
|
|
* We released the console_sem lock, so we need to recheck if
|
|
|
* cpu is online and (if not) is there at least one CON_ANYTIME
|