Skip to content

Commit 16f00d9

Browse files
pawellcdnsgregkh
authored andcommitted
usb: cdnsp: Fix incorrect calling of cdnsp_died function
Patch restrict calling of cdnsp_died function during removing modules or software disconnect. This function was called because after transition controller to HALT state the driver starts handling the deferred interrupt. In this case such interrupt can be simple ignored. Fixes: 3d82904 ("usb: cdnsp: cdns3 Add main part of Cadence USBSSP DRD Driver") cc: <stable@vger.kernel.org> Reviewed-by: Peter Chen <peter.chen@kernel.org> Signed-off-by: Pawel Laszczak <pawell@cadence.com> Link: https://lore.kernel.org/r/20211210112945.660-1-pawell@gli-login.cadence.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent ccc14c6 commit 16f00d9

1 file changed

Lines changed: 8 additions & 1 deletion

File tree

drivers/usb/cdns3/cdnsp-ring.c

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1523,7 +1523,14 @@ irqreturn_t cdnsp_thread_irq_handler(int irq, void *data)
15231523
spin_lock_irqsave(&pdev->lock, flags);
15241524

15251525
if (pdev->cdnsp_state & (CDNSP_STATE_HALTED | CDNSP_STATE_DYING)) {
1526-
cdnsp_died(pdev);
1526+
/*
1527+
* While removing or stopping driver there may still be deferred
1528+
* not handled interrupt which should not be treated as error.
1529+
* Driver should simply ignore it.
1530+
*/
1531+
if (pdev->gadget_driver)
1532+
cdnsp_died(pdev);
1533+
15271534
spin_unlock_irqrestore(&pdev->lock, flags);
15281535
return IRQ_HANDLED;
15291536
}

0 commit comments

Comments
 (0)