Messages in this thread | | | From | "Bounine, Alexandre" <> | Subject | RE: [PATCH] rapidio/tsi721: use tasklet_kill in device remove/release process | Date | Mon, 5 Nov 2012 16:11:40 +0000 |
| |
On Wed, October 31, 2012 6:53 AM Xiaotian Feng <xtfeng@gmail.com> wrote: > > 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. > > Signed-off-by: Xiaotian Feng <dannyfeng@tencent.com> > Cc: Matt Porter <mporter@kernel.crashing.org> > Cc: Alexandre Bounine <alexandre.bounine@idt.com> > Cc: Andrew Morton <akpm@linux-foundation.org> > --- > drivers/rapidio/devices/tsi721_dma.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/rapidio/devices/tsi721_dma.c > b/drivers/rapidio/devices/tsi721_dma.c > index 92e06a5..a098fbc 100644 > --- a/drivers/rapidio/devices/tsi721_dma.c > +++ b/drivers/rapidio/devices/tsi721_dma.c > @@ -589,7 +589,7 @@ static void tsi721_free_chan_resources(struct > dma_chan *dchan) > BUG_ON(!list_empty(&bdma_chan->active_list)); > BUG_ON(!list_empty(&bdma_chan->queue)); > > - tasklet_disable(&bdma_chan->tasklet); > + tasklet_kill(&bdma_chan->tasklet); > > spin_lock_bh(&bdma_chan->lock); > list_splice_init(&bdma_chan->free_list, &list); > -- > 1.7.9.5
I agree with reported issue. Switching to tasklet_kill() also requires to disable interrupts first. I will update that part and post a new patch.
| |