Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 19 May 2008 09:15:00 -0400
From:      John Baldwin <jhb@freebsd.org>
To:        freebsd-drivers@freebsd.org
Cc:        n4ti1us <gaspar_i@yahoo.com>
Subject:   Re: Spin locks and software IRQs.
Message-ID:  <200805190915.00902.jhb@freebsd.org>
In-Reply-To: <17277776.post@talk.nabble.com>
References:  <17277776.post@talk.nabble.com>

next in thread | previous in thread | raw e-mail | index | archive | help
On Friday 16 May 2008 11:37:46 am n4ti1us wrote:
> Hi All,
>
> I was looking at the linux kernel, and in the implementation of spinlocks,
> one can use different functions. One of them is spin_lock_bh(). What it
> does is it creates a spin lock and disables the software irqs.
>
> In FreeBSD on the other hand, the implementation of spinlocks is done by
> mtx_lock_spin (which is actually a macro that calls mtx_lock_spin_flags())
> but the problem is that is disables all the irq vector (at the bottom of
> the stack it executes an "cli"). Is there any way one can implement
> spinlocks that only disable the bottom half (sof irq)?
>
> Alternatively, what would be the best way to manualy disable the soft irqs?
>
> And all this makes me think... Why has nobody implemented a "_bh" version
> so far? Is this an architectural decision, or is it just me being blind?

Generally one should use a regular mutex to protect data.  Spin locks in 
FreeBSD are only used by scheduler internals or for a driver that has to 
interact with an INTR_FAST handler (or filter in 7.x+).

-- 
John Baldwin



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200805190915.00902.jhb>