Module Name:    src
Committed By:   jruoho
Date:           Tue Aug 10 02:42:05 UTC 2010

Modified Files:
        src/sys/dev/acpi: acpi_cpu.h acpi_cpu_cstate.c acpi_cpu_pstate.c

Log Message:
Use evcnt(9) for the counters.


To generate a diff of this commit:
cvs rdiff -u -r1.11 -r1.12 src/sys/dev/acpi/acpi_cpu.h
cvs rdiff -u -r1.18 -r1.19 src/sys/dev/acpi/acpi_cpu_cstate.c
cvs rdiff -u -r1.6 -r1.7 src/sys/dev/acpi/acpi_cpu_pstate.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/dev/acpi/acpi_cpu.h
diff -u src/sys/dev/acpi/acpi_cpu.h:1.11 src/sys/dev/acpi/acpi_cpu.h:1.12
--- src/sys/dev/acpi/acpi_cpu.h:1.11	Mon Aug  9 13:41:38 2010
+++ src/sys/dev/acpi/acpi_cpu.h	Tue Aug 10 02:42:05 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_cpu.h,v 1.11 2010/08/09 13:41:38 jruoho Exp $ */
+/* $NetBSD: acpi_cpu.h,v 1.12 2010/08/10 02:42:05 jruoho Exp $ */
 
 /*-
  * Copyright (c) 2010 Jukka Ruohonen <jruoho...@iki.fi>
@@ -121,7 +121,8 @@
 } __packed;
 
 struct acpicpu_cstate {
-	uint64_t		 cs_stat;
+	struct evcnt		 cs_evcnt;
+	char			 cs_name[EVCNT_STRING_MAX];
 	uint64_t		 cs_addr;
 	uint32_t		 cs_power;	/* mW */
 	uint32_t		 cs_latency;	/* us */
