diff options
| -rw-r--r-- | kernel/printk.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/kernel/printk.c b/kernel/printk.c index 35185392173f..751e7b84e9e3 100644 --- a/kernel/printk.c +++ b/kernel/printk.c | |||
| @@ -782,7 +782,7 @@ static inline int can_use_console(unsigned int cpu) | |||
| 782 | static int console_trylock_for_printk(unsigned int cpu) | 782 | static int console_trylock_for_printk(unsigned int cpu) |
| 783 | __releases(&logbuf_lock) | 783 | __releases(&logbuf_lock) |
| 784 | { | 784 | { |
| 785 | int retval = 0; | 785 | int retval = 0, wake = 0; |
| 786 | 786 | ||
| 787 | if (console_trylock()) { | 787 | if (console_trylock()) { |
| 788 | retval = 1; | 788 | retval = 1; |
| @@ -795,12 +795,14 @@ static int console_trylock_for_printk(unsigned int cpu) | |||
| 795 | */ | 795 | */ |
| 796 | if (!can_use_console(cpu)) { | 796 | if (!can_use_console(cpu)) { |
| 797 | console_locked = 0; | 797 | console_locked = 0; |
| 798 | up(&console_sem); | 798 | wake = 1; |
| 799 | retval = 0; | 799 | retval = 0; |
| 800 | } | 800 | } |
| 801 | } | 801 | } |
| 802 | printk_cpu = UINT_MAX; | 802 | printk_cpu = UINT_MAX; |
| 803 | spin_unlock(&logbuf_lock); | 803 | spin_unlock(&logbuf_lock); |
| 804 | if (wake) | ||
| 805 | up(&console_sem); | ||
| 804 | return retval; | 806 | return retval; |
| 805 | } | 807 | } |
| 806 | static const char recursion_bug_msg [] = | 808 | static const char recursion_bug_msg [] = |
| @@ -1271,8 +1273,8 @@ void console_unlock(void) | |||
| 1271 | if (unlikely(exclusive_console)) | 1273 | if (unlikely(exclusive_console)) |
| 1272 | exclusive_console = NULL; | 1274 | exclusive_console = NULL; |
| 1273 | 1275 | ||
| 1274 | up(&console_sem); | ||
| 1275 | spin_unlock_irqrestore(&logbuf_lock, flags); | 1276 | spin_unlock_irqrestore(&logbuf_lock, flags); |
| 1277 | up(&console_sem); | ||
| 1276 | if (wake_klogd) | 1278 | if (wake_klogd) |
| 1277 | wake_up_klogd(); | 1279 | wake_up_klogd(); |
| 1278 | } | 1280 | } |
