Module Name:    src
Committed By:   jruoho
Date:           Fri Aug 20 06:34:33 UTC 2010

Modified Files:
        src/sys/arch/x86/acpi: acpi_cpu_md.c
        src/sys/arch/x86/include: cpuvar.h powernow.h
        src/sys/arch/x86/x86: cpu.c est.c powernow_k8.c
        src/sys/arch/xen/x86: cpu.c

Log Message:
Revert all previous changes that were made naively believing that the
existing CPU power management implementations could peacefully coexist with
the acpicpu(4) driver. The following options can not be used with acpicpu(4):
ENHANCED_SPEEDSTEP, INTEL_ONDEMAND_CLOCKMOD, POWERNOW_K7, and POWERNOW_K8.


To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/sys/arch/x86/acpi/acpi_cpu_md.c
cvs rdiff -u -r1.37 -r1.38 src/sys/arch/x86/include/cpuvar.h
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/x86/include/powernow.h
cvs rdiff -u -r1.76 -r1.77 src/sys/arch/x86/x86/cpu.c
cvs rdiff -u -r1.18 -r1.19 src/sys/arch/x86/x86/est.c
cvs rdiff -u -r1.27 -r1.28 src/sys/arch/x86/x86/powernow_k8.c
cvs rdiff -u -r1.48 -r1.49 src/sys/arch/xen/x86/cpu.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/arch/x86/acpi/acpi_cpu_md.c
diff -u src/sys/arch/x86/acpi/acpi_cpu_md.c:1.18 src/sys/arch/x86/acpi/acpi_cpu_md.c:1.19
--- src/sys/arch/x86/acpi/acpi_cpu_md.c:1.18	Thu Aug 19 21:40:45 2010
+++ src/sys/arch/x86/acpi/acpi_cpu_md.c	Fri Aug 20 06:34:32 2010
@@ -1,4 +1,4 @@
-/* $NetBSD: acpi_cpu_md.c,v 1.18 2010/08/19 21:40:45 jruoho Exp $ */
+/* $NetBSD: acpi_cpu_md.c,v 1.19 2010/08/20 06:34:32 jruoho Exp $ */
 
 /*-
  * Copyright (c) 2010 Jukka Ruohonen <jruoho...@iki.fi>
@@ -27,7 +27,7 @@
  * SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: acpi_cpu_md.c,v 1.18 2010/08/19 21:40:45 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: acpi_cpu_md.c,v 1.19 2010/08/20 06:34:32 jruoho Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -58,17 +58,18 @@
 
 static char	  native_idle_text[16];
 void		(*native_idle)(void) = NULL;
-void		(*native_cpu_freq_init)(int) = NULL;
 
 static int	 acpicpu_md_quirks_piix4(struct pci_attach_args *);
+static void	 acpicpu_md_pstate_status(void *, void *);
+static void	 acpicpu_md_tstate_status(void *, void *);
+static int	 acpicpu_md_pstate_sysctl_init(void);
 static int	 acpicpu_md_pstate_sysctl_get(SYSCTLFN_PROTO);
 static int	 acpicpu_md_pstate_sysctl_set(SYSCTLFN_PROTO);
 static int	 acpicpu_md_pstate_sysctl_all(SYSCTLFN_PROTO);
-static void	 acpicpu_md_pstate_status(void *, void *);
-static void	 acpicpu_md_tstate_status(void *, void *);
 
 extern uint32_t cpus_running;
 extern struct acpicpu_softc **acpicpu_sc;
+static struct sysctllog *acpicpu_log = NULL;
 
 uint32_t
 acpicpu_md_cap(void)
@@ -253,210 +254,16 @@
 int
 acpicpu_md_pstate_start(void)
 {
-	const struct sysctlnode	*fnode, *mnode, *rnode;
-	const char *str;
-	int rv;
-
-	switch (cpu_vendor) {
-
-	case CPUVENDOR_INTEL:
-	case CPUVENDOR_IDT:
-		str = "est";
-		break;
-
-	case CPUVENDOR_AMD:
-		str = "powernow";
-		break;
-
-	default:
-		return ENODEV;
-	}
-
-	/*
-	 * A kludge for backwards compatibility.
-	 */
-	native_cpu_freq_init = cpu_freq_init;
-
-	if (cpu_freq_sysctllog != NULL) {
-		sysctl_teardown(&cpu_freq_sysctllog);
-		cpu_freq_sysctllog = NULL;
-	}
-
-	rv = sysctl_createv(&cpu_freq_sysctllog, 0, NULL, &rnode,
-	    CTLFLAG_PERMANENT, CTLTYPE_NODE, "machdep", NULL,
-	    NULL, 0, NULL, 0, CTL_MACHDEP, CTL_EOL);
-
-	if (rv != 0)
-		goto fail;
-
-	rv = sysctl_createv(&cpu_freq_sysctllog, 0, &rnode, &mnode,
-	    0, CTLTYPE_NODE, str, NULL,
-	    NULL, 0, NULL, 0, CTL_CREATE, CTL_EOL);
-
-	if (rv != 0)
-		goto fail;
-
-	rv = sysctl_createv(&cpu_freq_sysctllog, 0, &mnode, &fnode,
-	    0, CTLTYPE_NODE, "frequency", NULL,
-	    NULL, 0, NULL, 0, CTL_CREATE, CTL_EOL);
-
-	if (rv != 0)
-		goto fail;
 
