MTX_DEF versus MTX_SPIN

Kostik Belousov kostikbel at gmail.com
Wed Nov 3 17:11:05 UTC 2010


On Wed, Nov 03, 2010 at 10:04:13AM -0700, mdf at freebsd.org wrote:
> On Wed, Nov 3, 2010 at 9:42 AM, Andriy Gapon <avg at icyb.net.ua> wrote:
> > on 03/11/2010 18:27 mdf at FreeBSD.org said the following:
> >> It's not clear to me from the man pages (perhaps I didn't look at the
> >> right one?) in which environments I need a spinlock.  For example, I
> >> wouldn't think it's safe to use a MTX_DEF in a hard interrupt handler
> >> (i.e one that was registered with BUS_SETUP_INTR), but I see some code
> >> lying around here that does it and nothing I'm aware of has broken.
> >
> > Such a handler runs in an interrupt thread.
> > The "harder" interrupt handler is called interrupt filter in FreeBSD terminology.
> >  I think that it was formerly known as fast interrupt.
> 
> So a MTX_DEF is okay in that environment?
> 
> What would "best practices" be considered for what code should be run
> in the interrupt handler versus a soft interrupt?  In this case the
> kinds of things we have to do at some level of interrupt are:
> 
>  - handle a heartbeat interrupt from firmware a few times a second
Doing this in the filter would only assert that interrupts are not
disabled. If you perform the heartbeat notification from the interrupt
thread instead, you have some assurance that scheduling works.

>  - get a DMA completion interrupt (completely handling this requires
> calling biodone on all the associated bios)
Calling into geom and possibly fs/VFS level should be done from the
interrupt thread. I thought that g_up thread is used to handle
the finish of i/o ?

>  - receive an ECC interrupt (this requires reading registers off the
> card for details)
> 
> At the moment we're on stable/7, but we will be migrating the code
> base to something more recent in another year or so, if that affects
> the answer.
> 
> Is there any documentation on best practices for writing a FreeBSD driver?
Not that I am aware of. You can read locking(9) in HEAD to get the answer
on your question about spin mutexes.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 196 bytes
Desc: not available
Url : http://lists.freebsd.org/pipermail/freebsd-current/attachments/20101103/49644b84/attachment.pgp


More information about the freebsd-current mailing list