Subject: Re: CVS commit: src/sys/kern
To: Andrew Doran <ad@netbsd.org>
From: Andrew Doran <ad@netbsd.org>
List: source-changes
Date: 03/13/2007 04:06:08
>>
>> On Mar 12, 2007, at 5:35 PM, Andrew Doran wrote:
>>
>>> Module Name:    src
>>> Committed By:    ad
>>> Date:        Tue Mar 13 00:35:44 UTC 2007
>>>
>>> Modified Files:
>>>    src/sys/kern: kern_fork.c
>>>
>>> Log Message:
>>> Sync with kern_proc.c: make p2->p_rasmutex a spin mutex at IPL_SCHED.
>>
>> Why does this have to be at IPL_SCHED?  Oh, because it's accessed in
>> the guts of cpu_switch()?
>
> Yup. Otherwise, it's not safe.

To elaborate, it can't sleep since it's taken from cpu_switch(), so it
needs to be a spin lock. From kern_ras.c it needs to be taken with the
kernel_lock held, and in cpu_switch() it is taken without the kernel_lock
held. So we need to block any interrupts that could take the kernel_lock
otherwise there is the potential for deadlock. I have the beginnings of a
lock-free version of ras_lookup() somewhere but have not had the time to
finish it or test it further.

Andrew