From: Paul Burton <paul.burton@imgtec.com>
To: <linux-kernel@vger.kernel.org>, Andreas Schwab <schwab@linux-m68k.org>
Cc: Paul Burton <paul.burton@imgtec.com>,
Andrew Morton <akpm@linux-foundation.org>,
Petr Mladek <pmladek@suse.com>,
"Sergey Senozhatsky" <sergey.senozhatsky@gmail.com>,
Borislav Petkov <bp@suse.de>, Tejun Heo <tj@kernel.org>,
<linuxppc-dev@lists.ozlabs.org>
Subject: [PATCH] console: use first console if stdout-path device doesn't appear
Date: Tue, 18 Oct 2016 10:18:52 +0100 [thread overview]
Message-ID: <20161018091852.14776-1-paul.burton@imgtec.com> (raw)
In-Reply-To: <87oa2ij2mq.fsf@linux-m68k.org>
If a device tree specified a preferred device for kernel console output
via the stdout-path or linux,stdout-path chosen node properties there's
no guarantee that it will have specified a device for which we have a
driver. It may also be the case that we do have a driver but it doesn't
call of_console_check() to register as a preferred console (eg. offb
driver as used on powermac systems). In these cases try to ensure that
we provide some console output by enabling the first console in the
console_drivers list.
As I don't have access to an affected system this has only been build
tested - testing would be most appreciated.
Signed-off-by: Paul Burton <paul.burton@imgtec.com>
Fixes: 05fd007e4629 ("console: don't prefer first registered if DT specifies stdout-path")
Reported-by: Andreas Schwab <schwab@linux-m68k.org>
Cc: Andreas Schwab <schwab@linux-m68k.org>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Petr Mladek <pmladek@suse.com>
Cc: Sergey Senozhatsky <sergey.senozhatsky@gmail.com>
Cc: Borislav Petkov <bp@suse.de>
Cc: Tejun Heo <tj@kernel.org>
Cc: linux-kernel@vger.kernel.org
Cc: linuxppc-dev@lists.ozlabs.org
---
A potential alternative to this might be to have the affected offb
driver call of_check_console(), and perhaps that should happen anyway,
but doing so seems non-trivial since the offb driver doesn't know the
index of the framebuffer console device it may be about to register &
the fbdev core doesn't know the associated device tree node. This also
wouldn't catch the case of us not having a driver for the device
specified by stdout-path, so this fallback seems worthwhile anyway.
---
kernel/printk/printk.c | 37 ++++++++++++++++++++++++++++++++++++-
1 file changed, 36 insertions(+), 1 deletion(-)
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index d5e3973..7091e2f 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -2835,10 +2835,45 @@ EXPORT_SYMBOL(unregister_console);
* intersects with the init section. Note that code exists elsewhere to get
* rid of the boot console as soon as the proper console shows up, so there
* won't be side-effects from postponing the removal.
+ *
+ * Additionally we may be using a device tree which specifies valid
+ * stdout-path referencing a device for which we don't have a driver, or for
+ * which we have a driver that doesn't register itself as preferred console
+ * using of_console_check(). In these cases we attempt here to enable the
+ * first registered console.
*/
static int __init printk_late_init(void)
{
- struct console *con;
+ struct console *con, *enabled;
+
+ if (of_specified_console) {
+ console_lock();
+
+ /* Find the enabled console, if there is one */
+ enabled = NULL;
+ for_each_console(con) {
+ if (!(con->flags & CON_ENABLED))
+ continue;
+
+ enabled = con;
+ break;
+ }
+
+ /* Enable the first console if none were already enabled */
+ con = console_drivers;
+ if (!enabled && con) {
+ if (con->index < 0)
+ con->index = 0;
+ if (con->setup == NULL ||
+ con->setup(con, NULL) == 0) {
+ con->flags |= CON_ENABLED;
+ if (con->device)
+ con->flags |= CON_CONSDEV;
+ }
+ }
+
+ console_unlock();
+ }
for_each_console(con) {
if (!keep_bootcon && con->flags & CON_BOOT) {
--
2.10.0
next prev parent reply other threads:[~2016-10-18 9:19 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-08-09 12:50 [PATCH] console: Don't prefer first registered if DT specifies stdout-path Paul Burton
2016-08-09 14:12 ` kbuild test robot
2016-08-09 15:10 ` kbuild test robot
2016-08-09 15:19 ` [PATCH v2] " Paul Burton
2016-08-09 21:57 ` Andrew Morton
2016-10-16 18:07 ` Andreas Schwab
2016-10-17 10:33 ` Paul Burton
2016-10-17 17:39 ` Andreas Schwab
2016-10-18 9:18 ` Paul Burton [this message]
2016-10-18 18:58 ` [PATCH] console: use first console if stdout-path device doesn't appear Andreas Schwab
2016-10-30 9:46 ` Andreas Schwab
2016-10-31 5:28 ` Michael Ellerman
2016-10-31 12:14 ` [PATCH v2] " Paul Burton
2016-10-31 15:50 ` Paul Burton
2016-10-31 19:21 ` Larry Finger
2016-10-31 23:09 ` Sergey Senozhatsky
2016-10-31 23:31 ` Larry Finger
2016-11-03 12:57 ` [PATCH v3] " Paul Burton
2016-11-03 17:40 ` Sergey Senozhatsky
2016-11-03 21:17 ` Paul Burton
2016-11-04 15:44 ` Sergey Senozhatsky
2016-11-04 8:05 ` Andreas Schwab
[not found] ` <8737j3n18r.fsf@concordia.ellerman.id.au>
2016-11-07 9:18 ` Paul Burton
2016-11-07 15:26 ` Larry Finger
2016-11-07 17:21 ` Paul Burton
2016-11-07 18:27 ` Larry Finger
2016-11-08 13:21 ` revert 05fd007e46296afb (was: [PATCH v3] console: use first console if stdout-path device doesn't appear) Sergey Senozhatsky
2016-11-03 13:04 ` [PATCH v2] console: use first console if stdout-path device doesn't appear Paul Burton
2016-11-01 4:39 ` Michael Ellerman
2016-10-31 15:58 ` Larry Finger
2016-10-31 12:23 ` [PATCH] " Paul Burton
2016-10-18 9:21 ` [PATCH v2] console: Don't prefer first registered if DT specifies stdout-path Paul Burton
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161018091852.14776-1-paul.burton@imgtec.com \
--to=paul.burton@imgtec.com \
--cc=akpm@linux-foundation.org \
--cc=bp@suse.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=pmladek@suse.com \
--cc=schwab@linux-m68k.org \
--cc=sergey.senozhatsky@gmail.com \
--cc=tj@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®