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 "[EMAIL PROTECTED]"