tech-kern archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

Normalising CPU frequency sysctl variables



I'm writing system monitoring code for NetBSD.

Right now, to get the current CPU frequency, I have to iterate through
~six machine dependent sysctl variables and check their presence,
even though they return exactly the same format.

This patch addresses some low hanging fruit by changing the arch-specific
variable names in the cases where you can't control independent CPUs:

machdep.est.frequency.current,
machdep.powernow.frequency.current,
machdep.intrepid.frequency.current,
machdep.loongsong.frequency.current
	-> machdep.cpu.frequency.current

machdep.cpu.frequency.current was already in use, so software like
estd checks for it. The FDT code uses machdep.cpufreq.cpuX.current
to provide per-CPU control, but this isn't offered by these drivers.

I can only verify that this works on a machine that previously had
machdep.est.frequency.current.

Is there anything the machdep.est.frequency.current naming has been
kept for compatibility with that this would break?

Index: sys/arch/x86/acpi/acpi_cpu_md.c
===================================================================
RCS file: /cvsroot/src/sys/arch/x86/acpi/acpi_cpu_md.c,v
retrieving revision 1.83
diff -u -r1.83 acpi_cpu_md.c
--- sys/arch/x86/acpi/acpi_cpu_md.c	19 Mar 2020 19:55:34 -0000	1.83
+++ sys/arch/x86/acpi/acpi_cpu_md.c	7 Sep 2020 16:06:04 -0000
@@ -1003,25 +1003,8 @@
 acpicpu_md_pstate_sysctl_init(void)
 {
 	const struct sysctlnode	*fnode, *mnode, *rnode;
-	const char *str;
 	int rv;
 
-	switch (cpu_vendor) {
-
-	case CPUVENDOR_IDT:
-	case CPUVENDOR_INTEL:
-		str = "est";
-		break;
-
-	case CPUVENDOR_AMD:
-		str = "powernow";
-		break;
-
-	default:
-		return ENODEV;
-	}
-
-
 	rv = sysctl_createv(&acpicpu_log, 0, NULL, &rnode,
 	    CTLFLAG_PERMANENT, CTLTYPE_NODE, "machdep", NULL,
 	    NULL, 0, NULL, 0, CTL_MACHDEP, CTL_EOL);
@@ -1030,7 +1013,7 @@
 		goto fail;
 
 	rv = sysctl_createv(&acpicpu_log, 0, &rnode, &mnode,
-	    0, CTLTYPE_NODE, str, NULL,
+	    0, CTLTYPE_NODE, "cpu", NULL,
 	    NULL, 0, NULL, 0, CTL_CREATE, CTL_EOL);
 
 	if (rv != 0)
Index: sys/arch/x86/x86/est.c
===================================================================
RCS file: /cvsroot/src/sys/arch/x86/x86/est.c,v
retrieving revision 1.31
diff -u -r1.31 est.c
--- sys/arch/x86/x86/est.c	1 Jun 2017 02:45:08 -0000	1.31
+++ sys/arch/x86/x86/est.c	7 Sep 2020 16:06:04 -0000
@@ -1296,11 +1296,11 @@
 est_sysctl(device_t self)
 {
 	struct est_softc *sc = device_private(self);
-	const struct sysctlnode	*node, *estnode, *freqnode;
+	const struct sysctlnode	*node, *cpunode, *freqnode;
 	int rv;
 
 	/*
-	 * Setup the sysctl sub-tree machdep.est.*
+	 * Setup the sysctl sub-tree machdep.cpu.*
 	 */
 	rv = sysctl_createv(&sc->sc_log, 0, NULL, &node,
 	    CTLFLAG_PERMANENT, CTLTYPE_NODE, "machdep", NULL,
@@ -1309,14 +1309,14 @@
 	if (rv != 0)
 		goto fail;
 
-	rv = sysctl_createv(&sc->sc_log, 0, &node, &estnode,
-	    0, CTLTYPE_NODE, "est", NULL,
+	rv = sysctl_createv(&sc->sc_log, 0, &node, &cpunode,
+	    0, CTLTYPE_NODE, "cpu", NULL,
 	    NULL, 0, NULL, 0, CTL_CREATE, CTL_EOL);
 
 	if (rv != 0)
 		goto fail;
 
-	rv = sysctl_createv(&sc->sc_log, 0, &estnode, &freqnode,
+	rv = sysctl_createv(&sc->sc_log, 0, &cpunode, &freqnode,
 	    0, CTLTYPE_NODE, "frequency", NULL,
 	    NULL, 0, NULL, 0, CTL_CREATE, CTL_EOL);
 
Index: sys/arch/x86/x86/powernow.c
===================================================================
RCS file: /cvsroot/src/sys/arch/x86/x86/powernow.c,v
retrieving revision 1.10
diff -u -r1.10 powernow.c
--- sys/arch/x86/x86/powernow.c	1 Jun 2017 02:45:08 -0000	1.10
+++ sys/arch/x86/x86/powernow.c	7 Sep 2020 16:06:04 -0000
@@ -249,7 +249,7 @@
 static int
 powernow_sysctl(device_t self)
 {
-	const struct sysctlnode *freqnode, *node, *pnownode;
+	const struct sysctlnode *freqnode, *node, *cpunode;
 	struct powernow_softc *sc = device_private(self);
 	int rv;
 
@@ -263,14 +263,14 @@
 	if (rv != 0)
 		goto fail;
 
-	rv = sysctl_createv(&sc->sc_log, 0, &node, &pnownode,
-	    0, CTLTYPE_NODE, "powernow", NULL,
+	rv = sysctl_createv(&sc->sc_log, 0, &node, &cpunode,
+	    0, CTLTYPE_NODE, "cpu", NULL,
 	    NULL, 0, NULL, 0, CTL_CREATE, CTL_EOL);
 
 	if (rv != 0)
 		goto fail;
 
-	rv = sysctl_createv(&sc->sc_log, 0, &pnownode, &freqnode,
+	rv = sysctl_createv(&sc->sc_log, 0, &cpunode, &freqnode,
 	    0, CTLTYPE_NODE, "frequency", NULL,
 	    NULL, 0, NULL, 0, CTL_CREATE, CTL_EOL);
 
Index: sys/arch/macppc/dev/obio.c
===================================================================
RCS file: /cvsroot/src/sys/arch/macppc/dev/obio.c,v
retrieving revision 1.46
diff -u -r1.46 obio.c
--- sys/arch/macppc/dev/obio.c	8 Jun 2018 23:39:31 -0000	1.46
+++ sys/arch/macppc/dev/obio.c	7 Sep 2020 16:06:04 -0000
@@ -431,9 +431,9 @@
 
 	if (sysctl_createv(NULL, 0, NULL, 
 	    &me, 
-	    CTLFLAG_READWRITE, CTLTYPE_NODE, "intrepid", NULL, NULL,
+	    CTLFLAG_READWRITE, CTLTYPE_NODE, "cpu", NULL, NULL,
 	    0, NULL, 0, CTL_MACHDEP, CTL_CREATE, CTL_EOL) != 0)
-		printf("couldn't create 'intrepid' node\n");
+		printf("couldn't create 'cpu' node\n");
 	
 	if (sysctl_createv(NULL, 0, NULL, 
 	    &freq, 
Index: sys/arch/evbmips/loongson/loongson_clock.c
===================================================================
RCS file: /cvsroot/src/sys/arch/evbmips/loongson/loongson_clock.c,v
retrieving revision 1.2
diff -u -r1.2 loongson_clock.c
--- sys/arch/evbmips/loongson/loongson_clock.c	29 May 2020 12:30:40 -0000	1.2
+++ sys/arch/evbmips/loongson/loongson_clock.c	7 Sep 2020 16:06:04 -0000
@@ -110,9 +110,9 @@
 	/* now setup sysctl */
 	if (sysctl_createv(NULL, 0, NULL, 
 	    &me, 
-	    CTLFLAG_READWRITE, CTLTYPE_NODE, "loongson", NULL, NULL,
+	    CTLFLAG_READWRITE, CTLTYPE_NODE, "cpu", NULL, NULL,
 	    0, NULL, 0, CTL_MACHDEP, CTL_CREATE, CTL_EOL) != 0)
-		aprint_error("couldn't create 'loongson' node\n");
+		aprint_error("couldn't create 'cpu' node\n");
 
 	if (sysctl_createv(NULL, 0, NULL, 
 	    &freq, 
Index: share/man/man4/man4.x86/est.4
===================================================================
RCS file: /cvsroot/src/share/man/man4/man4.x86/est.4,v
retrieving revision 1.5
diff -u -r1.5 est.4
--- share/man/man4/man4.x86/est.4	17 Feb 2017 22:10:47 -0000	1.5
+++ share/man/man4/man4.x86/est.4	7 Sep 2020 16:06:04 -0000
@@ -24,7 +24,7 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd February 17, 2017
+.Dd September 7, 2020
 .Dt EST 4
 .Os
 .Sh NAME
@@ -41,13 +41,13 @@
 .Xr sysctl 8
 variables are available with
 .Nm :
-.Bl -tag -width "machdep.est.frequency.available" -offset indent
-.It Ic machdep.est.frequency.target
+.Bl -tag -width "machdep.cpu.frequency.available" -offset indent
+.It Ic machdep.cpu.frequency.target
 The target frequency of the
 .Tn CPUs .
-.It Ic machdep.est.frequency.current
+.It Ic machdep.cpu.frequency.current
 The current frequency.
-.It Ic machdep.est.frequency.available
+.It Ic machdep.cpu.frequency.available
 The frequencies recognized by
 .Nm .
 .El
Index: share/man/man4/man4.x86/powernow.4
===================================================================
RCS file: /cvsroot/src/share/man/man4/man4.x86/powernow.4,v
retrieving revision 1.3
diff -u -r1.3 powernow.4
--- share/man/man4/man4.x86/powernow.4	17 Feb 2017 22:10:47 -0000	1.3
+++ share/man/man4/man4.x86/powernow.4	7 Sep 2020 16:06:04 -0000
@@ -24,7 +24,7 @@
 .\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 .\" POSSIBILITY OF SUCH DAMAGE.
 .\"
-.Dd February 17, 2017
+.Dd September 7, 2020
 .Dt POWERNOW 4
 .Os
 .Sh NAME
@@ -46,13 +46,13 @@
 .Xr sysctl 8
 variables are available with
 .Nm :
-.Bl -tag -width "machdep.powernow.frequency.available" -offset 2n
-.It Ic machdep.powernow.frequency.target
+.Bl -tag -width "machdep.cpu.frequency.available" -offset 2n
+.It Ic machdep.cpu.frequency.target
 The target frequency of the
 .Tn CPUs .
-.It Ic machdep.powernow.frequency.current
+.It Ic machdep.cpu.frequency.current
 The current frequency.
-.It Ic machdep.powernow.frequency.available
+.It Ic machdep.cpu.frequency.available
 The available frequencies.
 .El
 .Pp


Home | Main Index | Thread Index | Old Index