92 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, uintptr_t); \ |
95 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, uintptr_t); \ |
93 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \ |
96 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \ |
94 (uintptr_t)(arg3)); \ |
97 (uintptr_t)(arg3)); \ |
95 } |
98 } |
96 |
99 |
97 #define DTRACE_PROBE4(name, type1, arg1, type2, arg2, \ |
100 #define DTRACE_PROBE4(name, type1, arg1, type2, arg2, \ |
98 type3, arg3, type4, arg4) { \ |
101 type3, arg3, type4, arg4) { \ |
99 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, \ |
102 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, \ |
100 uintptr_t, uintptr_t); \ |
103 uintptr_t, uintptr_t); \ |
101 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \ |
104 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \ |
102 (uintptr_t)(arg3), (uintptr_t)(arg4)); \ |
105 (uintptr_t)(arg3), (uintptr_t)(arg4)); \ |
103 } |
106 } |
104 |
107 |
105 #define DTRACE_PROBE5(name, type1, arg1, type2, arg2, \ |
108 #define DTRACE_PROBE5(name, type1, arg1, type2, arg2, \ |
106 type3, arg3, type4, arg4, type5, arg5) { \ |
109 type3, arg3, type4, arg4, type5, arg5) { \ |
107 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, \ |
110 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, \ |
108 uintptr_t, uintptr_t, uintptr_t); \ |
111 uintptr_t, uintptr_t, uintptr_t); \ |
109 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \ |
112 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \ |
110 (uintptr_t)(arg3), (uintptr_t)(arg4), (uintptr_t)(arg5)); \ |
113 (uintptr_t)(arg3), (uintptr_t)(arg4), (uintptr_t)(arg5)); \ |
111 } |
114 } |
112 |
115 |
113 #define DTRACE_PROBE6(name, type1, arg1, type2, arg2, \ |
116 #define DTRACE_PROBE6(name, type1, arg1, type2, arg2, \ |
114 type3, arg3, type4, arg4, type5, arg5, type6, arg6) { \ |
117 type3, arg3, type4, arg4, type5, arg5, type6, arg6) { \ |
115 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, \ |
118 extern void __dtrace_probe_##name(uintptr_t, uintptr_t, \ |
116 uintptr_t, uintptr_t, uintptr_t, uintptr_t); \ |
119 uintptr_t, uintptr_t, uintptr_t, uintptr_t); \ |
117 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \ |
120 __dtrace_probe_##name((uintptr_t)(arg1), (uintptr_t)(arg2), \ |
118 (uintptr_t)(arg3), (uintptr_t)(arg4), (uintptr_t)(arg5), \ |
121 (uintptr_t)(arg3), (uintptr_t)(arg4), (uintptr_t)(arg5), \ |
148 DTRACE_PROBE2(__sched_##name, type1, arg1, type2, arg2); |
151 DTRACE_PROBE2(__sched_##name, type1, arg1, type2, arg2); |
149 |
152 |
150 #define DTRACE_SCHED3(name, type1, arg1, type2, arg2, type3, arg3) \ |
153 #define DTRACE_SCHED3(name, type1, arg1, type2, arg2, type3, arg3) \ |
151 DTRACE_PROBE3(__sched_##name, type1, arg1, type2, arg2, type3, arg3); |
154 DTRACE_PROBE3(__sched_##name, type1, arg1, type2, arg2, type3, arg3); |
152 |
155 |
153 #define DTRACE_SCHED4(name, type1, arg1, type2, arg2, \ |
156 #define DTRACE_SCHED4(name, type1, arg1, type2, arg2, \ |
154 type3, arg3, type4, arg4) \ |
157 type3, arg3, type4, arg4) \ |
155 DTRACE_PROBE4(__sched_##name, type1, arg1, type2, arg2, \ |
158 DTRACE_PROBE4(__sched_##name, type1, arg1, type2, arg2, \ |
156 type3, arg3, type4, arg4); |
159 type3, arg3, type4, arg4); |
157 |
160 |
158 #define DTRACE_PROC(name) \ |
161 #define DTRACE_PROC(name) \ |
159 DTRACE_PROBE(__proc_##name); |
162 DTRACE_PROBE(__proc_##name); |
160 |
163 |
165 DTRACE_PROBE2(__proc_##name, type1, arg1, type2, arg2); |
168 DTRACE_PROBE2(__proc_##name, type1, arg1, type2, arg2); |
166 |
169 |
167 #define DTRACE_PROC3(name, type1, arg1, type2, arg2, type3, arg3) \ |
170 #define DTRACE_PROC3(name, type1, arg1, type2, arg2, type3, arg3) \ |
168 DTRACE_PROBE3(__proc_##name, type1, arg1, type2, arg2, type3, arg3); |
171 DTRACE_PROBE3(__proc_##name, type1, arg1, type2, arg2, type3, arg3); |
169 |
172 |
170 #define DTRACE_PROC4(name, type1, arg1, type2, arg2, \ |
173 #define DTRACE_PROC4(name, type1, arg1, type2, arg2, \ |
171 type3, arg3, type4, arg4) \ |
174 type3, arg3, type4, arg4) \ |
172 DTRACE_PROBE4(__proc_##name, type1, arg1, type2, arg2, \ |
175 DTRACE_PROBE4(__proc_##name, type1, arg1, type2, arg2, \ |
173 type3, arg3, type4, arg4); |
176 type3, arg3, type4, arg4); |
174 |
177 |
175 #define DTRACE_IO(name) \ |
178 #define DTRACE_IO(name) \ |
176 DTRACE_PROBE(__io_##name); |
179 DTRACE_PROBE(__io_##name); |
177 |
180 |
182 DTRACE_PROBE2(__io_##name, type1, arg1, type2, arg2); |
185 DTRACE_PROBE2(__io_##name, type1, arg1, type2, arg2); |
183 |
186 |
184 #define DTRACE_IO3(name, type1, arg1, type2, arg2, type3, arg3) \ |
187 #define DTRACE_IO3(name, type1, arg1, type2, arg2, type3, arg3) \ |
185 DTRACE_PROBE3(__io_##name, type1, arg1, type2, arg2, type3, arg3); |
188 DTRACE_PROBE3(__io_##name, type1, arg1, type2, arg2, type3, arg3); |
186 |
189 |
187 #define DTRACE_IO4(name, type1, arg1, type2, arg2, \ |
190 #define DTRACE_IO4(name, type1, arg1, type2, arg2, \ |
188 type3, arg3, type4, arg4) \ |
191 type3, arg3, type4, arg4) \ |
189 DTRACE_PROBE4(__io_##name, type1, arg1, type2, arg2, \ |
192 DTRACE_PROBE4(__io_##name, type1, arg1, type2, arg2, \ |
190 type3, arg3, type4, arg4); |
193 type3, arg3, type4, arg4); |
191 |
194 |
192 #define DTRACE_ISCSI_2(name, type1, arg1, type2, arg2) \ |
195 #define DTRACE_ISCSI_2(name, type1, arg1, type2, arg2) \ |
193 DTRACE_PROBE2(__iscsi_##name, type1, arg1, type2, arg2); |
196 DTRACE_PROBE2(__iscsi_##name, type1, arg1, type2, arg2); |
194 |
197 |
221 type7, arg7, type8, arg8) \ |
224 type7, arg7, type8, arg8) \ |
222 DTRACE_PROBE8(__iscsi_##name, type1, arg1, type2, arg2, \ |
225 DTRACE_PROBE8(__iscsi_##name, type1, arg1, type2, arg2, \ |
223 type3, arg3, type4, arg4, type5, arg5, type6, arg6, \ |
226 type3, arg3, type4, arg4, type5, arg5, type6, arg6, \ |
224 type7, arg7, type8, arg8); |
227 type7, arg7, type8, arg8); |
225 |
228 |
226 #define DTRACE_NFSV3_3(name, type1, arg1, type2, arg2, \ |
229 #define DTRACE_NFSV3_3(name, type1, arg1, type2, arg2, \ |
227 type3, arg3) \ |
230 type3, arg3) \ |
228 DTRACE_PROBE3(__nfsv3_##name, type1, arg1, type2, arg2, \ |
231 DTRACE_PROBE3(__nfsv3_##name, type1, arg1, type2, arg2, \ |
229 type3, arg3); |
232 type3, arg3); |
230 #define DTRACE_NFSV3_4(name, type1, arg1, type2, arg2, \ |
233 #define DTRACE_NFSV3_4(name, type1, arg1, type2, arg2, \ |
231 type3, arg3, type4, arg4) \ |
234 type3, arg3, type4, arg4) \ |
232 DTRACE_PROBE4(__nfsv3_##name, type1, arg1, type2, arg2, \ |
235 DTRACE_PROBE4(__nfsv3_##name, type1, arg1, type2, arg2, \ |
233 type3, arg3, type4, arg4); |
236 type3, arg3, type4, arg4); |
234 |
237 |
235 #define DTRACE_NFSV4_1(name, type1, arg1) \ |
238 #define DTRACE_NFSV4_1(name, type1, arg1) \ |
257 DTRACE_PROBE2(__ip_##name, type1, arg1, type2, arg2); |
260 DTRACE_PROBE2(__ip_##name, type1, arg1, type2, arg2); |
258 |
261 |
259 #define DTRACE_IP3(name, type1, arg1, type2, arg2, type3, arg3) \ |
262 #define DTRACE_IP3(name, type1, arg1, type2, arg2, type3, arg3) \ |
260 DTRACE_PROBE3(__ip_##name, type1, arg1, type2, arg2, type3, arg3); |
263 DTRACE_PROBE3(__ip_##name, type1, arg1, type2, arg2, type3, arg3); |
261 |
264 |
262 #define DTRACE_IP4(name, type1, arg1, type2, arg2, \ |
265 #define DTRACE_IP4(name, type1, arg1, type2, arg2, \ |
263 type3, arg3, type4, arg4) \ |
266 type3, arg3, type4, arg4) \ |
264 DTRACE_PROBE4(__ip_##name, type1, arg1, type2, arg2, \ |
267 DTRACE_PROBE4(__ip_##name, type1, arg1, type2, arg2, \ |
265 type3, arg3, type4, arg4); |
268 type3, arg3, type4, arg4); |
266 |
269 |
267 #define DTRACE_IP5(name, type1, arg1, type2, arg2, \ |
270 #define DTRACE_IP5(name, type1, arg1, type2, arg2, \ |
268 type3, arg3, type4, arg4, type5, arg5) \ |
271 type3, arg3, type4, arg4, type5, arg5) \ |
269 DTRACE_PROBE5(__ip_##name, type1, arg1, type2, arg2, \ |
272 DTRACE_PROBE5(__ip_##name, type1, arg1, type2, arg2, \ |
270 type3, arg3, type4, arg4, type5, arg5); |
273 type3, arg3, type4, arg4, type5, arg5); |
271 |
274 |
272 #define DTRACE_IP6(name, type1, arg1, type2, arg2, \ |
275 #define DTRACE_IP6(name, type1, arg1, type2, arg2, \ |
273 type3, arg3, type4, arg4, type5, arg5, type6, arg6) \ |
276 type3, arg3, type4, arg4, type5, arg5, type6, arg6) \ |
274 DTRACE_PROBE6(__ip_##name, type1, arg1, type2, arg2, \ |
277 DTRACE_PROBE6(__ip_##name, type1, arg1, type2, arg2, \ |
275 type3, arg3, type4, arg4, type5, arg5, type6, arg6); |
278 type3, arg3, type4, arg4, type5, arg5, type6, arg6); |
276 |
279 |
277 #define DTRACE_IP7(name, type1, arg1, type2, arg2, type3, arg3, \ |
280 #define DTRACE_IP7(name, type1, arg1, type2, arg2, type3, arg3, \ |
278 type4, arg4, type5, arg5, type6, arg6, type7, arg7) \ |
281 type4, arg4, type5, arg5, type6, arg6, type7, arg7) \ |
279 DTRACE_PROBE7(__ip_##name, type1, arg1, type2, arg2, \ |
282 DTRACE_PROBE7(__ip_##name, type1, arg1, type2, arg2, \ |
280 type3, arg3, type4, arg4, type5, arg5, type6, arg6, \ |
283 type3, arg3, type4, arg4, type5, arg5, type6, arg6, \ |
281 type7, arg7); |
284 type7, arg7); |
282 |
285 |
283 #define DTRACE_TCP(name) \ |
286 #define DTRACE_TCP(name) \ |
284 DTRACE_PROBE(__tcp_##name); |
287 DTRACE_PROBE(__tcp_##name); |
345 #define DTRACE_XPV3(name, type1, arg1, type2, arg2, type3, arg3) \ |
348 #define DTRACE_XPV3(name, type1, arg1, type2, arg2, type3, arg3) \ |
346 DTRACE_PROBE3(__xpv_##name, type1, arg1, type2, arg2, type3, arg3); |
349 DTRACE_PROBE3(__xpv_##name, type1, arg1, type2, arg2, type3, arg3); |
347 |
350 |
348 #define DTRACE_XPV4(name, type1, arg1, type2, arg2, type3, arg3, \ |
351 #define DTRACE_XPV4(name, type1, arg1, type2, arg2, type3, arg3, \ |
349 type4, arg4) \ |
352 type4, arg4) \ |
350 DTRACE_PROBE4(__xpv_##name, type1, arg1, type2, arg2, \ |
353 DTRACE_PROBE4(__xpv_##name, type1, arg1, type2, arg2, \ |
351 type3, arg3, type4, arg4); |
354 type3, arg3, type4, arg4); |
352 |
355 |
353 #define DTRACE_FC_1(name, type1, arg1) \ |
356 #define DTRACE_FC_1(name, type1, arg1) \ |
354 DTRACE_PROBE1(__fc_##name, type1, arg1); |
357 DTRACE_PROBE1(__fc_##name, type1, arg1); |
355 |
358 |
361 |
364 |
362 #define DTRACE_FC_4(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4) \ |
365 #define DTRACE_FC_4(name, type1, arg1, type2, arg2, type3, arg3, type4, arg4) \ |
363 DTRACE_PROBE4(__fc_##name, type1, arg1, type2, arg2, type3, arg3, \ |
366 DTRACE_PROBE4(__fc_##name, type1, arg1, type2, arg2, type3, arg3, \ |
364 type4, arg4); |
367 type4, arg4); |
365 |
368 |
366 #define DTRACE_FC_5(name, type1, arg1, type2, arg2, type3, arg3, \ |
369 #define DTRACE_FC_5(name, type1, arg1, type2, arg2, type3, arg3, \ |
367 type4, arg4, type5, arg5) \ |
370 type4, arg4, type5, arg5) \ |
368 DTRACE_PROBE5(__fc_##name, type1, arg1, type2, arg2, type3, arg3, \ |
371 DTRACE_PROBE5(__fc_##name, type1, arg1, type2, arg2, type3, arg3, \ |
369 type4, arg4, type5, arg5); |
372 type4, arg4, type5, arg5); |
370 |
373 |
371 #define DTRACE_SRP_1(name, type1, arg1) \ |
374 #define DTRACE_SRP_1(name, type1, arg1) \ |
377 #define DTRACE_SRP_3(name, type1, arg1, type2, arg2, type3, arg3) \ |
380 #define DTRACE_SRP_3(name, type1, arg1, type2, arg2, type3, arg3) \ |
378 DTRACE_PROBE3(__srp_##name, type1, arg1, type2, arg2, type3, arg3); |
381 DTRACE_PROBE3(__srp_##name, type1, arg1, type2, arg2, type3, arg3); |
379 |
382 |
380 #define DTRACE_SRP_4(name, type1, arg1, type2, arg2, type3, arg3, \ |
383 #define DTRACE_SRP_4(name, type1, arg1, type2, arg2, type3, arg3, \ |
381 type4, arg4) \ |
384 type4, arg4) \ |
382 DTRACE_PROBE4(__srp_##name, type1, arg1, type2, arg2, \ |
385 DTRACE_PROBE4(__srp_##name, type1, arg1, type2, arg2, \ |
383 type3, arg3, type4, arg4); |
386 type3, arg3, type4, arg4); |
384 |
387 |
385 #define DTRACE_SRP_5(name, type1, arg1, type2, arg2, type3, arg3, \ |
388 #define DTRACE_SRP_5(name, type1, arg1, type2, arg2, type3, arg3, \ |
386 type4, arg4, type5, arg5) \ |
389 type4, arg4, type5, arg5) \ |
387 DTRACE_PROBE5(__srp_##name, type1, arg1, type2, arg2, \ |
390 DTRACE_PROBE5(__srp_##name, type1, arg1, type2, arg2, \ |
388 type3, arg3, type4, arg4, type5, arg5); |
391 type3, arg3, type4, arg4, type5, arg5); |
389 |
392 |
390 #define DTRACE_SRP_6(name, type1, arg1, type2, arg2, type3, arg3, \ |
393 #define DTRACE_SRP_6(name, type1, arg1, type2, arg2, type3, arg3, \ |
391 type4, arg4, type5, arg5, type6, arg6) \ |
394 type4, arg4, type5, arg5, type6, arg6) \ |
392 DTRACE_PROBE6(__srp_##name, type1, arg1, type2, arg2, \ |
395 DTRACE_PROBE6(__srp_##name, type1, arg1, type2, arg2, \ |
393 type3, arg3, type4, arg4, type5, arg5, type6, arg6); |
396 type3, arg3, type4, arg4, type5, arg5, type6, arg6); |
394 |
397 |
395 #define DTRACE_SRP_7(name, type1, arg1, type2, arg2, type3, arg3, \ |
398 #define DTRACE_SRP_7(name, type1, arg1, type2, arg2, type3, arg3, \ |
396 type4, arg4, type5, arg5, type6, arg6, type7, arg7) \ |
399 type4, arg4, type5, arg5, type6, arg6, type7, arg7) \ |
397 DTRACE_PROBE7(__srp_##name, type1, arg1, type2, arg2, \ |
400 DTRACE_PROBE7(__srp_##name, type1, arg1, type2, arg2, \ |
398 type3, arg3, type4, arg4, type5, arg5, type6, arg6, type7, arg7); |
401 type3, arg3, type4, arg4, type5, arg5, type6, arg6, type7, arg7); |
399 |
402 |
400 #define DTRACE_SRP_8(name, type1, arg1, type2, arg2, type3, arg3, \ |
403 #define DTRACE_SRP_8(name, type1, arg1, type2, arg2, type3, arg3, \ |
401 type4, arg4, type5, arg5, type6, arg6, type7, arg7, type8, arg8) \ |
404 type4, arg4, type5, arg5, type6, arg6, type7, arg7, type8, arg8) \ |
402 DTRACE_PROBE8(__srp_##name, type1, arg1, type2, arg2, \ |
405 DTRACE_PROBE8(__srp_##name, type1, arg1, type2, arg2, \ |
403 type3, arg3, type4, arg4, type5, arg5, type6, arg6, \ |
406 type3, arg3, type4, arg4, type5, arg5, type6, arg6, \ |
404 type7, arg7, type8, arg8); |
407 type7, arg7, type8, arg8); |
|
408 |
|
409 /* |
|
410 * the set-error SDT probe is extra static, in that we declare its fake |
|
411 * function literally, rather than with the DTRACE_PROBE1() macro. This is |
|
412 * necessary so that SET_ERROR() can evaluate to a value, which wouldn't |
|
413 * be possible if it required multiple statements (to declare the function |
|
414 * and then call it). |
|
415 * |
|
416 * SET_ERROR() uses the comma operator so that it can be used without much |
|
417 * additional code. For example, "return (EINVAL);" becomes |
|
418 * "return (SET_ERROR(EINVAL));". Note that the argument will be evaluated |
|
419 * twice, so it should not have side effects (e.g. something like: |
|
420 * "return (SET_ERROR(log_error(EINVAL, info)));" would log the error twice). |
|
421 */ |
|
422 extern void __dtrace_probe_set__error(uintptr_t); |
|
423 #define SET_ERROR(err) (__dtrace_probe_set__error(err), err) |
405 |
424 |
406 #endif /* _KERNEL */ |
425 #endif /* _KERNEL */ |
407 |
426 |
408 extern const char *sdt_prefix; |
427 extern const char *sdt_prefix; |
409 |
428 |