Date: Tue, 31 May 2005 13:58:59 -0700 From: Maksim Yevmenkin <maksim.yevmenkin@savvis.net> To: Alexander Kabaev <kan@freebsd.org> Cc: Norbert Koch <NKoch@demig.de>, freebsd-hackers@freebsd.org Subject: Re: mutual exclusion in vkbd Message-ID: <429CD013.7070809@savvis.net> In-Reply-To: <20050531201908.GA77068@freefall.freebsd.org> References: <000001c565f6$d46b7720$4801a8c0@ws-ew-3.W2KDEMIG> <429C93AE.8060509@savvis.net> <20050531201908.GA77068@freefall.freebsd.org>
next in thread | previous in thread | raw e-mail | index | archive | help
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?429CD013.7070809>