1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21/*
22 * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
23 * Use is subject to license terms.
24 */
25
26/* #pragma ident	"@(#)sdt_subr.c	1.13	08/06/13 SMI" */
27
28#include <sys/sdt_impl.h>
29
30static dtrace_pattr_t vtrace_attr = {
31{ DTRACE_STABILITY_UNSTABLE, DTRACE_STABILITY_UNSTABLE, DTRACE_CLASS_ISA },
32{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
33{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
34{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
35{ DTRACE_STABILITY_UNSTABLE, DTRACE_STABILITY_UNSTABLE, DTRACE_CLASS_ISA },
36};
37
38static dtrace_pattr_t info_attr = {
39{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
40{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
41{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
42{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
43{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
44};
45
46static dtrace_pattr_t fpu_attr = {
47{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
48{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
49{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
50{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_CPU },
51{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
52};
53
54static dtrace_pattr_t fsinfo_attr = {
55{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
56{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
57{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
58{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
59{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
60};
61
62static dtrace_pattr_t stab_attr = {
63{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
64{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
65{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
66{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
67{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
68};
69
70static dtrace_pattr_t sdt_attr = {
71{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_ISA },
72{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
73{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
74{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
75{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
76};
77
78static dtrace_pattr_t xpv_attr = {
79{ DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_PLATFORM },
80{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
81{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_UNKNOWN },
82{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_PLATFORM },
83{ DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_PLATFORM },
84};
85
86sdt_provider_t sdt_providers[] = {
87	{ "vtrace", "__vtrace____", &vtrace_attr, 0 },
88	{ "sysinfo", "__cpu_sysinfo____", &info_attr, 0 },
89	{ "vminfo", "__vminfo____", &info_attr, 0 },
90	{ "fpuinfo", "__fpuinfo____", &fpu_attr, 0 },
91	{ "sched", "__sched____", &stab_attr, 0 },
92	{ "proc", "__proc____", &stab_attr, 0 },
93	{ "io", "__io____", &stab_attr, 0 },
94	{ "ip", "__ip____", &stab_attr, 0 },
95	{ "tcp", "__tcp____", &stab_attr, 0 },
96	{ "mib", "__mib____", &stab_attr, 0 },
97	{ "fsinfo", "__fsinfo____", &fsinfo_attr, 0 },
98	{ "nfsv3", "__nfsv3____", &stab_attr, 0 },
99	{ "nfsv4", "__nfsv4____", &stab_attr, 0 },
100	{ "xpv", "__xpv____", &xpv_attr, 0 },
101	{ "sysevent", "__sysevent____", &stab_attr, 0 },
102	{ "sdt", "__sdt____", &sdt_attr, 0 },
103#if !defined(__APPLE__)
104	{ NULL }
105#else
106	{ NULL, NULL, NULL, 0 }
107#endif /* __APPLE__ */
108};
109
110/* Warning:  Need xnu cognate for disp_t.  */
111sdt_argdesc_t sdt_args[] = {
112	{ "sched", "wakeup", 0, 0, "struct thread *", "lwpsinfo_t *" },
113	{ "sched", "wakeup", 1, 1, "struct proc *", "psinfo_t *" },
114	{ "sched", "dequeue", 0, 0, "struct thread *", "lwpsinfo_t *" },
115	{ "sched", "dequeue", 1, 0, "struct proc *", "psinfo_t *" },
116	{ "sched", "dequeue", 2, 1, "disp_t *", "cpuinfo_t *" },
117	{ "sched", "enqueue", 0, 0, "struct thread *", "lwpsinfo_t *" },
118	{ "sched", "enqueue", 1, 0, "struct proc *", "psinfo_t *" },
119	{ "sched", "enqueue", 2, 1, "disp_t *", "cpuinfo_t *" },
120	{ "sched", "enqueue", 3, 2, "int", NULL },
121	/* sched:::sleep has no arguments */
122	/* sched:::on-cpu has no arguments */
123	{ "sched", "off-cpu", 0, 0, "struct thread *", "lwpsinfo_t *" },
124	{ "sched", "off-cpu", 1, 1, "struct proc *", "psinfo_t *" },
125	{ "sched", "tick", 0, 0, "struct thread *", "lwpsinfo_t *" },
126	{ "sched", "tick", 1, 0, "struct proc *", "psinfo_t *" },
127	{ "sched", "change-pri", 0, 0, "struct thread *", "lwpsinfo_t *" },
128	{ "sched", "change-pri", 1, 0, "struct proc *", "psinfo_t *" },
129	{ "sched", "change-pri", 2, 1, "pri_t", NULL },
130	{ "sched", "schedctl-nopreempt", 0, 0, "struct thread *", "lwpsinfo_t *" },
131	{ "sched", "schedctl-nopreempt", 1, 0, "struct proc *", "psinfo_t *" },
132	{ "sched", "schedctl-nopreempt", 2, 1, "int", NULL },
133	{ "sched", "schedctl-preempt", 0, 0, "struct thread *", "lwpsinfo_t *" },
134	{ "sched", "schedctl-preempt", 1, 0, "struct proc *", "psinfo_t *" },
135	{ "sched", "schedctl-yield", 0, 0, "int", NULL },
136	{ "sched", "surrender", 0, 0, "struct thread *", "lwpsinfo_t *" },
137	{ "sched", "surrender", 1, 0, "struct proc *", "psinfo_t *" },
138	{ "sched", "surrender", 1, 0, "kthread_t *", "psinfo_t *" },
139	{ "sched", "cpucaps-sleep", 0, 0, "kthread_t *", "lwpsinfo_t *" },
140	{ "sched", "cpucaps-sleep", 1, 0, "kthread_t *", "psinfo_t *" },
141	{ "sched", "cpucaps-wakeup", 0, 0, "kthread_t *", "lwpsinfo_t *" },
142	{ "sched", "cpucaps-wakeup", 1, 0, "kthread_t *", "psinfo_t *" },
143
144	{ "proc", "create", 0, 0, "struct proc *", "psinfo_t *" },
145	{ "proc", "exec", 0, 0, "string", NULL },
146	{ "proc", "exec-failure", 0, 0, "int", NULL },
147	/* proc:::exec-success has no arguments */
148	{ "proc", "exit", 0, 0, "int", NULL },
149	{ "proc", "fault", 0, 0, "int", NULL },
150	{ "proc", "fault", 1, 1, "siginfo_t *", NULL },
151	{ "proc", "lwp-create", 0, 0, "struct thread *", "lwpsinfo_t *" },
152	{ "proc", "lwp-create", 1, 0, "struct thread *", "psinfo_t *" },
153	/* proc:::lwp-start has no arguments */
154	/* proc:::lwp-exit has no arguments */
155	{ "proc", "signal-clear", 0, 0, "int", NULL },
156	{ "proc", "signal-clear", 1, 1, "siginfo_t *", NULL },
157	{ "proc", "signal-discard", 0, 0, "struct thread *", "lwpsinfo_t *" },
158	{ "proc", "signal-discard", 1, 1, "struct proc *", "psinfo_t *" },
159	{ "proc", "signal-discard", 2, 2, "int", NULL },
160	{ "proc", "signal-handle", 0, 0, "int", NULL },
161	{ "proc", "signal-handle", 1, 1, "siginfo_t *", NULL },
162	{ "proc", "signal-handle", 2, 2, "void (*)(void)", NULL },
163	{ "proc", "signal-send", 0, 0, "struct thread *", "lwpsinfo_t *" },
164	{ "proc", "signal-send", 1, 1, "struct proc *", "psinfo_t *" },
165	{ "proc", "signal-send", 2, 2, "int", NULL },
166	/* proc:::start has no arguments */
167
168	{ "io", "start", 0, 0, "struct buf *", "bufinfo_t *" },
169	{ "io", "start", 1, 0, "struct buf *", "devinfo_t *" },
170	{ "io", "start", 2, 0, "struct buf *", "fileinfo_t *" },
171	{ "io", "done", 0, 0, "struct buf *", "bufinfo_t *" },
172	{ "io", "done", 1, 0, "struct buf *", "devinfo_t *" },
173	{ "io", "done", 2, 0, "struct buf *", "fileinfo_t *" },
174	{ "io", "wait-start", 0, 0, "struct buf *", "bufinfo_t *" },
175	{ "io", "wait-start", 1, 0, "struct buf *", "devinfo_t *" },
176	{ "io", "wait-start", 2, 0, "struct buf *", "fileinfo_t *" },
177	{ "io", "wait-done", 0, 0, "struct buf *", "bufinfo_t *" },
178	{ "io", "wait-done", 1, 0, "struct buf *", "devinfo_t *" },
179	{ "io", "wait-done", 2, 0, "struct buf *", "fileinfo_t *" },
180#if defined(__APPLE__)
181	{ "io", "journal-start", 0, 0, "struct buf *", "bufinfo_t *" },
182	{ "io", "journal-start", 1, 0, "struct buf *", "devinfo_t *" },
183	{ "io", "journal-start", 2, 0, "struct buf *", "fileinfo_t *" },
184	{ "io", "journal-done", 0, 0, "struct buf *", "bufinfo_t *" },
185	{ "io", "journal-done", 1, 0, "struct buf *", "devinfo_t *" },
186	{ "io", "journal-done", 2, 0, "struct buf *", "fileinfo_t *" },
187#endif /* __APPLE__ */
188
189	{ "mib", NULL, 0, 0, "int", NULL },
190	{ "fsinfo", NULL, 0, 0, "struct vnode *", "fileinfo_t *" },
191	{ "fsinfo", NULL, 1, 1, "int", "int" },
192
193	{ "nfsv3", "op-getattr-start", 0, 0, "struct svc_req *",
194	    "conninfo_t *" },
195	{ "nfsv3", "op-getattr-start", 1, 1, "nfsv3oparg_t *",
196	    "nfsv3opinfo_t *" },
197	{ "nfsv3", "op-getattr-start", 2, 3, "GETATTR3args *", NULL },
198	{ "nfsv3", "op-getattr-done", 0, 0, "struct svc_req *",
199	    "conninfo_t *" },
200	{ "nfsv3", "op-getattr-done", 1, 1, "nfsv3oparg_t *",
201	    "nfsv3opinfo_t *" },
202	{ "nfsv3", "op-getattr-done", 2, 3, "GETATTR3res *", NULL },
203	{ "nfsv3", "op-setattr-start", 0, 0, "struct svc_req *",
204	    "conninfo_t *" },
205	{ "nfsv3", "op-setattr-start", 1, 1, "nfsv3oparg_t *",
206	    "nfsv3opinfo_t *" },
207	{ "nfsv3", "op-setattr-start", 2, 3, "SETATTR3args *", NULL },
208	{ "nfsv3", "op-setattr-done", 0, 0, "struct svc_req *",
209	    "conninfo_t *" },
210	{ "nfsv3", "op-setattr-done", 1, 1, "nfsv3oparg_t *",
211	    "nfsv3opinfo_t *" },
212	{ "nfsv3", "op-setattr-done", 2, 3, "SETATTR3res *", NULL },
213	{ "nfsv3", "op-lookup-start", 0, 0, "struct svc_req *",
214	    "conninfo_t *" },
215	{ "nfsv3", "op-lookup-start", 1, 1, "nfsv3oparg_t *",
216	    "nfsv3opinfo_t *" },
217	{ "nfsv3", "op-lookup-start", 2, 3, "LOOKUP3args *", NULL },
218	{ "nfsv3", "op-lookup-done", 0, 0, "struct svc_req *",
219	    "conninfo_t *" },
220	{ "nfsv3", "op-lookup-done", 1, 1, "nfsv3oparg_t *",
221	    "nfsv3opinfo_t *" },
222	{ "nfsv3", "op-lookup-done", 2, 3, "LOOKUP3res *", NULL },
223	{ "nfsv3", "op-access-start", 0, 0, "struct svc_req *",
224	    "conninfo_t *" },
225	{ "nfsv3", "op-access-start", 1, 1, "nfsv3oparg_t *",
226	    "nfsv3opinfo_t *" },
227	{ "nfsv3", "op-access-start", 2, 3, "ACCESS3args *", NULL },
228	{ "nfsv3", "op-access-done", 0, 0, "struct svc_req *",
229	    "conninfo_t *" },
230	{ "nfsv3", "op-access-done", 1, 1, "nfsv3oparg_t *",
231	    "nfsv3opinfo_t *" },
232	{ "nfsv3", "op-access-done", 2, 3, "ACCESS3res *", NULL },
233	{ "nfsv3", "op-commit-start", 0, 0, "struct svc_req *",
234	    "conninfo_t *" },
235	{ "nfsv3", "op-commit-start", 1, 1, "nfsv3oparg_t *",
236	    "nfsv3opinfo_t *" },
237	{ "nfsv3", "op-commit-start", 2, 3, "COMMIT3args *", NULL },
238	{ "nfsv3", "op-commit-done", 0, 0, "struct svc_req *",
239	    "conninfo_t *" },
240	{ "nfsv3", "op-commit-done", 1, 1, "nfsv3oparg_t *",
241	    "nfsv3opinfo_t *" },
242	{ "nfsv3", "op-commit-done", 2, 3, "COMMIT3res *", NULL },
243	{ "nfsv3", "op-create-start", 0, 0, "struct svc_req *",
244	    "conninfo_t *" },
245	{ "nfsv3", "op-create-start", 1, 1, "nfsv3oparg_t *",
246	    "nfsv3opinfo_t *" },
247	{ "nfsv3", "op-create-start", 2, 3, "CREATE3args *", NULL },
248	{ "nfsv3", "op-create-done", 0, 0, "struct svc_req *",
249	    "conninfo_t *" },
250	{ "nfsv3", "op-create-done", 1, 1, "nfsv3oparg_t *",
251	    "nfsv3opinfo_t *" },
252	{ "nfsv3", "op-create-done", 2, 3, "CREATE3res *", NULL },
253	{ "nfsv3", "op-fsinfo-start", 0, 0, "struct svc_req *",
254	    "conninfo_t *" },
255	{ "nfsv3", "op-fsinfo-start", 1, 1, "nfsv3oparg_t *",
256	    "nfsv3opinfo_t *" },
257	{ "nfsv3", "op-fsinfo-start", 2, 3, "FSINFO3args *", NULL },
258	{ "nfsv3", "op-fsinfo-done", 0, 0, "struct svc_req *",
259	    "conninfo_t *" },
260	{ "nfsv3", "op-fsinfo-done", 1, 1, "nfsv3oparg_t *",
261	    "nfsv3opinfo_t *" },
262	{ "nfsv3", "op-fsinfo-done", 2, 3, "FSINFO3res *", NULL },
263	{ "nfsv3", "op-fsstat-start", 0, 0, "struct svc_req *",
264	    "conninfo_t *" },
265	{ "nfsv3", "op-fsstat-start", 1, 1, "nfsv3oparg_t *",
266	    "nfsv3opinfo_t *" },
267	{ "nfsv3", "op-fsstat-start", 2, 3, "FSSTAT3args *", NULL },
268	{ "nfsv3", "op-fsstat-done", 0, 0, "struct svc_req *",
269	    "conninfo_t *" },
270	{ "nfsv3", "op-fsstat-done", 1, 1, "nfsv3oparg_t *",
271	    "nfsv3opinfo_t *" },
272	{ "nfsv3", "op-fsstat-done", 2, 3, "FSSTAT3res *", NULL },
273	{ "nfsv3", "op-link-start", 0, 0, "struct svc_req *",
274	    "conninfo_t *" },
275	{ "nfsv3", "op-link-start", 1, 1, "nfsv3oparg_t *",
276	    "nfsv3opinfo_t *" },
277	{ "nfsv3", "op-link-start", 2, 3, "LINK3args *", NULL },
278	{ "nfsv3", "op-link-done", 0, 0, "struct svc_req *",
279	    "conninfo_t *" },
280	{ "nfsv3", "op-link-done", 1, 1, "nfsv3oparg_t *",
281	    "nfsv3opinfo_t *" },
282	{ "nfsv3", "op-link-done", 2, 3, "LINK3res *", NULL },
283	{ "nfsv3", "op-mkdir-start", 0, 0, "struct svc_req *",
284	    "conninfo_t *" },
285	{ "nfsv3", "op-mkdir-start", 1, 1, "nfsv3oparg_t *",
286	    "nfsv3opinfo_t *" },
287	{ "nfsv3", "op-mkdir-start", 2, 3, "MKDIR3args *", NULL },
288	{ "nfsv3", "op-mkdir-done", 0, 0, "struct svc_req *",
289	    "conninfo_t *" },
290	{ "nfsv3", "op-mkdir-done", 1, 1, "nfsv3oparg_t *",
291	    "nfsv3opinfo_t *" },
292	{ "nfsv3", "op-mkdir-done", 2, 3, "MKDIR3res *", NULL },
293	{ "nfsv3", "op-mknod-start", 0, 0, "struct svc_req *",
294	    "conninfo_t *" },
295	{ "nfsv3", "op-mknod-start", 1, 1, "nfsv3oparg_t *",
296	    "nfsv3opinfo_t *" },
297	{ "nfsv3", "op-mknod-start", 2, 3, "MKNOD3args *", NULL },
298	{ "nfsv3", "op-mknod-done", 0, 0, "struct svc_req *",
299	    "conninfo_t *" },
300	{ "nfsv3", "op-mknod-done", 1, 1, "nfsv3oparg_t *",
301	    "nfsv3opinfo_t *" },
302	{ "nfsv3", "op-mknod-done", 2, 3, "MKNOD3res *", NULL },
303	{ "nfsv3", "op-null-start", 0, 0, "struct svc_req *",
304	    "conninfo_t *" },
305	{ "nfsv3", "op-null-start", 1, 1, "nfsv3oparg_t *",
306	    "nfsv3opinfo_t *" },
307	{ "nfsv3", "op-null-done", 0, 0, "struct svc_req *",
308	    "conninfo_t *" },
309	{ "nfsv3", "op-null-done", 1, 1, "nfsv3oparg_t *",
310	    "nfsv3opinfo_t *" },
311	{ "nfsv3", "op-pathconf-start", 0, 0, "struct svc_req *",
312	    "conninfo_t *" },
313	{ "nfsv3", "op-pathconf-start", 1, 1, "nfsv3oparg_t *",
314	    "nfsv3opinfo_t *" },
315	{ "nfsv3", "op-pathconf-start", 2, 3, "PATHCONF3args *", NULL },
316	{ "nfsv3", "op-pathconf-done", 0, 0, "struct svc_req *",
317	    "conninfo_t *" },
318	{ "nfsv3", "op-pathconf-done", 1, 1, "nfsv3oparg_t *",
319	    "nfsv3opinfo_t *" },
320	{ "nfsv3", "op-pathconf-done", 2, 3, "PATHCONF3res *", NULL },
321	{ "nfsv3", "op-read-start", 0, 0, "struct svc_req *",
322	    "conninfo_t *" },
323	{ "nfsv3", "op-read-start", 1, 1, "nfsv3oparg_t *",
324	    "nfsv3opinfo_t *" },
325	{ "nfsv3", "op-read-start", 2, 3, "READ3args *", NULL },
326	{ "nfsv3", "op-read-done", 0, 0, "struct svc_req *",
327	    "conninfo_t *" },
328	{ "nfsv3", "op-read-done", 1, 1, "nfsv3oparg_t *",
329	    "nfsv3opinfo_t *" },
330	{ "nfsv3", "op-read-done", 2, 3, "READ3res *", NULL },
331	{ "nfsv3", "op-readdir-start", 0, 0, "struct svc_req *",
332	    "conninfo_t *" },
333	{ "nfsv3", "op-readdir-start", 1, 1, "nfsv3oparg_t *",
334	    "nfsv3opinfo_t *" },
335	{ "nfsv3", "op-readdir-start", 2, 3, "READDIR3args *", NULL },
336	{ "nfsv3", "op-readdir-done", 0, 0, "struct svc_req *",
337	    "conninfo_t *" },
338	{ "nfsv3", "op-readdir-done", 1, 1, "nfsv3oparg_t *",
339	    "nfsv3opinfo_t *" },
340	{ "nfsv3", "op-readdir-done", 2, 3, "READDIR3res *", NULL },
341	{ "nfsv3", "op-readdirplus-start", 0, 0, "struct svc_req *",
342	    "conninfo_t *" },
343	{ "nfsv3", "op-readdirplus-start", 1, 1, "nfsv3oparg_t *",
344	    "nfsv3opinfo_t *" },
345	{ "nfsv3", "op-readdirplus-start", 2, 3, "READDIRPLUS3args *", NULL },
346	{ "nfsv3", "op-readdirplus-done", 0, 0, "struct svc_req *",
347	    "conninfo_t *" },
348	{ "nfsv3", "op-readdirplus-done", 1, 1, "nfsv3oparg_t *",
349	    "nfsv3opinfo_t *" },
350	{ "nfsv3", "op-readdirplus-done", 2, 3, "READDIRPLUS3res *", NULL },
351	{ "nfsv3", "op-readlink-start", 0, 0, "struct svc_req *",
352	    "conninfo_t *" },
353	{ "nfsv3", "op-readlink-start", 1, 1, "nfsv3oparg_t *",
354	    "nfsv3opinfo_t *" },
355	{ "nfsv3", "op-readlink-start", 2, 3, "READLINK3args *", NULL },
356	{ "nfsv3", "op-readlink-done", 0, 0, "struct svc_req *",
357	    "conninfo_t *" },
358	{ "nfsv3", "op-readlink-done", 1, 1, "nfsv3oparg_t *",
359	    "nfsv3opinfo_t *" },
360	{ "nfsv3", "op-readlink-done", 2, 3, "READLINK3res *", NULL },
361	{ "nfsv3", "op-remove-start", 0, 0, "struct svc_req *",
362	    "conninfo_t *" },
363	{ "nfsv3", "op-remove-start", 1, 1, "nfsv3oparg_t *",
364	    "nfsv3opinfo_t *" },
365	{ "nfsv3", "op-remove-start", 2, 3, "REMOVE3args *", NULL },
366	{ "nfsv3", "op-remove-done", 0, 0, "struct svc_req *",
367	    "conninfo_t *" },
368	{ "nfsv3", "op-remove-done", 1, 1, "nfsv3oparg_t *",
369	    "nfsv3opinfo_t *" },
370	{ "nfsv3", "op-remove-done", 2, 3, "REMOVE3res *", NULL },
371	{ "nfsv3", "op-rename-start", 0, 0, "struct svc_req *",
372	    "conninfo_t *" },
373	{ "nfsv3", "op-rename-start", 1, 1, "nfsv3oparg_t *",
374	    "nfsv3opinfo_t *" },
375	{ "nfsv3", "op-rename-start", 2, 3, "RENAME3args *", NULL },
376	{ "nfsv3", "op-rename-done", 0, 0, "struct svc_req *",
377	    "conninfo_t *" },
378	{ "nfsv3", "op-rename-done", 1, 1, "nfsv3oparg_t *",
379	    "nfsv3opinfo_t *" },
380	{ "nfsv3", "op-rename-done", 2, 3, "RENAME3res *", NULL },
381	{ "nfsv3", "op-rmdir-start", 0, 0, "struct svc_req *",
382	    "conninfo_t *" },
383	{ "nfsv3", "op-rmdir-start", 1, 1, "nfsv3oparg_t *",
384	    "nfsv3opinfo_t *" },
385	{ "nfsv3", "op-rmdir-start", 2, 3, "RMDIR3args *", NULL },
386	{ "nfsv3", "op-rmdir-done", 0, 0, "struct svc_req *",
387	    "conninfo_t *" },
388	{ "nfsv3", "op-rmdir-done", 1, 1, "nfsv3oparg_t *",
389	    "nfsv3opinfo_t *" },
390	{ "nfsv3", "op-rmdir-done", 2, 3, "RMDIR3res *", NULL },
391	{ "nfsv3", "op-setattr-start", 0, 0, "struct svc_req *",
392	    "conninfo_t *" },
393	{ "nfsv3", "op-setattr-start", 1, 1, "nfsv3oparg_t *",
394	    "nfsv3opinfo_t *" },
395	{ "nfsv3", "op-setattr-start", 2, 3, "SETATTR3args *", NULL },
396	{ "nfsv3", "op-setattr-done", 0, 0, "struct svc_req *",
397	    "conninfo_t *" },
398	{ "nfsv3", "op-setattr-done", 1, 1, "nfsv3oparg_t *",
399	    "nfsv3opinfo_t *" },
400	{ "nfsv3", "op-setattr-done", 2, 3, "SETATTR3res *", NULL },
401	{ "nfsv3", "op-symlink-start", 0, 0, "struct svc_req *",
402	    "conninfo_t *" },
403	{ "nfsv3", "op-symlink-start", 1, 1, "nfsv3oparg_t *",
404	    "nfsv3opinfo_t *" },
405	{ "nfsv3", "op-symlink-start", 2, 3, "SYMLINK3args *", NULL },
406	{ "nfsv3", "op-symlink-done", 0, 0, "struct svc_req *",
407	    "conninfo_t *" },
408	{ "nfsv3", "op-symlink-done", 1, 1, "nfsv3oparg_t *",
409	    "nfsv3opinfo_t *" },
410	{ "nfsv3", "op-symlink-done", 2, 3, "SYMLINK3res *", NULL },
411	{ "nfsv3", "op-write-start", 0, 0, "struct svc_req *",
412	    "conninfo_t *" },
413	{ "nfsv3", "op-write-start", 1, 1, "nfsv3oparg_t *",
414	    "nfsv3opinfo_t *" },
415	{ "nfsv3", "op-write-start", 2, 3, "WRITE3args *", NULL },
416	{ "nfsv3", "op-write-done", 0, 0, "struct svc_req *",
417	    "conninfo_t *" },
418	{ "nfsv3", "op-write-done", 1, 1, "nfsv3oparg_t *",
419	    "nfsv3opinfo_t *" },
420	{ "nfsv3", "op-write-done", 2, 3, "WRITE3res *", NULL },
421
422	{ "nfsv4", "null-start", 0, 0, "struct svc_req *", "conninfo_t *" },
423	{ "nfsv4", "null-done", 0, 0, "struct svc_req *", "conninfo_t *" },
424	{ "nfsv4", "compound-start", 0, 0, "struct compound_state *",
425	    "conninfo_t *" },
426	{ "nfsv4", "compound-start", 1, 0, "struct compound_state *",
427	    "nfsv4opinfo_t *" },
428	{ "nfsv4", "compound-start", 2, 1, "COMPOUND4args *", NULL },
429	{ "nfsv4", "compound-done", 0, 0, "struct compound_state *",
430	    "conninfo_t *" },
431	{ "nfsv4", "compound-done", 1, 0, "struct compound_state *",
432	    "nfsv4opinfo_t *" },
433	{ "nfsv4", "compound-done", 2, 1, "COMPOUND4res *", NULL },
434	{ "nfsv4", "op-access-start", 0, 0, "struct compound_state *",
435	    "conninfo_t *"},
436	{ "nfsv4", "op-access-start", 1, 0, "struct compound_state *",
437	    "nfsv4opinfo_t *" },
438	{ "nfsv4", "op-access-start", 2, 1, "ACCESS4args *", NULL },
439	{ "nfsv4", "op-access-done", 0, 0, "struct compound_state *",
440	    "conninfo_t *" },
441	{ "nfsv4", "op-access-done", 1, 0, "struct compound_state *",
442	    "nfsv4opinfo_t *" },
443	{ "nfsv4", "op-access-done", 2, 1, "ACCESS4res *", NULL },
444	{ "nfsv4", "op-close-start", 0, 0, "struct compound_state *",
445	    "conninfo_t *" },
446	{ "nfsv4", "op-close-start", 1, 0, "struct compound_state *",
447	    "nfsv4opinfo_t *" },
448	{ "nfsv4", "op-close-start", 2, 1, "CLOSE4args *", NULL },
449	{ "nfsv4", "op-close-done", 0, 0, "struct compound_state *",
450	    "conninfo_t *" },
451	{ "nfsv4", "op-close-done", 1, 0, "struct compound_state *",
452	    "nfsv4opinfo_t *" },
453	{ "nfsv4", "op-close-done", 2, 1, "CLOSE4res *", NULL },
454	{ "nfsv4", "op-commit-start", 0, 0, "struct compound_state *",
455	    "conninfo_t *" },
456	{ "nfsv4", "op-commit-start", 1, 0, "struct compound_state *",
457	    "nfsv4opinfo_t *" },
458	{ "nfsv4", "op-commit-start", 2, 1, "COMMIT4args *", NULL },
459	{ "nfsv4", "op-commit-done", 0, 0, "struct compound_state *",
460	    "conninfo_t *" },
461	{ "nfsv4", "op-commit-done", 1, 0, "struct compound_state *",
462	    "nfsv4opinfo_t *" },
463	{ "nfsv4", "op-commit-done", 2, 1, "COMMIT4res *", NULL },
464	{ "nfsv4", "op-create-start", 0, 0, "struct compound_state *",
465	    "conninfo_t *" },
466	{ "nfsv4", "op-create-start", 1, 0, "struct compound_state *",
467	    "nfsv4opinfo_t *" },
468	{ "nfsv4", "op-create-start", 2, 1, "CREATE4args *", NULL },
469	{ "nfsv4", "op-create-done", 0, 0, "struct compound_state *",
470	    "conninfo_t *" },
471	{ "nfsv4", "op-create-done", 1, 0, "struct compound_state *",
472	    "nfsv4opinfo_t *" },
473	{ "nfsv4", "op-create-done", 2, 1, "CREATE4res *", NULL },
474	{ "nfsv4", "op-delegpurge-start", 0, 0, "struct compound_state *",
475	    "conninfo_t *" },
476	{ "nfsv4", "op-delegpurge-start", 1, 0, "struct compound_state *",
477	    "nfsv4opinfo_t *" },
478	{ "nfsv4", "op-delegpurge-start", 2, 1, "DELEGPURGE4args *", NULL },
479	{ "nfsv4", "op-delegpurge-done", 0, 0, "struct compound_state *",
480	    "conninfo_t *" },
481	{ "nfsv4", "op-delegpurge-done", 1, 0, "struct compound_state *",
482	    "nfsv4opinfo_t *" },
483	{ "nfsv4", "op-delegpurge-done", 2, 1, "DELEGPURGE4res *", NULL },
484	{ "nfsv4", "op-delegreturn-start", 0, 0, "struct compound_state *",
485	    "conninfo_t *" },
486	{ "nfsv4", "op-delegreturn-start", 1, 0, "struct compound_state *",
487	    "nfsv4opinfo_t *" },
488	{ "nfsv4", "op-delegreturn-start", 2, 1, "DELEGRETURN4args *", NULL },
489	{ "nfsv4", "op-delegreturn-done", 0, 0, "struct compound_state *",
490	    "conninfo_t *" },
491	{ "nfsv4", "op-delegreturn-done", 1, 0, "struct compound_state *",
492	    "nfsv4opinfo_t *" },
493	{ "nfsv4", "op-delegreturn-done", 2, 1, "DELEGRETURN4res *", NULL },
494	{ "nfsv4", "op-getattr-start", 0, 0, "struct compound_state *",
495	    "conninfo_t *" },
496	{ "nfsv4", "op-getattr-start", 1, 0, "struct compound_state *",
497	    "nfsv4opinfo_t *" },
498	{ "nfsv4", "op-getattr-start", 2, 1, "GETATTR4args *", NULL },
499	{ "nfsv4", "op-getattr-done", 0, 0, "struct compound_state *",
500	    "conninfo_t *" },
501	{ "nfsv4", "op-getattr-done", 1, 0, "struct compound_state *",
502	    "nfsv4opinfo_t *" },
503	{ "nfsv4", "op-getattr-done", 2, 1, "GETATTR4res *", NULL },
504	{ "nfsv4", "op-getfh-start", 0, 0, "struct compound_state *",
505	    "conninfo_t *" },
506	{ "nfsv4", "op-getfh-start", 1, 0, "struct compound_state *",
507	    "nfsv4opinfo_t *" },
508	{ "nfsv4", "op-getfh-done", 0, 0, "struct compound_state *",
509	    "conninfo_t *" },
510	{ "nfsv4", "op-getfh-done", 1, 0, "struct compound_state *",
511	    "nfsv4opinfo_t *" },
512	{ "nfsv4", "op-getfh-done", 2, 1, "GETFH4res *", NULL },
513	{ "nfsv4", "op-link-start", 0, 0, "struct compound_state *",
514	    "conninfo_t *" },
515	{ "nfsv4", "op-link-start", 1, 0, "struct compound_state *",
516	    "nfsv4opinfo_t *" },
517	{ "nfsv4", "op-link-start", 2, 1, "LINK4args *", NULL },
518	{ "nfsv4", "op-link-done", 0, 0, "struct compound_state *",
519	    "conninfo_t *" },
520	{ "nfsv4", "op-link-done", 1, 0, "struct compound_state *",
521	    "nfsv4opinfo_t *" },
522	{ "nfsv4", "op-link-done", 2, 1, "LINK4res *", NULL },
523	{ "nfsv4", "op-lock-start", 0, 0, "struct compound_state *",
524	    "conninfo_t *" },
525	{ "nfsv4", "op-lock-start", 1, 0, "struct compound_state *",
526	    "nfsv4opinfo_t *" },
527	{ "nfsv4", "op-lock-start", 2, 1, "LOCK4args *", NULL },
528	{ "nfsv4", "op-lock-done", 0, 0, "struct compound_state *",
529	    "conninfo_t *" },
530	{ "nfsv4", "op-lock-done", 1, 0, "struct compound_state *",
531	    "nfsv4opinfo_t *" },
532	{ "nfsv4", "op-lock-done", 2, 1, "LOCK4res *", NULL },
533	{ "nfsv4", "op-lockt-start", 0, 0, "struct compound_state *",
534	    "conninfo_t *" },
535	{ "nfsv4", "op-lockt-start", 1, 0, "struct compound_state *",
536	    "nfsv4opinfo_t *" },
537	{ "nfsv4", "op-lockt-start", 2, 1, "LOCKT4args *", NULL },
538	{ "nfsv4", "op-lockt-done", 0, 0, "struct compound_state *",
539	    "conninfo_t *" },
540	{ "nfsv4", "op-lockt-done", 1, 0, "struct compound_state *",
541	    "nfsv4opinfo_t *" },
542	{ "nfsv4", "op-lockt-done", 2, 1, "LOCKT4res *", NULL },
543	{ "nfsv4", "op-locku-start", 0, 0, "struct compound_state *",
544	    "conninfo_t *" },
545	{ "nfsv4", "op-locku-start", 1, 0, "struct compound_state *",
546	    "nfsv4opinfo_t *" },
547	{ "nfsv4", "op-locku-start", 2, 1, "LOCKU4args *", NULL },
548	{ "nfsv4", "op-locku-done", 0, 0, "struct compound_state *",
549	    "conninfo_t *" },
550	{ "nfsv4", "op-locku-done", 1, 0, "struct compound_state *",
551	    "nfsv4opinfo_t *" },
552	{ "nfsv4", "op-locku-done", 2, 1, "LOCKU4res *", NULL },
553	{ "nfsv4", "op-lookup-start", 0, 0, "struct compound_state *",
554	    "conninfo_t *" },
555	{ "nfsv4", "op-lookup-start", 1, 0, "struct compound_state *",
556	    "nfsv4opinfo_t *" },
557	{ "nfsv4", "op-lookup-start", 2, 1, "LOOKUP4args *", NULL },
558	{ "nfsv4", "op-lookup-done", 0, 0, "struct compound_state *",
559	    "conninfo_t *" },
560	{ "nfsv4", "op-lookup-done", 1, 0, "struct compound_state *",
561	    "nfsv4opinfo_t *" },
562	{ "nfsv4", "op-lookup-done", 2, 1, "LOOKUP4res *", NULL },
563	{ "nfsv4", "op-lookupp-start", 0, 0, "struct compound_state *",
564	    "conninfo_t *" },
565	{ "nfsv4", "op-lookupp-start", 1, 0, "struct compound_state *",
566	    "nfsv4opinfo_t *" },
567	{ "nfsv4", "op-lookupp-done", 0, 0, "struct compound_state *",
568	    "conninfo_t *" },
569	{ "nfsv4", "op-lookupp-done", 1, 0, "struct compound_state *",
570	    "nfsv4opinfo_t *" },
571	{ "nfsv4", "op-lookupp-done", 2, 1, "LOOKUPP4res *", NULL },
572	{ "nfsv4", "op-nverify-start", 0, 0, "struct compound_state *",
573	    "conninfo_t *" },
574	{ "nfsv4", "op-nverify-start", 1, 0, "struct compound_state *",
575	    "nfsv4opinfo_t *" },
576	{ "nfsv4", "op-nverify-start", 2, 1, "NVERIFY4args *", NULL },
577	{ "nfsv4", "op-nverify-done", 0, 0, "struct compound_state *",
578	    "conninfo_t *" },
579	{ "nfsv4", "op-nverify-done", 1, 0, "struct compound_state *",
580	    "nfsv4opinfo_t *" },
581	{ "nfsv4", "op-nverify-done", 2, 1, "NVERIFY4res *", NULL },
582	{ "nfsv4", "op-open-start", 0, 0, "struct compound_state *",
583	    "conninfo_t *" },
584	{ "nfsv4", "op-open-start", 1, 0, "struct compound_state *",
585	    "nfsv4opinfo_t *" },
586	{ "nfsv4", "op-open-start", 2, 1, "OPEN4args *", NULL },
587	{ "nfsv4", "op-open-done", 0, 0, "struct compound_state *",
588	    "conninfo_t *" },
589	{ "nfsv4", "op-open-done", 1, 0, "struct compound_state *",
590	    "nfsv4opinfo_t *" },
591	{ "nfsv4", "op-open-done", 2, 1, "OPEN4res *", NULL },
592	{ "nfsv4", "op-open-confirm-start", 0, 0, "struct compound_state *",
593	    "conninfo_t *" },
594	{ "nfsv4", "op-open-confirm-start", 1, 0, "struct compound_state *",
595	    "nfsv4opinfo_t *" },
596	{ "nfsv4", "op-open-confirm-start", 2, 1, "OPEN_CONFIRM4args *", NULL },
597	{ "nfsv4", "op-open-confirm-done", 0, 0, "struct compound_state *",
598	    "conninfo_t *" },
599	{ "nfsv4", "op-open-confirm-done", 1, 0, "struct compound_state *",
600	    "nfsv4opinfo_t *" },
601	{ "nfsv4", "op-open-confirm-done", 2, 1, "OPEN_CONFIRM4res *", NULL },
602	{ "nfsv4", "op-open-downgrade-start", 0, 0, "struct compound_state *",
603	    "conninfo_t *" },
604	{ "nfsv4", "op-open-downgrade-start", 1, 0, "struct compound_state *",
605	    "nfsv4opinfo_t *" },
606	{ "nfsv4", "op-open-downgrade-start", 2, 1, "OPEN_DOWNGRADE4args *", NULL },
607	{ "nfsv4", "op-open-downgrade-done", 0, 0, "struct compound_state *",
608	    "conninfo_t *" },
609	{ "nfsv4", "op-open-downgrade-done", 1, 0, "struct compound_state *",
610	    "nfsv4opinfo_t *" },
611	{ "nfsv4", "op-open-downgrade-done", 2, 1, "OPEN_DOWNGRADE4res *", NULL },
612	{ "nfsv4", "op-openattr-start", 0, 0, "struct compound_state *",
613	    "conninfo_t *" },
614	{ "nfsv4", "op-openattr-start", 1, 0, "struct compound_state *",
615	    "nfsv4opinfo_t *" },
616	{ "nfsv4", "op-openattr-start", 2, 1, "OPENATTR4args *", NULL },
617	{ "nfsv4", "op-openattr-done", 0, 0, "struct compound_state *",
618	    "conninfo_t *" },
619	{ "nfsv4", "op-openattr-done", 1, 0, "struct compound_state *",
620	    "nfsv4opinfo_t *" },
621	{ "nfsv4", "op-openattr-done", 2, 1, "OPENATTR4res *", NULL },
622	{ "nfsv4", "op-putfh-start", 0, 0, "struct compound_state *",
623	    "conninfo_t *" },
624	{ "nfsv4", "op-putfh-start", 1, 0, "struct compound_state *",
625	    "nfsv4opinfo_t *" },
626	{ "nfsv4", "op-putfh-start", 2, 1, "PUTFH4args *", NULL },
627	{ "nfsv4", "op-putfh-done", 0, 0, "struct compound_state *",
628	    "conninfo_t *" },
629	{ "nfsv4", "op-putfh-done", 1, 0, "struct compound_state *",
630	    "nfsv4opinfo_t *" },
631	{ "nfsv4", "op-putfh-done", 2, 1, "PUTFH4res *", NULL },
632	{ "nfsv4", "op-putpubfh-start", 0, 0, "struct compound_state *",
633	    "conninfo_t *" },
634	{ "nfsv4", "op-putpubfh-start", 1, 0, "struct compound_state *",
635	    "nfsv4opinfo_t *" },
636	{ "nfsv4", "op-putpubfh-done", 0, 0, "struct compound_state *",
637	    "conninfo_t *" },
638	{ "nfsv4", "op-putpubfh-done", 1, 0, "struct compound_state *",
639	    "nfsv4opinfo_t *" },
640	{ "nfsv4", "op-putpubfh-done", 2, 1, "PUTPUBFH4res *", NULL },
641	{ "nfsv4", "op-putrootfh-start", 0, 0, "struct compound_state *",
642	    "conninfo_t *" },
643	{ "nfsv4", "op-putrootfh-start", 1, 0, "struct compound_state *",
644	    "nfsv4opinfo_t *" },
645	{ "nfsv4", "op-putrootfh-done", 0, 0, "struct compound_state *",
646	    "conninfo_t *" },
647	{ "nfsv4", "op-putrootfh-done", 1, 0, "struct compound_state *",
648	    "nfsv4opinfo_t *" },
649	{ "nfsv4", "op-putrootfh-done", 2, 1, "PUTROOTFH4res *", NULL },
650	{ "nfsv4", "op-read-start", 0, 0, "struct compound_state *",
651	    "conninfo_t *" },
652	{ "nfsv4", "op-read-start", 1, 0, "struct compound_state *",
653	    "nfsv4opinfo_t *" },
654	{ "nfsv4", "op-read-start", 2, 1, "READ4args *", NULL },
655	{ "nfsv4", "op-read-done", 0, 0, "struct compound_state *",
656	    "conninfo_t *" },
657	{ "nfsv4", "op-read-done", 1, 0, "struct compound_state *",
658	    "nfsv4opinfo_t *" },
659	{ "nfsv4", "op-read-done", 2, 1, "READ4res *", NULL },
660	{ "nfsv4", "op-readdir-start", 0, 0, "struct compound_state *",
661	    "conninfo_t *" },
662	{ "nfsv4", "op-readdir-start", 1, 0, "struct compound_state *",
663	    "nfsv4opinfo_t *" },
664	{ "nfsv4", "op-readdir-start", 2, 1, "READDIR4args *", NULL },
665	{ "nfsv4", "op-readdir-done", 0, 0, "struct compound_state *",
666	    "conninfo_t *" },
667	{ "nfsv4", "op-readdir-done", 1, 0, "struct compound_state *",
668	    "nfsv4opinfo_t *" },
669	{ "nfsv4", "op-readdir-done", 2, 1, "READDIR4res *", NULL },
670	{ "nfsv4", "op-readlink-start", 0, 0, "struct compound_state *",
671	    "conninfo_t *" },
672	{ "nfsv4", "op-readlink-start", 1, 0, "struct compound_state *",
673	    "nfsv4opinfo_t *" },
674	{ "nfsv4", "op-readlink-done", 0, 0, "struct compound_state *",
675	    "conninfo_t *" },
676	{ "nfsv4", "op-readlink-done", 1, 0, "struct compound_state *",
677	    "nfsv4opinfo_t *" },
678	{ "nfsv4", "op-readlink-done", 2, 1, "READLINK4res *", NULL },
679	{ "nfsv4", "op-release-lockowner-start", 0, 0,
680	    "struct compound_state *", "conninfo_t *" },
681	{ "nfsv4", "op-release-lockowner-start", 1, 0,
682	    "struct compound_state *", "nfsv4opinfo_t *" },
683	{ "nfsv4", "op-release-lockowner-start", 2, 1,
684	    "RELEASE_LOCKOWNER4args *", NULL },
685	{ "nfsv4", "op-release-lockowner-done", 0, 0,
686	    "struct compound_state *", "conninfo_t *" },
687	{ "nfsv4", "op-release-lockowner-done", 1, 0,
688	    "struct compound_state *", "nfsv4opinfo_t *" },
689	{ "nfsv4", "op-release-lockowner-done", 2, 1,
690	    "RELEASE_LOCKOWNER4res *", NULL },
691	{ "nfsv4", "op-remove-start", 0, 0, "struct compound_state *",
692	    "conninfo_t *" },
693	{ "nfsv4", "op-remove-start", 1, 0, "struct compound_state *",
694	    "nfsv4opinfo_t *" },
695	{ "nfsv4", "op-remove-start", 2, 1, "REMOVE4args *", NULL },
696	{ "nfsv4", "op-remove-done", 0, 0, "struct compound_state *",
697	    "conninfo_t *" },
698	{ "nfsv4", "op-remove-done", 1, 0, "struct compound_state *",
699	    "nfsv4opinfo_t *" },
700	{ "nfsv4", "op-remove-done", 2, 1, "REMOVE4res *", NULL },
701	{ "nfsv4", "op-rename-start", 0, 0, "struct compound_state *",
702	    "conninfo_t *" },
703	{ "nfsv4", "op-rename-start", 1, 0, "struct compound_state *",
704	    "nfsv4opinfo_t *" },
705	{ "nfsv4", "op-rename-start", 2, 1, "RENAME4args *", NULL },
706	{ "nfsv4", "op-rename-done", 0, 0, "struct compound_state *",
707	    "conninfo_t *" },
708	{ "nfsv4", "op-rename-done", 1, 0, "struct compound_state *",
709	    "nfsv4opinfo_t *" },
710	{ "nfsv4", "op-rename-done", 2, 1, "RENAME4res *", NULL },
711	{ "nfsv4", "op-renew-start", 0, 0, "struct compound_state *",
712	    "conninfo_t *" },
713	{ "nfsv4", "op-renew-start", 1, 0, "struct compound_state *",
714	    "nfsv4opinfo_t *" },
715	{ "nfsv4", "op-renew-start", 2, 1, "RENEW4args *", NULL },
716	{ "nfsv4", "op-renew-done", 0, 0, "struct compound_state *",
717	    "conninfo_t *" },
718	{ "nfsv4", "op-renew-done", 1, 0, "struct compound_state *",
719	    "nfsv4opinfo_t *" },
720	{ "nfsv4", "op-renew-done", 2, 1, "RENEW4res *", NULL },
721	{ "nfsv4", "op-restorefh-start", 0, 0, "struct compound_state *",
722	    "conninfo_t *" },
723	{ "nfsv4", "op-restorefh-start", 1, 0, "struct compound_state *",
724	    "nfsv4opinfo_t *" },
725	{ "nfsv4", "op-restorefh-done", 0, 0, "struct compound_state *",
726	    "conninfo_t *" },
727	{ "nfsv4", "op-restorefh-done", 1, 0, "struct compound_state *",
728	    "nfsv4opinfo_t *" },
729	{ "nfsv4", "op-restorefh-done", 2, 1, "RESTOREFH4res *", NULL },
730	{ "nfsv4", "op-savefh-start", 0, 0, "struct compound_state *",
731	    "conninfo_t *" },
732	{ "nfsv4", "op-savefh-start", 1, 0, "struct compound_state *",
733	    "nfsv4opinfo_t *" },
734	{ "nfsv4", "op-savefh-done", 0, 0, "struct compound_state *",
735	    "conninfo_t *" },
736	{ "nfsv4", "op-savefh-done", 1, 0, "struct compound_state *",
737	    "nfsv4opinfo_t *" },
738	{ "nfsv4", "op-savefh-done", 2, 1, "SAVEFH4res *", NULL },
739	{ "nfsv4", "op-secinfo-start", 0, 0, "struct compound_state *",
740	    "conninfo_t *" },
741	{ "nfsv4", "op-secinfo-start", 1, 0, "struct compound_state *",
742	    "nfsv4opinfo_t *" },
743	{ "nfsv4", "op-secinfo-start", 2, 1, "SECINFO4args *", NULL },
744	{ "nfsv4", "op-secinfo-done", 0, 0, "struct compound_state *",
745	    "conninfo_t *" },
746	{ "nfsv4", "op-secinfo-done", 1, 0, "struct compound_state *",
747	    "nfsv4opinfo_t *" },
748	{ "nfsv4", "op-secinfo-done", 2, 1, "SECINFO4res *", NULL },
749	{ "nfsv4", "op-setattr-start", 0, 0, "struct compound_state *",
750	    "conninfo_t *" },
751	{ "nfsv4", "op-setattr-start", 1, 0, "struct compound_state *",
752	    "nfsv4opinfo_t *" },
753	{ "nfsv4", "op-setattr-start", 2, 1, "SETATTR4args *", NULL },
754	{ "nfsv4", "op-setattr-done", 0, 0, "struct compound_state *",
755	    "conninfo_t *" },
756	{ "nfsv4", "op-setattr-done", 1, 0, "struct compound_state *",
757	    "nfsv4opinfo_t *" },
758	{ "nfsv4", "op-setattr-done", 2, 1, "SETATTR4res *", NULL },
759	{ "nfsv4", "op-setclientid-start", 0, 0, "struct compound_state *",
760	    "conninfo_t *" },
761	{ "nfsv4", "op-setclientid-start", 1, 0, "struct compound_state *",
762	    "nfsv4opinfo_t *" },
763	{ "nfsv4", "op-setclientid-start", 2, 1, "SETCLIENTID4args *", NULL },
764	{ "nfsv4", "op-setclientid-done", 0, 0, "struct compound_state *",
765	    "conninfo_t *" },
766	{ "nfsv4", "op-setclientid-done", 1, 0, "struct compound_state *",
767	    "nfsv4opinfo_t *" },
768	{ "nfsv4", "op-setclientid-done", 2, 1, "SETCLIENTID4res *", NULL },
769	{ "nfsv4", "op-setclientid-confirm-start", 0, 0,
770	    "struct compound_state *", "conninfo_t *" },
771	{ "nfsv4", "op-setclientid-confirm-start", 1, 0,
772	    "struct compound_state *", "nfsv4opinfo_t *" },
773	{ "nfsv4", "op-setclientid-confirm-start", 2, 1,
774	    "SETCLIENTID_CONFIRM4args *", NULL },
775	{ "nfsv4", "op-setclientid-confirm-done", 0, 0,
776	    "struct compound_state *", "conninfo_t *" },
777	{ "nfsv4", "op-setclientid-confirm-done", 1, 0,
778	    "struct compound_state *", "nfsv4opinfo_t *" },
779	{ "nfsv4", "op-setclientid-confirm-done", 2, 1,
780	    "SETCLIENTID_CONFIRM4res *", NULL },
781	{ "nfsv4", "op-verify-start", 0, 0, "struct compound_state *",
782	    "conninfo_t *" },
783	{ "nfsv4", "op-verify-start", 1, 0, "struct compound_state *",
784	    "nfsv4opinfo_t *" },
785	{ "nfsv4", "op-verify-start", 2, 1, "VERIFY4args *", NULL },
786	{ "nfsv4", "op-verify-done", 0, 0, "struct compound_state *",
787	    "conninfo_t *" },
788	{ "nfsv4", "op-verify-done", 1, 0, "struct compound_state *",
789	    "nfsv4opinfo_t *" },
790	{ "nfsv4", "op-verify-done", 2, 1, "VERIFY4res *", NULL },
791	{ "nfsv4", "op-write-start", 0, 0, "struct compound_state *",
792	    "conninfo_t *" },
793	{ "nfsv4", "op-write-start", 1, 0, "struct compound_state *",
794	    "nfsv4opinfo_t *" },
795	{ "nfsv4", "op-write-start", 2, 1, "WRITE4args *", NULL },
796	{ "nfsv4", "op-write-done", 0, 0, "struct compound_state *",
797	    "conninfo_t *" },
798	{ "nfsv4", "op-write-done", 1, 0, "struct compound_state *",
799	    "nfsv4opinfo_t *" },
800	{ "nfsv4", "op-write-done", 2, 1, "WRITE4res *", NULL },
801	{ "nfsv4", "cb-recall-start", 0, 0, "rfs4_client_t *",
802	    "conninfo_t *" },
803	{ "nfsv4", "cb-recall-start", 1, 1, "rfs4_deleg_state_t *",
804	    "nfsv4cbinfo_t *" },
805	{ "nfsv4", "cb-recall-start", 2, 2, "CB_RECALL4args *", NULL },
806	{ "nfsv4", "cb-recall-done", 0, 0, "rfs4_client_t *",
807	    "conninfo_t *" },
808	{ "nfsv4", "cb-recall-done", 1, 1, "rfs4_deleg_state_t *",
809	    "nfsv4cbinfo_t *" },
810	{ "nfsv4", "cb-recall-done", 2, 2, "CB_RECALL4res *", NULL },
811
812	{ "ip", "send", 0, 0, "struct mbuf *", "pktinfo_t *" },
813	{ "ip", "send", 1, 1, "struct inpcb *", "csinfo_t *" },
814	{ "ip", "send", 2, 2, "void_ip_t *", "ipinfo_t *" },
815	{ "ip", "send", 3, 3, "struct ifnet *", "ifinfo_t *" },
816	{ "ip", "send", 4, 4, "struct ip *", "ipv4info_t *" },
817	{ "ip", "send", 5, 5, "struct ip6_hdr *", "ipv6info_t *" },
818	{ "ip", "receive", 0, 0, "struct mbuf *", "pktinfo_t *" },
819	{ "ip", "receive", 1, 1, "struct inpcb *", "csinfo_t *" },
820	{ "ip", "receive", 2, 2, "void_ip_t *", "ipinfo_t *" },
821	{ "ip", "receive", 3, 3, "struct ifnet *", "ifinfo_t *" },
822	{ "ip", "receive", 4, 4, "struct ip *", "ipv4info_t *" },
823	{ "ip", "receive", 5, 5, "struct ip6_hdr *", "ipv6info_t *" },
824
825	{ "tcp", "connect-established", 0, 0, "struct mbuf *", "pktinfo_t *" },
826	{ "tcp", "connect-established", 1, 1, "struct inpcb *", "csinfo_t *" },
827	{ "tcp", "connect-established", 2, 2, "void_ip_t *", "ipinfo_t *" },
828	{ "tcp", "connect-established", 3, 3, "struct tcpcb *", "tcpsinfo_t *" },
829	{ "tcp", "connect-established", 4, 4, "struct tcphdr *", "tcpinfo_t *" },
830	{ "tcp", "connect-refused", 0, 0, "struct mbuf *", "pktinfo_t *" },
831	{ "tcp", "connect-refused", 1, 1, "struct inpcb *", "csinfo_t *" },
832	{ "tcp", "connect-refused", 2, 2, "void_ip_t *", "ipinfo_t *" },
833	{ "tcp", "connect-refused", 3, 3, "struct tcpcb *", "tcpsinfo_t *" },
834	{ "tcp", "connect-refused", 4, 4, "struct tcphdr *", "tcpinfo_t *" },
835	{ "tcp", "connect-request", 0, 0, "struct mbuf *", "pktinfo_t *" },
836	{ "tcp", "connect-request", 1, 1, "struct inpcb *", "csinfo_t *" },
837	{ "tcp", "connect-request", 2, 2, "void_ip_t *", "ipinfo_t *" },
838	{ "tcp", "connect-request", 3, 3, "struct tcpcb *", "tcpsinfo_t *" },
839	{ "tcp", "connect-request", 4, 4, "struct tcphdr *", "tcpinfo_t *" },
840	{ "tcp", "accept-established", 0, 0, "struct mbuf *", "pktinfo_t *" },
841	{ "tcp", "accept-established", 1, 1, "struct inpcb *", "csinfo_t *" },
842	{ "tcp", "accept-established", 2, 2, "void_ip_t *", "ipinfo_t *" },
843	{ "tcp", "accept-established", 3, 3, "struct tcpcb *", "tcpsinfo_t *" },
844	{ "tcp", "accept-established", 4, 4, "struct tcphdr *", "tcpinfo_t *" },
845	{ "tcp", "accept-refused", 0, 0, "struct mbuf *", "pktinfo_t *" },
846	{ "tcp", "accept-refused", 1, 1, "struct inpcb *", "csinfo_t *" },
847	{ "tcp", "accept-refused", 2, 2, "void_ip_t *", "ipinfo_t *" },
848	{ "tcp", "accept-refused", 3, 3, "struct tcpcb *", "tcpsinfo_t *" },
849	{ "tcp", "accept-refused", 4, 4, "struct tcphdr *", "tcpinfo_t *" },
850	{ "tcp", "state-change", 0, 0, "void", "void" },
851	{ "tcp", "state-change", 1, 1, "struct inpcb *", "csinfo_t *" },
852	{ "tcp", "state-change", 2, 2, "struct tcpcb *", "tcpsinfo_t *" },
853	{ "tcp", "state-change", 3, 3, "int32_t", "tcpnsinfo_t *" },
854	{ "tcp", "send", 0, 0, "struct mbuf *", "pktinfo_t *" },
855	{ "tcp", "send", 1, 1, "struct inpcb *", "csinfo_t *" },
856	{ "tcp", "send", 2, 2, "void_ip_t *", "ipinfo_t *" },
857	{ "tcp", "send", 3, 3, "struct tcpcb *", "tcpsinfo_t *" },
858	{ "tcp", "send", 4, 4, "struct tcphdr *", "tcpinfo_t *" },
859	{ "tcp", "receive", 0, 0, "struct mbuf *", "pktinfo_t *" },
860	{ "tcp", "receive", 1, 1, "struct inpcb *", "csinfo_t *" },
861	{ "tcp", "receive", 2, 2, "void_ip_t *", "ipinfo_t *" },
862	{ "tcp", "receive", 3, 3, "struct tcpcb *", "tcpsinfo_t *" },
863	{ "tcp", "receive", 4, 4, "struct tcphdr *", "tcpinfo_t *" },
864	{ "tcp", "cc", 0, 0, "struct mbuf *", "pktinfo_t *"},
865	{ "tcp", "cc", 1, 1, "struct inpcb *", "csinfo_t *"},
866	{ "tcp", "cc", 2, 2, "struct tcpcb *", "tcpsinfo_t *"},
867	{ "tcp", "cc", 3, 3, "struct tcphdr *", "tcpinfo_t *"},
868	{ "tcp", "cc", 4, 4, "int32_t", "tcpccevent_t *"},
869	{ "tcp", "iaj", 0, 0, "struct tcpcb *", "tcpsinfo_t *"},
870	{ "tcp", "iaj", 1, 1, "uint32_t", NULL},
871	{ "tcp", "iaj", 2, 2, "uint32_t", NULL},
872	{ "sysevent", "post", 0, 0, "evch_bind_t *", "syseventchaninfo_t *" },
873	{ "sysevent", "post", 1, 1, "sysevent_impl_t *", "syseventinfo_t *" },
874
875	{ "xpv", "add-to-physmap-end", 0, 0, "int", NULL },
876	{ "xpv", "add-to-physmap-start", 0, 0, "domid_t", NULL },
877	{ "xpv", "add-to-physmap-start", 1, 1, "uint_t", NULL },
878	{ "xpv", "add-to-physmap-start", 2, 2, "ulong_t", NULL },
879	{ "xpv", "add-to-physmap-start", 3, 3, "ulong_t", NULL },
880	{ "xpv", "decrease-reservation-end", 0, 0, "int", NULL },
881	{ "xpv", "decrease-reservation-start", 0, 0, "domid_t", NULL },
882	{ "xpv", "decrease-reservation-start", 1, 1, "ulong_t", NULL },
883	{ "xpv", "decrease-reservation-start", 2, 2, "uint_t", NULL },
884	{ "xpv", "decrease-reservation-start", 3, 3, "ulong_t *", NULL },
885	{ "xpv", "dom-create-start", 0, 0, "xen_domctl_t *", NULL },
886	{ "xpv", "dom-destroy-start", 0, 0, "domid_t", NULL },
887	{ "xpv", "dom-pause-start", 0, 0, "domid_t", NULL },
888	{ "xpv", "dom-unpause-start", 0, 0, "domid_t", NULL },
889	{ "xpv", "dom-create-end", 0, 0, "int", NULL },
890	{ "xpv", "dom-destroy-end", 0, 0, "int", NULL },
891	{ "xpv", "dom-pause-end", 0, 0, "int", NULL },
892	{ "xpv", "dom-unpause-end", 0, 0, "int", NULL },
893	{ "xpv", "evtchn-op-end", 0, 0, "int", NULL },
894	{ "xpv", "evtchn-op-start", 0, 0, "int", NULL },
895	{ "xpv", "evtchn-op-start", 1, 1, "void *", NULL },
896	{ "xpv", "increase-reservation-end", 0, 0, "int", NULL },
897	{ "xpv", "increase-reservation-start", 0, 0, "domid_t", NULL },
898	{ "xpv", "increase-reservation-start", 1, 1, "ulong_t", NULL },
899	{ "xpv", "increase-reservation-start", 2, 2, "uint_t", NULL },
900	{ "xpv", "increase-reservation-start", 3, 3, "ulong_t *", NULL },
901	{ "xpv", "mmap-end", 0, 0, "int", NULL },
902	{ "xpv", "mmap-entry", 0, 0, "ulong_t", NULL },
903	{ "xpv", "mmap-entry", 1, 1, "ulong_t", NULL },
904	{ "xpv", "mmap-entry", 2, 2, "ulong_t", NULL },
905	{ "xpv", "mmap-start", 0, 0, "domid_t", NULL },
906	{ "xpv", "mmap-start", 1, 1, "int", NULL },
907	{ "xpv", "mmap-start", 2, 2, "privcmd_mmap_entry_t *", NULL },
908	{ "xpv", "mmapbatch-end", 0, 0, "int", NULL },
909	{ "xpv", "mmapbatch-end", 1, 1, "struct seg *", NULL },
910	{ "xpv", "mmapbatch-end", 2, 2, "caddr_t", NULL },
911	{ "xpv", "mmapbatch-start", 0, 0, "domid_t", NULL },
912	{ "xpv", "mmapbatch-start", 1, 1, "int", NULL },
913	{ "xpv", "mmapbatch-start", 2, 2, "caddr_t", NULL },
914	{ "xpv", "mmu-ext-op-end", 0, 0, "int", NULL },
915	{ "xpv", "mmu-ext-op-start", 0, 0, "int", NULL },
916	{ "xpv", "mmu-ext-op-start", 1, 1, "struct mmuext_op *" , NULL},
917	{ "xpv", "mmu-update-start", 0, 0, "int", NULL },
918	{ "xpv", "mmu-update-start", 1, 1, "int", NULL },
919	{ "xpv", "mmu-update-start", 2, 2, "mmu_update_t *", NULL },
920	{ "xpv", "mmu-update-end", 0, 0, "int", NULL },
921	{ "xpv", "populate-physmap-end", 0, 0, "int" , NULL},
922	{ "xpv", "populate-physmap-start", 0, 0, "domid_t" , NULL},
923	{ "xpv", "populate-physmap-start", 1, 1, "ulong_t" , NULL},
924	{ "xpv", "populate-physmap-start", 2, 2, "ulong_t *" , NULL},
925	{ "xpv", "set-memory-map-end", 0, 0, "int" , NULL},
926	{ "xpv", "set-memory-map-start", 0, 0, "domid_t" , NULL},
927	{ "xpv", "set-memory-map-start", 1, 1, "int", NULL },
928	{ "xpv", "set-memory-map-start", 2, 2, "struct xen_memory_map *", NULL },
929	{ "xpv", "setvcpucontext-end", 0, 0, "int", NULL },
930	{ "xpv", "setvcpucontext-start", 0, 0, "domid_t", NULL },
931	{ "xpv", "setvcpucontext-start", 1, 1, "vcpu_guest_context_t *", NULL },
932#if !defined(__APPLE__)
933	{ NULL }
934#else
935	{ NULL, NULL, 0, 0, NULL, NULL }
936#endif /* __APPLE__ */
937};
938
939/*ARGSUSED*/
940void
941sdt_getargdesc(void *arg, dtrace_id_t id, void *parg, dtrace_argdesc_t *desc)
942{
943#pragma unused(arg, id)
944	sdt_probe_t *sdp = parg;
945	int i;
946
947	desc->dtargd_native[0] = '\0';
948	desc->dtargd_xlate[0] = '\0';
949
950	for (i = 0; sdt_args[i].sda_provider != NULL; i++) {
951		sdt_argdesc_t *a = &sdt_args[i];
952
953#if !defined(__APPLE__)
954		if (strcmp(sdp->sdp_provider->sdtp_name, a->sda_provider) != 0)
955			continue;
956
957		if (a->sda_name != NULL &&
958		    strcmp(sdp->sdp_name, a->sda_name) != 0)
959			continue;
960
961		if (desc->dtargd_ndx != a->sda_ndx)
962			continue;
963
964		if (a->sda_native != NULL)
965			(void) strcpy(desc->dtargd_native, a->sda_native);
966
967		if (a->sda_xlate != NULL)
968			(void) strcpy(desc->dtargd_xlate, a->sda_xlate);
969#else
970		if (strncmp(sdp->sdp_provider->sdtp_name, a->sda_provider, strlen(a->sda_provider) + 1) != 0)
971			continue;
972
973		if (a->sda_name != NULL &&
974		    strncmp(sdp->sdp_name, a->sda_name, strlen(a->sda_name) + 1) != 0)
975			continue;
976
977		if (desc->dtargd_ndx != a->sda_ndx)
978			continue;
979
980		if (a->sda_native != NULL)
981			(void) strlcpy(desc->dtargd_native, a->sda_native, DTRACE_ARGTYPELEN);
982
983		if (a->sda_xlate != NULL)
984			(void) strlcpy(desc->dtargd_xlate, a->sda_xlate, DTRACE_ARGTYPELEN);
985#endif /* __APPLE__ */
986
987		desc->dtargd_mapping = a->sda_mapping;
988		return;
989	}
990
991	desc->dtargd_ndx = DTRACE_ARGNONE;
992}
993