-	rv = sysctl_createv(&cpu_freq_sysctllog, 0, &fnode, &rnode,
-	    CTLFLAG_READWRITE, CTLTYPE_INT, "target", NULL,
-	    acpicpu_md_pstate_sysctl_set, 0, NULL, 0, CTL_CREATE, CTL_EOL);
-
-	if (rv != 0)
-		goto fail;
-
-	rv = sysctl_createv(&cpu_freq_sysctllog, 0, &fnode, &rnode,
-	    CTLFLAG_READONLY, CTLTYPE_INT, "current", NULL,
-	    acpicpu_md_pstate_sysctl_get, 0, NULL, 0, CTL_CREATE, CTL_EOL);
-
-	if (rv != 0)
-		goto fail;
-
-	rv = sysctl_createv(&cpu_freq_sysctllog, 0, &fnode, &rnode,
-	    CTLFLAG_READONLY, CTLTYPE_STRING, "available", NULL,
-	    acpicpu_md_pstate_sysctl_all, 0, NULL, 0, CTL_CREATE, CTL_EOL);
-
-	if (rv != 0)
-		goto fail;
-
-	return 0;
-
-fail:
-	if (cpu_freq_sysctllog != NULL) {
-		sysctl_teardown(&cpu_freq_sysctllog);
-		cpu_freq_sysctllog = NULL;
-	}
-
-	if (native_cpu_freq_init != NULL)
-		(*native_cpu_freq_init)(cpu_vendor);
-
-	return rv;
+	return acpicpu_md_pstate_sysctl_init();
 }
 
 int
 acpicpu_md_pstate_stop(void)
 {
 
-	if (cpu_freq_sysctllog != NULL) {
-		sysctl_teardown(&cpu_freq_sysctllog);
-		cpu_freq_sysctllog = NULL;
-	}
-
-	if (native_cpu_freq_init != NULL)
-		(*native_cpu_freq_init)(cpu_vendor);
-
-	return 0;
-}
-
-static int
-acpicpu_md_pstate_sysctl_get(SYSCTLFN_ARGS)
-{
-	struct cpu_info *ci = curcpu();
-	struct acpicpu_softc *sc;
-	struct sysctlnode node;
-	uint32_t freq;
-	int err;
-
-	sc = acpicpu_sc[ci->ci_acpiid];
-
-	if (sc == NULL)
-		return ENXIO;
-
-	err = acpicpu_pstate_get(sc, &freq);
-
-	if (err != 0)
-		return err;
-
-	node = *rnode;
-	node.sysctl_data = &freq;
-
-	err = sysctl_lookup(SYSCTLFN_CALL(&node));
-
-	if (err != 0 || newp == NULL)
-		return err;
-
-	return 0;
-}
-
-static int
-acpicpu_md_pstate_sysctl_set(SYSCTLFN_ARGS)
-{
-	struct cpu_info *ci = curcpu();
-	struct acpicpu_softc *sc;
-	struct sysctlnode node;
-	uint32_t freq;
-	int err;
-
-	sc = acpicpu_sc[ci->ci_acpiid];
-
-	if (sc == NULL)
-		return ENXIO;
-
-	err = acpicpu_pstate_get(sc, &freq);
-
-	if (err != 0)
-		return err;
-
-	node = *rnode;
-	node.sysctl_data = &freq;
-
-	err = sysctl_lookup(SYSCTLFN_CALL(&node));
-
-	if (err != 0 || newp == NULL)
-		return err;
-
-	err = acpicpu_pstate_set(sc, freq);
-
-	if (err != 0)
-		return err;
-
-	return 0;
-}
-
-static int
-acpicpu_md_pstate_sysctl_all(SYSCTLFN_ARGS)
-{
-	struct cpu_info *ci = curcpu();
-	struct acpicpu_softc *sc;
-	struct sysctlnode node;
-	char buf[1024];
-	size_t len;
-	uint32_t i;
-	int err;
-
-	sc = acpicpu_sc[ci->ci_acpiid];
-
-	if (sc == NULL)
-		return ENXIO;
-
-	(void)memset(&buf, 0, sizeof(buf));
-
-	mutex_enter(&sc->sc_mtx);
-
-	for (len = 0, i = sc->sc_pstate_max; i < sc->sc_pstate_count; i++) {
-
-		if (sc->sc_pstate[i].ps_freq == 0)
-			continue;
-
-		len += snprintf(buf + len, sizeof(buf) - len, "%u%s",
-		    sc->sc_pstate[i].ps_freq,
-		    i < (sc->sc_pstate_count - 1) ? " " : "");
-	}
-
-	mutex_exit(&sc->sc_mtx);
-
-	node = *rnode;
-	node.sysctl_data = buf;
-
-	err = sysctl_lookup(SYSCTLFN_CALL(&node));
-
-	if (err != 0 || newp == NULL)
-		return err;
+	if (acpicpu_log != NULL)
+		sysctl_teardown(&acpicpu_log);
 
 	return 0;
 }
