From mboxrd@z Thu Jan 1 00:00:00 1970 From: David VomLehn Subject: [PATCH 3/7 v6] initdev:kernel:Await console discovery Date: Tue, 4 Aug 2009 15:15:09 -0700 Message-ID: <20090804221509.GA9283@cuplxvomd02.corp.sa.net> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Cc: akpm@linux-foundation.org, linux-usb@vger.kernel.org, greg@kroah.com, linux-scsi@vger.kernel.org, netdev@vger.kernel.org, arjan@infradead.org To: linux-kernel@vger.kernel.org Return-path: Received: from sj-iport-6.cisco.com ([171.71.176.117]:37716 "EHLO sj-iport-6.cisco.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755327AbZHDWPI (ORCPT ); Tue, 4 Aug 2009 18:15:08 -0400 Content-Disposition: inline Sender: netdev-owner@vger.kernel.org List-ID: Wait for the console device to become available or for it to be determined that no console is attached a boot time. Signed-off-by: David VomLehn --- drivers/accessibility/braille/braille_console.c | 2 + kernel/printk.c | 29 ++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletions(-) diff --git a/drivers/accessibility/braille/braille_console.c b/drivers/accessibility/braille/braille_console.c index d672cfe..6d1693f 100644 --- a/drivers/accessibility/braille/braille_console.c +++ b/drivers/accessibility/braille/braille_console.c @@ -378,6 +378,8 @@ int braille_register_console(struct console *console, int index, braille_co = console; register_keyboard_notifier(&keyboard_notifier_block); register_vt_notifier(&vt_notifier_block); + + initdev_registered(INITDEV_CONSOLE_TYPE); return 0; } diff --git a/kernel/printk.c b/kernel/printk.c index 5052b54..7cdc91c 100644 --- a/kernel/printk.c +++ b/kernel/printk.c @@ -33,6 +33,7 @@ #include #include #include +#include #include @@ -1075,8 +1076,10 @@ void console_unblank(void) /* * Return the console tty driver structure and its associated index + * @index: Pointer to the device index + * Returns NULL if no driver available, otherwise a pointer to the TTY driver. */ -struct tty_driver *console_device(int *index) +struct tty_driver *_console_device(int *index) { struct console *c; struct tty_driver *driver = NULL; @@ -1094,6 +1097,29 @@ struct tty_driver *console_device(int *index) } /* + * Returns true if all specific consoles are registered, false otherwise + */ +static bool have_all_consoles(void) +{ + struct tty_driver *driver; + int index; + + driver = _console_device(&index); + + return driver != NULL; +} + +struct tty_driver *console_device(int *index) +{ + struct tty_driver *driver; + initdev_wait(INITDEV_CONSOLE_TYPE, have_all_consoles); + + driver = _console_device(index); + + return driver; +} + +/* * Prevent further output on the passed console device so that (for example) * serial drivers can disable console output before suspending a port, and can * re-enable output afterwards. @@ -1230,6 +1256,7 @@ void register_console(struct console *console) spin_unlock_irqrestore(&logbuf_lock, flags); } release_console_sem(); + initdev_registered(INITDEV_CONSOLE_TYPE); } EXPORT_SYMBOL(register_console);