RE: [PATCH 20/29] ioat: switch watchdog and reset handler from workqueue to timer
From: Sosnowski, Maciej <hidden>
Date: 2009-09-14 14:59:43
Also in:
linux-raid, lkml
From: Sosnowski, Maciej <hidden>
Date: 2009-09-14 14:59:43
Also in:
linux-raid, lkml
Williams, Dan J wrote:
In order to support dynamic resizing of the descriptor ring or polling for a descriptor in the presence of a hung channel the reset handler needs to make progress while in a non-preemptible context. The current workqueue implementation precludes polling channel reset completion under spin_lock(). This conversion also allows us to return to opportunistic cleanup in the ioat2 case as the timer implementation guarantees at least one cleanup after every descriptor is submitted. This means the worst case completion latency becomes the timer frequency (for exceptional circumstances), but with the benefit of avoiding busy waiting when the lock is contended. Signed-off-by: Dan Williams <redacted> ---
[...]
--- a/drivers/dma/ioat/dma_v2.c +++ b/drivers/dma/ioat/dma_v2.c@@ -49,7 +49,7 @@ static void __ioat2_issue_pending(struct ioat2_dma_chan *ioat) void * __iomem reg_base = ioat->base.reg_base; ioat->pending = 0; - ioat->dmacount += ioat2_ring_pending(ioat); + ioat->dmacount += ioat2_ring_pending(ioat);;
double semicolon Signed-off-by: Maciej Sosnowski <redacted>