Signed-off-by: Jan Kara <j...@suse.cz>
---
 kernel/printk/printk.c | 35 ++++++++++++++++++++++++++++++++++-
 1 file changed, 34 insertions(+), 1 deletion(-)

diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index 03f5278b47b4..8ac60219059a 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -2300,6 +2300,21 @@ out:
        raw_spin_unlock_irqrestore(&logbuf_lock, flags);
 }
 
+static void printk_echo(char *fmt, ...)
+{
+       unsigned long flags;
+       va_list args;
+       char buf[128];
+       int len = 0;
+
+       va_start(args, fmt);
+       len += vsprintf(buf + len, fmt, args);
+       va_end(args);
+       local_irq_save(flags);
+       call_console_drivers(0, NULL, 0, buf, len);
+       local_irq_restore(flags);
+}
+
 /*
  * When oops happens and there are more messages to be printed in the printk
  * buffer that this, skip some mesages and print only this many newest 
messages.
@@ -2437,9 +2452,9 @@ skip:
                call_console_drivers(level, ext_text, ext_len, text, len);
                start_critical_timings();
                local_irq_restore(flags);
-
                if (do_cond_resched)
                        cond_resched();
+               mdelay(len);
        }
        console_locked = 0;
 
@@ -2806,6 +2821,18 @@ int unregister_console(struct console *console)
 }
 EXPORT_SYMBOL(unregister_console);
 
+static void do_print(struct work_struct *work)
+{
+       char buf[75];
+       int i;
+
+       sprintf(buf, "%p: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\n", 
work);
+       for (i = 0; i < 15; i++)
+               printk(buf);
+}
+
+static struct delayed_work print_work[100];
+
 /*
  * Some boot consoles access data that is in the init section and which will
  * be discarded after the initcalls have been run. To make sure that no code
@@ -2824,6 +2851,12 @@ EXPORT_SYMBOL(unregister_console);
 static int __init printk_late_init(void)
 {
        struct console *con;
+       int i;
+
+       for (i = 0; i < 100; i++) {
+               INIT_DELAYED_WORK(&print_work[i], do_print);
+               schedule_delayed_work(&print_work[i], HZ * 180);
+       }
 
        for_each_console(con) {
                if (!keep_bootcon && con->flags & CON_BOOT) {
-- 
2.6.2

Reply via email to