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