@@ -694,3 +501,191 @@
 
 	*(uintptr_t *)arg2 = EAGAIN;
 }
+
+/*
+ * A kludge for backwards compatibility.
+ */
+static int
+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);
+
+	if (rv != 0)
+		goto fail;
+
+	rv = sysctl_createv(&acpicpu_log, 0, &rnode, &mnode,
+	    0, CTLTYPE_NODE, str, NULL,
+	    NULL, 0, NULL, 0, CTL_CREATE, CTL_EOL);
+
+	if (rv != 0)
+		goto fail;
+
+	rv = sysctl_createv(&acpicpu_log, 0, &mnode, &fnode,
+	    0, CTLTYPE_NODE, "frequency", NULL,
+	    NULL, 0, NULL, 0, CTL_CREATE, CTL_EOL);
+
+	if (rv != 0)
+		goto fail;
+
+	rv = sysctl_createv(&acpicpu_log, 0, &fnode, &rnode,
+	    CTLFLAG_READWRITE, CTLTYPE_INT, "target", NULL,
+	    acpicpu_md_pstate_sysctl_set, 0, NULL, 0, CTL_CREATE, CTL_EOL);
+
+	if (rv != 0)
+		goto fail;
+
+	rv = sysctl_createv(&acpicpu_log, 0, &fnode, &rnode,
+	    CTLFLAG_READONLY, CTLTYPE_INT, "current", NULL,
+	    acpicpu_md_pstate_sysctl_get, 0, NULL, 0, CTL_CREATE, CTL_EOL);
+
+	if (rv != 0)
+		goto fail;
+
+	rv = sysctl_createv(&acpicpu_log, 0, &fnode, &rnode,
+	    CTLFLAG_READONLY, CTLTYPE_STRING, "available", NULL,
+	    acpicpu_md_pstate_sysctl_all, 0, NULL, 0, CTL_CREATE, CTL_EOL);
+
+	if (rv != 0)
+		goto fail;
+
+	return 0;
+
+fail:
+	if (acpicpu_log != NULL) {
+		sysctl_teardown(&acpicpu_log);
+		acpicpu_log = NULL;
+	}
+
+	return rv;
+}
+
+static int
+acpicpu_md_pstate_sysctl_get(SYSCTLFN_ARGS)
+{
+	struct cpu_info *ci = curcpu();
+	struct acpicpu_softc *sc;
+	struct sysctlnode node;
+	uint32_t freq;
+	int err;
+
+	sc = acpicpu_sc[ci->ci_acpiid];
+
+	if (sc == NULL)
+		return ENXIO;
+
+	err = acpicpu_pstate_get(sc, &freq);
+
+	if (err != 0)
+		return err;
+
+	node = *rnode;
+	node.sysctl_data = &freq;
+
+	err = sysctl_lookup(SYSCTLFN_CALL(&node));
+
+	if (err != 0 || newp == NULL)
+		return err;
+
+	return 0;
+}
+
+static int
+acpicpu_md_pstate_sysctl_set(SYSCTLFN_ARGS)
+{
+	struct cpu_info *ci = curcpu();
+	struct acpicpu_softc *sc;
+	struct sysctlnode node;
+	uint32_t freq;
+	int err;
+
+	sc = acpicpu_sc[ci->ci_acpiid];
+
+	if (sc == NULL)
+		return ENXIO;
+
+	err = acpicpu_pstate_get(sc, &freq);
+
+	if (err != 0)
+		return err;
+
+	node = *rnode;
+	node.sysctl_data = &freq;
+
+	err = sysctl_lookup(SYSCTLFN_CALL(&node));
+
+	if (err != 0 || newp == NULL)
+		return err;
+
+	err = acpicpu_pstate_set(sc, freq);
+
+	if (err != 0)
+		return err;
+
+	return 0;
+}
+
+static int
+acpicpu_md_pstate_sysctl_all(SYSCTLFN_ARGS)
+{
+	struct cpu_info *ci = curcpu();
+	struct acpicpu_softc *sc;
+	struct sysctlnode node;
+	char buf[1024];
+	size_t len;
+	uint32_t i;
+	int err;
+
+	sc = acpicpu_sc[ci->ci_acpiid];
+
+	if (sc == NULL)
+		return ENXIO;
+
+	(void)memset(&buf, 0, sizeof(buf));
+
+	mutex_enter(&sc->sc_mtx);
+
+	for (len = 0, i = sc->sc_pstate_max; i < sc->sc_pstate_count; i++) {
+
+		if (sc->sc_pstate[i].ps_freq == 0)
+			continue;
+
+		len += snprintf(buf + len, sizeof(buf) - len, "%u%s",
+		    sc->sc_pstate[i].ps_freq,
+		    i < (sc->sc_pstate_count - 1) ? " " : "");
+	}
+
+	mutex_exit(&sc->sc_mtx);
+
+	node = *rnode;
+	node.sysctl_data = buf;
+
+	err = sysctl_lookup(SYSCTLFN_CALL(&node));
+
+	if (err != 0 || newp == NULL)
+		return err;
+
+	return 0;
+}
+

