Hello,
With PREMPT_RT_FULL I notice couple of issues when early printk is turned on
1) printks show up only after the full console is enabled
2) There are double prints for each of the prinkts before the full
console was enabled.
The attached patch seem to fix the issue, but I am not sure whether this
is completely with
the lock being acquired in console_trylock_for_printk().
Thanks,
Venkat
>From 876c0653e4482357823d1d36858aed7b5cd8d1fa Mon Sep 17 00:00:00 2001
From: Venkat Subbiah <venkat.subbiah@xxxxxxxxxx>
Date: Fri, 4 May 2012 17:53:16 -0700
Subject: [PATCH] printk: Allow early console prints with PREEMPT_RT_FULL
Signed-off-by: Venkat Subbiah <venkat.subbiah@xxxxxxxxxx>
---
kernel/printk.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)
diff --git a/kernel/printk.c b/kernel/printk.c
index d3f22ec..d2dda2f 100644
--- a/kernel/printk.c
+++ b/kernel/printk.c
@@ -832,6 +832,8 @@ static inline int can_use_console(unsigned int cpu)
return cpu_online(cpu) || have_callable_console();
}
+static int boot_console_active = 1;
+
/*
* Try to get console ownership to actually show the kernel
* messages from a 'printk'. Return true (and with the
@@ -848,7 +850,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()) || sysrq_in_progress;
+ !preempt_count()) || sysrq_in_progress || boot_console_active;
#else
int lock = 1;
#endif
@@ -1653,6 +1655,7 @@ void register_console(struct console *newcon)
*/
printk(KERN_INFO "console [%s%d] enabled, bootconsole disabled\n",
newcon->name, newcon->index);
+ boot_console_active = 0;
for_each_console(bcon)
if (bcon->flags & CON_BOOT)
unregister_console(bcon);
--
1.7.7.6