svn commit: r337518 - in head/sys: kern sys

Bruce Evans brde at optusnet.com.au
Thu Aug 9 23:22:25 UTC 2018


On Thu, 9 Aug 2018, Kyle Evans wrote:

> Log:
>  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.

Yes, it should be written with an ordinary printf.

> Modified: head/sys/kern/subr_prf.c
> ==============================================================================
> --- head/sys/kern/subr_prf.c	Thu Aug  9 01:17:35 2018	(r337517)
> +++ head/sys/kern/subr_prf.c	Thu Aug  9 01:32:09 2018	(r337518)
> @@ -1027,6 +1027,7 @@ msgbufinit(void *ptr, int size)
> 	cp = (char *)ptr;
> 	msgbufp = (struct msgbuf *)(cp + size);
> 	msgbuf_reinit(msgbufp, cp, size);
> +	msgbuf_addstr(msgbufp, -1, BOOT_TAG, 0);
> 	if (msgbufmapped && oldp != msgbufp)
> 		msgbuf_copy(oldp, msgbufp);
> 	msgbufmapped = 1;

This seems to be wrong, since it writes the tag for all calls to
msgbufinit(), giving multiple tags for multiple calls, but there should be
only 1 per boot.  msgbufinit() should be called multiple times to bootstrap
it.  My version does this.

The only obvious bug in (a later version of) the output is a missing newline
for the tag.

My dmesg output on amd64:
X ---<<BOOT>>------<<BOOT>>---Test of early printf to msgbuf
X GDB: debug ports: sio
X KDB: current port: sio
X KDB: debugger backends: ddb gdb
X KDB: current backend: ddb
X Copyright (c) 1992-2018 The FreeBSD Project.
X ...

In -current, all of the lines before the copyright except the tag are broken
by printf() of them to an unmapped msgbuf.  (The above output is without -v.
Many more lines are lost with -v.)  In my version, msgbufinit() is called
earlier with a small message buffer to hold the early output.

Output across reboots also works right except for the missing newline:

X ---<<BOOT>>------<<BOOT>>---Test of early printf to msgbuf
X GDB: debug ports: sio
X GDB: current port: sio
X KDB: debugger backends: ddb gdb
X KDB: current backend: ddb
X Copyright (c) 1992-2018 The FreeBSD Project.
X ...
X Waiting (max 60 seconds) for system process `vnlru' to stop... done
X Waiting (max 60 seconds) for system process `syncer' to stop... 
X Syncing disks, vnodes remaining... 0 0 0 done
X Waiting (max 60 seconds) for system thread `bufdaemon' to stop... done
X Waiting (max 60 seconds) for system thread `bufspacedaemon-0' to stop... done
X Waiting (max 60 seconds) for system thread `bufspacedaemon-1' to stop... done
X Waiting (max 60 seconds) for system thread `bufspacedaemon-2' to stop... done
X Waiting (max 60 seconds) for system thread `bufspacedaemon-3' to stop... done
X Waiting (max 60 seconds) for system thread `bufspacedaemon-4' to stop... done
X Waiting (max 60 seconds) for system thread `bufspacedaemon-5' to stop... done
X Waiting (max 60 seconds) for system thread `bufspacedaemon-6' to stop... done
X All buffers synced.
X ---<<BOOT>>------<<BOOT>>---Test of early printf to msgbuf
X GDB: debug ports: sio
X GDB: current port: sio
X KDB: debugger backends: ddb gdb
X KDB: current backend: ddb
X Copyright (c) 1992-2018 The FreeBSD Project.
X ...

Bruce


More information about the svn-src-all mailing list