Print this page
11083 support NFS server in zone
Portions contributed by: Dan Kruchinin <dan.kruchinin@nexenta.com>
Portions contributed by: Stepan Zastupov <stepan.zastupov@gmail.com>
Portions contributed by: Joyce McIntosh <joyce.mcintosh@nexenta.com>
Portions contributed by: Mike Zeller <mike@mikezeller.net>
Portions contributed by: Dan McDonald <danmcd@joyent.com>
Portions contributed by: Gordon Ross <gordon.w.ross@gmail.com>
Portions contributed by: Vitaliy Gusev <gusev.vitaliy@gmail.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
Reviewed by: Rob Gittins <rob.gittins@nexenta.com>
Reviewed by: Sanjay Nadkarni <sanjay.nadkarni@nexenta.com>
Reviewed by: Jason King <jbk@joyent.com>
Reviewed by: C Fraire <cfraire@me.com>
Change-Id: I22f289d357503f9b48a0bc2482cc4328a6d43d16
| Split |
Close |
| Expand all |
| Collapse all |
--- old/usr/src/uts/common/sys/sdt.h
+++ new/usr/src/uts/common/sys/sdt.h
1 1 /*
2 2 * CDDL HEADER START
3 3 *
4 4 * The contents of this file are subject to the terms of the
5 5 * Common Development and Distribution License (the "License").
6 6 * You may not use this file except in compliance with the License.
7 7 *
8 8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 9 * or http://www.opensolaris.org/os/licensing.
10 10 * See the License for the specific language governing permissions
11 11 * and limitations under the License.
12 12 *
13 13 * When distributing Covered Code, include this CDDL HEADER in each
|
↓ open down ↓ |
13 lines elided |
↑ open up ↑ |
14 14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 15 * If applicable, add the following below this CDDL HEADER, with the
16 16 * fields enclosed by brackets "[]" replaced with your own identifying
17 17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 18 *
19 19 * CDDL HEADER END
20 20 */
21 21 /*
22 22 * Copyright (c) 2003, 2010, Oracle and/or its affiliates. All rights reserved.
23 23 * Copyright (c) 2013 by Delphix. All rights reserved.
24 - * Copyright 2017 Nexenta Systems, Inc. All rights reserved.
24 + * Copyright 2018 Nexenta Systems, Inc. All rights reserved.
25 25 */
26 26
27 27 #ifndef _SYS_SDT_H
28 28 #define _SYS_SDT_H
29 29
30 30 #include <sys/stdint.h>
31 31
32 32 #ifdef __cplusplus
33 33 extern "C" {
34 34 #endif
35 35
36 36 #ifndef _KERNEL
37 37
38 38 #define DTRACE_PROBE(provider, name) { \
39 39 extern void __dtrace_##provider##___##name(void); \
40 40 __dtrace_##provider##___##name(); \
41 41 }
42 42
43 43 #define DTRACE_PROBE1(provider, name, arg1) { \
44 44 extern void __dtrace_##provider##___##name(unsigned long); \
45 45 __dtrace_##provider##___##name((unsigned long)arg1); \
46 46 }
47 47
48 48 #define DTRACE_PROBE2(provider, name, arg1, arg2) { \
49 49 extern void __dtrace_##provider##___##name(unsigned long, \
50 50 unsigned long); \
51 51 __dtrace_##provider##___##name((unsigned long)arg1, \
52 52 (unsigned long)arg2); \
53 53 }
54 54
55 55 #define DTRACE_PROBE3(provider, name, arg1, arg2, arg3) { \
56 56 extern void __dtrace_##provider##___##name(unsigned long, \
57 57 unsigned long, unsigned long); \
58 58 __dtrace_##provider##___##name((unsigned long)arg1, \
59 59 (unsigned long)arg2, (unsigned long)arg3); \
60 60 }
61 61
62 62 #define DTRACE_PROBE4(provider, name, arg1, arg2, arg3, arg4) { \
63 63 extern void __dtrace_##provider##___##name(unsigned long, \
64 64 unsigned long, unsigned long, unsigned long); \
65 65 __dtrace_##provider##___##name((unsigned long)arg1, \
66 66 (unsigned long)arg2, (unsigned long)arg3, \
67 67 (unsigned long)arg4); \
68 68 }
69 69
70 70 #define DTRACE_PROBE5(provider, name, arg1, arg2, arg3, arg4, arg5) { \
71 71 extern void __dtrace_##provider##___##name(unsigned long, \
72 72 unsigned long, unsigned long, unsigned long, unsigned long);\
73 73 __dtrace_##provider##___##name((unsigned long)arg1, \
74 74 (unsigned long)arg2, (unsigned long)arg3, \
75 75 (unsigned long)arg4, (unsigned long)arg5); \
76 76 }
77 77
78 78 #else /* _KERNEL */
79 79
80 80 #define DTRACE_PROBE(name) { \
81 81 extern void __dtrace_probe_##name(void); \
82 82 __dtrace_probe_##name(); \
83 83 }
84 84
85 85 #define DTRACE_PROBE1(name, type1, arg1) { \
86 86 extern void __dtrace_probe_##name(uintptr_t); \
87 87 __dtrace_probe_##name((uintptr_t)(arg1)); \
88 88 }
89 89
90 90 #define DTRACE_PROBE2(name, type1, arg1, type2, arg2) { \
91 91 extern void __dtrace_probe_##name(uintptr_t, uintptr_t); \
92 92 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2)); \
93 93 }
94 94
95 95 #define DTRACE_PROBE3(name, type1, arg1, type2, arg2, type3, arg3) { \
96 96 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, uintptr_t); \
97 97 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \
98 98 (uintptr_t)(arg3)); \
99 99 }
100 100
101 101 #define DTRACE_PROBE4(name, type1, arg1, type2, arg2, \
102 102 type3, arg3, type4, arg4) { \
103 103 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, \
104 104 uintptr_t, uintptr_t); \
105 105 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \
106 106 (uintptr_t)(arg3), (uintptr_t)(arg4)); \
107 107 }
108 108
109 109 #define DTRACE_PROBE5(name, type1, arg1, type2, arg2, \
110 110 type3, arg3, type4, arg4, type5, arg5) { \
111 111 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, \
112 112 uintptr_t, uintptr_t, uintptr_t); \
113 113 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \
114 114 (uintptr_t)(arg3), (uintptr_t)(arg4), (uintptr_t)(arg5)); \
115 115 }
116 116
117 117 #define DTRACE_PROBE6(name, type1, arg1, type2, arg2, \
118 118 type3, arg3, type4, arg4, type5, arg5, type6, arg6) { \
119 119 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, \
120 120 uintptr_t, uintptr_t, uintptr_t, uintptr_t); \
121 121 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \
122 122 (uintptr_t)(arg3), (uintptr_t)(arg4), (uintptr_t)(arg5), \
123 123 (uintptr_t)(arg6)); \
124 124 }
125 125
126 126 #define DTRACE_PROBE7(name, type1, arg1, type2, arg2, type3, arg3, \
127 127 type4, arg4, type5, arg5, type6, arg6, type7, arg7) { \
128 128 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, \
129 129 uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t); \
130 130 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \
131 131 (uintptr_t)(arg3), (uintptr_t)(arg4), (uintptr_t)(arg5), \
132 132 (uintptr_t)(arg6), (uintptr_t)(arg7)); \
133 133 }
134 134
135 135 #define DTRACE_PROBE8(name, type1, arg1, type2, arg2, type3, arg3, \
136 136 type4, arg4, type5, arg5, type6, arg6, type7, arg7, type8, arg8) { \
137 137 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, \
138 138 uintptr_t, uintptr_t, uintptr_t, uintptr_t, \
139 139 uintptr_t, uintptr_t); \
140 140 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \
141 141 (uintptr_t)(arg3), (uintptr_t)(arg4), (uintptr_t)(arg5), \
142 142 (uintptr_t)(arg6), (uintptr_t)(arg7), (uintptr_t)(arg8)); \
143 143 }
144 144
145 145 #define DTRACE_SCHED(name) \
146 146 DTRACE_PROBE(__sched_##name);
147 147
148 148 #define DTRACE_SCHED1(name, type1, arg1) \
149 149 DTRACE_PROBE1(__sched_##name, type1, arg1);
150 150
151 151 #define DTRACE_SCHED2(name, type1, arg1, type2, arg2) \
152 152 DTRACE_PROBE2(__sched_##name, type1, arg1, type2, arg2);
153 153
154 154 #define DTRACE_SCHED3(name, type1, arg1, type2, arg2, type3, arg3) \
155 155 DTRACE_PROBE3(__sched_##name, type1, arg1, type2, arg2, type3, arg3);
156 156
157 157 #define DTRACE_SCHED4(name, type1, arg1, type2, arg2, \
158 158 type3, arg3, type4, arg4) \
159 159 DTRACE_PROBE4(__sched_##name, type1, arg1, type2, arg2, \
160 160 type3, arg3, type4, arg4);
161 161
162 162 #define DTRACE_PROC(name) \
163 163 DTRACE_PROBE(__proc_##name);
164 164
165 165 #define DTRACE_PROC1(name, type1, arg1) \
166 166 DTRACE_PROBE1(__proc_##name, type1, arg1);
167 167
168 168 #define DTRACE_PROC2(name, type1, arg1, type2, arg2) \
169 169 DTRACE_PROBE2(__proc_##name, type1, arg1, type2, arg2);
170 170
171 171 #define DTRACE_PROC3(name, type1, arg1, type2, arg2, type3, arg3) \
172 172 DTRACE_PROBE3(__proc_##name, type1, arg1, type2, arg2, type3, arg3);
173 173
174 174 #define DTRACE_PROC4(name, type1, arg1, type2, arg2, \
175 175 type3, arg3, type4, arg4) \
176 176 DTRACE_PROBE4(__proc_##name, type1, arg1, type2, arg2, \
177 177 type3, arg3, type4, arg4);
178 178
179 179 #define DTRACE_IO(name) \
180 180 DTRACE_PROBE(__io_##name);
181 181
182 182 #define DTRACE_IO1(name, type1, arg1) \
183 183 DTRACE_PROBE1(__io_##name, type1, arg1);
184 184
185 185 #define DTRACE_IO2(name, type1, arg1, type2, arg2) \
186 186 DTRACE_PROBE2(__io_##name, type1, arg1, type2, arg2);
187 187
188 188 #define DTRACE_IO3(name, type1, arg1, type2, arg2, type3, arg3) \
189 189 DTRACE_PROBE3(__io_##name, type1, arg1, type2, arg2, type3, arg3);
190 190
191 191 #define DTRACE_IO4(name, type1, arg1, type2, arg2, \
192 192 type3, arg3, type4, arg4) \
193 193 DTRACE_PROBE4(__io_##name, type1, arg1, type2, arg2, \
194 194 type3, arg3, type4, arg4);
195 195
196 196 #define DTRACE_ISCSI_2(name, type1, arg1, type2, arg2) \
197 197 DTRACE_PROBE2(__iscsi_##name, type1, arg1, type2, arg2);
198 198
199 199 #define DTRACE_ISCSI_3(name, type1, arg1, type2, arg2, type3, arg3) \
200 200 DTRACE_PROBE3(__iscsi_##name, type1, arg1, type2, arg2, type3, arg3);
201 201
202 202 #define DTRACE_ISCSI_4(name, type1, arg1, type2, arg2, \
203 203 type3, arg3, type4, arg4) \
204 204 DTRACE_PROBE4(__iscsi_##name, type1, arg1, type2, arg2, \
205 205 type3, arg3, type4, arg4);
206 206
207 207 #define DTRACE_ISCSI_5(name, type1, arg1, type2, arg2, \
208 208 type3, arg3, type4, arg4, type5, arg5) \
209 209 DTRACE_PROBE5(__iscsi_##name, type1, arg1, type2, arg2, \
210 210 type3, arg3, type4, arg4, type5, arg5);
211 211
212 212 #define DTRACE_ISCSI_6(name, type1, arg1, type2, arg2, \
213 213 type3, arg3, type4, arg4, type5, arg5, type6, arg6) \
214 214 DTRACE_PROBE6(__iscsi_##name, type1, arg1, type2, arg2, \
215 215 type3, arg3, type4, arg4, type5, arg5, type6, arg6);
216 216
217 217 #define DTRACE_ISCSI_7(name, type1, arg1, type2, arg2, \
218 218 type3, arg3, type4, arg4, type5, arg5, type6, arg6, type7, arg7) \
219 219 DTRACE_PROBE7(__iscsi_##name, type1, arg1, type2, arg2, \
220 220 type3, arg3, type4, arg4, type5, arg5, type6, arg6, \
221 221 type7, arg7);
222 222
223 223 #define DTRACE_ISCSI_8(name, type1, arg1, type2, arg2, \
|
↓ open down ↓ |
189 lines elided |
↑ open up ↑ |
224 224 type3, arg3, type4, arg4, type5, arg5, type6, arg6, \
225 225 type7, arg7, type8, arg8) \
226 226 DTRACE_PROBE8(__iscsi_##name, type1, arg1, type2, arg2, \
227 227 type3, arg3, type4, arg4, type5, arg5, type6, arg6, \
228 228 type7, arg7, type8, arg8);
229 229
230 230 #define DTRACE_NFSV3_3(name, type1, arg1, type2, arg2, \
231 231 type3, arg3) \
232 232 DTRACE_PROBE3(__nfsv3_##name, type1, arg1, type2, arg2, \
233 233 type3, arg3);
234 +
234 235 #define DTRACE_NFSV3_4(name, type1, arg1, type2, arg2, \
235 236 type3, arg3, type4, arg4) \
236 237 DTRACE_PROBE4(__nfsv3_##name, type1, arg1, type2, arg2, \
237 238 type3, arg3, type4, arg4);
238 239
240 +#define DTRACE_NFSV3_5(name, type1, arg1, type2, arg2, \
241 + type3, arg3, type4, arg4, type5, arg5) \
242 + DTRACE_PROBE5(__nfsv3_##name, type1, arg1, type2, arg2, \
243 + type3, arg3, type4, arg4, type5, arg5);
244 +
239 245 #define DTRACE_NFSV4_1(name, type1, arg1) \
240 246 DTRACE_PROBE1(__nfsv4_##name, type1, arg1);
241 247
242 248 #define DTRACE_NFSV4_2(name, type1, arg1, type2, arg2) \
243 249 DTRACE_PROBE2(__nfsv4_##name, type1, arg1, type2, arg2);
244 250
245 251 #define DTRACE_NFSV4_3(name, type1, arg1, type2, arg2, type3, arg3) \
246 252 DTRACE_PROBE3(__nfsv4_##name, type1, arg1, type2, arg2, type3, arg3);
247 253
248 254 /*
249 255 * The SMB probes are done a little differently from the other probes
250 256 * in this file for the benefit of the libfksmbsrv USDT provider.
251 257 * See: lib/smbsrv/libfksmbsrv/common/sys/sdt.h
252 258 */
253 259 #define DTRACE_SMB_START(name, type1, arg1) \
254 260 DTRACE_PROBE1(__smb_##name##__start, type1, arg1);
255 261 #define DTRACE_SMB_DONE(name, type1, arg1) \
256 262 DTRACE_PROBE1(__smb_##name##__done, type1, arg1);
257 263
258 264 #define DTRACE_SMB2_START(name, type1, arg1) \
259 265 DTRACE_PROBE1(__smb2_##name##__start, type1, arg1);
260 266 #define DTRACE_SMB2_DONE(name, type1, arg1) \
261 267 DTRACE_PROBE1(__smb2_##name##__done, type1, arg1);
262 268
263 269 #define DTRACE_IP(name) \
264 270 DTRACE_PROBE(__ip_##name);
265 271
266 272 #define DTRACE_IP1(name, type1, arg1) \
267 273 DTRACE_PROBE1(__ip_##name, type1, arg1);
268 274
269 275 #define DTRACE_IP2(name, type1, arg1, type2, arg2) \
270 276 DTRACE_PROBE2(__ip_##name, type1, arg1, type2, arg2);
271 277
272 278 #define DTRACE_IP3(name, type1, arg1, type2, arg2, type3, arg3) \
273 279 DTRACE_PROBE3(__ip_##name, type1, arg1, type2, arg2, type3, arg3);
274 280
275 281 #define DTRACE_IP4(name, type1, arg1, type2, arg2, \
276 282 type3, arg3, type4, arg4) \
277 283 DTRACE_PROBE4(__ip_##name, type1, arg1, type2, arg2, \
278 284 type3, arg3, type4, arg4);
279 285
280 286 #define DTRACE_IP5(name, type1, arg1, type2, arg2, \
281 287 type3, arg3, type4, arg4, type5, arg5) \
282 288 DTRACE_PROBE5(__ip_##name, type1, arg1, type2, arg2, \
283 289 type3, arg3, type4, arg4, type5, arg5);
284 290
285 291 #define DTRACE_IP6(name, type1, arg1, type2, arg2, \
286 292 type3, arg3, type4, arg4, type5, arg5, type6, arg6) \
287 293 DTRACE_PROBE6(__ip_##name, type1, arg1, type2, arg2, \
288 294 type3, arg3, type4, arg4, type5, arg5, type6, arg6);
289 295
290 296 #define DTRACE_IP7(name, type1, arg1, type2, arg2, type3, arg3, \
291 297 type4, arg4, type5, arg5, type6, arg6, type7, arg7) \
292 298 DTRACE_PROBE7(__ip_##name, type1, arg1, type2, arg2, \
293 299 type3, arg3, type4, arg4, type5, arg5, type6, arg6, \
294 300 type7, arg7);
295 301
296 302 #define DTRACE_TCP(name) \
297 303 DTRACE_PROBE(__tcp_##name);
298 304
299 305 #define DTRACE_TCP1(name, type1, arg1) \
300 306 DTRACE_PROBE1(__tcp_##name, type1, arg1);
301 307
302 308 #define DTRACE_TCP2(name, type1, arg1, type2, arg2) \
303 309 DTRACE_PROBE2(__tcp_##name, type1, arg1, type2, arg2);
304 310
305 311 #define DTRACE_TCP3(name, type1, arg1, type2, arg2, type3, arg3) \
306 312 DTRACE_PROBE3(__tcp_##name, type1, arg1, type2, arg2, type3, arg3);
307 313
308 314 #define DTRACE_TCP4(name, type1, arg1, type2, arg2, \
309 315 type3, arg3, type4, arg4) \
310 316 DTRACE_PROBE4(__tcp_##name, type1, arg1, type2, arg2, \
311 317 type3, arg3, type4, arg4);
312 318
313 319 #define DTRACE_TCP5(name, type1, arg1, type2, arg2, \
314 320 type3, arg3, type4, arg4, type5, arg5) \
315 321 DTRACE_PROBE5(__tcp_##name, type1, arg1, type2, arg2, \
316 322 type3, arg3, type4, arg4, type5, arg5);
317 323
318 324 #define DTRACE_TCP6(name, type1, arg1, type2, arg2, \
319 325 type3, arg3, type4, arg4, type5, arg5, type6, arg6) \
320 326 DTRACE_PROBE6(__tcp_##name, type1, arg1, type2, arg2, \
321 327 type3, arg3, type4, arg4, type5, arg5, type6, arg6);
322 328
323 329 #define DTRACE_UDP(name) \
324 330 DTRACE_PROBE(__udp_##name);
325 331
326 332 #define DTRACE_UDP1(name, type1, arg1) \
327 333 DTRACE_PROBE1(__udp_##name, type1, arg1);
328 334
329 335 #define DTRACE_UDP2(name, type1, arg1, type2, arg2) \
330 336 DTRACE_PROBE2(__udp_##name, type1, arg1, type2, arg2);
331 337
332 338 #define DTRACE_UDP3(name, type1, arg1, type2, arg2, type3, arg3) \
333 339 DTRACE_PROBE3(__udp_##name, type1, arg1, type2, arg2, type3, arg3);
334 340
335 341 #define DTRACE_UDP4(name, type1, arg1, type2, arg2, \
336 342 type3, arg3, type4, arg4) \
337 343 DTRACE_PROBE4(__udp_##name, type1, arg1, type2, arg2, \
338 344 type3, arg3, type4, arg4);
339 345
340 346 #define DTRACE_UDP5(name, type1, arg1, type2, arg2, \
341 347 type3, arg3, type4, arg4, type5, arg5) \
342 348 DTRACE_PROBE5(__udp_##name, type1, arg1, type2, arg2, \
343 349 type3, arg3, type4, arg4, type5, arg5);
344 350
345 351
346 352 #define DTRACE_SYSEVENT2(name, type1, arg1, type2, arg2) \
347 353 DTRACE_PROBE2(__sysevent_##name, type1, arg1, type2, arg2);
348 354
349 355 #define DTRACE_XPV(name) \
350 356 DTRACE_PROBE(__xpv_##name);
351 357
352 358 #define DTRACE_XPV1(name, type1, arg1) \
353 359 DTRACE_PROBE1(__xpv_##name, type1, arg1);
354 360
355 361 #define DTRACE_XPV2(name, type1, arg1, type2, arg2) \
356 362 DTRACE_PROBE2(__xpv_##name, type1, arg1, type2, arg2);
357 363
358 364 #define DTRACE_XPV3(name, type1, arg1, type2, arg2, type3, arg3) \
359 365 DTRACE_PROBE3(__xpv_##name, type1, arg1, type2, arg2, type3, arg3);
360 366
361 367 #define DTRACE_XPV4(name, type1, arg1, type2, arg2, type3, arg3, \
362 368 type4, arg4) \
363 369 DTRACE_PROBE4(__xpv_##name, type1, arg1, type2, arg2, \
364 370 type3, arg3, type4, arg4);
365 371
366 372 #define DTRACE_FC_1(name, type1, arg1) \
367 373 DTRACE_PROBE1(__fc_##name, type1, arg1);
368 374
369 375 #define DTRACE_FC_2(name, type1, arg1, type2, arg2) \
370 376 DTRACE_PROBE2(__fc_##name, type1, arg1, type2, arg2);
371 377
372 378 #define DTRACE_FC_3(name, type1, arg1, type2, arg2, type3, arg3) \
373 379 DTRACE_PROBE3(__fc_##name, type1, arg1, type2, arg2, type3, arg3);
374 380
375 381 #define DTRACE_FC_4(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4) \
376 382 DTRACE_PROBE4(__fc_##name, type1, arg1, type2, arg2, type3, arg3, \
377 383 type4, arg4);
378 384
379 385 #define DTRACE_FC_5(name, type1, arg1, type2, arg2, type3, arg3, \
380 386 type4, arg4, type5, arg5) \
381 387 DTRACE_PROBE5(__fc_##name, type1, arg1, type2, arg2, type3, arg3, \
382 388 type4, arg4, type5, arg5);
383 389
384 390 #define DTRACE_SRP_1(name, type1, arg1) \
385 391 DTRACE_PROBE1(__srp_##name, type1, arg1);
386 392
387 393 #define DTRACE_SRP_2(name, type1, arg1, type2, arg2) \
388 394 DTRACE_PROBE2(__srp_##name, type1, arg1, type2, arg2);
389 395
390 396 #define DTRACE_SRP_3(name, type1, arg1, type2, arg2, type3, arg3) \
391 397 DTRACE_PROBE3(__srp_##name, type1, arg1, type2, arg2, type3, arg3);
392 398
393 399 #define DTRACE_SRP_4(name, type1, arg1, type2, arg2, type3, arg3, \
394 400 type4, arg4) \
395 401 DTRACE_PROBE4(__srp_##name, type1, arg1, type2, arg2, \
396 402 type3, arg3, type4, arg4);
397 403
398 404 #define DTRACE_SRP_5(name, type1, arg1, type2, arg2, type3, arg3, \
399 405 type4, arg4, type5, arg5) \
400 406 DTRACE_PROBE5(__srp_##name, type1, arg1, type2, arg2, \
401 407 type3, arg3, type4, arg4, type5, arg5);
402 408
403 409 #define DTRACE_SRP_6(name, type1, arg1, type2, arg2, type3, arg3, \
404 410 type4, arg4, type5, arg5, type6, arg6) \
405 411 DTRACE_PROBE6(__srp_##name, type1, arg1, type2, arg2, \
406 412 type3, arg3, type4, arg4, type5, arg5, type6, arg6);
407 413
408 414 #define DTRACE_SRP_7(name, type1, arg1, type2, arg2, type3, arg3, \
409 415 type4, arg4, type5, arg5, type6, arg6, type7, arg7) \
410 416 DTRACE_PROBE7(__srp_##name, type1, arg1, type2, arg2, \
411 417 type3, arg3, type4, arg4, type5, arg5, type6, arg6, type7, arg7);
412 418
413 419 #define DTRACE_SRP_8(name, type1, arg1, type2, arg2, type3, arg3, \
414 420 type4, arg4, type5, arg5, type6, arg6, type7, arg7, type8, arg8) \
415 421 DTRACE_PROBE8(__srp_##name, type1, arg1, type2, arg2, \
416 422 type3, arg3, type4, arg4, type5, arg5, type6, arg6, \
417 423 type7, arg7, type8, arg8);
418 424
419 425 /*
420 426 * The set-error SDT probe is extra static, in that we declare its fake
421 427 * function literally, rather than with the DTRACE_PROBE1() macro. This is
422 428 * necessary so that SET_ERROR() can evaluate to a value, which wouldn't
423 429 * be possible if it required multiple statements (to declare the function
424 430 * and then call it).
425 431 *
426 432 * SET_ERROR() uses the comma operator so that it can be used without much
427 433 * additional code. For example, "return (EINVAL);" becomes
428 434 * "return (SET_ERROR(EINVAL));". Note that the argument will be evaluated
429 435 * twice, so it should not have side effects (e.g. something like:
430 436 * "return (SET_ERROR(log_error(EINVAL, info)));" would log the error twice).
431 437 */
432 438 extern void __dtrace_probe_set__error(uintptr_t);
433 439 #define SET_ERROR(err) (__dtrace_probe_set__error(err), err)
434 440
435 441 #endif /* _KERNEL */
436 442
437 443 extern const char *sdt_prefix;
438 444
439 445 typedef struct sdt_probedesc {
440 446 char *sdpd_name; /* name of this probe */
441 447 unsigned long sdpd_offset; /* offset of call in text */
442 448 struct sdt_probedesc *sdpd_next; /* next static probe */
443 449 } sdt_probedesc_t;
444 450
445 451 #ifdef __cplusplus
446 452 }
447 453 #endif
448 454
449 455 #endif /* _SYS_SDT_H */
|
↓ open down ↓ |
201 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX