git: df79daa0fde8 - main - Reduce additional console output when muted
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Fri, 29 Nov 2024 21:39:28 UTC
The branch main has been updated by imp: URL: https://cgit.FreeBSD.org/src/commit/?id=df79daa0fde87ac90d4d73604b98107009c9c1bf commit df79daa0fde87ac90d4d73604b98107009c9c1bf Author: Craig Woodward <Craig.Woodward@redcom.com> AuthorDate: 2024-09-03 18:42:50 +0000 Commit: Warner Losh <imp@FreeBSD.org> CommitDate: 2024-11-29 21:38:36 +0000 Reduce additional console output when muted While trying to resolve some custom installer issues, we found that using conscontrol(8) or setting kern.always_console_output=0 in sysctrl.conf(5) did not always prevent console output. This is in part because some areas of the kernel were outputting to the console device without checking the status of the setting. These changes enforce checking of the value in both locations where console output occurs from kernel and init(8) based callouts. Details on changes: - Moves check for mute to earlier in sequence to silence kernel output even if EARLY_PRINTF is defined. - Modifies call prf_putbuf() and prf_putchar() in subr_prf.c to strip TOCONS flag if muting is enabled, to honor the setting at print level. This is a rather simple change, which increases areas where flags to silence console output are honored. We have been running this change since 10/23 in-house without issue. (Patching prior to 14.0 also required making cn_mute non-static.) Signed-off-by: Craig.Woodward@redcom.com Reviewed by: imp Pull Request: https://github.com/freebsd/freebsd-src/pull/1407 --- sys/kern/kern_cons.c | 5 +++-- sys/kern/subr_prf.c | 10 ++++++++-- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/sys/kern/kern_cons.c b/sys/kern/kern_cons.c index 2ab86d5905a9..fbe52735cf86 100644 --- a/sys/kern/kern_cons.c +++ b/sys/kern/kern_cons.c @@ -525,6 +525,9 @@ cnputc(int c) struct consdev *cn; const char *cp; + if (cn_mute || c == '\0') + return; + #ifdef EARLY_PRINTF if (early_putc != NULL) { if (c == '\n') @@ -534,8 +537,6 @@ cnputc(int c) } #endif - if (cn_mute || c == '\0') - return; STAILQ_FOREACH(cnd, &cn_devlist, cnd_next) { cn = cnd->cnd_cn; if (!kdb_active || !(cn->cn_flags & CN_FLAG_NODEBUG)) { diff --git a/sys/kern/subr_prf.c b/sys/kern/subr_prf.c index 8ecabdec18d5..5cfc92e9761a 100644 --- a/sys/kern/subr_prf.c +++ b/sys/kern/subr_prf.c @@ -112,6 +112,7 @@ struct snprintf_arg { }; extern int log_open; +extern int cn_mute; static void msglogchar(int c, int pri); static void msglogstr(char *str, int pri, int filter_cr); @@ -425,7 +426,7 @@ prf_putchar(int c, int flags, int pri) msgbuftrigger = 1; } - if (flags & TOCONS) { + if ((flags & TOCONS) && !cn_mute) { if ((!KERNEL_PANICKED()) && (constty != NULL)) msgbuf_addchar(&consmsgbuf, c); @@ -443,7 +444,7 @@ prf_putbuf(char *bufr, int flags, int pri) msgbuftrigger = 1; } - if (flags & TOCONS) { + if ((flags & TOCONS) && !cn_mute) { if ((!KERNEL_PANICKED()) && (constty != NULL)) msgbuf_addstr(&consmsgbuf, -1, bufr, /*filter_cr*/ 0); @@ -511,6 +512,11 @@ putchar(int c, void *arg) if ((flags & TOTTY) && tp != NULL && !KERNEL_PANICKED()) tty_putchar(tp, c); + if ((flags & TOCONS ) && cn_mute) { + flags &= ~TOCONS; + ap->flags = flags; + } + if ((flags & (TOCONS | TOLOG)) && c != '\0') putbuf(c, ap); }