Commit 62582f67 authored by Sasha Levin's avatar Sasha Levin Committed by Greg Kroah-Hartman

Revert "printk: Never set console_may_schedule in console_trylock()"

This reverts commit c9b8d580.

This is just a technical revert to make the printk fix apply cleanly,
this patch will be re-picked in about 3 commits.
parent 56926f91
...@@ -1762,12 +1762,6 @@ asmlinkage int vprintk_emit(int facility, int level, ...@@ -1762,12 +1762,6 @@ asmlinkage int vprintk_emit(int facility, int level,
/* If called from the scheduler, we can not call up(). */ /* If called from the scheduler, we can not call up(). */
if (!in_sched) { if (!in_sched) {
/*
* Disable preemption to avoid being preempted while holding
* console_sem which would prevent anyone from printing to
* console
*/
preempt_disable();
/* /*
* Try to acquire and then immediately release the console * Try to acquire and then immediately release the console
* semaphore. The release will print out buffers and wake up * semaphore. The release will print out buffers and wake up
...@@ -1775,7 +1769,6 @@ asmlinkage int vprintk_emit(int facility, int level, ...@@ -1775,7 +1769,6 @@ asmlinkage int vprintk_emit(int facility, int level,
*/ */
if (console_trylock()) if (console_trylock())
console_unlock(); console_unlock();
preempt_enable();
} }
return printed_len; return printed_len;
...@@ -2090,7 +2083,20 @@ int console_trylock(void) ...@@ -2090,7 +2083,20 @@ int console_trylock(void)
return 0; return 0;
} }
console_locked = 1; console_locked = 1;
console_may_schedule = 0; /*
* When PREEMPT_COUNT disabled we can't reliably detect if it's
* safe to schedule (e.g. calling printk while holding a spin_lock),
* because preempt_disable()/preempt_enable() are just barriers there
* and preempt_count() is always 0.
*
* RCU read sections have a separate preemption counter when
* PREEMPT_RCU enabled thus we must take extra care and check
* rcu_preempt_depth(), otherwise RCU read sections modify
* preempt_count().
*/
console_may_schedule = !oops_in_progress &&
preemptible() &&
!rcu_preempt_depth();
return 1; return 1;
} }
EXPORT_SYMBOL(console_trylock); EXPORT_SYMBOL(console_trylock);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment