[Midnightbsd-cvs] src [7807] These probes are most useful when looking into the structures
laffer1 at midnightbsd.org
laffer1 at midnightbsd.org
Mon Sep 5 23:22:22 EDT 2016
Revision: 7807
http://svnweb.midnightbsd.org/src/?rev=7807
Author: laffer1
Date: 2016-09-05 23:22:22 -0400 (Mon, 05 Sep 2016)
Log Message:
-----------
These probes are most useful when looking into the structures
they provide, which are listed in io.d. For example:
dtrace -n 'io:kernel::start { printf("%d\n", args[0]->bio_bcount); }'
Note that the I/O systems in FreeBSD and Solaris/Illumos are sufficiently
different that there is not a 1:1 mapping from scripts that work
with one to the other.
This commit includes the fix so that our probes use "kernel"
instead of the Solaris specific "genunix"
Obtained from: FreeBSD
Modified Paths:
--------------
trunk/cddl/lib/libdtrace/Makefile
trunk/sys/kern/subr_devstat.c
trunk/sys/modules/dtrace/Makefile
trunk/sys/modules/dtrace/dtraceall/dtraceall.c
trunk/sys/sys/dtrace_bsd.h
Added Paths:
-----------
trunk/cddl/lib/libdtrace/io.d
trunk/sys/kern/dtio_kdtrace.c
trunk/sys/modules/dtrace/dtio/
trunk/sys/modules/dtrace/dtio/Makefile
Property Changed:
----------------
trunk/cddl/lib/libdtrace/Makefile
trunk/sys/modules/dtrace/Makefile
trunk/sys/modules/dtrace/dtraceall/Makefile
trunk/sys/modules/dtrace/dtraceall/dtraceall.c
Modified: trunk/cddl/lib/libdtrace/Makefile
===================================================================
--- trunk/cddl/lib/libdtrace/Makefile 2016-09-06 02:59:58 UTC (rev 7806)
+++ trunk/cddl/lib/libdtrace/Makefile 2016-09-06 03:22:22 UTC (rev 7807)
@@ -1,4 +1,4 @@
-# $MidnightBSD: src/cddl/lib/libdtrace/Makefile,v 1.1 2012/04/06 02:23:54 laffer1 Exp $
+# $MidnightBSD$
.PATH: ${.CURDIR}/../../../cddl/contrib/opensolaris/lib/libdtrace/common
.PATH: ${.CURDIR}/../../../cddl/contrib/opensolaris/lib/libgen/common
@@ -46,6 +46,7 @@
dis_tables.c
DSRCS= errno.d \
+ io.d \
psinfo.d \
signal.d \
unistd.d
Property changes on: trunk/cddl/lib/libdtrace/Makefile
___________________________________________________________________
Deleted: cvs2svn:cvs-rev
## -1 +0,0 ##
-1.2
\ No newline at end of property
Added: trunk/cddl/lib/libdtrace/io.d
===================================================================
--- trunk/cddl/lib/libdtrace/io.d (rev 0)
+++ trunk/cddl/lib/libdtrace/io.d 2016-09-06 03:22:22 UTC (rev 7807)
@@ -0,0 +1,110 @@
+/*
+ * CDDL HEADER START
+ *
+ * The contents of this file are subject to the terms of the
+ * Common Development and Distribution License (the "License").
+ * You may not use this file except in compliance with the License.
+ *
+ * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
+ * or http://www.opensolaris.org/os/licensing.
+ * See the License for the specific language governing permissions
+ * and limitations under the License.
+ *
+ * When distributing Covered Code, include this CDDL HEADER in each
+ * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
+ * If applicable, add the following below this CDDL HEADER, with the
+ * fields enclosed by brackets "[]" replaced with your own identifying
+ * information: Portions Copyright [yyyy] [name of copyright owner]
+ *
+ * CDDL HEADER END
+ *
+ * $FreeBSD$
+ */
+/*
+ * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Use is subject to license terms.
+ */
+
+#pragma ident "%Z%%M% %I% %E% SMI"
+
+#pragma D depends_on provider io
+
+typedef struct devinfo {
+ int dev_major; /* major number */
+ int dev_minor; /* minor number */
+ int dev_instance; /* instance number */
+ string dev_name; /* name of device */
+ string dev_statname; /* name of device + instance/minor */
+ string dev_pathname; /* pathname of device */
+} devinfo_t;
+
+#pragma D binding "1.0" translator
+translator devinfo_t < struct devstat *D > {
+ dev_major = D->device_number;
+ dev_minor = D->unit_number;
+ dev_instance = 0;
+ dev_name = stringof(D->device_name);
+ dev_statname = stringof(D->device_name);
+ dev_pathname = stringof(D->device_name);
+};
+
+typedef struct bufinfo {
+ int b_flags; /* flags */
+ long b_bcount; /* number of bytes */
+ caddr_t b_addr; /* buffer address */
+ uint64_t b_blkno; /* expanded block # on device */
+ uint64_t b_lblkno; /* block # on device */
+ size_t b_resid; /* # of bytes not transferred */
+ size_t b_bufsize; /* size of allocated buffer */
+/* caddr_t b_iodone; I/O completion routine */
+ int b_error; /* expanded error field */
+/* dev_t b_edev; extended device */
+} bufinfo_t;
+
+#pragma D binding "1.0" translator
+translator bufinfo_t < struct bio *B > {
+ b_flags = B->bio_flags;
+ b_bcount = B->bio_bcount;
+ b_addr = B->bio_data;
+ b_blkno = 0;
+ b_lblkno = 0;
+ b_resid = B->bio_resid;
+ b_bufsize = 0; /* XXX gnn */
+ b_error = B->bio_error;
+};
+
+/*
+ * The following inline constants can be used to examine fi_oflags when using
+ * the fds[] array or a translated fileinfo_t. Note that the various open
+ * flags behave as a bit-field *except* for O_RDONLY, O_WRONLY, and O_RDWR.
+ * To test the open mode, you write code similar to that used with the fcntl(2)
+ * F_GET[X]FL command, such as: if ((fi_oflags & O_ACCMODE) == O_WRONLY).
+ */
+inline int O_ACCMODE = 0x0003;
+#pragma D binding "1.1" O_ACCMODE
+
+inline int O_RDONLY = 0x0000;
+#pragma D binding "1.1" O_RDONLY
+inline int O_WRONLY = 0x0001;
+#pragma D binding "1.1" O_WRONLY
+inline int O_RDWR = 0x0002;
+#pragma D binding "1.1" O_RDWR
+
+inline int O_APPEND = 0x0008;
+#pragma D binding "1.1" O_APPEND
+inline int O_CREAT = 0x0200;
+#pragma D binding "1.1" O_CREAT
+inline int O_EXCL = 0x0800;
+#pragma D binding "1.1" O_EXCL
+inline int O_NOCTTY = 0x8000;
+#pragma D binding "1.1" O_NOCTTY
+inline int O_NONBLOCK = 0x0004;
+#pragma D binding "1.1" O_NONBLOCK
+inline int O_NDELAY = 0x0004;
+#pragma D binding "1.1" O_NDELAY
+inline int O_SYNC = 0x0080;
+#pragma D binding "1.1" O_SYNC
+inline int O_TRUNC = 0x0400;
+#pragma D binding "1.1" O_TRUNC
+
+
Property changes on: trunk/cddl/lib/libdtrace/io.d
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: trunk/sys/kern/dtio_kdtrace.c
===================================================================
--- trunk/sys/kern/dtio_kdtrace.c (rev 0)
+++ trunk/sys/kern/dtio_kdtrace.c 2016-09-06 03:22:22 UTC (rev 7807)
@@ -0,0 +1,232 @@
+/*-
+ * Copyright (c) 2012 Advanced Computing Technologies LLC
+ * Written by George Neville-Neil gnn at freebsd.org
+ * All rights reserved.
+ *
+ * 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 THE 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 THE 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.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/conf.h>
+#include <sys/kernel.h>
+#include <sys/malloc.h>
+#include <sys/module.h>
+
+#include <sys/dtrace.h>
+#include "../sys/dtrace_bsd.h"
+
+
+static int dtio_unload(void);
+static void dtio_getargdesc(void *, dtrace_id_t, void *,
+ dtrace_argdesc_t *);
+static void dtio_provide(void *, dtrace_probedesc_t *);
+static void dtio_destroy(void *, dtrace_id_t, void *);
+static void dtio_enable(void *, dtrace_id_t, void *);
+static void dtio_disable(void *, dtrace_id_t, void *);
+static void dtio_load(void *);
+
+static dtrace_pattr_t dtio_attr = {
+{ DTRACE_STABILITY_STABLE, DTRACE_STABILITY_STABLE, DTRACE_CLASS_COMMON },
+{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
+{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
+{ DTRACE_STABILITY_STABLE, DTRACE_STABILITY_STABLE, DTRACE_CLASS_COMMON },
+{ DTRACE_STABILITY_STABLE, DTRACE_STABILITY_STABLE, DTRACE_CLASS_COMMON },
+};
+
+static char *kernel = "kernel";
+
+/*
+ * Name strings.
+ */
+static char *dtio_start_str = "start";
+static char *dtio_done_str = "done";
+static char *dtio_wait_start_str = "wait-start";
+static char *dtio_wait_done_str = "wait-done";
+
+static dtrace_pops_t dtio_pops = {
+ dtio_provide,
+ NULL,
+ dtio_enable,
+ dtio_disable,
+ NULL,
+ NULL,
+ dtio_getargdesc,
+ NULL,
+ NULL,
+ dtio_destroy
+};
+
+static dtrace_provider_id_t dtio_id;
+
+extern uint32_t dtio_start_id;
+extern uint32_t dtio_done_id;
+extern uint32_t dtio_wait_start_id;
+extern uint32_t dtio_wait_done_id;
+
+static void
+dtio_getargdesc(void *arg, dtrace_id_t id, void *parg,
+ dtrace_argdesc_t *desc)
+{
+ const char *p = NULL;
+
+ switch (desc->dtargd_ndx) {
+ case 0:
+ p = "struct bio *";
+ break;
+ case 1:
+ p = "struct devstat *";
+ break;
+ default:
+ desc->dtargd_ndx = DTRACE_ARGNONE;
+ }
+
+ if (p != NULL)
+ strlcpy(desc->dtargd_native, p, sizeof(desc->dtargd_native));
+}
+
+static void
+dtio_provide(void *arg, dtrace_probedesc_t *desc)
+{
+ if (desc != NULL)
+ return;
+
+ if (dtrace_probe_lookup(dtio_id, kernel, NULL,
+ dtio_start_str) == 0) {
+ dtio_start_id = dtrace_probe_create(dtio_id, kernel, NULL,
+ dtio_start_str, 0, NULL);
+ }
+ if (dtrace_probe_lookup(dtio_id, kernel, NULL, dtio_done_str) == 0) {
+ dtio_done_id = dtrace_probe_create(dtio_id, kernel, NULL,
+ dtio_done_str, 0, NULL);
+ }
+ if (dtrace_probe_lookup(dtio_id, kernel, NULL,
+ dtio_wait_start_str) == 0) {
+ dtio_wait_start_id = dtrace_probe_create(dtio_id, kernel,
+ NULL,
+ dtio_wait_start_str,
+ 0, NULL);
+ }
+ if (dtrace_probe_lookup(dtio_id, kernel, NULL,
+ dtio_wait_done_str) == 0) {
+ dtio_wait_done_id = dtrace_probe_create(dtio_id, kernel, NULL,
+ dtio_wait_done_str, 0, NULL);
+ }
+
+}
+
+static void
+dtio_destroy(void *arg, dtrace_id_t id, void *parg)
+{
+}
+
+static void
+dtio_enable(void *arg, dtrace_id_t id, void *parg)
+{
+ if (id == dtio_start_id)
+ dtrace_io_start_probe =
+ (dtrace_io_start_probe_func_t)dtrace_probe;
+ else if (id == dtio_done_id)
+ dtrace_io_done_probe =
+ (dtrace_io_done_probe_func_t)dtrace_probe;
+ else if (id == dtio_wait_start_id)
+ dtrace_io_wait_start_probe =
+ (dtrace_io_wait_start_probe_func_t)dtrace_probe;
+ else if (id == dtio_wait_done_id)
+ dtrace_io_wait_done_probe =
+ (dtrace_io_wait_done_probe_func_t)dtrace_probe;
+ else
+ printf("dtrace io provider: unknown ID\n");
+
+}
+
+static void
+dtio_disable(void *arg, dtrace_id_t id, void *parg)
+{
+ if (id == dtio_start_id)
+ dtrace_io_start_probe = NULL;
+ else if (id == dtio_done_id)
+ dtrace_io_done_probe = NULL;
+ else if (id == dtio_wait_start_id)
+ dtrace_io_wait_start_probe = NULL;
+ else if (id == dtio_wait_done_id)
+ dtrace_io_wait_done_probe = NULL;
+ else
+ printf("dtrace io provider: unknown ID\n");
+
+}
+
+static void
+dtio_load(void *dummy)
+{
+ if (dtrace_register("io", &dtio_attr, DTRACE_PRIV_USER, NULL,
+ &dtio_pops, NULL, &dtio_id) != 0)
+ return;
+}
+
+
+static int
+dtio_unload()
+{
+ dtrace_io_start_probe = NULL;
+ dtrace_io_done_probe = NULL;
+ dtrace_io_wait_start_probe = NULL;
+ dtrace_io_wait_done_probe = NULL;
+
+ return (dtrace_unregister(dtio_id));
+}
+
+static int
+dtio_modevent(module_t mod __unused, int type, void *data __unused)
+{
+ int error = 0;
+
+ switch (type) {
+ case MOD_LOAD:
+ break;
+
+ case MOD_UNLOAD:
+ break;
+
+ case MOD_SHUTDOWN:
+ break;
+
+ default:
+ error = EOPNOTSUPP;
+ break;
+ }
+
+ return (error);
+}
+
+SYSINIT(dtio_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY,
+ dtio_load, NULL);
+SYSUNINIT(dtio_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY,
+ dtio_unload, NULL);
+
+DEV_MODULE(dtio, dtio_modevent, NULL);
+MODULE_VERSION(dtio, 1);
+MODULE_DEPEND(dtio, dtrace, 1, 1, 1);
+MODULE_DEPEND(dtio, opensolaris, 1, 1, 1);
Property changes on: trunk/sys/kern/dtio_kdtrace.c
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Modified: trunk/sys/kern/subr_devstat.c
===================================================================
--- trunk/sys/kern/subr_devstat.c 2016-09-06 02:59:58 UTC (rev 7806)
+++ trunk/sys/kern/subr_devstat.c 2016-09-06 03:22:22 UTC (rev 7807)
@@ -29,6 +29,8 @@
#include <sys/cdefs.h>
__FBSDID("$MidnightBSD$");
+#include "opt_kdtrace.h"
+
#include <sys/param.h>
#include <sys/kernel.h>
#include <sys/systm.h>
@@ -44,6 +46,54 @@
#include <machine/atomic.h>
+#ifdef KDTRACE_HOOKS
+#include <sys/dtrace_bsd.h>
+
+dtrace_io_start_probe_func_t dtrace_io_start_probe;
+dtrace_io_done_probe_func_t dtrace_io_done_probe;
+dtrace_io_wait_start_probe_func_t dtrace_io_wait_start_probe;
+dtrace_io_wait_done_probe_func_t dtrace_io_wait_done_probe;
+
+uint32_t dtio_start_id;
+uint32_t dtio_done_id;
+uint32_t dtio_wait_start_id;
+uint32_t dtio_wait_done_id;
+
+#define DTRACE_DEVSTAT_START() \
+ if (dtrace_io_start_probe != NULL) \
+ (*dtrace_io_start_probe)(dtio_start_id, NULL, ds);
+
+#define DTRACE_DEVSTAT_BIO_START() \
+ if (dtrace_io_start_probe != NULL) \
+ (*dtrace_io_start_probe)(dtio_start_id, bp, ds);
+
+#define DTRACE_DEVSTAT_DONE() \
+ if (dtrace_io_done_probe != NULL) \
+ (*dtrace_io_done_probe)(dtio_done_id, NULL, ds);
+
+#define DTRACE_DEVSTAT_BIO_DONE() \
+ if (dtrace_io_done_probe != NULL) \
+ (*dtrace_io_done_probe)(dtio_done_id, bp, ds);
+
+#define DTRACE_DEVSTAT_WAIT_START() \
+ if (dtrace_io_wait_start_probe != NULL) \
+ (*dtrace_io_wait_start_probe)(dtio_wait_start_id, NULL, ds);
+
+#define DTRACE_DEVSTAT_WAIT_DONE() \
+ if (dtrace_io_wait_done_probe != NULL) \
+ (*dtrace_io_wait_done_probe)(dtio_wait_done_id, NULL, ds);
+
+#else /* ! KDTRACE_HOOKS */
+
+#define DTRACE_DEVSTAT_START()
+
+#define DTRACE_DEVSTAT_DONE()
+
+#define DTRACE_DEVSTAT_WAIT_START()
+
+#define DTRACE_DEVSTAT_WAIT_DONE()
+#endif /* KDTRACE_HOOKS */
+
static int devstat_num_devs;
static long devstat_generation = 1;
static int devstat_version = DEVSTAT_VERSION;
@@ -227,6 +277,7 @@
}
ds->start_count++;
atomic_add_rel_int(&ds->sequence0, 1);
+ DTRACE_DEVSTAT_START();
}
void
@@ -241,6 +292,7 @@
binuptime(&bp->bio_t0);
devstat_start_transaction(ds, &bp->bio_t0);
+ DTRACE_DEVSTAT_BIO_START();
}
/*
@@ -312,6 +364,7 @@
ds->end_count++;
atomic_add_rel_int(&ds->sequence0, 1);
+ DTRACE_DEVSTAT_DONE();
}
void
@@ -334,6 +387,7 @@
devstat_end_transaction(ds, bp->bio_bcount - bp->bio_resid,
DEVSTAT_TAG_SIMPLE, flg, NULL, &bp->bio_t0);
+ DTRACE_DEVSTAT_BIO_DONE();
}
/*
Modified: trunk/sys/modules/dtrace/Makefile
===================================================================
--- trunk/sys/modules/dtrace/Makefile 2016-09-06 02:59:58 UTC (rev 7806)
+++ trunk/sys/modules/dtrace/Makefile 2016-09-06 03:22:22 UTC (rev 7807)
@@ -1,4 +1,4 @@
-# $MidnightBSD: src/sys/modules/dtrace/Makefile,v 1.1 2012/03/28 21:16:38 laffer1 Exp $
+# $MidnightBSD$
# $FreeBSD: src/sys/modules/dtrace/Makefile,v 1.4.2.1.2.1 2008/11/25 02:59:29 kensmith Exp $
.include <bsd.own.mk>
@@ -12,6 +12,7 @@
dtrace_test \
lockstat \
profile \
+ dtio \
prototype \
sdt \
systrace
Property changes on: trunk/sys/modules/dtrace/Makefile
___________________________________________________________________
Deleted: cvs2svn:cvs-rev
## -1 +0,0 ##
-1.2
\ No newline at end of property
Added: trunk/sys/modules/dtrace/dtio/Makefile
===================================================================
--- trunk/sys/modules/dtrace/dtio/Makefile (rev 0)
+++ trunk/sys/modules/dtrace/dtio/Makefile 2016-09-06 03:22:22 UTC (rev 7807)
@@ -0,0 +1,441 @@
+# $FreeBSD$
+
+.PATH: ${.CURDIR}/../../../kern
+
+KMOD= dtio
+SRCS= dtio_kdtrace.c \
+ vnode_if.h
+
+CFLAGS+= -I${.CURDIR}/../../../cddl/compat/opensolaris \
+ -I${.CURDIR}/../../../cddl/contrib/opensolaris/uts/common \
+ -I${.CURDIR}/../../..
+
+.include <bsd.kmod.mk>
+#
+# $MidnightBSD$
+#
+# The user-driven targets are:
+#
+# universe - *Really* build *everything* (buildworld and
+# all kernels on all architectures).
+# tinderbox - Same as universe, but presents a list of failed build
+# targets and exits with an error if there were any.
+# buildworld - Rebuild *everything*, including glue to help do
+# upgrades.
+# installworld - Install everything built by "buildworld".
+# world - buildworld + installworld, no kernel.
+# buildkernel - Rebuild the kernel and the kernel-modules.
+# installkernel - Install the kernel and the kernel-modules.
+# installkernel.debug
+# reinstallkernel - Reinstall the kernel and the kernel-modules.
+# reinstallkernel.debug
+# kernel - buildkernel + installkernel.
+# kernel-toolchain - Builds the subset of world necessary to build a kernel
+# doxygen - Build API documentation of the kernel, needs doxygen.
+# update - Convenient way to update your source tree (cvs).
+# check-old - List obsolete directories/files/libraries.
+# check-old-dirs - List obsolete directories.
+# check-old-files - List obsolete files.
+# check-old-libs - List obsolete libraries.
+# delete-old - Delete obsolete directories/files/libraries.
+# delete-old-dirs - Delete obsolete directories.
+# delete-old-files - Delete obsolete files.
+# delete-old-libs - Delete obsolete libraries.
+# targets - Print a list of supported TARGET/TARGET_ARCH pairs
+# for world and kernel targets.
+# toolchains - Build a toolchain for all world and kernel targets.
+#
+# This makefile is simple by design. The MidnightBSD make automatically reads
+# the /usr/share/mk/sys.mk unless the -m argument is specified on the
+# command line. By keeping this makefile simple, it doesn't matter too
+# much how different the installed mk files are from those in the source
+# tree. This makefile executes a child make process, forcing it to use
+# the mk files from the source tree which are supposed to DTRT.
+#
+# Most of the user-driven targets (as listed above) are implemented in
+# Makefile.inc1. The exceptions are universe, tinderbox and targets.
+#
+# If you want to build your system from source be sure that /usr/obj has
+# at least 1GB of diskspace available. A complete 'universe' build requires
+# about 15GB of space.
+#
+# For individuals wanting to build from the sources currently on their
+# system, the simple instructions are:
+#
+# 1. `cd /usr/src' (or to the directory containing your source tree).
+# 2. Define `HISTORICAL_MAKE_WORLD' variable (see README).
+# 3. `make world'
+#
+# For individuals wanting to upgrade their sources (even if only a
+# delta of a few days):
+#
+# 1. `cd /usr/src' (or to the directory containing your source tree).
+# 2. `make buildworld'
+# 3. `make buildkernel KERNCONF=YOUR_KERNEL_HERE' (default is GENERIC).
+# 4. `make installkernel KERNCONF=YOUR_KERNEL_HERE' (default is GENERIC).
+# [steps 3. & 4. can be combined by using the "kernel" target]
+# 5. `reboot' (in single user mode: boot -s from the loader prompt).
+# 6. `mergemaster -p'
+# 7. `make installworld'
+# 8. `make delete-old'
+# 9. `mergemaster' (you may wish to use -i, along with -U or -F)
+# 10. `reboot'
+# 11. `make delete-old-libs' (in case no 3rd party program uses them anymore)
+#
+# See src/UPDATING `COMMON ITEMS' for more complete information.
+#
+# If TARGET=machine (e.g. amd64, ...) is specified you can
+# cross build world for other machine types using the buildworld target,
+# and once the world is built you can cross build a kernel using the
+# buildkernel target.
+#
+# Define the user-driven targets. These are listed here in alphabetical
+# order, but that's not important.
+#
+# Targets that begin with underscore are internal targets intended for
+# developer convenience only. They are intentionally not documented and
+# completely subject to change without notice.
+#
+# For more information, see the build(7) manual page.
+#
+TGTS= all all-man buildenv buildenvvars buildkernel buildworld \
+ check-old check-old-dirs check-old-files check-old-libs \
+ checkdpadd clean cleandepend cleandir \
+ delete-old delete-old-dirs delete-old-files delete-old-libs \
+ depend distribute distributekernel distributekernel.debug \
+ distributeworld distrib-dirs distribution doxygen \
+ everything hierarchy install installcheck installkernel \
+ installkernel.debug packagekernel packageworld \
+ reinstallkernel reinstallkernel.debug \
+ installworld kernel-toolchain libraries lint maninstall \
+ obj objlink regress rerelease showconfig tags toolchain update \
+ _worldtmp _legacy _bootstrap-tools _cleanobj _obj \
+ _build-tools _cross-tools _includes _libraries _depend \
+ build32 builddtb distribute32 install32 xdev xdev-build xdev-install \
+
+TGTS+= ${SUBDIR_TARGETS}
+
+BITGTS= files includes
+BITGTS:=${BITGTS} ${BITGTS:S/^/build/} ${BITGTS:S/^/install/}
+TGTS+= ${BITGTS}
+
+.ORDER: buildworld installworld
+.ORDER: buildworld distributeworld
+.ORDER: buildworld buildkernel
+.ORDER: buildkernel installkernel
+.ORDER: buildkernel installkernel.debug
+.ORDER: buildkernel reinstallkernel
+.ORDER: buildkernel reinstallkernel.debug
+
+PATH= /sbin:/bin:/usr/sbin:/usr/bin
+MAKEOBJDIRPREFIX?= /usr/obj
+_MAKEOBJDIRPREFIX!= /usr/bin/env -i PATH=${PATH} ${MAKE} \
+ ${.MAKEFLAGS:MMAKEOBJDIRPREFIX=*} __MAKE_CONF=${__MAKE_CONF} \
+ -f /dev/null -V MAKEOBJDIRPREFIX dummy
+.if !empty(_MAKEOBJDIRPREFIX)
+.error MAKEOBJDIRPREFIX can only be set in environment, not as a global\
+ (in make.conf(5)) or command-line variable.
+.endif
+MAKEPATH= ${MAKEOBJDIRPREFIX}${.CURDIR}/make.${MACHINE}
+BINMAKE= \
+ `if [ -x ${MAKEPATH}/make ]; then echo ${MAKEPATH}/make; else echo ${MAKE}; fi` \
+ -m ${.CURDIR}/share/mk
+_MAKE= PATH=${PATH} ${BINMAKE} -f Makefile.inc1 TARGET=${_TARGET} TARGET_ARCH=${_TARGET_ARCH}
+
+# Guess machine architecture from machine type, and vice versa.
+.if !defined(TARGET_ARCH) && defined(TARGET)
+_TARGET_ARCH= ${TARGET}
+.elif !defined(TARGET) && defined(TARGET_ARCH) && \
+ ${TARGET_ARCH} != ${MACHINE_ARCH}
+_TARGET= ${TARGET_ARCH}
+.endif
+.if defined(TARGET) && !defined(_TARGET)
+_TARGET=${TARGET}
+.endif
+.if defined(TARGET_ARCH) && !defined(_TARGET_ARCH)
+_TARGET_ARCH=${TARGET_ARCH}
+.endif
+# Otherwise, default to current machine type and architecture.
+_TARGET?= ${MACHINE}
+_TARGET_ARCH?= ${MACHINE_ARCH}
+
+#
+# Make sure we have an up-to-date make(1). Only world and buildworld
+# should do this as those are the initial targets used for upgrades.
+# The user can define ALWAYS_CHECK_MAKE to have this check performed
+# for all targets.
+#
+.if defined(ALWAYS_CHECK_MAKE)
+${TGTS}: upgrade_checks
+.else
+buildworld: upgrade_checks
+.endif
+
+#
+# This 'cleanworld' target is not included in TGTS, because it is not a
+# recursive target. All of the work for it is done right here. It is
+# expected that BW_CANONICALOBJDIR == the CANONICALOBJDIR as would be
+# created by bsd.obj.mk, except that we don't want to .include that file
+# in this makefile.
+#
+# In the following, the first 'rm' in a series will usually remove all
+# files and directories. If it does not, then there are probably some
+# files with chflags set, so this unsets them and tries the 'rm' a
+# second time. There are situations where this target will be cleaning
+# some directories via more than one method, but that duplication is
+# needed to correctly handle all the possible situations.
+#
+BW_CANONICALOBJDIR:=${MAKEOBJDIRPREFIX}${.CURDIR}
+cleanworld:
+.if ${.CURDIR} == ${.OBJDIR} || ${.CURDIR}/obj == ${.OBJDIR}
+.if exists(${BW_CANONICALOBJDIR}/)
+ -rm -rf ${BW_CANONICALOBJDIR}/*
+ -chflags -R 0 ${BW_CANONICALOBJDIR}
+ rm -rf ${BW_CANONICALOBJDIR}/*
+.endif
+ # To be safe in this case, fall back to a 'make cleandir'
+ ${_+_}@cd ${.CURDIR}; ${_MAKE} cleandir
+.else
+ -rm -rf ${.OBJDIR}/*
+ -chflags -R 0 ${.OBJDIR}
+ rm -rf ${.OBJDIR}/*
+.endif
+
+#
+# Handle the user-driven targets, using the source relative mk files.
+#
+
+${TGTS}:
+ ${_+_}@cd ${.CURDIR}; ${_MAKE} ${.TARGET}
+
+# The historic default "all" target creates files which may cause stale
+# or (in the cross build case) unlinkable results. Fail with an error
+# when no target is given. The users can explicitly specify "all"
+# if they want the historic behavior.
+.MAIN: _guard
+
+_guard:
+ @echo
+ @echo "Explicit target required (use \"all\" for historic behavior)"
+ @echo
+ @false
+
+STARTTIME!= LC_ALL=C date
+CHECK_TIME!= find ${.CURDIR}/sys/sys/param.h -mtime -0s ; echo
+.if !empty(CHECK_TIME)
+.error check your date/time: ${STARTTIME}
+.endif
+
+.if defined(HISTORICAL_MAKE_WORLD) || defined(DESTDIR)
+#
+# world
+#
+# Attempt to rebuild and reinstall everything. This target is not to be
+# used for upgrading an existing MidnightBSD system, because the kernel is
+# not included. One can argue that this target doesn't build everything
+# then.
+#
+world: upgrade_checks
+ @echo "--------------------------------------------------------------"
+ @echo ">>> make world started on ${STARTTIME}"
+ @echo "--------------------------------------------------------------"
+.if target(pre-world)
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo ">>> Making 'pre-world' target"
+ @echo "--------------------------------------------------------------"
+ ${_+_}@cd ${.CURDIR}; ${_MAKE} pre-world
+.endif
+ ${_+_}@cd ${.CURDIR}; ${_MAKE} buildworld
+ ${_+_}@cd ${.CURDIR}; ${_MAKE} -B installworld
+.if target(post-world)
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo ">>> Making 'post-world' target"
+ @echo "--------------------------------------------------------------"
+ ${_+_}@cd ${.CURDIR}; ${_MAKE} post-world
+.endif
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo ">>> make world completed on `LC_ALL=C date`"
+ @echo " (started ${STARTTIME})"
+ @echo "--------------------------------------------------------------"
+.else
+world:
+ @echo "WARNING: make world will overwrite your existing MidnightBSD"
+ @echo "installation without also building and installing a new"
+ @echo "kernel. This can be dangerous. Please read the handbook,"
+ @echo "'Rebuilding world', for how to upgrade your system."
+ @echo "Define DESTDIR to where you want to install MidnightBSD,"
+ @echo "including /, to override this warning and proceed as usual."
+ @echo ""
+ @echo "Bailing out now..."
+ @false
+.endif
+
+#
+# kernel
+#
+# Short hand for `make buildkernel installkernel'
+#
+kernel: buildkernel installkernel
+
+#
+# Perform a few tests to determine if the installed tools are adequate
+# for building the world.
+#
+upgrade_checks:
+ @if ! (cd ${.CURDIR}/tools/build/make_check && \
+ PATH=${PATH} ${BINMAKE} obj >/dev/null 2>&1 && \
+ PATH=${PATH} ${BINMAKE} >/dev/null 2>&1); \
+ then \
+ (cd ${.CURDIR} && ${MAKE} make); \
+ fi
+
+#
+# Upgrade make(1) to the current version using the installed
+# headers, libraries and tools. Also, allow the location of
+# the system bsdmake-like utility to be overridden.
+#
+MMAKEENV= MAKEOBJDIRPREFIX=${MAKEPATH} \
+ DESTDIR= \
+ INSTALL="sh ${.CURDIR}/tools/install.sh"
+MMAKE= ${MMAKEENV} ${MAKE} \
+ -D_UPGRADING \
+ -DNOMAN -DNO_MAN -DNOSHARED -DNO_SHARED \
+ -DNO_CPU_CFLAGS -DNO_WERROR
+
+make: .PHONY
+ @echo
+ @echo "--------------------------------------------------------------"
+ @echo ">>> Building an up-to-date make(1)"
+ @echo "--------------------------------------------------------------"
+ ${_+_}@cd ${.CURDIR}/usr.bin/make; \
+ ${MMAKE} obj && \
+ ${MMAKE} depend && \
+ ${MMAKE} all && \
+ ${MMAKE} install DESTDIR=${MAKEPATH} BINDIR=
+
+tinderbox:
+ @cd ${.CURDIR} && ${MAKE} DOING_TINDERBOX=YES universe
+
+toolchains:
+ @cd ${.CURDIR} && ${MAKE} UNIVERSE_TARGET=toolchain universe
+
+#
+# universe
+#
+# Attempt to rebuild *everything* for all supported architectures,
+# with a reasonable chance of success, regardless of how old your
+# existing system is.
+#
+.if make(universe) || make(universe_kernels) || make(tinderbox) || make(targets)
+TARGETS?=amd64 i386
+.for target in ${TARGETS}
+TARGET_ARCHES_${target}?= ${target}
+.endfor
+
+.if defined(UNIVERSE_TARGET)
+MAKE_JUST_WORLDS= YES
+.else
+UNIVERSE_TARGET?= buildworld
+.endif
+KERNSRCDIR?= ${.CURDIR}/sys
+
+targets:
+ @echo "Supported TARGET/TARGET_ARCH pairs for world and kernel targets"
+.for target in ${TARGETS}
+.for target_arch in ${TARGET_ARCHES_${target}}
+ @echo " ${target}/${target_arch}"
+.endfor
+.endfor
+
+.if defined(DOING_TINDERBOX)
+FAILFILE=${.CURDIR}/_.tinderbox.failed
+MAKEFAIL=tee -a ${FAILFILE}
+.else
+MAKEFAIL=cat
+.endif
+
+universe: universe_prologue
+universe_prologue:
+ @echo "--------------------------------------------------------------"
+ @echo ">>> make universe started on ${STARTTIME}"
+ @echo "--------------------------------------------------------------"
+.if defined(DOING_TINDERBOX)
+ @rm -f ${FAILFILE}
+.endif
+.for target in ${TARGETS}
+universe: universe_${target}
+.ORDER: universe_prologue universe_${target} universe_epilogue
+universe_${target}: universe_${target}_prologue
+universe_${target}_prologue:
+ @echo ">> ${target} started on `LC_ALL=C date`"
+.if !defined(MAKE_JUST_KERNELS)
+.for target_arch in ${TARGET_ARCHES_${target}}
+universe_${target}: universe_${target}_${target_arch}
+universe_${target}_${target_arch}: universe_${target}_prologue
+ @echo ">> ${target}.${target_arch} ${UNIVERSE_TARGET} started on `LC_ALL=C date`"
+ @(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \
+ ${MAKE} ${JFLAG} ${UNIVERSE_TARGET} \
+ TARGET=${target} \
+ TARGET_ARCH=${target_arch} \
+ > _.${target}.${target_arch}.${UNIVERSE_TARGET} 2>&1 || \
+ (echo "${target}.${target_arch} ${UNIVERSE_TARGET} failed," \
+ "check _.${target}.${target_arch}.${UNIVERSE_TARGET} for details" | \
+ ${MAKEFAIL}))
+ @echo ">> ${target}.${target_arch} ${UNIVERSE_TARGET} completed on `LC_ALL=C date`"
+.endfor
+.endif
+.if !defined(MAKE_JUST_WORLDS)
+.if exists(${KERNSRCDIR}/${target}/conf/NOTES)
+ @(cd ${KERNSRCDIR}/${target}/conf && env __MAKE_CONF=/dev/null \
+ ${MAKE} LINT > ${.CURDIR}/_.${target}.makeLINT 2>&1 || \
+ (echo "${target} 'make LINT' failed," \
+ "check _.${target}.makeLINT for details"| ${MAKEFAIL}))
+.endif
+ @cd ${.CURDIR} && ${MAKE} ${.MAKEFLAGS} TARGET=${target} \
+ universe_kernels
+.endif
+ @echo ">> ${target} completed on `LC_ALL=C date`"
+.endfor
+universe_kernels: universe_kernconfs
+.if !defined(TARGET)
+TARGET!= uname -m
+.endif
+KERNCONFS!= cd ${KERNSRCDIR}/${TARGET}/conf && \
+ find [A-Z0-9]*[A-Z0-9] -type f -maxdepth 0 \
+ ! -name DEFAULTS ! -name NOTES
+universe_kernconfs:
+.for kernel in ${KERNCONFS}
+TARGET_ARCH_${kernel}!= cd ${KERNSRCDIR}/${TARGET}/conf && \
+ config -m ${KERNSRCDIR}/${TARGET}/conf/${kernel} 2> /dev/null | \
+ grep -v WARNING: | cut -f 2
+.if empty(TARGET_ARCH_${kernel})
+.error "Target architecture for ${TARGET}/conf/${kernel} unknown. config(8) likely too old."
+.endif
+universe_kernconfs: universe_kernconf_${TARGET}_${kernel}
+universe_kernconf_${TARGET}_${kernel}:
+ @(cd ${.CURDIR} && env __MAKE_CONF=/dev/null \
+ ${MAKE} ${JFLAG} buildkernel \
+ TARGET=${TARGET} \
+ TARGET_ARCH=${TARGET_ARCH_${kernel}} \
+ KERNCONF=${kernel} \
+ > _.${TARGET}.${kernel} 2>&1 || \
+ (echo "${TARGET} ${kernel} kernel failed," \
+ "check _.${TARGET}.${kernel} for details"| ${MAKEFAIL}))
+.endfor
+universe: universe_epilogue
+universe_epilogue:
+ @echo "--------------------------------------------------------------"
+ @echo ">>> make universe completed on `LC_ALL=C date`"
+ @echo " (started ${STARTTIME})"
+ @echo "--------------------------------------------------------------"
+.if defined(DOING_TINDERBOX)
+ @if [ -e ${FAILFILE} ] ; then \
+ echo "Tinderbox failed:" ;\
+ cat ${FAILFILE} ;\
+ exit 1 ;\
+ fi
+.endif
+.endif
Property changes on: trunk/sys/modules/dtrace/dtio/Makefile
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+MidnightBSD=%H
\ No newline at end of property
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Index: trunk/sys/modules/dtrace/dtraceall/Makefile
===================================================================
--- trunk/sys/modules/dtrace/dtraceall/Makefile 2016-09-06 02:59:58 UTC (rev 7806)
+++ trunk/sys/modules/dtrace/dtraceall/Makefile 2016-09-06 03:22:22 UTC (rev 7807)
Property changes on: trunk/sys/modules/dtrace/dtraceall/Makefile
___________________________________________________________________
Deleted: cvs2svn:cvs-rev
## -1 +0,0 ##
-1.2
\ No newline at end of property
Modified: trunk/sys/modules/dtrace/dtraceall/dtraceall.c
===================================================================
--- trunk/sys/modules/dtrace/dtraceall/dtraceall.c 2016-09-06 02:59:58 UTC (rev 7806)
+++ trunk/sys/modules/dtrace/dtraceall/dtraceall.c 2016-09-06 03:22:22 UTC (rev 7807)
@@ -1,4 +1,4 @@
-/* $MidnightBSD: src/sys/modules/dtrace/dtraceall/dtraceall.c,v 1.1 2012/03/28 21:16:38 laffer1 Exp $ */
+/* $MidnightBSD$ */
/*
* Copyright (C) 2008 John Birrell <jb at freebsd.org>
*
@@ -66,6 +66,7 @@
MODULE_DEPEND(dtraceall, cyclic, 1, 1, 1);
MODULE_DEPEND(dtraceall, opensolaris, 1, 1, 1);
MODULE_DEPEND(dtraceall, dtrace, 1, 1, 1);
+MODULE_DEPEND(dtraceall, dtio, 1, 1, 1);
MODULE_DEPEND(dtraceall, dtmalloc, 1, 1, 1);
MODULE_DEPEND(dtraceall, dtnfscl, 1, 1, 1);
MODULE_DEPEND(dtraceall, dtnfsclient, 1, 1, 1);
Property changes on: trunk/sys/modules/dtrace/dtraceall/dtraceall.c
___________________________________________________________________
Deleted: cvs2svn:cvs-rev
## -1 +0,0 ##
-1.2
\ No newline at end of property
Modified: trunk/sys/sys/dtrace_bsd.h
===================================================================
--- trunk/sys/sys/dtrace_bsd.h 2016-09-06 02:59:58 UTC (rev 7806)
+++ trunk/sys/sys/dtrace_bsd.h 2016-09-06 03:22:22 UTC (rev 7807)
@@ -38,6 +38,8 @@
struct vattr;
struct vnode;
struct reg;
+struct devstat;
+struct bio;
/*
* Cyclic clock function type definition used to hook the cyclic
@@ -168,6 +170,23 @@
extern dtrace_nfsclient_nfs23_done_probe_func_t
dtrace_nfscl_nfs234_done_probe;
+/* IO Provider hooks, really hook into devstat */
+typedef void (*dtrace_io_start_probe_func_t)(uint32_t, struct bio *,
+ struct devstat *);
+extern dtrace_io_start_probe_func_t dtrace_io_start_probe;
+
+typedef void (*dtrace_io_done_probe_func_t)(uint32_t, struct bio *,
+ struct devstat *);
+extern dtrace_io_done_probe_func_t dtrace_io_done_probe;
+
+typedef void (*dtrace_io_wait_start_probe_func_t)(uint32_t, uintptr_t *,
+ struct devstat *);
+extern dtrace_io_wait_start_probe_func_t dtrace_io_wait_start_probe;
+
+typedef void (*dtrace_io_wait_done_probe_func_t)(uint32_t, uintptr_t *,
+ struct devstat *);
+extern dtrace_io_wait_done_probe_func_t dtrace_io_wait_done_probe;
+
/*
* Functions which allow the dtrace module to check that the kernel
* hooks have been compiled with sufficient space for it's private
More information about the Midnightbsd-cvs
mailing list