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

Konstantin Belousov kostikbel at gmail.com
Sun Jan 12 09:00:25 UTC 2020


On Sun, Jan 12, 2020 at 06:09:10AM +0000, Mateusz Guzik wrote:
> Author: mjg
> Date: Sun Jan 12 06:09:10 2020
> New Revision: 356656
> URL: https://svnweb.freebsd.org/changeset/base/356656
> 
> Log:
>   Add "panicked" boolean which can be tested instead of panicstr
>   
>   The test is performed all the time and reading entire panicstr to do it
>   wastes space.
What space does it waste ?  The space in the read-mostly section ?

And what is the difference between reading a pointer vs. reading a byte ?
CPU still has to read the whole cache line.

> 
> Modified:
>   head/sys/kern/kern_shutdown.c
>   head/sys/sys/systm.h
> 
> Modified: head/sys/kern/kern_shutdown.c
> ==============================================================================
> --- head/sys/kern/kern_shutdown.c	Sun Jan 12 06:07:54 2020	(r356655)
> +++ head/sys/kern/kern_shutdown.c	Sun Jan 12 06:09:10 2020	(r356656)
> @@ -217,7 +217,8 @@ SYSCTL_INT(_kern, OID_AUTO, kerneldump_gzlevel, CTLFLA
>   * Variable panicstr contains argument to first call to panic; used as flag
>   * to indicate that the kernel has already called panic.
>   */
> -const char __read_mostly *panicstr;
> +const char *panicstr;
> +bool __read_frequently panicked;
>  
>  int __read_mostly dumping;		/* system is dumping */
>  int rebooting;				/* system is rebooting */
> @@ -873,6 +874,7 @@ vpanic(const char *fmt, va_list ap)
>  	else {
>  		bootopt |= RB_DUMP;
>  		panicstr = fmt;
> +		panicked = true;
>  		newpanic = 1;
>  	}
>  
> 
> Modified: head/sys/sys/systm.h
> ==============================================================================
> --- head/sys/sys/systm.h	Sun Jan 12 06:07:54 2020	(r356655)
> +++ head/sys/sys/systm.h	Sun Jan 12 06:09:10 2020	(r356656)
> @@ -53,7 +53,8 @@ extern int cold;		/* nonzero if we are doing a cold bo
>  extern int suspend_blocked;	/* block suspend due to pending shutdown */
>  extern int rebooting;		/* kern_reboot() has been called. */
>  extern const char *panicstr;	/* panic message */
> -#define	KERNEL_PANICKED()	__predict_false(panicstr != NULL)
> +extern bool panicked;
> +#define	KERNEL_PANICKED()	__predict_false(panicked)
>  extern char version[];		/* system version */
>  extern char compiler_version[];	/* compiler version */
>  extern char copyright[];	/* system copyright */


More information about the svn-src-head mailing list