1 The following is an example of the putnexts.d script.
4 When investigating the operation of kernel streams, it can be extreamly
5 useful to trace who (which stack trace) is calling putnext to who (the
6 kernel modele). This script does that,
9 dtrace: script './putnexts.d' matched 1 probe
20 ip`ip_fanout_proto+0x4d2
21 ip`ip_proto_input+0x616
22 ip`ip_fanout_proto_again+0x160
23 ip`ip_proto_input+0x530
27 ip`ip_wput_ipsec_out+0x60a
28 ip`ipsec_out_process+0x322
36 ip`tcp_send_data+0x68c
38 ip`tcp_timer_handler+0x1d
44 gld`gld_recv_tagged+0xed
48 genunix`putnextctl1+0x52
49 ldterm`ldterm_dosig+0x7b
50 ldterm`ldtermrput+0x6fe
55 ldterm`ldterm_ioctl_reply+0x93
56 ldterm`ldtermrput+0x186
57 genunix`qdrain_syncq+0x68
58 genunix`drain_syncq+0x1a4
59 genunix`putnext_tail+0x88
62 ldterm`ldtermrput+0x12a
65 genunix`qdrain_syncq+0x68
66 genunix`drain_syncq+0x1a4
69 ldterm`ldterm_dosig+0x16f
70 ldterm`ldtermrput+0x6fe
76 genunix`putnextctl1+0x52
77 ldterm`ldterm_dosig+0x124
78 ldterm`ldtermrput+0x6fe
83 ldterm`ldterm_do_ioctl+0xd8b
84 ldterm`ldtermwmsg+0x41
85 ldterm`ldtermwput+0x8e
87 ttcompat`ttcompat_do_ioctl+0x425
90 genunix`putnextctl1+0x52
91 ldterm`ldterm_dosig+0xe3
92 ldterm`ldtermrput+0x6fe
101 ldterm`ldterm_do_ioctl+0xd8b
105 genunix`qdrain_syncq+0x68
106 genunix`drain_syncq+0x1a4
107 genunix`putnext_tail+0x88
112 genunix`qdrain_syncq+0x68
113 genunix`drain_syncq+0x1a4
114 genunix`putnext_tail+0x88
120 genunix`qdrain_syncq+0x68
121 genunix`drain_syncq+0x1a4
122 genunix`putnext_tail+0x88
126 genunix`runservice+0x2a
127 genunix`queue_service+0x30
128 genunix`stream_service+0x69
129 genunix`taskq_d_thread+0x8a
135 genunix`qdrain_syncq+0x68
136 genunix`drain_syncq+0x1a4
143 genunix`qdrain_syncq+0x68
147 genunix`strrput_nondata+0x22d
148 genunix`strrput+0x256
150 ttcompat`ttcompatrput+0x1d
153 genunix`strdoioctl+0x30d
154 genunix`strioctl+0x6ae
155 specfs`spec_ioctl+0x48
156 genunix`fop_ioctl+0x1e
160 ip`tcp_rput_data+0x2221
162 ip`squeue_enter+0x1bf
163 ip`ip_tcp_input+0x9f8
167 ttcompat`ttcompat_ioctl_ack+0x398
168 ttcompat`ttcompatrput+0x39
169 genunix`qdrain_syncq+0x68
170 genunix`drain_syncq+0x1a4
171 genunix`putnext_tail+0x88
174 ttcompat`ttcompatrput+0x1d
176 ldterm`ldtermrput+0x12a
181 ttcompat`ttcompatrput+0x1d
183 genunix`putnextctl1+0x52
184 ldterm`ldterm_dosig+0x124
185 ldterm`ldtermrput+0x6fe
188 ttcompat`ttcompatwput+0x32
189 genunix`qdrain_syncq+0x68
190 genunix`drain_syncq+0x1a4
191 genunix`putnext_tail+0x88
195 ttcompat`ttcompat_do_ioctl+0x425
196 ttcompat`ttcompatwput+0x152
198 genunix`strdoioctl+0x30d
199 genunix`strioctl+0x6ae
202 ttcompat`ttcompatrput+0x1d
204 genunix`putnextctl1+0x52
205 ldterm`ldterm_dosig+0xe3
206 ldterm`ldtermrput+0x6fe
209 tun`tun_rdata_v4+0x58c
213 ip`ip_fanout_proto+0x4d2
216 tun`tun_wputnext_v4+0x1f8
217 tun`tun_wproc_mdata+0x71
225 ip`ip_udp_input+0x4e4
231 conskbd`conskbd_mux_upstream_msg+0x24f
232 conskbd`conskbd_lqs_ack_complete+0x65
233 conskbd`conskbdlrput+0x9d
237 conskbd`conskbdlwserv+0x2d
238 genunix`runservice+0x2a
239 genunix`queue_service+0x30
240 genunix`stream_service+0x69
241 genunix`taskq_d_thread+0x8a
246 kb8042`kb8042_ioctlmsg+0x281
247 kb8042`kb8042_wsrv+0xcb
248 genunix`runservice+0x2a
251 genunix`strdoioctl+0x30d
252 genunix`strioctl+0x587
253 specfs`spec_ioctl+0x48
254 genunix`fop_ioctl+0x1e
258 consms`consmslrput+0x15a
260 vuid3ps2`vuid3ps2_putnext+0x94
261 vuid3ps2`sendButtonEvent+0x58
262 vuid3ps2`vuid3ps2+0x8ee
265 vuid3ps2`vuid3ps2_putnext+0x94
266 vuid3ps2`sendButtonEvent+0x58
267 vuid3ps2`vuid3ps2+0x8ee
268 vuid3ps2`vuidmice_rsrv+0x69
269 genunix`runservice+0x2a
272 ip`tcp_send_data+0x55d
273 ip`tcp_ack_timer+0xb0
274 ip`tcp_timer_handler+0x1d
276 ip`squeue_worker+0xeb
279 ip`tcp_send_data+0x55d
280 ip`tcp_rput_data+0x259e
281 ip`squeue_enter+0x1bf
282 ip`ip_tcp_input+0xcfb
286 ip`ip_fanout_udp_conn+0x14b
287 ip`ip_fanout_udp+0x373
288 ip`ip_wput_local+0x16f
289 ip`ip_wput_ire+0x1436
294 genunix`strputmsg+0x1d5
297 unix`sys_sysenter+0xdc
303 genunix`strputmsg+0x1d5
311 ip`ip_fanout_udp_conn+0x14b
316 ip`ip_fanout_udp_conn+0x14b
317 ip`ip_fanout_udp+0x373
318 ip`ip_wput_local+0x16f
329 bufmod`sbclosechunk+0x2e
331 genunix`qdrain_syncq+0x68
332 genunix`drain_syncq+0x1a4
335 kbtrans`kbtrans_queueevent+0x5c
336 kbtrans`kbtrans_keyreleased+0x3d
337 kbtrans`kbtrans_untrans_keyreleased_raw+0x10
338 kbtrans`kbtrans_processkey+0x20
339 kbtrans`kbtrans_streams_key+0x95
342 kbtrans`kbtrans_queueevent+0x5c
343 kbtrans`kbtrans_keyreleased+0x3d
344 kbtrans`kbtrans_untrans_keyreleased_raw+0x10
345 kbtrans`kbtrans_processkey+0x20
346 kbtrans`kbtrans_streams_key+0x95
349 ldterm`ldterm_msg_upstream+0x2c
350 ldterm`vmin_satisfied+0x5e
351 ldterm`ldterm_dononcanon+0x230
352 ldterm`ldtermrmsg+0x252
353 ldterm`ldtermrput+0x7e9
356 ttcompat`ttcompatrput+0x1d
358 ldterm`ldterm_msg_upstream+0x2c
359 ldterm`vmin_satisfied+0x5e
360 ldterm`ldterm_dononcanon+0x230
366 genunix`strwrite+0x151
367 specfs`spec_write+0x4e
373 genunix`runservice+0x2a
374 genunix`queue_service+0x30
378 genunix`runservice+0x2a
379 genunix`queue_service+0x30
380 genunix`stream_runservice+0x96
384 kbtrans`kbtrans_queueevent+0x5c
385 kbtrans`kbtrans_queuepress+0x5f
386 kbtrans`kbtrans_untrans_keypressed_raw+0x36
387 kbtrans`kbtrans_processkey+0x30
388 kbtrans`kbtrans_streams_key+0x95
391 kbtrans`kbtrans_queueevent+0x5c
392 kbtrans`kbtrans_queuepress+0x5f
393 kbtrans`kbtrans_untrans_keypressed_raw+0x36
394 kbtrans`kbtrans_processkey+0x30
395 kbtrans`kbtrans_streams_key+0x95
398 ip`tcp_send_data+0x55d
400 ip`squeue_enter+0x1bf
405 ldterm`ldtermwmsg+0x100
406 ldterm`ldtermwput+0x8e
408 ttcompat`ttcompatwput+0x32
415 ldterm`ldtermwmsg+0x100
416 ldterm`ldtermwput+0x8e
420 genunix`runservice+0x2a
421 genunix`queue_service+0x30
422 genunix`stream_runservice+0x96
426 ttcompat`ttcompatwput+0x32
429 genunix`strwrite+0x151
430 specfs`spec_write+0x4e
433 ip`tcp_rput_data+0x2221
434 ip`squeue_enter+0x1bf
435 ip`ip_tcp_input+0xcfb
440 gld`gld_recv_tagged+0xed
442 rtls`rtls_receive+0x18f
443 rtls`rtls_gld_intr+0x133
447 consms`consmslrput+0x15a
449 vuid3ps2`vuid3ps2_putnext+0x94
450 vuid3ps2`vuid3ps2+0x82b
451 vuid3ps2`vuidmice_rsrv+0x69
455 genunix`strwrite+0x151
456 specfs`spec_write+0x4e
457 genunix`fop_write+0x1b
461 vuid3ps2`vuid3ps2_putnext+0x94
462 vuid3ps2`vuid3ps2+0x82b
463 vuid3ps2`vuidmice_rsrv+0x69
464 genunix`runservice+0x2a
465 genunix`queue_service+0x30
468 consms`consmslrput+0x15a
470 vuid3ps2`vuid3ps2_putnext+0x94
471 vuid3ps2`vuid3ps2+0x809
472 vuid3ps2`vuidmice_rsrv+0x69
475 vuid3ps2`vuid3ps2_putnext+0x94
476 vuid3ps2`vuid3ps2+0x809
477 vuid3ps2`vuidmice_rsrv+0x69
478 genunix`runservice+0x2a
479 genunix`queue_service+0x30
483 genunix`strwrite+0x151
484 sockfs`socktpi_write+0xcb
485 genunix`fop_write+0x1b
491 gld`gld_recv_tagged+0x15f
493 rtls`rtls_receive+0x18f
497 genunix`strwrite+0x151
498 sockfs`socktpi_write+0xcb
499 genunix`fop_write+0x1b
503 tl`tl_wput_data_ser+0x5e
504 genunix`serializer_exec+0x1d
505 genunix`serializer_enter+0x81
506 tl`tl_serializer_enter+0x40
510 mouse8042`mouse8042_intr+0x68
511 i8042`i8042_intr+0xa6
512 unix`intr_thread+0x107
515 Highlights of the above output include,
517 - gld calling putnext to rtls (my laptop network device driver)
518 - ip receive path calling putnext to tcp
519 - tcp_send_data() calling putnext to ip