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. -- Alexander Kabaev _______________________________________________ [email protected] mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "[EMAIL PROTECTED]"

