xref: /xnu-8792.81.2/tools/trace/kqtrace.lua (revision 19c3b8c28c31cb8130e034cfb5df6bf9ba342d90)
1*19c3b8c2SApple OSS Distributions#!/usr/local/bin/luatrace -s
2*19c3b8c2SApple OSS Distributions
3*19c3b8c2SApple OSS Distributionstrace_eventname = function(codename, callback)
4*19c3b8c2SApple OSS Distributions	local debugid = trace.debugid(codename)
5*19c3b8c2SApple OSS Distributions	if debugid ~= 0 then
6*19c3b8c2SApple OSS Distributions		trace.single(debugid,callback)
7*19c3b8c2SApple OSS Distributions	else
8*19c3b8c2SApple OSS Distributions		printf("WARNING: Cannot locate debugid for '%s'\n", codename)
9*19c3b8c2SApple OSS Distributions	end
10*19c3b8c2SApple OSS Distributionsend
11*19c3b8c2SApple OSS Distributions
12*19c3b8c2SApple OSS Distributionsinitial_timestamp = 0
13*19c3b8c2SApple OSS Distributions
14*19c3b8c2SApple OSS Distributionsfunction event_prefix_string(buf, workq)
15*19c3b8c2SApple OSS Distributions	if initial_timestamp == 0 then
16*19c3b8c2SApple OSS Distributions		initial_timestamp = buf.timestamp
17*19c3b8c2SApple OSS Distributions	end
18*19c3b8c2SApple OSS Distributions	local secs = trace.convert_timestamp_to_nanoseconds(buf.timestamp - initial_timestamp) / 1000000000
19*19c3b8c2SApple OSS Distributions
20*19c3b8c2SApple OSS Distributions	local type
21*19c3b8c2SApple OSS Distributions	if trace.debugid_is_start(buf.debugid) then
22*19c3b8c2SApple OSS Distributions		type = "→"
23*19c3b8c2SApple OSS Distributions	elseif trace.debugid_is_end(buf.debugid) then
24*19c3b8c2SApple OSS Distributions		type = "←"
25*19c3b8c2SApple OSS Distributions	else
26*19c3b8c2SApple OSS Distributions		type = "↔"
27*19c3b8c2SApple OSS Distributions	end
28*19c3b8c2SApple OSS Distributions
29*19c3b8c2SApple OSS Distributions	proc = buf.command
30*19c3b8c2SApple OSS Distributions
31*19c3b8c2SApple OSS Distributions	local prefix = string.format("%s %6.9f %-17s [%05d.%06x] %-28s\t",
32*19c3b8c2SApple OSS Distributions		type, secs, proc, buf.pid, buf.threadid, buf.debugname)
33*19c3b8c2SApple OSS Distributions	if not workq then
34*19c3b8c2SApple OSS Distributions		prefix = prefix .. string.format(" 0x%16x", buf.arg1)
35*19c3b8c2SApple OSS Distributions	end
36*19c3b8c2SApple OSS Distributions
37*19c3b8c2SApple OSS Distributions	return prefix
38*19c3b8c2SApple OSS Distributionsend
39*19c3b8c2SApple OSS Distributions
40*19c3b8c2SApple OSS Distributionsfunction qos_string(qos)
41*19c3b8c2SApple OSS Distributions	if qos == 0 then
42*19c3b8c2SApple OSS Distributions		return "--"
43*19c3b8c2SApple OSS Distributions	elseif qos == 1 then
44*19c3b8c2SApple OSS Distributions		return "MT"
45*19c3b8c2SApple OSS Distributions	elseif qos == 2 then
46*19c3b8c2SApple OSS Distributions		return "BG"
47*19c3b8c2SApple OSS Distributions	elseif qos == 3 then
48*19c3b8c2SApple OSS Distributions		return "UT"
49*19c3b8c2SApple OSS Distributions	elseif qos == 4 then
50*19c3b8c2SApple OSS Distributions		return "DF"
51*19c3b8c2SApple OSS Distributions	elseif qos == 5 then
52*19c3b8c2SApple OSS Distributions		return "IN"
53*19c3b8c2SApple OSS Distributions	elseif qos == 6 then
54*19c3b8c2SApple OSS Distributions		return "UI"
55*19c3b8c2SApple OSS Distributions	elseif qos == 7 then
56*19c3b8c2SApple OSS Distributions		return "MG"
57*19c3b8c2SApple OSS Distributions	else
58*19c3b8c2SApple OSS Distributions		return string.format("??[0x%x]", qos)
59*19c3b8c2SApple OSS Distributions	end
60*19c3b8c2SApple OSS Distributionsend
61*19c3b8c2SApple OSS Distributions
62*19c3b8c2SApple OSS Distributionsfunction state_string(strings, state)
63*19c3b8c2SApple OSS Distributions	local str = ''
64*19c3b8c2SApple OSS Distributions	local first = true
65*19c3b8c2SApple OSS Distributions	for name, bit in pairs(strings) do
66*19c3b8c2SApple OSS Distributions		if (state & bit) == bit then
67*19c3b8c2SApple OSS Distributions			if not first then
68*19c3b8c2SApple OSS Distributions				str = str .. ' '
69*19c3b8c2SApple OSS Distributions			end
70*19c3b8c2SApple OSS Distributions			str = str .. name
71*19c3b8c2SApple OSS Distributions			first = false
72*19c3b8c2SApple OSS Distributions		end
73*19c3b8c2SApple OSS Distributions	end
74*19c3b8c2SApple OSS Distributions	return str
75*19c3b8c2SApple OSS Distributionsend
76*19c3b8c2SApple OSS Distributions
77*19c3b8c2SApple OSS Distributionskqrequest_state_strings = {
78*19c3b8c2SApple OSS Distributions	['WAKEUP'] = 1,
79*19c3b8c2SApple OSS Distributions}
80*19c3b8c2SApple OSS Distributions
81*19c3b8c2SApple OSS Distributionskqueue_state_strings = {
82*19c3b8c2SApple OSS Distributions	['SEL'] = 0x001,
83*19c3b8c2SApple OSS Distributions	['SLEEP'] = 0x002,
84*19c3b8c2SApple OSS Distributions	['PROCWAIT'] = 0x004,
85*19c3b8c2SApple OSS Distributions	['KEV32'] = 0x008,
86*19c3b8c2SApple OSS Distributions	['KEV64'] = 0x010,
87*19c3b8c2SApple OSS Distributions	['KEV_QOS'] = 0x020,
88*19c3b8c2SApple OSS Distributions	['WORKQ'] = 0x040,
89*19c3b8c2SApple OSS Distributions	['WORKLOOP'] = 0x080,
90*19c3b8c2SApple OSS Distributions	['PROCESSING'] = 0x100,
91*19c3b8c2SApple OSS Distributions	['DRAIN'] = 0x200,
92*19c3b8c2SApple OSS Distributions	['WAKEUP'] = 0x400,
93*19c3b8c2SApple OSS Distributions	['DYNAMIC'] = 0x800,
94*19c3b8c2SApple OSS Distributions	['R2K'] = 0x1000,
95*19c3b8c2SApple OSS Distributions	['TURNSTILE'] = 0x2000,
96*19c3b8c2SApple OSS Distributions}
97*19c3b8c2SApple OSS Distributions
98*19c3b8c2SApple OSS Distributionsknote_state_strings = {
99*19c3b8c2SApple OSS Distributions	['ACTIVE'] = 0x0001,
100*19c3b8c2SApple OSS Distributions	['QUEUED'] = 0x0002,
101*19c3b8c2SApple OSS Distributions	['DISABLED'] = 0x0004,
102*19c3b8c2SApple OSS Distributions	['DROPPING'] = 0x0008,
103*19c3b8c2SApple OSS Distributions	['LOCKED'] = 0x0010,
104*19c3b8c2SApple OSS Distributions	['POSTING'] = 0x0020,
105*19c3b8c2SApple OSS Distributions	['STAYACTIVE'] = 0x0040,
106*19c3b8c2SApple OSS Distributions	['DEFERDELETE'] = 0x0080,
107*19c3b8c2SApple OSS Distributions	['MERGE_QOS'] = 0x0100,
108*19c3b8c2SApple OSS Distributions	['REQVANISH'] = 0x0200,
109*19c3b8c2SApple OSS Distributions	['VANISHED'] = 0x0400,
110*19c3b8c2SApple OSS Distributions	['SUPPRESSED'] = 0x0800,
111*19c3b8c2SApple OSS Distributions}
112*19c3b8c2SApple OSS Distributions
113*19c3b8c2SApple OSS Distributionskevent_flags_strings = {
114*19c3b8c2SApple OSS Distributions	['ADD'] = 0x0001,
115*19c3b8c2SApple OSS Distributions	['DELETE'] = 0x0002,
116*19c3b8c2SApple OSS Distributions	['ENABLE'] = 0x0004,
117*19c3b8c2SApple OSS Distributions	['DISABLE'] = 0x0008,
118*19c3b8c2SApple OSS Distributions	['ONESHOT'] = 0x0010,
119*19c3b8c2SApple OSS Distributions	['CLEAR'] = 0x0020,
120*19c3b8c2SApple OSS Distributions	['RECEIPT'] = 0x0040,
121*19c3b8c2SApple OSS Distributions	['DISPATCH'] = 0x0080,
122*19c3b8c2SApple OSS Distributions	['UDATA_SPECIFIC'] = 0x0100,
123*19c3b8c2SApple OSS Distributions	['VANISHED'] = 0x0200,
124*19c3b8c2SApple OSS Distributions	['FLAG0'] = 0x1000,
125*19c3b8c2SApple OSS Distributions	['FLAG1'] = 0x2000,
126*19c3b8c2SApple OSS Distributions	['EOF'] = 0x8000,
127*19c3b8c2SApple OSS Distributions	['ERROR'] = 0x4000,
128*19c3b8c2SApple OSS Distributions}
129*19c3b8c2SApple OSS Distributions
130*19c3b8c2SApple OSS Distributionsfunction kevent_filter_string(filt)
131*19c3b8c2SApple OSS Distributions	if filt == -1 then
132*19c3b8c2SApple OSS Distributions		return 'READ'
133*19c3b8c2SApple OSS Distributions	elseif filt == -2 then
134*19c3b8c2SApple OSS Distributions		return 'WRITE'
135*19c3b8c2SApple OSS Distributions	elseif filt == -3 then
136*19c3b8c2SApple OSS Distributions		return 'AIO'
137*19c3b8c2SApple OSS Distributions	elseif filt == -4 then
138*19c3b8c2SApple OSS Distributions		return 'VNODE'
139*19c3b8c2SApple OSS Distributions	elseif filt == -5 then
140*19c3b8c2SApple OSS Distributions		return 'PROC'
141*19c3b8c2SApple OSS Distributions	elseif filt == -6 then
142*19c3b8c2SApple OSS Distributions		return 'SIGNAL'
143*19c3b8c2SApple OSS Distributions	elseif filt == -7 then
144*19c3b8c2SApple OSS Distributions		return 'TIMER'
145*19c3b8c2SApple OSS Distributions	elseif filt == -8 then
146*19c3b8c2SApple OSS Distributions		return 'MACHPORT'
147*19c3b8c2SApple OSS Distributions	elseif filt == -9 then
148*19c3b8c2SApple OSS Distributions		return 'FS'
149*19c3b8c2SApple OSS Distributions	elseif filt == -10 then
150*19c3b8c2SApple OSS Distributions		return 'USER'
151*19c3b8c2SApple OSS Distributions	-- -11 unused
152*19c3b8c2SApple OSS Distributions	elseif filt == -12 then
153*19c3b8c2SApple OSS Distributions		return 'VM'
154*19c3b8c2SApple OSS Distributions	elseif filt == -13 then
155*19c3b8c2SApple OSS Distributions		return 'SOCK'
156*19c3b8c2SApple OSS Distributions	elseif filt == -14 then
157*19c3b8c2SApple OSS Distributions		return 'MEMORYSTATUS'
158*19c3b8c2SApple OSS Distributions	elseif filt == -15 then
159*19c3b8c2SApple OSS Distributions		return 'EXCEPT'
160*19c3b8c2SApple OSS Distributions	elseif filt == -16 then
161*19c3b8c2SApple OSS Distributions		return 'NW_CHANNEL'
162*19c3b8c2SApple OSS Distributions	elseif filt == -17 then
163*19c3b8c2SApple OSS Distributions		return 'WORKLOOP'
164*19c3b8c2SApple OSS Distributions
165*19c3b8c2SApple OSS Distributions	elseif filt == 17 then
166*19c3b8c2SApple OSS Distributions		return 'KQREAD'
167*19c3b8c2SApple OSS Distributions	elseif filt == 18 then
168*19c3b8c2SApple OSS Distributions		return 'PIPE_N'
169*19c3b8c2SApple OSS Distributions	elseif filt == 19 then
170*19c3b8c2SApple OSS Distributions		return 'PIPE_R'
171*19c3b8c2SApple OSS Distributions	elseif filt == 20 then
172*19c3b8c2SApple OSS Distributions		return 'PIPE_W'
173*19c3b8c2SApple OSS Distributions	elseif filt == 21 then
174*19c3b8c2SApple OSS Distributions		return 'PTSD'
175*19c3b8c2SApple OSS Distributions	elseif filt == 22 then
176*19c3b8c2SApple OSS Distributions		return 'SOREAD'
177*19c3b8c2SApple OSS Distributions	elseif filt == 23 then
178*19c3b8c2SApple OSS Distributions		return 'SOWRITE'
179*19c3b8c2SApple OSS Distributions	elseif filt == 24 then
180*19c3b8c2SApple OSS Distributions		return 'SCK'
181*19c3b8c2SApple OSS Distributions	elseif filt == 25 then
182*19c3b8c2SApple OSS Distributions		return 'SOEXCEPT'
183*19c3b8c2SApple OSS Distributions	elseif filt == 26 then
184*19c3b8c2SApple OSS Distributions		return 'SPEC'
185*19c3b8c2SApple OSS Distributions	elseif filt == 27 then
186*19c3b8c2SApple OSS Distributions		return 'BPFREAD'
187*19c3b8c2SApple OSS Distributions	elseif filt == 28 then
188*19c3b8c2SApple OSS Distributions		return 'NECP_FD'
189*19c3b8c2SApple OSS Distributions	elseif filt == 29 then
190*19c3b8c2SApple OSS Distributions		return 'SKYWALK_CHANNEL_W'
191*19c3b8c2SApple OSS Distributions	elseif filt == 30 then
192*19c3b8c2SApple OSS Distributions		return 'SKYWALK_CHANNEL_R'
193*19c3b8c2SApple OSS Distributions	elseif filt == 31 then
194*19c3b8c2SApple OSS Distributions		return 'SKYWALK_CHANNEL_E'
195*19c3b8c2SApple OSS Distributions	elseif filt == 32 then
196*19c3b8c2SApple OSS Distributions		return 'FSEVENT'
197*19c3b8c2SApple OSS Distributions	elseif filt == 33 then
198*19c3b8c2SApple OSS Distributions		return 'VN'
199*19c3b8c2SApple OSS Distributions	elseif filt == 34 then
200*19c3b8c2SApple OSS Distributions		return 'TTY'
201*19c3b8c2SApple OSS Distributions	elseif filt == 35 then
202*19c3b8c2SApple OSS Distributions		return 'PTMX'
203*19c3b8c2SApple OSS Distributions	elseif filt == 36 then
204*19c3b8c2SApple OSS Distributions		return 'DETACHED'
205*19c3b8c2SApple OSS Distributions	else
206*19c3b8c2SApple OSS Distributions		return string.format('[%d]', filt)
207*19c3b8c2SApple OSS Distributions	end
208*19c3b8c2SApple OSS Distributionsend
209*19c3b8c2SApple OSS Distributions
210*19c3b8c2SApple OSS Distributions-- kqueue lifecycle
211*19c3b8c2SApple OSS Distributions
212*19c3b8c2SApple OSS Distributionsfunction processing_begin(workq)
213*19c3b8c2SApple OSS Distributions	return function(buf)
214*19c3b8c2SApple OSS Distributions		local prefix = event_prefix_string(buf, workq)
215*19c3b8c2SApple OSS Distributions		if trace.debugid_is_start(buf.debugid) then
216*19c3b8c2SApple OSS Distributions			local qos
217*19c3b8c2SApple OSS Distributions			if workq then
218*19c3b8c2SApple OSS Distributions				qos = buf.arg2
219*19c3b8c2SApple OSS Distributions			else
220*19c3b8c2SApple OSS Distributions				qos = buf.arg3
221*19c3b8c2SApple OSS Distributions			end
222*19c3b8c2SApple OSS Distributions			printf("%s QoS = %s\n", prefix, qos_string(qos))
223*19c3b8c2SApple OSS Distributions		else
224*19c3b8c2SApple OSS Distributions			printf("%s request thread = 0x%x, kqrequest state = %s\n", prefix,
225*19c3b8c2SApple OSS Distributions					buf.arg1, state_string(kqrequest_state_strings, buf.arg2))
226*19c3b8c2SApple OSS Distributions		end
227*19c3b8c2SApple OSS Distributions	end
228*19c3b8c2SApple OSS Distributionsend
229*19c3b8c2SApple OSS Distributions
230*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kq_processing_begin", processing_begin(false))
231*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kqwq_processing_begin", processing_begin(true))
232*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kqwl_processing_begin", processing_begin(false))
233*19c3b8c2SApple OSS Distributions
234*19c3b8c2SApple OSS Distributionsfunction processing_end(workq)
235*19c3b8c2SApple OSS Distributions	return function(buf)
236*19c3b8c2SApple OSS Distributions		local qos
237*19c3b8c2SApple OSS Distributions		if workq then
238*19c3b8c2SApple OSS Distributions			qos = buf.arg2
239*19c3b8c2SApple OSS Distributions		else
240*19c3b8c2SApple OSS Distributions			qos = buf.arg3
241*19c3b8c2SApple OSS Distributions		end
242*19c3b8c2SApple OSS Distributions		printf("%s QoS = %s\n", event_prefix_string(buf, workq), qos_string(qos))
243*19c3b8c2SApple OSS Distributions	end
244*19c3b8c2SApple OSS Distributionsend
245*19c3b8c2SApple OSS Distributions
246*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kq_processing_end", processing_end(false))
247*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kqwq_processing_end", processing_end(true))
248*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kqwl_processing_end", processing_end(false))
249*19c3b8c2SApple OSS Distributions
250*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kqwq_bind", function(buf)
251*19c3b8c2SApple OSS Distributions	printf("%s thread = 0x%x, QoS = %s, kqrequest state = %s\n",
252*19c3b8c2SApple OSS Distributions			event_prefix_string(buf, true), buf.arg1, qos_string(buf.arg3),
253*19c3b8c2SApple OSS Distributions			state_string(kqrequest_state_strings, buf.arg4))
254*19c3b8c2SApple OSS Distributionsend)
255*19c3b8c2SApple OSS Distributions
256*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kqwq_unbind", function(buf)
257*19c3b8c2SApple OSS Distributions	printf("%s thread = 0x%x, QoS = %s\n", event_prefix_string(buf, true),
258*19c3b8c2SApple OSS Distributions			buf.arg1, qos_string(buf.arg3))
259*19c3b8c2SApple OSS Distributionsend)
260*19c3b8c2SApple OSS Distributions
261*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kqwl_bind", function(buf)
262*19c3b8c2SApple OSS Distributions	qos = buf.arg3 & 0xff
263*19c3b8c2SApple OSS Distributions	duplicate = buf.arg3 & (1 << 8)
264*19c3b8c2SApple OSS Distributions	kqr_override_qos_delta = buf.arg4 >> 8
265*19c3b8c2SApple OSS Distributions	kqr_state = buf.arg4 & 0xff
266*19c3b8c2SApple OSS Distributions
267*19c3b8c2SApple OSS Distributions	printf("%s thread = 0x%x, QoS = %s, override QoS delta = %d, kqrequest state = %s%s\n",
268*19c3b8c2SApple OSS Distributions			event_prefix_string(buf, false), buf.arg2, qos_string(qos),
269*19c3b8c2SApple OSS Distributions			kqr_override_qos_delta,
270*19c3b8c2SApple OSS Distributions			state_string(kqrequest_state_strings, kqr_state),
271*19c3b8c2SApple OSS Distributions			duplicate and ", duplicate" or "")
272*19c3b8c2SApple OSS Distributionsend)
273*19c3b8c2SApple OSS Distributions
274*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kqwl_unbind", function(buf)
275*19c3b8c2SApple OSS Distributions	flags = buf.arg3
276*19c3b8c2SApple OSS Distributions	qos = buf.arg4
277*19c3b8c2SApple OSS Distributions
278*19c3b8c2SApple OSS Distributions	printf("%s thread = 0x%x, QoS = %s, flags = 0x%x\n", event_prefix_string(buf, false),
279*19c3b8c2SApple OSS Distributions			buf.arg2, qos_string(qos), flags)
280*19c3b8c2SApple OSS Distributionsend)
281*19c3b8c2SApple OSS Distributions
282*19c3b8c2SApple OSS Distributionsfunction thread_request(workq)
283*19c3b8c2SApple OSS Distributions	return function(buf)
284*19c3b8c2SApple OSS Distributions		printf("%s QoS = %s, kqrequest state = %s, override QoS delta = %d\n",
285*19c3b8c2SApple OSS Distributions				event_prefix_string(buf, workq), qos_string(buf.arg2),
286*19c3b8c2SApple OSS Distributions				state_string(kqrequest_state_strings, buf.arg3), buf.arg3 >> 8)
287*19c3b8c2SApple OSS Distributions	end
288*19c3b8c2SApple OSS Distributionsend
289*19c3b8c2SApple OSS Distributions
290*19c3b8c2SApple OSS Distributionsfunction thread_adjust(buf)
291*19c3b8c2SApple OSS Distributions	tid = buf.arg2
292*19c3b8c2SApple OSS Distributions	kqr_qos = buf.arg3 >> 8
293*19c3b8c2SApple OSS Distributions	new_qos = buf.arg3 & 0xff
294*19c3b8c2SApple OSS Distributions	kqr_qos_override = buf.arg4 >> 8
295*19c3b8c2SApple OSS Distributions	kqr_state = buf.arg4 & 0xff
296*19c3b8c2SApple OSS Distributions
297*19c3b8c2SApple OSS Distributions	printf("%s thread = 0x%x, old/new QoS = %s/%s, old/new override QoS delta = %d/%d, kqrequest state = %s\n",
298*19c3b8c2SApple OSS Distributions			event_prefix_string(buf, false),
299*19c3b8c2SApple OSS Distributions			tid,
300*19c3b8c2SApple OSS Distributions			qos_string(kqr_qos),
301*19c3b8c2SApple OSS Distributions			qos_string(new_qos),
302*19c3b8c2SApple OSS Distributions			kqr_qos_override,
303*19c3b8c2SApple OSS Distributions			new_qos - kqr_qos,
304*19c3b8c2SApple OSS Distributions			state_string(kqrequest_state_strings, kqr_state))
305*19c3b8c2SApple OSS Distributionsend
306*19c3b8c2SApple OSS Distributions
307*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kqwq_thread_request", thread_request(true))
308*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kqwl_thread_request", thread_request(false))
309*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kqwl_thread_adjust", thread_adjust)
310*19c3b8c2SApple OSS Distributions
311*19c3b8c2SApple OSS Distributionsfunction kevent_register(workq)
312*19c3b8c2SApple OSS Distributions	return function(buf)
313*19c3b8c2SApple OSS Distributions		printf("%s kevent udata = 0x%x, kevent filter = %s, kevent flags = %s\n",
314*19c3b8c2SApple OSS Distributions				event_prefix_string(buf, workq), buf.arg2,
315*19c3b8c2SApple OSS Distributions				kevent_filter_string(buf.arg4),
316*19c3b8c2SApple OSS Distributions				state_string(kevent_flags_strings, buf.arg3))
317*19c3b8c2SApple OSS Distributions	end
318*19c3b8c2SApple OSS Distributionsend
319*19c3b8c2SApple OSS Distributions
320*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kq_register", kevent_register(false))
321*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kqwq_register", kevent_register(true))
322*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kqwl_register", kevent_register(false))
323*19c3b8c2SApple OSS Distributions
324*19c3b8c2SApple OSS Distributionsfunction kevent_process(workq)
325*19c3b8c2SApple OSS Distributions	return function(buf)
326*19c3b8c2SApple OSS Distributions		printf("%s kevent ident = 0x%x, udata = 0x%x, kevent filter = %s, knote status = %s\n",
327*19c3b8c2SApple OSS Distributions				event_prefix_string(buf, workq), buf.arg3 >> 32, buf.arg2,
328*19c3b8c2SApple OSS Distributions				kevent_filter_string(buf.arg4),
329*19c3b8c2SApple OSS Distributions				state_string(knote_state_strings, buf.arg3 & 0xffffffff))
330*19c3b8c2SApple OSS Distributions	end
331*19c3b8c2SApple OSS Distributionsend
332*19c3b8c2SApple OSS Distributions
333*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kq_process", kevent_process(false))
334*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kqwq_process", kevent_process(true))
335*19c3b8c2SApple OSS Distributionstrace_eventname("KEVENT_kqwl_process", kevent_process(false))
336