Index: src/sys/arch/x86/include/cpuvar.h
diff -u src/sys/arch/x86/include/cpuvar.h:1.37 src/sys/arch/x86/include/cpuvar.h:1.38
--- src/sys/arch/x86/include/cpuvar.h:1.37	Mon Aug  9 15:46:17 2010
+++ src/sys/arch/x86/include/cpuvar.h	Fri Aug 20 06:34:32 2010
@@ -1,4 +1,4 @@
-/* 	$NetBSD: cpuvar.h,v 1.37 2010/08/09 15:46:17 jruoho Exp $ */
+/* 	$NetBSD: cpuvar.h,v 1.38 2010/08/20 06:34:32 jruoho Exp $ */
 
 /*-
  * Copyright (c) 2000, 2007 The NetBSD Foundation, Inc.
@@ -66,8 +66,6 @@
 #ifndef _X86_CPUVAR_H_
 #define	_X86_CPUVAR_H_
 
-#include <sys/sysctl.h>
-
 struct cpu_functions {
 	int (*start)(struct cpu_info *, paddr_t);
 	int (*stop)(struct cpu_info *);
@@ -142,9 +140,6 @@
 int	p4_get_bus_clock(struct cpu_info *);
 #endif
 
-extern void (*cpu_freq_init)(int);
-extern struct sysctllog *cpu_freq_sysctllog;
-
 void	cpu_get_tsc_freq(struct cpu_info *);
 void	pat_init(struct cpu_info *);
 

Index: src/sys/arch/x86/include/powernow.h
diff -u src/sys/arch/x86/include/powernow.h:1.10 src/sys/arch/x86/include/powernow.h:1.11
--- src/sys/arch/x86/include/powernow.h:1.10	Thu Aug 19 04:12:45 2010
+++ src/sys/arch/x86/include/powernow.h	Fri Aug 20 06:34:32 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: powernow.h,v 1.10 2010/08/19 04:12:45 jruoho Exp $	*/
+/*	$NetBSD: powernow.h,v 1.11 2010/08/20 06:34:32 jruoho Exp $	*/
 
 /*-
  * Copyright (c) 2004 Martin VĂ©giard.
@@ -178,7 +178,6 @@
 
 /* x86/x86/powernow_k8.c */
 void k8_powernow_init(void);
