Hi, I thought I need more experience of pserialize (and lock primitives) to tackle ifnet work. So I suspended the work and now I am trying another easier task, bpf.
http://www.netbsd.org/~ozaki-r/mpsafe-bpf.diff I add a spin mutex to both struct bpf_d and bpf_if to protect them. And also a pair of pserialize and mutex is added to protect bpf_iflist and its items (bpf_if). There remains two critical sections where may block/sleep (See "XXX may block" comment). IIUC, I have to get rid of them somehow, right? BTW, I worry about there is no easy way to know if a function in a critical section blocks/sleeps or not. So I wrote a patch to detect that: http://www.netbsd.org/~ozaki-r/debug-pserialize.diff Is it meaningful? Thanks, ozaki-r
