dtrace_bsd.h revision 269752
1/*- 2 * Copyright (c) 2007-2008 John Birrell (jb@freebsd.org) 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * 26 * $FreeBSD: stable/10/sys/sys/dtrace_bsd.h 269752 2014-08-09 14:05:01Z markj $ 27 * 28 * This file contains BSD shims for Sun's DTrace code. 29 */ 30 31#ifndef _SYS_DTRACE_BSD_H 32#define _SYS_DTRACE_BSD_H 33 34/* Forward definitions: */ 35struct mbuf; 36struct trapframe; 37struct thread; 38struct vattr; 39struct vnode; 40struct reg; 41struct devstat; 42struct bio; 43 44/* 45 * Cyclic clock function type definition used to hook the cyclic 46 * subsystem into the appropriate timer interrupt. 47 */ 48typedef void (*cyclic_clock_func_t)(struct trapframe *); 49extern cyclic_clock_func_t cyclic_clock_func; 50 51void clocksource_cyc_set(const struct bintime *t); 52 53/* 54 * The dtrace module handles traps that occur during a DTrace probe. 55 * This type definition is used in the trap handler to provide a 56 * hook for the dtrace module to register it's handler with. 57 */ 58typedef int (*dtrace_trap_func_t)(struct trapframe *, u_int); 59 60int dtrace_trap(struct trapframe *, u_int); 61 62extern dtrace_trap_func_t dtrace_trap_func; 63 64/* 65 * A hook which removes active FBT probes before executing the double fault 66 * handler. We want to ensure that DTrace doesn't trigger another trap, which 67 * would result in a reset. 68 */ 69typedef int (*dtrace_invop_func_t)(uintptr_t, uintptr_t *, uintptr_t); 70typedef void (*dtrace_doubletrap_func_t)(void); 71extern dtrace_invop_func_t dtrace_invop_func; 72extern dtrace_doubletrap_func_t dtrace_doubletrap_func; 73 74/* Pid provider hooks */ 75typedef int (*dtrace_pid_probe_ptr_t)(struct reg *); 76extern dtrace_pid_probe_ptr_t dtrace_pid_probe_ptr; 77typedef int (*dtrace_return_probe_ptr_t)(struct reg *); 78extern dtrace_return_probe_ptr_t dtrace_return_probe_ptr; 79 80/* Virtual time hook function type. */ 81typedef void (*dtrace_vtime_switch_func_t)(struct thread *); 82 83extern int dtrace_vtime_active; 84extern dtrace_vtime_switch_func_t dtrace_vtime_switch_func; 85 86/* The fasttrap module hooks into the fork, exit and exit. */ 87typedef void (*dtrace_fork_func_t)(struct proc *, struct proc *); 88typedef void (*dtrace_execexit_func_t)(struct proc *); 89 90/* Global variable in kern_fork.c */ 91extern dtrace_fork_func_t dtrace_fasttrap_fork; 92 93/* Global variable in kern_exec.c */ 94extern dtrace_execexit_func_t dtrace_fasttrap_exec; 95 96/* Global variable in kern_exit.c */ 97extern dtrace_execexit_func_t dtrace_fasttrap_exit; 98 99/* The dtmalloc provider hooks into malloc. */ 100typedef void (*dtrace_malloc_probe_func_t)(u_int32_t, uintptr_t arg0, 101 uintptr_t arg1, uintptr_t arg2, uintptr_t arg3, uintptr_t arg4); 102 103extern dtrace_malloc_probe_func_t dtrace_malloc_probe; 104 105/* dtnfsclient NFSv[34] access cache provider hooks. */ 106typedef void (*dtrace_nfsclient_accesscache_flush_probe_func_t)(uint32_t, 107 struct vnode *); 108extern dtrace_nfsclient_accesscache_flush_probe_func_t 109 dtrace_nfsclient_accesscache_flush_done_probe; 110extern dtrace_nfsclient_accesscache_flush_probe_func_t 111 dtrace_nfscl_accesscache_flush_done_probe; 112 113typedef void (*dtrace_nfsclient_accesscache_get_probe_func_t)(uint32_t, 114 struct vnode *, uid_t, uint32_t); 115extern dtrace_nfsclient_accesscache_get_probe_func_t 116 dtrace_nfsclient_accesscache_get_hit_probe, 117 dtrace_nfsclient_accesscache_get_miss_probe; 118extern dtrace_nfsclient_accesscache_get_probe_func_t 119 dtrace_nfscl_accesscache_get_hit_probe, 120 dtrace_nfscl_accesscache_get_miss_probe; 121 122typedef void (*dtrace_nfsclient_accesscache_load_probe_func_t)(uint32_t, 123 struct vnode *, uid_t, uint32_t, int); 124extern dtrace_nfsclient_accesscache_load_probe_func_t 125 dtrace_nfsclient_accesscache_load_done_probe; 126extern dtrace_nfsclient_accesscache_load_probe_func_t 127 dtrace_nfscl_accesscache_load_done_probe; 128 129/* dtnfsclient NFSv[234] attribute cache provider hooks. */ 130typedef void (*dtrace_nfsclient_attrcache_flush_probe_func_t)(uint32_t, 131 struct vnode *); 132extern dtrace_nfsclient_attrcache_flush_probe_func_t 133 dtrace_nfsclient_attrcache_flush_done_probe; 134extern dtrace_nfsclient_attrcache_flush_probe_func_t 135 dtrace_nfscl_attrcache_flush_done_probe; 136 137typedef void (*dtrace_nfsclient_attrcache_get_hit_probe_func_t)(uint32_t, 138 struct vnode *, struct vattr *); 139extern dtrace_nfsclient_attrcache_get_hit_probe_func_t 140 dtrace_nfsclient_attrcache_get_hit_probe; 141extern dtrace_nfsclient_attrcache_get_hit_probe_func_t 142 dtrace_nfscl_attrcache_get_hit_probe; 143 144typedef void (*dtrace_nfsclient_attrcache_get_miss_probe_func_t)(uint32_t, 145 struct vnode *); 146extern dtrace_nfsclient_attrcache_get_miss_probe_func_t 147 dtrace_nfsclient_attrcache_get_miss_probe; 148extern dtrace_nfsclient_attrcache_get_miss_probe_func_t 149 dtrace_nfscl_attrcache_get_miss_probe; 150 151typedef void (*dtrace_nfsclient_attrcache_load_probe_func_t)(uint32_t, 152 struct vnode *, struct vattr *, int); 153extern dtrace_nfsclient_attrcache_load_probe_func_t 154 dtrace_nfsclient_attrcache_load_done_probe; 155extern dtrace_nfsclient_attrcache_load_probe_func_t 156 dtrace_nfscl_attrcache_load_done_probe; 157 158/* dtnfsclient NFSv[234] RPC provider hooks. */ 159typedef void (*dtrace_nfsclient_nfs23_start_probe_func_t)(uint32_t, 160 struct vnode *, struct mbuf *, struct ucred *, int); 161extern dtrace_nfsclient_nfs23_start_probe_func_t 162 dtrace_nfsclient_nfs23_start_probe; 163extern dtrace_nfsclient_nfs23_start_probe_func_t 164 dtrace_nfscl_nfs234_start_probe; 165 166typedef void (*dtrace_nfsclient_nfs23_done_probe_func_t)(uint32_t, 167 struct vnode *, struct mbuf *, struct ucred *, int, int); 168extern dtrace_nfsclient_nfs23_done_probe_func_t 169 dtrace_nfsclient_nfs23_done_probe; 170extern dtrace_nfsclient_nfs23_done_probe_func_t 171 dtrace_nfscl_nfs234_done_probe; 172 173/* IO Provider hooks, really hook into devstat */ 174typedef void (*dtrace_io_start_probe_func_t)(uint32_t, struct bio *, 175 struct devstat *); 176extern dtrace_io_start_probe_func_t dtrace_io_start_probe; 177 178typedef void (*dtrace_io_done_probe_func_t)(uint32_t, struct bio *, 179 struct devstat *); 180extern dtrace_io_done_probe_func_t dtrace_io_done_probe; 181 182typedef void (*dtrace_io_wait_start_probe_func_t)(uint32_t, uintptr_t *, 183 struct devstat *); 184extern dtrace_io_wait_start_probe_func_t dtrace_io_wait_start_probe; 185 186typedef void (*dtrace_io_wait_done_probe_func_t)(uint32_t, uintptr_t *, 187 struct devstat *); 188extern dtrace_io_wait_done_probe_func_t dtrace_io_wait_done_probe; 189 190/* 191 * Functions which allow the dtrace module to check that the kernel 192 * hooks have been compiled with sufficient space for it's private 193 * structures. 194 */ 195size_t kdtrace_proc_size(void); 196size_t kdtrace_thread_size(void); 197 198/* 199 * OpenSolaris compatible time functions returning nanoseconds. 200 * On OpenSolaris these return hrtime_t which we define as uint64_t. 201 */ 202uint64_t dtrace_gethrtime(void); 203uint64_t dtrace_gethrestime(void); 204 205#endif /* _SYS_DTRACE_BSD_H */ 206