On (20/10/22 13:42), Petr Mladek wrote: > +static bool mute_console; > + > +static int __init mute_console_setup(char *str) > +{ > + mute_console = true; > + pr_info("All consoles muted.\n"); > + > + return 0; > +}
First of all, thanks a lot for picking this up and for the patch set! I've several thoughts and comments below. > static bool suppress_message_printing(int level) > { > - return (level >= console_loglevel && !ignore_loglevel); > + if (unlikely(mute_console)) > + return true; > + > + if (unlikely(ignore_loglevel)) > + return false; > + > + return (level >= console_loglevel); > } This is one way of doing it. Another one is to clear CON_ENABLED bit from all consoles (upon registration), one upside of this is that we will signal user-space that consoles are disabled/muted (by removing the E flag from /proc/consoles). But, if I'm mistaken, but this mutes only printk side, consoles still have uart running: printf -> tty -> uart -> serial_driver_IRQ() -> TX seriaal_driver_IRQ() -> RX -> uart -> tty so user space, in theory, still can push messages to slow consoles, AFAIU. Thinking more about it. We are still relying on the fact that there is anything registered as console driver, which is not necessarily the case, we can have NULL console drivers list. So how about having a dummy struct console in printk, with NOP read/write and NOP tty_driver and NOP tty_operations. So that when init calls filp_open("/dev/console") and we can't give tty anything but NULL, we'd just give tty back the dummy NOP device. -ss