kernel - Refactor the kernel message buffer code
authorMatthew Dillon <dillon@apollo.backplane.com>
Tue, 3 Mar 2015 01:55:51 +0000 (17:55 -0800)
committerMatthew Dillon <dillon@apollo.backplane.com>
Tue, 3 Mar 2015 02:17:04 +0000 (18:17 -0800)
commit5608ef175917eaf5aa7542d9f872baca87d94a1c
tree0087f0cf82607e38749056a48e3449312116609e
parent55d4a94aed9a1540970ded7fa631d15f77ef41e5
kernel - Refactor the kernel message buffer code

* Add a separate tracking index for /dev/klog (syslog) so it does not eat
  the base index for the in-memory buffer.

* Change the way the FIFO indexes work.  The indexes are no longer stored
  as modulo size values.  Instead they are simply adjusted without a modulo,
  making calculations easier.

* When the FIFO is full we now add around ~1KB of slop to reduce instances
  where SMP collisions implode the buffer.  This also required adjusting
  the kern.msgbuf sysctl to avoid dumping the 'slop' area (it used to just
  dump the entire buffer).

* Adjust dmesg to operate more consistently, and to modulo the indices when
  making calculations.

* The dmesg -a option now dumps the <num> prefix for syslog / console output
  messages.  Before it tried to strip them out, which created problems in
  distinguishing kprintf()d output from syslog output.

* Adjust the console tty support thread (which copies the dmesg buffer to the
  console) as well as /dev/klog to use the new index methodology.

* It is now possible for the indexes to wrap the buffer multiple times
  (between e.g. bufl and bufx), and it obviously makes no sense to try to
  dump the overwritten data over and over again, so if indexes get totally
  out of whack we reset bufr and bufl as needed to the size of the buffer.
sbin/dmesg/dmesg.c
sys/kern/subr_log.c
sys/kern/subr_prf.c
sys/platform/vkernel/i386/cpu_regs.c
sys/platform/vkernel64/x86_64/cpu_regs.c
sys/sys/msgbuf.h