From: Petr Mladek <pmladek@suse.com> To: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Cc: David Gow <davidgow@google.com>, Andy Shevchenko <andriy.shevchenko@linux.intel.com>, Shuah Khan <skhan@linuxfoundation.org>, Brendan Higgins <brendanhiggins@google.com>, KUnit Development <kunit-dev@googlegroups.com>, "open list:KERNEL SELFTEST FRAMEWORK" <linux-kselftest@vger.kernel.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Guenter Roeck <linux@roeck-us.net>, Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>, linux-um <linux-um@lists.infradead.org> Subject: Re: kunit stopped working Date: Wed, 6 Jan 2021 14:10:10 +0100 [thread overview] Message-ID: <X/W2sl7RMvfaV4Ru@alley> (raw) In-Reply-To: <X/U26cwfHTMYJTtU@jagdpanzerIV.localdomain> On Wed 2021-01-06 13:04:57, Sergey Senozhatsky wrote: > On (21/01/05 17:49), Petr Mladek wrote: > > The following change solved the problem for me as well. It causes > > that ttynull is initialized after stdiocons console. > > > > diff --git a/drivers/tty/ttynull.c b/drivers/tty/ttynull.c > > index eced70ec54e1..602af4d30bd4 100644 > > --- a/drivers/tty/ttynull.c > > +++ b/drivers/tty/ttynull.c > > @@ -121,7 +121,6 @@ static void __exit ttynull_exit(void) > > tty_port_destroy(&ttynull_port); > > } > > > > -module_init(ttynull_init); > > -module_exit(ttynull_exit); > > +late_initcall_sync(ttynull_init); > > > > MODULE_LICENSE("GPL v2"); > > > > But I am not completely sure that it is the right solution. > > Wow, hmm, puzzled. Why does it help? I have been as well. But it seems that I got it, see below. > > It is strange. Console should get registered only when > > it was added by add_preferred_console(). It means that > > ttynull_init() should not register by default. > [..] > > Some clue might be in stderr_console. It has > > to be explicitly unregistered to avoid staying as > > the default console, see unregister_stderr() in > > arch/um/drivers/stderr_console.c > > Hmm... Some random thoughts: > > Looking at arch/um/drivers/stderr_console.c - it doesn't have tty > driver and it doesn't register one. stderr_console.c is used only during early boot. stdio_console.c is the console that is supposed to print kunit test results. And it has tty driver. > But I still don't understand why the initcall patch helped. > Can you shed some light on it? The trick is that both stdio_init() and ttynull_init(): + call register_console() + the console has tty driver The first one is registered as a fallback when there is no preferred console (has_preferred_console()). It means that late_initcall_sync(ttynull_init) makes sense. We need to call register_console() from ttynull_init() so that it is registered when defined on the command line. But it should be the last chance to register a fallback console with tty binding. Alternative solution is to ignore ttynull as the fallback console in register_console(). I mean the following: diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index ffdd0dc7ec6d..cdb77903b0af 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -2816,8 +2816,12 @@ void register_console(struct console *newcon) * See if we want to use this console driver. If we * didn't select a console we take the first one * that registers here. + * + * Ignore ttynull console. It should be used only + * when explicitly configured or as an ultimate + * fallback when no better console gets registered at all. */ - if (!has_preferred_console) { + if (!has_preferred_console && strcmp(newcon->name, "ttynull") != 0) { if (newcon->index < 0) newcon->index = 0; if (newcon->setup == NULL || Best Regards, Petr
WARNING: multiple messages have this Message-ID (diff)
From: Petr Mladek <pmladek@suse.com> To: Sergey Senozhatsky <sergey.senozhatsky@gmail.com> Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>, David Gow <davidgow@google.com>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Brendan Higgins <brendanhiggins@google.com>, linux-um <linux-um@lists.infradead.org>, "open list:KERNEL SELFTEST FRAMEWORK" <linux-kselftest@vger.kernel.org>, Shuah Khan <skhan@linuxfoundation.org>, Andy Shevchenko <andriy.shevchenko@linux.intel.com>, Guenter Roeck <linux@roeck-us.net>, KUnit Development <kunit-dev@googlegroups.com> Subject: Re: kunit stopped working Date: Wed, 6 Jan 2021 14:10:10 +0100 [thread overview] Message-ID: <X/W2sl7RMvfaV4Ru@alley> (raw) In-Reply-To: <X/U26cwfHTMYJTtU@jagdpanzerIV.localdomain> On Wed 2021-01-06 13:04:57, Sergey Senozhatsky wrote: > On (21/01/05 17:49), Petr Mladek wrote: > > The following change solved the problem for me as well. It causes > > that ttynull is initialized after stdiocons console. > > > > diff --git a/drivers/tty/ttynull.c b/drivers/tty/ttynull.c > > index eced70ec54e1..602af4d30bd4 100644 > > --- a/drivers/tty/ttynull.c > > +++ b/drivers/tty/ttynull.c > > @@ -121,7 +121,6 @@ static void __exit ttynull_exit(void) > > tty_port_destroy(&ttynull_port); > > } > > > > -module_init(ttynull_init); > > -module_exit(ttynull_exit); > > +late_initcall_sync(ttynull_init); > > > > MODULE_LICENSE("GPL v2"); > > > > But I am not completely sure that it is the right solution. > > Wow, hmm, puzzled. Why does it help? I have been as well. But it seems that I got it, see below. > > It is strange. Console should get registered only when > > it was added by add_preferred_console(). It means that > > ttynull_init() should not register by default. > [..] > > Some clue might be in stderr_console. It has > > to be explicitly unregistered to avoid staying as > > the default console, see unregister_stderr() in > > arch/um/drivers/stderr_console.c > > Hmm... Some random thoughts: > > Looking at arch/um/drivers/stderr_console.c - it doesn't have tty > driver and it doesn't register one. stderr_console.c is used only during early boot. stdio_console.c is the console that is supposed to print kunit test results. And it has tty driver. > But I still don't understand why the initcall patch helped. > Can you shed some light on it? The trick is that both stdio_init() and ttynull_init(): + call register_console() + the console has tty driver The first one is registered as a fallback when there is no preferred console (has_preferred_console()). It means that late_initcall_sync(ttynull_init) makes sense. We need to call register_console() from ttynull_init() so that it is registered when defined on the command line. But it should be the last chance to register a fallback console with tty binding. Alternative solution is to ignore ttynull as the fallback console in register_console(). I mean the following: diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index ffdd0dc7ec6d..cdb77903b0af 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -2816,8 +2816,12 @@ void register_console(struct console *newcon) * See if we want to use this console driver. If we * didn't select a console we take the first one * that registers here. + * + * Ignore ttynull console. It should be used only + * when explicitly configured or as an ultimate + * fallback when no better console gets registered at all. */ - if (!has_preferred_console) { + if (!has_preferred_console && strcmp(newcon->name, "ttynull") != 0) { if (newcon->index < 0) newcon->index = 0; if (newcon->setup == NULL || Best Regards, Petr _______________________________________________ linux-um mailing list linux-um@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-um
next prev parent reply other threads:[~2021-01-06 13:11 UTC|newest] Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-12-21 14:43 kunit stopped working Andy Shevchenko 2020-12-21 14:45 ` Andy Shevchenko 2020-12-21 18:37 ` Shuah Khan 2020-12-21 19:27 ` Andy Shevchenko 2020-12-21 19:40 ` Andy Shevchenko 2020-12-21 20:03 ` Andy Shevchenko 2020-12-22 1:43 ` David Gow 2020-12-22 1:43 ` David Gow 2020-12-22 7:26 ` David Gow 2020-12-22 7:26 ` David Gow 2020-12-22 13:34 ` Andy Shevchenko 2020-12-22 13:34 ` Andy Shevchenko 2020-12-27 19:58 ` Brendan Higgins 2020-12-27 19:58 ` Brendan Higgins 2021-01-05 16:17 ` Petr Mladek 2021-01-05 16:17 ` Petr Mladek 2021-01-05 16:49 ` Petr Mladek 2021-01-05 16:49 ` Petr Mladek 2021-01-06 4:04 ` Sergey Senozhatsky 2021-01-06 4:04 ` Sergey Senozhatsky 2021-01-06 13:10 ` Petr Mladek [this message] 2021-01-06 13:10 ` Petr Mladek 2021-01-07 7:15 ` Sergey Senozhatsky 2021-01-07 7:15 ` Sergey Senozhatsky
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=X/W2sl7RMvfaV4Ru@alley \ --to=pmladek@suse.com \ --cc=andriy.shevchenko@linux.intel.com \ --cc=brendanhiggins@google.com \ --cc=davidgow@google.com \ --cc=gregkh@linuxfoundation.org \ --cc=kunit-dev@googlegroups.com \ --cc=linux-kselftest@vger.kernel.org \ --cc=linux-um@lists.infradead.org \ --cc=linux@roeck-us.net \ --cc=sergey.senozhatsky.work@gmail.com \ --cc=sergey.senozhatsky@gmail.com \ --cc=skhan@linuxfoundation.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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.