-void k8_powernow_init_main(int);
 void k8_powernow_destroy(void);
 
 #endif

Index: src/sys/arch/x86/x86/cpu.c
diff -u src/sys/arch/x86/x86/cpu.c:1.76 src/sys/arch/x86/x86/cpu.c:1.77
--- src/sys/arch/x86/x86/cpu.c:1.76	Mon Aug  9 15:46:17 2010
+++ src/sys/arch/x86/x86/cpu.c	Fri Aug 20 06:34:32 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.c,v 1.76 2010/08/09 15:46:17 jruoho Exp $	*/
+/*	$NetBSD: cpu.c,v 1.77 2010/08/20 06:34:32 jruoho Exp $	*/
 
 /*-
  * Copyright (c) 2000, 2006, 2007, 2008 The NetBSD Foundation, Inc.
@@ -62,7 +62,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.76 2010/08/09 15:46:17 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.77 2010/08/20 06:34:32 jruoho Exp $");
 
 #include "opt_ddb.h"
 #include "opt_mpbios.h"		/* for MPDEBUG */
@@ -185,9 +185,6 @@
 static vaddr_t cmos_data_mapping;
 struct cpu_info *cpu_starting;
 
-void (*cpu_freq_init)(int) = NULL;
-struct sysctllog *cpu_freq_sysctllog = NULL;
-
 void    	cpu_hatch(void *);
 static void    	cpu_boot_secondary(struct cpu_info *ci);
 static void    	cpu_start_secondary(struct cpu_info *ci);

