Subject: Re: Heads up
To: Iain Hibbert <email@example.com>
From: Andrew Doran <firstname.lastname@example.org>
Date: 12/03/2007 18:21:59
On Mon, Dec 03, 2007 at 03:56:56PM +0000, Iain Hibbert wrote:
> On Mon, 3 Dec 2007, Andrew Doran wrote:
> > I just made a jumbo commit with changes to interrupt handling. While it has
> > seen testing on numerous ports, there are likely to be some problems.
> can you make a quick summary of these changes?
A description is here, although I didn't do the rename (vm -> low, sched ->
mid) as that seemed a bit pointless:
- It's now safe to use spinlocks initialized for any of the hardware ipls
(IPL_VM, IPL_SCHED, IPL_HIGH). Previously this was difficult to get right
and so prone to deadlock because of interrupts and ordering constraints
against the global kernel_lock. Those constraints are by and large gone
now. So basically, you can spinlock against a driver's interrupt handler
and don't have to worry about nasty lock ordering issues against
kernel_lock any more: you just need to worry about what your local locking
- Soft interrupts are now threaded, so it's possible to take adaptive mutexes
and reader/writer locks from a soft interrupt (for example, in a callout).
These have no ordering constraint against kernel_lock and so are "deadlock
free" in that respect.
To sum up, the newlock2 changes made it possible to use lightweight locks to
synchronize with other threads. This change makes it easy to use the same
locks to synchronize with other threads _and_ interrupt handlers.