]> git.baikalelectronics.ru Git - kernel.git/commit
net: ethernet: ti: cpdma: fix lockup in cpdma_ctlr_destroy()
authorGrygorii Strashko <grygorii.strashko@ti.com>
Thu, 28 Jul 2016 17:50:34 +0000 (20:50 +0300)
committerDavid S. Miller <davem@davemloft.net>
Sun, 31 Jul 2016 04:00:33 +0000 (21:00 -0700)
commitf44bf18d0596e3966f721d70377164df83a2777c
tree7cce76270e9aeac5c519b335bd78f5234288cb8c
parent42eb90b7ea6379ed0b1379723fdf9ce184b7f9bd
net: ethernet: ti: cpdma: fix lockup in cpdma_ctlr_destroy()

Fix deadlock in cpdma_ctlr_destroy() which is triggered now on
cpsw module removal:
 cpsw_remove()
 - cpdma_ctlr_destroy()
   - spin_lock_irqsave(&ctlr->lock, flags)
   - cpdma_ctlr_stop()
     - spin_lock_irqsave(&ctlr->lock, flags);
   - cpdma_chan_destroy()
     - spin_lock_irqsave(&ctlr->lock, flags);

The issue has not been observed before because CPDMA channels have
been destroyed manually by CPSW until commit 65700e5dc0d6 ("net:
ethernet: ti: cpsw: use destroy ctlr to destroy channels") was merged.

Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com>
Reviewed-by: Mugunthan V N <mugunthanvnm@ti.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/ti/davinci_cpdma.c