[prev in list] [next in list] [prev in thread] [next in thread] 

List:       freebsd-hackers
Subject:    Re: mutual exclusion in vkbd
From:       Maksim Yevmenkin <maksim.yevmenkin () savvis ! net>
Date:       2005-05-31 20:58:59
Message-ID: 429CD013.7070809 () savvis ! net
[Download RAW message or body]

Alexander Kabaev wrote:
> On Tue, May 31, 2005 at 09:41:18AM -0700, Maksim Yevmenkin wrote:
> 
>>Norbert,
>>
>>
>>>I am currently trying to backport vkbd to FreeBSD 4.
>>
>>ok
>>
>>
>>>Maksim Yevmenkin uses mtx_lock()/mtx_unlock() for
>>>protecting access to data structures under FreeBSD 5/6
>>>between the device functions and the kernel thread.
>>>
>>>How should I best do this under FreeBSD 4?
>>>
>>>Would something like splhigh() work in that context?
>>>Or should I use lockmgr with LK_EXCLUSIVE/LK_RELEASE?
>>>Is there any (pseudo)process context inside a kernel task?
>>
>>spltty() is what you probably need to use. you could just adjust the 
>>following defines like
>>
>>#define VKBD_LOCK_DECL		int
>>#define VKBD_LOCK_INIT(s)	/* noop */
>>#define VKBD_LOCK_DESTROY(s)	/* noop */	
>>#define VKBD_LOCK(s)		(s)->ks_lock = spltty()
>>#define VKBD_UNLOCK(s)		splx((s)->ks_lock)
>>#define VKBD_LOCK_ASSERT(s, w)
>>#define VKBD_SLEEP(s, f, d, t) \
>>	tsleep(&(s)->f, PCATCH | (PZERO + 1), d, t)
> 
> The code above will probably crash the kernel in many spectacular and
> unpredictable ways. You will need to save interrupt flags locally to each
> VKBD_LOCK caller or they will end up restoring each other's flags.

yes, you are correct. my bad :( thanks for catching this

max
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic