Re: How should a driver shutdown a taskqueue on detach?

From: John Baldwin <jhb_at_freebsd.org>
Date: Tue, 04 Aug 2015 14:08:02 -0700
On Wednesday, July 01, 2015 04:25:10 PM John-Mark Gurney wrote:
> Ryan Stone wrote this message on Wed, Jul 01, 2015 at 15:44 -0400:
> > I'm trying to figure out how a driver is supposed to shut down its
> > interrupt-handling taskqueue when it detaches.  taskqueue(9) recommends
> > disabling interrupts, draining each task and then freeing the taskqueue.
> > The problem that I have is the interrupt-handling tasks will sometimes
> > re-enable interrupts on the device.  Is there a better way than using some
> > kind of flag internally in the driver to note that a detach is in progress
> > that the interrupt handlers will have to check before enabling interrupts?
> 
> Why not disabled interrupts, unregister interrupt handler, and then
> make sure interrupts are disabled (only needed to prevent an interrupt
> storm)?  Once you have unregistered the interrupt handler, it can't run
> again...  Then you're free to drain the task queue safely...

Yes.  Do the bus_teardown_intr() first, then drain any pending tasks.

-- 
John Baldwin
Received on Tue Aug 04 2015 - 22:04:24 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:40:59 UTC