mutual exclusion in vkbd

Maksim Yevmenkin maksim.yevmenkin at savvis.net
Tue May 31 09:41:45 PDT 2005


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)

and you should be done. its not really required to store interrupt mask 
in softc structure, but this way its less changes to the code.

thanks,
max


More information about the freebsd-hackers mailing list