From d6cdffdd28d5f9f4f3ef400ab4dec68e55fe7612 Mon Sep 17 00:00:00 2001 From: avg Date: Fri, 17 Jan 2014 10:50:46 +0000 Subject: [PATCH] MFC r257037: Redefine the io provider using the SDT(9) macros MFC slacker: markj git-svn-id: svn://svn.freebsd.org/base/stable/9@260816 ccf9f872-aa2e-dd11-9fc8-001c23d0bc1f --- sys/kern/dtio_kdtrace.c | 232 ----------------------- sys/kern/subr_devstat.c | 67 ++----- sys/modules/dtrace/dtio/Makefile | 15 -- sys/modules/dtrace/dtraceall/dtraceall.c | 1 - 4 files changed, 16 insertions(+), 299 deletions(-) delete mode 100644 sys/kern/dtio_kdtrace.c delete mode 100644 sys/modules/dtrace/dtio/Makefile diff --git a/sys/kern/dtio_kdtrace.c b/sys/kern/dtio_kdtrace.c deleted file mode 100644 index 3d6f416e1..000000000 --- a/sys/kern/dtio_kdtrace.c +++ /dev/null @@ -1,232 +0,0 @@ -/*- - * Copyright (c) 2012 Advanced Computing Technologies LLC - * Written by George Neville-Neil gnn@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 -__FBSDID("$FreeBSD$"); - -#include -#include -#include -#include -#include -#include - -#include -#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); diff --git a/sys/kern/subr_devstat.c b/sys/kern/subr_devstat.c index c44ef27ed..2b02a389e 100644 --- a/sys/kern/subr_devstat.c +++ b/sys/kern/subr_devstat.c @@ -36,6 +36,7 @@ __FBSDID("$FreeBSD$"); #include #include #include +#include #include #include #include @@ -46,57 +47,21 @@ __FBSDID("$FreeBSD$"); #include -#ifdef KDTRACE_HOOKS -#include - -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_BIO_START() - -#define DTRACE_DEVSTAT_DONE() - -#define DTRACE_DEVSTAT_BIO_DONE() - -#define DTRACE_DEVSTAT_WAIT_START() - -#define DTRACE_DEVSTAT_WAIT_DONE() -#endif /* KDTRACE_HOOKS */ +SDT_PROVIDER_DEFINE(io); + +SDT_PROBE_DEFINE2(io, , , start, start, "struct bio *", "struct devstat *"); +SDT_PROBE_DEFINE2(io, , , done, done, "struct bio *", "struct devstat *"); +SDT_PROBE_DEFINE2(io, , , wait_start, wait-start, "struct bio *", + "struct devstat *"); +SDT_PROBE_DEFINE2(io, , , wait_done, wait-done, "struct bio *", + "struct devstat *"); + +#define DTRACE_DEVSTAT_START() SDT_PROBE2(io, , , start, NULL, ds) +#define DTRACE_DEVSTAT_BIO_START() SDT_PROBE2(io, , , start, bp, ds) +#define DTRACE_DEVSTAT_DONE() SDT_PROBE2(io, , , done, NULL, ds) +#define DTRACE_DEVSTAT_BIO_DONE() SDT_PROBE2(io, , , done, bp, ds) +#define DTRACE_DEVSTAT_WAIT_START() SDT_PROBE2(io, , , wait_start, NULL, ds) +#define DTRACE_DEVSTAT_WAIT_DONE() SDT_PROBE2(io, , , wait_done, NULL, ds) static int devstat_num_devs; static long devstat_generation = 1; diff --git a/sys/modules/dtrace/dtio/Makefile b/sys/modules/dtrace/dtio/Makefile deleted file mode 100644 index 2b777ef10..000000000 --- a/sys/modules/dtrace/dtio/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -# $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 - -CFLAGS+= -include ${.CURDIR}/../../../cddl/compat/opensolaris/sys/debug_compat.h diff --git a/sys/modules/dtrace/dtraceall/dtraceall.c b/sys/modules/dtrace/dtraceall/dtraceall.c index 9d7a23de5..61896bf4e 100644 --- a/sys/modules/dtrace/dtraceall/dtraceall.c +++ b/sys/modules/dtrace/dtraceall/dtraceall.c @@ -65,7 +65,6 @@ MODULE_VERSION(dtraceall, 1); 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); -- 2.45.0