Re: [PATCH] printk: Make CONSOLE_LOGLEVEL_QUIET configurable

Hans de Goede
2018-06-20T13:37:53Z

Hi,

On 20-06-18 13:03, Petr Mladek wrote:
> On Tue 2018-06-19 13:57:26, Hans de Goede wrote:
>> The goal of passing the "quiet" option to the kernel is for the kernel
>> to be quiet unless something really is wrong.
>>
>> Sofar passing quiet has been (mostly) equivalent to passing
>> loglevel=4 on the kernel commandline. Which means to show any messages
>> with a level of KERN_ERR or higher severity on the console.
>>
>> In practice this often does not result in a quiet boot though, since
>> there are many false-positive or otherwise harmless error messages printed,
>> defeating the purpose of the quiet option. Esp. the ACPICA code is really
>> bad wrt this, but there are plenty of others too.
>
> I see your pain. But this sounds like a workaround for a broken code.
> This change might just encourage people to create even more mess.

I've been submitting patches upstream to fix false-positive KERN_ERR
messages for more then a year now and getting a KERN_ERR free kernel
(on more then 1 specific model hw) is just undoable. Every release some
new nonsense error comes up, like e.g.:

https://bugzilla.redhat.com/show_bug.cgi?id=1568276

Besides this random KERN_ERR cases (of which there are plenty
by themselves) I've also had long discussions with the ACPICA upstream
maintainers, but they refuse to change this instead insisting that:

a) Vendors should fix there DSDTs to be perfect; and
b) end-users should then update their BIOS to fix this

Neither of which is a realistic expectation in anyway.

IOW I've tried to fix this the right way and I will keep posting patches
to keep "dmesg --level=err" output to a minimum, but it simply is not
feasible to get the desired quiet boot with its current configuration
of quiet mapping to loglevel=4.

>> This commit makes CONSOLE_LOGLEVEL_QUIET configurable.
>>
>> This for example will allow distros which want quiet to really mean quiet
>> to set CONSOLE_LOGLEVEL_QUIET so that only messages with a higher severity
>> then KERN_ERR (CRIT, ALERT, EMERG) get printed, avoiding an endless game
>> of whack-a-mole silencing harmless error messages.
>
> I find it a bit confusing that "quiet" would mean something different
> on different systems.

The kernel is so configurable already that I don't think this really is much
of an issue, quiet will still mean quiet on all systems, some might just
be a tad more quiet (or actually be quiet) compared to others.

The same argument could be made for the default loglevel being configurable,
yet it is configurable already.

> Why did not you use loglevel=<whatever_you_need> instead of "quiet"?

We would still need to pass quiet, to also silence e.g. the messages
from the EDD code, see arch/x86/boot/edd.c around line 147 and further,
so then we would need to pass:

quiet loglevel=3

And we would need to pass it in that order! which is ugly also this
complicates giving people instructions to turn it off to debug
system not-booting problems.

> Alternative solution would be to add "silent" or so to calm down
> everything. But I am afraid that any change in this area would
> just create a mess similar to grep -s and -q options.

A better alternative would be to make quiet actually does what the
name suggests and simply unconditionally change
CONSOLE_LOGLEVEL_QUIET from 4 to 3. I went with making this configurable
because I expect that to be a controversial change.

A third, sucky, alternative would be for Fedora to permanently
carry a downstream patch changing the CONSOLE_LOGLEVEL_QUIET from 4
to 3 in printk.h. That would still lead to the confusion about quiet
not meaning the same everywhere (although I would expect e.g. Ubuntu
to follow suit) combined with extra downstream patches which are never
good.

Regards,

Hans