| From 1a54e347d4d5e78a7fef031ed204c067831dd4ef Mon Sep 17 00:00:00 2001 |
| From: Frank Rowand <frank.rowand@am.sony.com> |
| Date: Wed, 16 May 2012 18:09:36 -0700 |
| Subject: [PATCH 213/274] fix printk flush of messages |
| |
| Updates console-make-rt-friendly.patch |
| |
| #ifdef CONFIG_PREEMPT_RT_FULL, printk() output is never flushed by |
| printk() because: |
| |
| # some liberties taken in this pseudo-code to make it easier to follow |
| printk() |
| vprintk() |
| raw_spin_lock(&logbuf_lock) |
| # increment preempt_count(): |
| preempt_disable() |
| result = console_trylock_for_printk() |
| retval = 0 |
| # lock will always be false, because preempt_count() will be >= 1 |
| lock = ... && !preempt_count() |
| if (lock) |
| retval = 1 |
| return retval |
| # result will always be false since lock will always be false |
| if (result) |
| console_unlock() |
| # this is where the printk() output would be flushed |
| |
| On system boot some printk() output is flushed because register_console() |
| and tty_open() call console_unlock(). |
| |
| This change also fixes the problem that was previously fixed by |
| preempt-rt-allow-immediate-magic-sysrq-output-for-preempt_rt_full.patch |
| |
| Signed-off-by: Frank Rowand <frank.rowand@am.sony.com> |
| Cc: Frank <Frank_Rowand@sonyusa.com> |
| Link: http://lkml.kernel.org/r/4FB44FD0.4090800@am.sony.com |
| Signed-off-by: Thomas Gleixner <tglx@linutronix.de> |
| --- |
| kernel/printk.c | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| diff --git a/kernel/printk.c b/kernel/printk.c |
| index 28baa36..7109711 100644 |
| --- a/kernel/printk.c |
| +++ b/kernel/printk.c |
| @@ -847,7 +847,7 @@ static int console_trylock_for_printk(unsigned int cpu, unsigned long flags) |
| int retval = 0, wake = 0; |
| #ifdef CONFIG_PREEMPT_RT_FULL |
| int lock = !early_boot_irqs_disabled && !irqs_disabled_flags(flags) && |
| - !preempt_count(); |
| + (preempt_count() <= 1); |
| #else |
| int lock = 1; |
| #endif |
| -- |
| 1.7.10.4 |
| |