svn commit: r338109 - in stable/11/sys: conf kern sys
Kyle Evans
kevans at FreeBSD.org
Mon Aug 20 17:27:32 UTC 2018
Author: kevans
Date: Mon Aug 20 17:27:30 2018
New Revision: 338109
URL: https://svnweb.freebsd.org/changeset/base/338109
Log:
MFC boot tagging support: r337518, r337544-r337546, r337548,
r337579-r337580, r337952
This is equivalent to what's in head, except the default is an empty boot
tag string so that nothing gets output by default.
r337518:
kern: Add a BOOT_TAG marker at the beginning of boot dmesg
From the "newly licensed to drive" PR department, add a BOOT_TAG marker (by
default, --<<BOOT>>--, to the beginning of each boot's dmesg. This makes it
easier to do textproc magic to locate the start of each boot and, of
particular interest to some, the dmesg of the current boot.
The PR has a dmesg(8) component as well that I've opted not to include for
the moment- it was the more contentious part of this PR.
bde@ also made the statement that this boot tag should be written with an
ordinary printf, which I've- for the moment- declined to change about this
patch to keep it more transparent to observer of the boot process.
PR: 43434
Submitted by: dak <aurelien.nephtali at wanadoo.fr> (basically rewritten)
r337544:
msgbuf: Light detailing (const'ify and bool'itize)
r337545:
BOOT_TAG: Make a config(5) option, expose as sysctl and loader tunable
BOOT_TAG lived shortly in sys/msgbuf.h, but this wasn't necessarily great
for changing it or removing it. Move it into subr_prf.c and add options for
it to opt_printf.h.
One can specify both the BOOT_TAG and BOOT_TAG_SZ (really, size of the
buffer that holds the BOOT_TAG). We expose it as kern.boot_tag and also add
a loader tunable by the same name that we'll fetch upon initialization of
the msgbuf.
This allows for flexibility and also ensures that there's a consistent way
to figure out the boot tag of the running kernel, rather than relying on
headers to be in-sync.
Prodded super-super-lightly by: imp
r337546:
subr_prf: Use "sizeof current_boot_tag" instead
r337548:
subr_prf: style(9) the sizeof
Reported by: jkim, ian
r337579:
boot tagging: minor fixes
msgbufinit may be called multiple times as we initialize the msgbuf into a
progressively larger buffer. This doesn't happen as of now on head, but it
may happen in the future and we generally support this. As such, only print
the boot tag if we've just initialized the buffer for the first time.
The boot tag also now has a newline appended to it for better visibility,
and has been switched to a normal printf, by requesto f bde, after we've
denoted that the msgbuf is mapped.
r337580:
subr_prf: remove think-o that had returned to local patch
Reported by: cognet
r337952:
subr_prf: Don't write kern.boot_tag if it's empty
This change allows one to set kern.boot_tag="" and not get a blank line
preceding other boot messages. While this isn't super critical- blank lines
are easy to filter out both mentally and in processing dmesg later- it
allows for a mode of operation that matches previous behavior.
I intend to MFC this whole series to stable/11 by the end of the month with
boot_tag empty by default to make this effectively a nop in the stable
branch.
Modified:
stable/11/sys/conf/NOTES
stable/11/sys/conf/options
stable/11/sys/kern/subr_msgbuf.c
stable/11/sys/kern/subr_prf.c
stable/11/sys/sys/msgbuf.h
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/sys/conf/NOTES
==============================================================================
--- stable/11/sys/conf/NOTES Mon Aug 20 16:44:09 2018 (r338108)
+++ stable/11/sys/conf/NOTES Mon Aug 20 17:27:30 2018 (r338109)
@@ -145,6 +145,16 @@ options INCLUDE_CONFIG_FILE # Include this file i
options BOOTVERBOSE=1
options BOOTHOWTO=RB_MULTIPLE
+#
+# Compile-time defaults for dmesg boot tagging
+#
+# Default boot tag; may use 'kern.boot_tag' loader tunable to override. The
+# current boot's tag is also exposed via the 'kern.boot_tag' sysctl.
+options BOOT_TAG=\"\"
+# Maximum boot tag size the kernel's static buffer should accomodate. Maximum
+# size for both BOOT_TAG and the assocated tunable.
+options BOOT_TAG_SZ=32
+
options GEOM_AES # Don't use, use GEOM_BDE (obsolete, gone in 12)
options GEOM_BDE # Disk encryption.
options GEOM_BSD # BSD disklabels (obsolete, gone in 12)
Modified: stable/11/sys/conf/options
==============================================================================
--- stable/11/sys/conf/options Mon Aug 20 16:44:09 2018 (r338108)
+++ stable/11/sys/conf/options Mon Aug 20 17:27:30 2018 (r338109)
@@ -801,6 +801,8 @@ TERMINAL_NORM_ATTR opt_teken.h
# options for printf
PRINTF_BUFR_SIZE opt_printf.h
+BOOT_TAG opt_printf.h
+BOOT_TAG_SZ opt_printf.h
# kbd options
KBD_DISABLE_KEYMAP_LOAD opt_kbd.h
Modified: stable/11/sys/kern/subr_msgbuf.c
==============================================================================
--- stable/11/sys/kern/subr_msgbuf.c Mon Aug 20 16:44:09 2018 (r338108)
+++ stable/11/sys/kern/subr_msgbuf.c Mon Aug 20 17:27:30 2018 (r338109)
@@ -179,7 +179,7 @@ msgbuf_addchar(struct msgbuf *mbp, int c)
* carriage returns down this path. So do we still need it?
*/
void
-msgbuf_addstr(struct msgbuf *mbp, int pri, char *str, int filter_cr)
+msgbuf_addstr(struct msgbuf *mbp, int pri, const char *str, int filter_cr)
{
u_int seq;
size_t len, prefix_len;
Modified: stable/11/sys/kern/subr_prf.c
==============================================================================
--- stable/11/sys/kern/subr_prf.c Mon Aug 20 16:44:09 2018 (r338108)
+++ stable/11/sys/kern/subr_prf.c Mon Aug 20 17:27:30 2018 (r338109)
@@ -118,9 +118,21 @@ static void putchar(int ch, void *arg);
static char *ksprintn(char *nbuf, uintmax_t num, int base, int *len, int upper);
static void snprintf_func(int ch, void *arg);
-static int msgbufmapped; /* Set when safe to use msgbuf */
+static bool msgbufmapped; /* Set when safe to use msgbuf */
int msgbuftrigger;
+#ifndef BOOT_TAG_SZ
+#define BOOT_TAG_SZ 32
+#endif
+#ifndef BOOT_TAG
+/* Tag used to mark the start of a boot in dmesg */
+#define BOOT_TAG ""
+#endif
+
+static char current_boot_tag[BOOT_TAG_SZ + 1] = BOOT_TAG;
+SYSCTL_STRING(_kern, OID_AUTO, boot_tag, CTLFLAG_RDTUN | CTLFLAG_NOFETCH,
+ current_boot_tag, 0, "Tag added to dmesg at start of boot");
+
static int log_console_output = 1;
SYSCTL_INT(_kern, OID_AUTO, log_console_output, CTLFLAG_RWTUN,
&log_console_output, 0, "Duplicate console output to the syslog");
@@ -1011,14 +1023,22 @@ msgbufinit(void *ptr, int size)
{
char *cp;
static struct msgbuf *oldp = NULL;
+ bool print_boot_tag;
size -= sizeof(*msgbufp);
cp = (char *)ptr;
+ print_boot_tag = !msgbufmapped;
+ /* Attempt to fetch kern.boot_tag tunable on first mapping */
+ if (!msgbufmapped)
+ TUNABLE_STR_FETCH("kern.boot_tag", current_boot_tag,
+ sizeof(current_boot_tag));
msgbufp = (struct msgbuf *)(cp + size);
msgbuf_reinit(msgbufp, cp, size);
if (msgbufmapped && oldp != msgbufp)
msgbuf_copy(oldp, msgbufp);
- msgbufmapped = 1;
+ msgbufmapped = true;
+ if (print_boot_tag && *current_boot_tag != '\0')
+ printf("%s\n", current_boot_tag);
oldp = msgbufp;
}
Modified: stable/11/sys/sys/msgbuf.h
==============================================================================
--- stable/11/sys/sys/msgbuf.h Mon Aug 20 16:44:09 2018 (r338108)
+++ stable/11/sys/sys/msgbuf.h Mon Aug 20 17:27:30 2018 (r338109)
@@ -66,7 +66,7 @@ extern struct mtx msgbuf_lock;
void msgbufinit(void *ptr, int size);
void msgbuf_addchar(struct msgbuf *mbp, int c);
-void msgbuf_addstr(struct msgbuf *mbp, int pri, char *str, int filter_cr);
+void msgbuf_addstr(struct msgbuf *mbp, int pri, const char *str, int filter_cr);
void msgbuf_clear(struct msgbuf *mbp);
void msgbuf_copy(struct msgbuf *src, struct msgbuf *dst);
int msgbuf_getbytes(struct msgbuf *mbp, char *buf, int buflen);
More information about the svn-src-stable-11
mailing list