Re: Questions of lock usage in NetBSD kernel code

Jia-Ju Bai <[email protected]> Mon, 26 Jun 2017 10:22:26 +0800
Newsgroups gmane.os.netbsd.devel.kernel,gmane.os.netbsd.devel.general,gmane.os.netbsd.devel.smp
Message-ID <[email protected]>
On 06/26/2017 08:20 AM, Kamil Rytarowski wrote:
> On 25.06.2017 20:34, Taylor R Campbell wrote:
>> Sleeping with a spin lock held is absolutely prohibited and does not
>> work.
>>
> An example of this abuse is described here:
>
> https://mail-index.netbsd.org/current-users/2014/07/19/msg025295.html
>
> Jia-Ju, can you detect bugs like this one?
>
Hi,

In fact, I have written a static tool to detect sleep-in-interrupt and 
sleep-in-spin-mutex (sleep between "mutex_spin_enter" and 
"mutex_spin_exit") bugs in NetBSD kernel code. And I have found some 
bugs, and examples are here:

http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=52330
http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=52331
http://gnats.netbsd.org/cgi-bin/query-pr-single.pl?number=52333

Meanwhile, in your link 
(https://mail-index.netbsd.org/current-users/2014/07/19/msg025295.html), 
"KERNEL_LOCK" and "KERNEL_UNLOCK" can be regarded as "mutex_spin_enter" 
and "mutex_spin_exit"?
I also find that the code in your link has function pointer, but my 
static tool can not handle function pointer in current implementation, 
and I will add related support for it in next implementation.

Thanks,
Jia-Ju Bai