linux/drivers/dma/ioat
Dan Williams da87ca4d4c ioat: fix tasklet tear down
Since commit 7787380336 "net_dma: mark broken" we no longer pin dma
engines active for the network-receive-offload use case.  As a result
the ->free_chan_resources() that occurs after the driver self test no
longer has a NET_DMA induced ->alloc_chan_resources() to back it up.  A
late firing irq can lead to ksoftirqd spinning indefinitely due to the
tasklet_disable() performed by ->free_chan_resources().  Only
->alloc_chan_resources() can clear this condition in affected kernels.

This problem has been present since commit 3e037454bc "I/OAT: Add
support for MSI and MSI-X" in 2.6.24, but is now exposed. Given the
NET_DMA use case is deprecated we can revisit moving the driver to use
threaded irqs.  For now, just tear down the irq and tasklet properly by:

1/ Disable the irq from triggering the tasklet

2/ Disable the irq from re-arming

3/ Flush inflight interrupts

4/ Flush the timer

5/ Flush inflight tasklets

References:
https://lkml.org/lkml/2014/1/27/282
https://lkml.org/lkml/2014/2/19/672

Cc: Ingo Molnar <mingo@elte.hu>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: <stable@vger.kernel.org>
Reported-by: Mike Galbraith <bitbucket@online.de>
Reported-by: Stanislav Fomichev <stfomichev@yandex-team.ru>
Tested-by: Mike Galbraith <bitbucket@online.de>
Tested-by: Stanislav Fomichev <stfomichev@yandex-team.ru>
Reviewed-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
2014-02-25 09:44:20 -08:00
..
Makefile drivers/dma/ioat: Use the ccflag-y instead of EXTRA_CFLAGS 2010-12-04 15:03:06 -08:00
dca.c ioat/dca: Update DCA BIOS workarounds to use TAINT_FIRMWARE_WORKAROUND 2013-03-22 12:55:38 -04:00
dma.c ioat: fix tasklet tear down 2014-02-25 09:44:20 -08:00
dma.h ioat: fix tasklet tear down 2014-02-25 09:44:20 -08:00
dma_v2.c ioat: fix tasklet tear down 2014-02-25 09:44:20 -08:00
dma_v2.h ioatdma: clean up sed pool kmem_cache 2013-11-14 11:04:41 -08:00
dma_v3.c ioat: fix tasklet tear down 2014-02-25 09:44:20 -08:00
hw.h drivers/dma: remove unused support for MEMSET operations 2013-07-03 16:07:42 -07:00
pci.c ioatdma: clean up sed pool kmem_cache 2013-11-14 11:04:41 -08:00
registers.h ioatdma: Adding write back descriptor error status support for ioatdma 3.3 2013-04-15 22:46:15 +05:30