Index: src/sys/arch/x86/x86/est.c
diff -u src/sys/arch/x86/x86/est.c:1.18 src/sys/arch/x86/x86/est.c:1.19
--- src/sys/arch/x86/x86/est.c:1.18	Mon Aug  9 15:46:17 2010
+++ src/sys/arch/x86/x86/est.c	Fri Aug 20 06:34:32 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: est.c,v 1.18 2010/08/09 15:46:17 jruoho Exp $	*/
+/*	$NetBSD: est.c,v 1.19 2010/08/20 06:34:32 jruoho Exp $	*/
 /*
  * Copyright (c) 2003 Michael Eriksson.
  * All rights reserved.
@@ -81,7 +81,7 @@
 /* #define EST_DEBUG */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: est.c,v 1.18 2010/08/09 15:46:17 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: est.c,v 1.19 2010/08/20 06:34:32 jruoho Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -1261,42 +1261,35 @@
 	/*
 	 * Setup the sysctl sub-tree machdep.est.*
 	 */
-	if (cpu_freq_sysctllog != NULL) {
-		rc = EALREADY;
-		goto err;
-	}
-
-	cpu_freq_init = est_init_main;
-
-	if ((rc = sysctl_createv(&cpu_freq_sysctllog, 0, NULL, &node,
+	if ((rc = sysctl_createv(NULL, 0, NULL, &node,
 	    CTLFLAG_PERMANENT, CTLTYPE_NODE, "machdep", NULL,
 	    NULL, 0, NULL, 0, CTL_MACHDEP, CTL_EOL)) != 0)
 		goto err;
 
-	if ((rc = sysctl_createv(&cpu_freq_sysctllog, 0, &node, &estnode,
+	if ((rc = sysctl_createv(NULL, 0, &node, &estnode,
 	    0, CTLTYPE_NODE, "est", NULL,
 	    NULL, 0, NULL, 0, CTL_CREATE, CTL_EOL)) != 0)
 		goto err;
 
-	if ((rc = sysctl_createv(&cpu_freq_sysctllog, 0, &estnode, &freqnode,
+	if ((rc = sysctl_createv(NULL, 0, &estnode, &freqnode,
 	    0, CTLTYPE_NODE, "frequency", NULL,
 	    NULL, 0, NULL, 0, CTL_CREATE, CTL_EOL)) != 0)
 		goto err;
 
-	if ((rc = sysctl_createv(&cpu_freq_sysctllog, 0, &freqnode, &node,
+	if ((rc = sysctl_createv(NULL, 0, &freqnode, &node,
 	    EST_TARGET_CTLFLAG, CTLTYPE_INT, "target", NULL,
 	    est_sysctl_helper, 0, NULL, 0, CTL_CREATE, CTL_EOL)) != 0)
 		goto err;
 	est_node_target = node->sysctl_num;
 
-	if ((rc = sysctl_createv(&cpu_freq_sysctllog, 0, &freqnode, &node,
+	if ((rc = sysctl_createv(NULL, 0, &freqnode, &node,
 	    0, CTLTYPE_INT, "current", NULL,
 	    est_sysctl_helper, 0, NULL, 0, CTL_CREATE, CTL_EOL)) != 0)
 		goto err;
 	est_node_current = node->sysctl_num;
 
-	if ((rc = sysctl_createv(&cpu_freq_sysctllog, 0, &freqnode, &node,
-	    CTLFLAG_READONLY, CTLTYPE_STRING, "available", NULL,
+	if ((rc = sysctl_createv(NULL, 0, &freqnode, &node,
+	    0, CTLTYPE_STRING, "available", NULL,
 	    NULL, 0, freq_names, freq_len, CTL_CREATE, CTL_EOL)) != 0)
 		goto err;
 
@@ -1304,11 +1297,5 @@
 
  err:
 	free(freq_names, M_SYSCTLDATA);
-
-	if (cpu_freq_sysctllog != NULL)
-		sysctl_teardown(&cpu_freq_sysctllog);
-
-	cpu_freq_init = NULL;
-
 	aprint_error("%s: sysctl_createv failed (rc = %d)\n", __func__, rc);
 }

Index: src/sys/arch/x86/x86/powernow_k8.c
diff -u src/sys/arch/x86/x86/powernow_k8.c:1.27 src/sys/arch/x86/x86/powernow_k8.c:1.28
--- src/sys/arch/x86/x86/powernow_k8.c:1.27	Thu Aug 19 04:12:45 2010
+++ src/sys/arch/x86/x86/powernow_k8.c	Fri Aug 20 06:34:32 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: powernow_k8.c,v 1.27 2010/08/19 04:12:45 jruoho Exp $ */
+/*	$NetBSD: powernow_k8.c,v 1.28 2010/08/20 06:34:32 jruoho Exp $ */
 /*	$OpenBSD: powernow-k8.c,v 1.8 2006/06/16 05:58:50 gwk Exp $ */
 
 /*-
@@ -59,7 +59,7 @@
 /* AMD POWERNOW K8 driver */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: powernow_k8.c,v 1.27 2010/08/19 04:12:45 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: powernow_k8.c,v 1.28 2010/08/20 06:34:32 jruoho Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -70,7 +70,6 @@
 #include <sys/xcall.h>
 
 #include <x86/cpu_msr.h>
-#include <x86/cpuvar.h>
 #include <x86/powernow.h>
 
 #include <dev/isa/isareg.h>
@@ -80,6 +79,13 @@
 #include <machine/cpufunc.h>
 #include <machine/bus.h>
 
+#ifdef _MODULE
+static struct sysctllog *sysctllog;
+#define SYSCTLLOG	&sysctllog
+#else
+#define SYSCTLLOG	NULL
+#endif
+
 static struct powernow_cpu_state *k8pnow_current_state;
 static unsigned int cur_freq;
 static int powernow_node_target, powernow_node_current;
@@ -92,6 +98,7 @@
     unsigned int);
 static int k8_powernow_setperf(unsigned int);
 static int k8_powernow_init_once(void);
+static void k8_powernow_init_main(void);
 
 static uint64_t
 k8pnow_wr_fidvid(u_int fid, uint64_t vid, uint64_t ctrl)
@@ -334,7 +341,7 @@
 static int
 k8_powernow_init_once(void)
 {
-	k8_powernow_init_main(0);
+	k8_powernow_init_main();
 	return 0;
 }
 
@@ -350,8 +357,8 @@
 	}
 }
 
-void
-k8_powernow_init_main(int vendor)
+static void
+k8_powernow_init_main(void)
 {
 	uint64_t status;
 	uint32_t maxfid, maxvid, i;
@@ -418,34 +425,29 @@
 		goto err;
 	}
 
-	if (cpu_freq_sysctllog != NULL)
-		goto err;
-
-	cpu_freq_init = k8_powernow_init_main;
-
 	/* Create sysctl machdep.powernow.frequency. */
-	if (sysctl_createv(&cpu_freq_sysctllog, 0, NULL, &node,
+	if (sysctl_createv(SYSCTLLOG, 0, NULL, &node,
 	    CTLFLAG_PERMANENT,
 	    CTLTYPE_NODE, "machdep", NULL,
 	    NULL, 0, NULL, 0,
 	    CTL_MACHDEP, CTL_EOL) != 0)
 		goto err;
 
-	if (sysctl_createv(&cpu_freq_sysctllog, 0, &node, &pnownode,
+	if (sysctl_createv(SYSCTLLOG, 0, &node, &pnownode,
 	    0,
 	    CTLTYPE_NODE, "powernow", NULL,
 	    NULL, 0, NULL, 0,
 	    CTL_CREATE, CTL_EOL) != 0)
 		goto err;
 
-	if (sysctl_createv(&cpu_freq_sysctllog, 0, &pnownode, &freqnode,
+	if (sysctl_createv(SYSCTLLOG, 0, &pnownode, &freqnode,
 	    0,
 	    CTLTYPE_NODE, "frequency", NULL,
 	    NULL, 0, NULL, 0,
 	    CTL_CREATE, CTL_EOL) != 0)
 		goto err;
 
-	if (sysctl_createv(&cpu_freq_sysctllog, 0, &freqnode, &node,
+	if (sysctl_createv(SYSCTLLOG, 0, &freqnode, &node,
 	    CTLFLAG_READWRITE,
 	    CTLTYPE_INT, "target", NULL,
 	    k8pnow_sysctl_helper, 0, NULL, 0,
@@ -454,7 +456,7 @@
 
 	powernow_node_target = node->sysctl_num;
 
-	if (sysctl_createv(&cpu_freq_sysctllog, 0, &freqnode, &node,
+	if (sysctl_createv(SYSCTLLOG, 0, &freqnode, &node,
 	    0,
 	    CTLTYPE_INT, "current", NULL,
 	    k8pnow_sysctl_helper, 0, NULL, 0,
@@ -463,7 +465,7 @@
 
 	powernow_node_current = node->sysctl_num;
 
-	if (sysctl_createv(&cpu_freq_sysctllog, 0, &freqnode, &node,
+	if (sysctl_createv(SYSCTLLOG, 0, &freqnode, &node,
 	    0,
 	    CTLTYPE_STRING, "available", NULL,
 	    NULL, 0, freq_names, freq_names_len,
@@ -479,26 +481,18 @@
 
 	return;
 
-err:
+  err:
 	if (cstate)
 		free(cstate, M_DEVBUF);
-
 	if (freq_names)
 		free(freq_names, M_SYSCTLDATA);
-
-	if (cpu_freq_sysctllog) {
-		sysctl_teardown(&cpu_freq_sysctllog);
-		cpu_freq_sysctllog = NULL;
-	}
-
-	cpu_freq_init = NULL;
 }
 
 void
 k8_powernow_destroy(void)
 {
 #ifdef _MODULE
-	sysctl_teardown(&cpu_freq_sysctllog);
+	sysctl_teardown(SYSCTLLOG);
 
 	if (k8pnow_current_state)
 		free(k8pnow_current_state, M_DEVBUF);

Index: src/sys/arch/xen/x86/cpu.c
diff -u src/sys/arch/xen/x86/cpu.c:1.48 src/sys/arch/xen/x86/cpu.c:1.49
--- src/sys/arch/xen/x86/cpu.c:1.48	Mon Aug  9 15:46:18 2010
+++ src/sys/arch/xen/x86/cpu.c	Fri Aug 20 06:34:33 2010
@@ -1,4 +1,4 @@
-/*	$NetBSD: cpu.c,v 1.48 2010/08/09 15:46:18 jruoho Exp $	*/
+/*	$NetBSD: cpu.c,v 1.49 2010/08/20 06:34:33 jruoho Exp $	*/
 /* NetBSD: cpu.c,v 1.18 2004/02/20 17:35:01 yamt Exp  */
 
 /*-
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.48 2010/08/09 15:46:18 jruoho Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cpu.c,v 1.49 2010/08/20 06:34:33 jruoho Exp $");
 
 #include "opt_ddb.h"
 #include "opt_multiprocessor.h"
@@ -185,9 +185,6 @@
 bool x86_mp_online;
 paddr_t mp_trampoline_paddr = MP_TRAMPOLINE;
 
-void (*cpu_freq_init)(int) = NULL;
-struct sysctllog *cpu_freq_sysctllog = NULL;
-
 #if defined(MULTIPROCESSOR)
 void    	cpu_hatch(void *);
 static void    	cpu_boot_secondary(struct cpu_info *ci);

Reply via email to