Module Name: src Committed By: darran Date: Fri Mar 12 21:37:38 UTC 2010
Modified Files: src/external/cddl/osnet/sys/kern: mod.c src/external/cddl/osnet/sys/sys: cpuvar.h src/sys/modules/solaris: Makefile Added Files: src/external/cddl/osnet/sys/kern: opensolaris.c Log Message: DTrace: Add support for a simulated solaris_cpu[] data structure per cpu. Needed for the FBT provider amongst other features. To generate a diff of this commit: cvs rdiff -u -r1.1 -r1.2 src/external/cddl/osnet/sys/kern/mod.c cvs rdiff -u -r0 -r1.1 src/external/cddl/osnet/sys/kern/opensolaris.c cvs rdiff -u -r1.5 -r1.6 src/external/cddl/osnet/sys/sys/cpuvar.h cvs rdiff -u -r1.3 -r1.4 src/sys/modules/solaris/Makefile Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/external/cddl/osnet/sys/kern/mod.c diff -u src/external/cddl/osnet/sys/kern/mod.c:1.1 src/external/cddl/osnet/sys/kern/mod.c:1.2 --- src/external/cddl/osnet/sys/kern/mod.c:1.1 Fri Aug 7 20:57:57 2009 +++ src/external/cddl/osnet/sys/kern/mod.c Fri Mar 12 21:37:37 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: mod.c,v 1.1 2009/08/07 20:57:57 haad Exp $ */ +/* $NetBSD: mod.c,v 1.2 2010/03/12 21:37:37 darran Exp $ */ /*- * Copyright (c) 2008 The NetBSD Foundation, Inc. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: mod.c,v 1.1 2009/08/07 20:57:57 haad Exp $"); +__KERNEL_RCSID(0, "$NetBSD: mod.c,v 1.2 2010/03/12 21:37:37 darran Exp $"); #include <sys/param.h> #include <sys/kernel.h> @@ -35,6 +35,9 @@ #include <sys/kthread.h> #include <sys/callb.h> +void opensolaris_init(void *); +void opensolaris_fini(void *); + MODULE(MODULE_CLASS_MISC, solaris, NULL); static int @@ -47,9 +50,11 @@ case MODULE_CMD_INIT: callb_init(NULL); taskq_init(); + opensolaris_init(NULL); break; case MODULE_CMD_FINI: + opensolaris_fini(NULL); taskq_fini(); callb_fini(NULL); break; Index: src/external/cddl/osnet/sys/sys/cpuvar.h diff -u src/external/cddl/osnet/sys/sys/cpuvar.h:1.5 src/external/cddl/osnet/sys/sys/cpuvar.h:1.6 --- src/external/cddl/osnet/sys/sys/cpuvar.h:1.5 Mon Mar 1 11:19:39 2010 +++ src/external/cddl/osnet/sys/sys/cpuvar.h Fri Mar 12 21:37:37 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: cpuvar.h,v 1.5 2010/03/01 11:19:39 darran Exp $ */ +/* $NetBSD: cpuvar.h,v 1.6 2010/03/12 21:37:37 darran Exp $ */ /* * CDDL HEADER START @@ -33,6 +33,25 @@ #include <sys/cpuvar_defs.h> #ifdef _KERNEL + +typedef struct { + int cpuid; + struct cyc_cpu *cpu_cyclic; + uint32_t cpu_flags; + uint_t cpu_intr_actv; + uintptr_t cpu_profile_pc; + uintptr_t cpu_profile_upc; + uintptr_t cpu_dtrace_caller; /* DTrace: caller, if any */ + hrtime_t cpu_dtrace_chillmark; /* DTrace: chill mark time */ + hrtime_t cpu_dtrace_chilled; /* DTrace: total chill time */ +} solaris_cpu_t; + +/* Some code may choose to redefine this if pcpu_t would be more useful. */ +#define cpu_t solaris_cpu_t +#define cpu_id cpuid + +extern solaris_cpu_t solaris_cpu[]; + #define CPU_CACHE_COHERENCE_SIZE 64 /* @@ -82,6 +101,47 @@ CPU_DTRACE_BADSTACK) #define CPU_DTRACE_ERROR (CPU_DTRACE_FAULT | CPU_DTRACE_DROP) +/* + * Flags in the CPU structure. + * + * These are protected by cpu_lock (except during creation). + * + * Offlined-CPUs have three stages of being offline: + * + * CPU_ENABLE indicates that the CPU is participating in I/O interrupts + * that can be directed at a number of different CPUs. If CPU_ENABLE + * is off, the CPU will not be given interrupts that can be sent elsewhere, + * but will still get interrupts from devices associated with that CPU only, + * and from other CPUs. + * + * CPU_OFFLINE indicates that the dispatcher should not allow any threads + * other than interrupt threads to run on that CPU. A CPU will not have + * CPU_OFFLINE set if there are any bound threads (besides interrupts). + * + * CPU_QUIESCED is set if p_offline was able to completely turn idle the + * CPU and it will not have to run interrupt threads. In this case it'll + * stay in the idle loop until CPU_QUIESCED is turned off. + * + * CPU_FROZEN is used only by CPR to mark CPUs that have been successfully + * suspended (in the suspend path), or have yet to be resumed (in the resume + * case). + * + * On some platforms CPUs can be individually powered off. + * The following flags are set for powered off CPUs: CPU_QUIESCED, + * CPU_OFFLINE, and CPU_POWEROFF. The following flags are cleared: + * CPU_RUNNING, CPU_READY, CPU_EXISTS, and CPU_ENABLE. + */ +#define CPU_RUNNING 0x001 /* CPU running */ +#define CPU_READY 0x002 /* CPU ready for cross-calls */ +#define CPU_QUIESCED 0x004 /* CPU will stay in idle */ +#define CPU_EXISTS 0x008 /* CPU is configured */ +#define CPU_ENABLE 0x010 /* CPU enabled for interrupts */ +#define CPU_OFFLINE 0x020 /* CPU offline via p_online */ +#define CPU_POWEROFF 0x040 /* CPU is powered off */ +#define CPU_FROZEN 0x080 /* CPU is frozen via CPR suspend */ +#define CPU_SPARE 0x100 /* CPU offline available for use */ +#define CPU_FAULTED 0x200 /* CPU offline diagnosed faulty */ + typedef enum { CPU_INIT, CPU_CONFIG, Index: src/sys/modules/solaris/Makefile diff -u src/sys/modules/solaris/Makefile:1.3 src/sys/modules/solaris/Makefile:1.4 --- src/sys/modules/solaris/Makefile:1.3 Mon Aug 10 22:55:08 2009 +++ src/sys/modules/solaris/Makefile Fri Mar 12 21:37:37 2010 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.3 2009/08/10 22:55:08 haad Exp $ +# $NetBSD: Makefile,v 1.4 2010/03/12 21:37:37 darran Exp $ .include "../Makefile.inc" @@ -64,6 +64,7 @@ SRCS+= printf.c SRCS+= taskq.c SRCS+= vfs.c +SRCS+= opensolaris.c WARNS= 0 NOGCCERROR= yes Added files: Index: src/external/cddl/osnet/sys/kern/opensolaris.c diff -u /dev/null src/external/cddl/osnet/sys/kern/opensolaris.c:1.1 --- /dev/null Fri Mar 12 21:37:38 2010 +++ src/external/cddl/osnet/sys/kern/opensolaris.c Fri Mar 12 21:37:37 2010 @@ -0,0 +1,67 @@ +/* $NetBSD: opensolaris.c,v 1.1 2010/03/12 21:37:37 darran Exp $ */ +/*- + * Copyright 2007 John Birrell <j...@freebsd.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD: src/sys/cddl/compat/opensolaris/kern/opensolaris.c,v 1.4.2.2 2009/08/13 13:56:05 trasz Exp $ + * + */ + +#include <sys/cdefs.h> +#include <sys/types.h> +#include <sys/conf.h> +#include <sys/cpuvar.h> +#include <sys/errno.h> +#include <sys/param.h> +#include <sys/kernel.h> +#include <sys/misc.h> +#include <sys/module.h> +#include <sys/mutex.h> + +cpu_core_t cpu_core[MAXCPUS]; +solaris_cpu_t solaris_cpu[MAXCPUS]; + +/* + * OpenSolaris subsystem initialisation. + */ +void +opensolaris_init(void *dummy) +{ + int i; + + /* + * "Enable" all CPUs even though they may not exist just so + * that the asserts work. On FreeBSD, if a CPU exists, it is + * enabled. + */ + for (i = 0; i < MAXCPUS; i++) { + solaris_cpu[i].cpuid = i; + solaris_cpu[i].cpu_flags &= CPU_ENABLE; + } + +} + +void +opensolaris_fini(void *dummy) +{ +}