Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 13 Mar 2020 16:52:17 +0000 (UTC)
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org
Subject:   svn commit: r358962 - in stable/12: share/man/man9 sys/kern sys/sys
Message-ID:  <202003131652.02DGqHoW026308@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: markj
Date: Fri Mar 13 16:52:16 2020
New Revision: 358962
URL: https://svnweb.freebsd.org/changeset/base/358962

Log:
  MFC r358715:
  Add COUNTER_U64_SYSINIT() and COUNTER_U64_DEFINE_EARLY().

Modified:
  stable/12/share/man/man9/counter.9
  stable/12/sys/kern/subr_counter.c
  stable/12/sys/kern/subr_pcpu.c
  stable/12/sys/sys/counter.h
  stable/12/sys/sys/kernel.h
Directory Properties:
  stable/12/   (props changed)

Modified: stable/12/share/man/man9/counter.9
==============================================================================
--- stable/12/share/man/man9/counter.9	Fri Mar 13 16:44:48 2020	(r358961)
+++ stable/12/share/man/man9/counter.9	Fri Mar 13 16:52:16 2020	(r358962)
@@ -25,7 +25,7 @@
 .\"
 .\" $FreeBSD$
 .\"
-.Dd March 22, 2017
+.Dd March 6, 2020
 .Dt COUNTER 9
 .Os
 .Sh NAME
@@ -53,6 +53,8 @@
 .Fn counter_u64_zero "counter_u64_t c"
 .Ft int64_t
 .Fn counter_ratecheck "struct counter_rate *cr" "int64_t limit"
+.Fn COUNTER_U64_SYSINIT "counter_u64_t c"
+.Fn COUNTER_U64_DEFINE_EARLY "counter_u64_t c"
 .In sys/sysctl.h
 .Fn SYSCTL_COUNTER_U64 parent nbr name access ptr descr
 .Fn SYSCTL_ADD_COUNTER_U64 ctx parent nbr name access ptr descr
@@ -142,6 +144,20 @@ If the limit was reached on previous second, but was j
 then
 .Fn counter_ratecheck
 returns number of events since previous reset.
+.It Fn COUNTER_U64_SYSINIT c
+Define a
+.Xr SYSINIT 9
+initializer for the global counter
+.Fa c .
+.It Fn COUNTER_U64_DEFINE_EARLY c
+Define and initialize a global counter
+.Fa c .
+It is always safe to increment
+.Fa c ,
+though updates prior to the
+.Dv SI_SUB_COUNTER
+.Xr SYSINIT 9
+event are lost.
 .It Fn SYSCTL_COUNTER_U64 parent nbr name access ptr descr
 Declare a static
 .Xr sysctl 9
@@ -245,6 +261,7 @@ SYSCTL_COUNTER_U64_ARRAY(_debug, OID_AUTO, counter_arr
 .Xr malloc 9 ,
 .Xr ratecheck 9 ,
 .Xr sysctl 9 ,
+.Xr SYSINIT 9 ,
 .Xr uma 9
 .Sh HISTORY
 The

Modified: stable/12/sys/kern/subr_counter.c
==============================================================================
--- stable/12/sys/kern/subr_counter.c	Fri Mar 13 16:44:48 2020	(r358961)
+++ stable/12/sys/kern/subr_counter.c	Fri Mar 13 16:52:16 2020	(r358962)
@@ -172,3 +172,21 @@ counter_ratecheck(struct counter_rate *cr, int64_t lim
 
 	return (val);
 }
+
+void
+counter_u64_sysinit(void *arg)
+{
+	counter_u64_t *cp;
+
+	cp = arg;
+	*cp = counter_u64_alloc(M_WAITOK);
+}
+
+void
+counter_u64_sysuninit(void *arg)
+{
+	counter_u64_t *cp;
+
+	cp = arg;
+	counter_u64_free(*cp);
+}

Modified: stable/12/sys/kern/subr_pcpu.c
==============================================================================
--- stable/12/sys/kern/subr_pcpu.c	Fri Mar 13 16:44:48 2020	(r358961)
+++ stable/12/sys/kern/subr_pcpu.c	Fri Mar 13 16:52:16 2020	(r358962)
@@ -151,7 +151,7 @@ pcpu_zones_startup(void)
 		pcpu_zone_ptr = uma_zcreate("ptr pcpu", sizeof(void *),
 		    NULL, NULL, NULL, NULL, UMA_ALIGN_PTR, UMA_ZONE_PCPU);
 }
-SYSINIT(pcpu_zones, SI_SUB_VM, SI_ORDER_ANY, pcpu_zones_startup, NULL);
+SYSINIT(pcpu_zones, SI_SUB_COUNTER, SI_ORDER_FIRST, pcpu_zones_startup, NULL);
 
 /*
  * First-fit extent based allocator for allocating space in the per-cpu

Modified: stable/12/sys/sys/counter.h
==============================================================================
--- stable/12/sys/sys/counter.h	Fri Mar 13 16:44:48 2020	(r358961)
+++ stable/12/sys/sys/counter.h	Fri Mar 13 16:52:16 2020	(r358962)
@@ -74,5 +74,18 @@ struct counter_rate {
 
 int64_t	counter_ratecheck(struct counter_rate *, int64_t);
 
+#define	COUNTER_U64_SYSINIT(c)					\
+	SYSINIT(c##_counter_sysinit, SI_SUB_COUNTER,		\
+	    SI_ORDER_ANY, counter_u64_sysinit, &c);		\
+	SYSUNINIT(c##_counter_sysuninit, SI_SUB_COUNTER,	\
+	    SI_ORDER_ANY, counter_u64_sysuninit, &c)
+
+#define	COUNTER_U64_DEFINE_EARLY(c)				\
+	counter_u64_t __read_mostly c = EARLY_COUNTER;		\
+	COUNTER_U64_SYSINIT(c)
+
+void counter_u64_sysinit(void *);
+void counter_u64_sysuninit(void *);
+
 #endif	/* _KERNEL */
 #endif	/* ! __SYS_COUNTER_H__ */

Modified: stable/12/sys/sys/kernel.h
==============================================================================
--- stable/12/sys/sys/kernel.h	Fri Mar 13 16:44:48 2020	(r358961)
+++ stable/12/sys/sys/kernel.h	Fri Mar 13 16:52:16 2020	(r358962)
@@ -91,7 +91,8 @@ enum sysinit_sub_id {
 	SI_SUB_DONE		= 0x0000001,	/* processed*/
 	SI_SUB_TUNABLES		= 0x0700000,	/* establish tunable values */
 	SI_SUB_COPYRIGHT	= 0x0800001,	/* first use of console*/
-	SI_SUB_VM		= 0x1000000,	/* virtual memory system init*/
+	SI_SUB_VM		= 0x1000000,	/* virtual memory system init */
+	SI_SUB_COUNTER		= 0x1100000,	/* counter(9) is initialized */
 	SI_SUB_KMEM		= 0x1800000,	/* kernel memory*/
 	SI_SUB_HYPERVISOR	= 0x1A40000,	/*
 						 * Hypervisor detection and



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202003131652.02DGqHoW026308>