@@ -130,7 +131,8 @@
 };
 
 struct acpicpu_pstate {
-	uint64_t		 ps_stat;
+	struct evcnt		 ps_evcnt;
+	char			 ps_name[EVCNT_STRING_MAX];
 	uint32_t		 ps_freq;	/* MHz */
 	uint32_t		 ps_power;	/* mW */
 	uint32_t		 ps_latency;	/* us */

Index: src/sys/dev/acpi/acpi_cpu_cstate.c
diff -u src/sys/dev/acpi/acpi_cpu_cstate.c:1.18 src/sys/dev/acpi/acpi_cpu_cstate.c:1.19
--- src/sys/dev/acpi/acpi_cpu_cstate.c:1.18	Mon Aug  9 13:41:38 2010
+++ src/sys/dev/acpi/acpi_cpu_cstate.c	Tue Aug 10 02:42:05 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_cpu_cstate.c,v 1.18 2010/08/09 13:41:38 jruoho Exp $ */
+/* $NetBSD: acpi_cpu_cstate.c,v 1.19 2010/08/10 02:42:05 jruoho Exp $ */
 
 /*-
  * Copyright (c) 2010 Jukka Ruohonen <jruoho...@iki.fi>
@@ -27,11 +27,12 @@
  * SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_cpu_cstate.c,v 1.18 2010/08/09 13:41:38 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_cpu_cstate.c,v 1.19 2010/08/10 02:42:05 jruoho Exp $");
 
 #include <sys/param.h>
 #include <sys/cpu.h>
 #include <sys/device.h>
+#include <sys/evcnt.h>
 #include <sys/kernel.h>
 #include <sys/once.h>
 #include <sys/mutex.h>
@@ -51,10 +52,13 @@
 ACPI_MODULE_NAME	 ("acpi_cpu_cstate")
 
 static void		 acpicpu_cstate_attach_print(struct acpicpu_softc *);
+static void		 acpicpu_cstate_attach_evcnt(struct acpicpu_softc *);
+static void		 acpicpu_cstate_detach_evcnt(struct acpicpu_softc *);
 static ACPI_STATUS	 acpicpu_cstate_cst(struct acpicpu_softc *);
 static ACPI_STATUS	 acpicpu_cstate_cst_add(struct acpicpu_softc *,
 						ACPI_OBJECT *);
 static void		 acpicpu_cstate_cst_bios(void);
+static void		 acpicpu_cstate_memset(struct acpicpu_softc *);
 static void		 acpicpu_cstate_fadt(struct acpicpu_softc *);
 static void		 acpicpu_cstate_quirks(struct acpicpu_softc *);
 static int		 acpicpu_cstate_quirks_piix4(struct pci_attach_args *);
@@ -101,6 +105,7 @@
 	}
 
 	acpicpu_cstate_quirks(sc);
+	acpicpu_cstate_attach_evcnt(sc);
 	acpicpu_cstate_attach_print(sc);
 }
 
@@ -143,6 +148,36 @@
 	}
 }
 
+static void
+acpicpu_cstate_attach_evcnt(struct acpicpu_softc *sc)
+{
+	struct acpicpu_cstate *cs;
+	const char *str;
+	int i;
+
+	for (i = 0; i < ACPI_C_STATE_COUNT; i++) {
+
+		cs = &sc->sc_cstate[i];
+
+		if (cs->cs_method == 0)
+			continue;
+
+		str = "HALT";
+
+		if (cs->cs_method == ACPICPU_C_STATE_FFH)
+			str = "MWAIT";
+
+		if (cs->cs_method == ACPICPU_C_STATE_SYSIO)
+			str = "I/O";
+
+		(void)snprintf(cs->cs_name, sizeof(cs->cs_name),
+		    "C%d (%s)", i, str);
+
+		evcnt_attach_dynamic(&cs->cs_evcnt, EVCNT_TYPE_MISC,
+		    NULL, device_xname(sc->sc_dev), cs->cs_name);
+	}
+}
+
 int
 acpicpu_cstate_detach(device_t self)
 {
@@ -156,10 +191,26 @@
 		return rv;
 
 	sc->sc_flags &= ~ACPICPU_FLAG_C;
+	acpicpu_cstate_detach_evcnt(sc);
 
 	return 0;
 }
 
+static void
+acpicpu_cstate_detach_evcnt(struct acpicpu_softc *sc)
+{
+	struct acpicpu_cstate *cs;
+	int i;
+
+	for (i = 0; i < ACPI_C_STATE_COUNT; i++) {
+
+		cs = &sc->sc_cstate[i];
+
+		if (cs->cs_method != 0)
+			evcnt_detach(&cs->cs_evcnt);
+	}
+}
+
 int
 acpicpu_cstate_start(device_t self)
 {
@@ -261,8 +312,7 @@
 		goto out;
 	}
 
-	(void)memset(sc->sc_cstate, 0,
-	    sizeof(*sc->sc_cstate) * ACPI_C_STATE_COUNT);
+	acpicpu_cstate_memset(sc);
 
 	CTASSERT(ACPI_STATE_C0 == 0 && ACPI_STATE_C1 == 1);
 	CTASSERT(ACPI_STATE_C2 == 2 && ACPI_STATE_C3 == 3);
@@ -471,11 +521,28 @@
 }
 
 static void
+acpicpu_cstate_memset(struct acpicpu_softc *sc)
+{
+	int i = 0;
+
+	while (i < ACPI_C_STATE_COUNT) {
+
+		sc->sc_cstate[i].cs_addr = 0;
+		sc->sc_cstate[i].cs_power = 0;
+		sc->sc_cstate[i].cs_flags = 0;
+		sc->sc_cstate[i].cs_method = 0;
+		sc->sc_cstate[i].cs_latency = 0;
+
+		i++;
+	}
+}
+
+static void
 acpicpu_cstate_fadt(struct acpicpu_softc *sc)
 {
 	struct acpicpu_cstate *cs = sc->sc_cstate;
 
-	(void)memset(cs, 0, sizeof(*cs) * ACPI_C_STATE_COUNT);
+	acpicpu_cstate_memset(sc);
 
 	/*
 	 * All x86 processors should support C1 (a.k.a. HALT).
@@ -720,7 +787,7 @@
 		break;
 	}
 
-	cs->cs_stat++;
+	cs->cs_evcnt.ev_count++;
 
 	end = acpitimer_read_safe(NULL);
 	sc->sc_cstate_sleep = hztoms(acpitimer_delta(end, start)) * 1000;

Index: src/sys/dev/acpi/acpi_cpu_pstate.c
diff -u src/sys/dev/acpi/acpi_cpu_pstate.c:1.6 src/sys/dev/acpi/acpi_cpu_pstate.c:1.7
--- src/sys/dev/acpi/acpi_cpu_pstate.c:1.6	Mon Aug  9 15:56:45 2010
+++ src/sys/dev/acpi/acpi_cpu_pstate.c	Tue Aug 10 02:42:05 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_cpu_pstate.c,v 1.6 2010/08/09 15:56:45 jruoho Exp $ */
+/* $NetBSD: acpi_cpu_pstate.c,v 1.7 2010/08/10 02:42:05 jruoho Exp $ */
 
 /*-
  * Copyright (c) 2010 Jukka Ruohonen <jruoho...@iki.fi>
@@ -27,9 +27,10 @@
  * SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_cpu_pstate.c,v 1.6 2010/08/09 15:56:45 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_cpu_pstate.c,v 1.7 2010/08/10 02:42:05 jruoho Exp $");
 
 #include <sys/param.h>
+#include <sys/evcnt.h>
 #include <sys/kmem.h>
 #include <sys/once.h>
 
@@ -41,6 +42,8 @@
 ACPI_MODULE_NAME	 ("acpi_cpu_pstate")
 
 static void		 acpicpu_pstate_attach_print(struct acpicpu_softc *);
+static void		 acpicpu_pstate_attach_evcnt(struct acpicpu_softc *);
+static void		 acpicpu_pstate_detach_evcnt(struct acpicpu_softc *);
 static ACPI_STATUS	 acpicpu_pstate_pss(struct acpicpu_softc *sc);
 static ACPI_STATUS	 acpicpu_pstate_pss_add(struct acpicpu_pstate *,
 						ACPI_OBJECT *);
@@ -84,6 +87,7 @@
 	sc->sc_pstate_current = sc->sc_pstate[0].ps_freq;
 
 	acpicpu_pstate_bios();
+	acpicpu_pstate_attach_evcnt(sc);
 	acpicpu_pstate_attach_print(sc);
 
 	return;
@@ -116,6 +120,27 @@
 	}
 }
 
+static void
+acpicpu_pstate_attach_evcnt(struct acpicpu_softc *sc)
+{
+	struct acpicpu_pstate *ps;
+	uint32_t i;
+
+	for (i = 0; i < sc->sc_pstate_count; i++) {
+
+		ps = &sc->sc_pstate[i];
+
+		if (ps->ps_freq == 0)
+			continue;
+
+		(void)snprintf(ps->ps_name, sizeof(ps->ps_name),
+		    "P%u (%u MHz)", i, ps->ps_freq);
+
+		evcnt_attach_dynamic(&ps->ps_evcnt, EVCNT_TYPE_MISC,
+		    NULL, device_xname(sc->sc_dev), ps->ps_name);
+	}
+}
+
 int
 acpicpu_pstate_detach(device_t self)
 {
@@ -138,10 +163,26 @@
 		kmem_free(sc->sc_pstate, size);
 
 	sc->sc_flags &= ~ACPICPU_FLAG_P;
+	acpicpu_pstate_detach_evcnt(sc);
 
 	return 0;
 }
 
+static void
+acpicpu_pstate_detach_evcnt(struct acpicpu_softc *sc)
+{
+	struct acpicpu_pstate *ps;
+	uint32_t i;
+
+	for (i = 0; i < sc->sc_pstate_count; i++) {
+
+		ps = &sc->sc_pstate[i];
+
+		if (ps->ps_freq != 0)
+			evcnt_detach(&ps->ps_evcnt);
+	}
+}
+
 int
 acpicpu_pstate_start(device_t self)
 {
@@ -647,7 +688,7 @@
 		goto fail;
 	}
 
-	ps->ps_stat++;
+	ps->ps_evcnt.ev_count++;
 	sc->sc_pstate_current = freq;
 
 	return 0;

Reply via email to