Skip to contentSkip to conversation

dma: ioat: use tasklet_kill in device remove/release process

PATCH In review Xiaotian Feng 1 participant 2 messages Oct 31, 2012 dmaengine

lore
Share & tools
lore
#0 lore raw

PATCH 1/1 dma: ioat: use tasklet_kill in device remove/release process

Some driver uses tasklet_disable in device remove/release process, tasklet_disable will inc tasklet->count and return. If the tasklet is not handled yet under some softirq pressure, the tasklet will be placed on the tasklet_vec, never have a chance to be excuted. This might lead to a heavy loaded ksoftirqd, wakeup with pending_softirq, but tasklet is disabled. tasklet_kill should be used in this case.

Cc Vinod Koul <[email protected]>
Cc Dan Williams <[email protected]>
---
 drivers/dma/ioat/dma.c    |    2 +-
 drivers/dma/ioat/dma_v2.c |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/dma/ioat/dma.c +1 -1
index 73b2b65..8bec4a2 100644
@@ -379,7 +379,7 @@ static void ioat1_dma_free_chan_resources(struct dma_chan *c)
 	if (ioat->desccount == 0)
 		return;
 
-	tasklet_disable(&chan->cleanup_task);
+	tasklet_kill(&chan->cleanup_task);
 	del_timer_sync(&chan->timer);
 	ioat1_cleanup(ioat);
 
drivers/dma/ioat/dma_v2.c +1 -1
index b9d6678..df3ccb0 100644
@@ -794,7 +794,7 @@ void ioat2_free_chan_resources(struct dma_chan *c)
 	if (!ioat->ring)
 		return;
 
-	tasklet_disable(&chan->cleanup_task);
+	tasklet_kill(&chan->cleanup_task);
 	del_timer_sync(&chan->timer);
 	device->cleanup_fn((unsigned long) c);
 	device->reset_hw(chan);
Signature · 1 line
1.7.9.5
#1 lore raw
Quoted 10 lines · Xiaotian Feng

Some driver uses tasklet_disable in device remove/release process, tasklet_disable will inc tasklet->count and return. If the tasklet is not handled yet under some softirq pressure, the tasklet will be placed on the tasklet_vec, never have a chance to be excuted. This might lead to a heavy loaded ksoftirqd, wakeup with pending_softirq, but tasklet is disabled. tasklet_kill should be used in this case.

Cc Vinod Koul <[email protected]>
Cc Dan Williams <[email protected]>

Please ignore this one, I made a mistake here.

Quoted 34 lines
---
 drivers/dma/ioat/dma.c    |    2 +-
 drivers/dma/ioat/dma_v2.c |    2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
drivers/dma/ioat/dma.c +1 -1
index 73b2b65..8bec4a2 100644
@@ -379,7 +379,7 @@ static void ioat1_dma_free_chan_resources(struct dma_chan *c)
        if (ioat->desccount == 0)
                return;
 
-       tasklet_disable(&chan->cleanup_task);
+       tasklet_kill(&chan->cleanup_task);
        del_timer_sync(&chan->timer);
        ioat1_cleanup(ioat);
 
drivers/dma/ioat/dma_v2.c +1 -2
index b9d6678..df3ccb0 100644
@@ -794,7 +794,7 @@ void ioat2_free_chan_resources(struct dma_chan *c)
        if (!ioat->ring)
                return;
 
-       tasklet_disable(&chan->cleanup_task);
+       tasklet_kill(&chan->cleanup_task);
        del_timer_sync(&chan->timer);
        device->cleanup_fn((unsigned long) c);
        device->reset_hw(chan);
--

1.7.9.5