MIPS で実行している NetBSD 5 カーネルのクラッシュに遭遇しました。パニック ストリングからは、カーネル スレッドにスタックしていて、そこから抜け出すことができなかったようです。
ミニコアからのスタック トレース (以下を参照) 内の関数は、無関係な関数です。コードによると、2 つの関数呼び出しのいずれも呼び出し元と呼び出し先の関係はありません。私が理解しているように、genfs_getpages() は、要求が満たされるまでスリープ/ブロックできるページ フォールト処理ルーチンです。このスタック トレースを理解するのに役立つアイデアは大歓迎です。
最初の割り込みがまだ完了していないときに、2 つの異なる種類の割り込み (下半分) がカーネル スレッドでスケジュールされると考えるのは、少しばかげているように思えます。
panic string is :No context switch for too long
sys/netmy/if_lip.c:2627: 8038f13c <check_my_vlt_mrtmsync_pkt+0x34>:
sys/net/route.c:3552: 802f7e38 <mySetPeerRouting>:
sys/kern/kern_lwp.c:1467: 80263b60 <lwp_initspecific>:
sys/uvm_mips/uvm_amap.c:183: 80224190 <amap_alloc+0x8>:
sys/net/route.c:2156: 802fafbc <my_rtalloc1_xten+0x13c>:
sys/miscfs/genfs/genfs_io.c:313: 802e5860 <genfs_getpages+0x2a8>:
sys/net/if.c:3685: 802eed08 <my_gen_ctl_request+0x588>:
sys/net/if.c:1690: 802efcfc <if_slowtimo+0x84>:
sys/miscfs/genfs/genfs_io.c:200: 802e5700 <genfs_getpages+0x148>:
sys/miscfs/genfs/genfs_vnops.c:416: 802e67fc <filt_genfsvnode+0x4>:
sys/net/if_ethersubr.c:585: 802f37a0 <ether_output+0xa68>:
sys/dev/clockctl.c:105: 80241bc0 <clockctlioctl+0xc8>:
sys/uvm_mips/uvm_object.c:145: 80234c58 <uobj_unwirepages+0x18>:
sys/net/if.c:1915: 802f00d0 <ifioctl_common+0x2d0>:
sys/miscfs/genfs/genfs_io.c:76: 802e5a0c <genfs_getpages+0x454>:
------------KERNEL PROBABLY LOOPING AROUND HERE--------------