]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
usb: cdnsp: Fix incorrect calling of cdnsp_died function
authorPawel Laszczak <pawell@cadence.com>
Fri, 10 Dec 2021 11:29:45 +0000 (12:29 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 13 Dec 2021 14:23:19 +0000 (15:23 +0100)
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: 3d82904559f4 ("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>
drivers/usb/cdns3/cdnsp-ring.c

index 1b1438457fb0437a862430e2ed6743688c4b7aad..e1ac6c398bd36b260c009066d18931cb98560555 100644 (file)
@@ -1523,7 +1523,14 @@ irqreturn_t cdnsp_thread_irq_handler(int irq, void *data)
        spin_lock_irqsave(&pdev->lock, flags);
 
        if (pdev->cdnsp_state & (CDNSP_STATE_HALTED | CDNSP_STATE_DYING)) {
-               cdnsp_died(pdev);
+               /*
+                * While removing or stopping driver there may still be deferred
+                * not handled interrupt which should not be treated as error.
+                * Driver should simply ignore it.
+                */
+               if (pdev->gadget_driver)
+                       cdnsp_died(pdev);
+
                spin_unlock_irqrestore(&pdev->lock, flags);
                return IRQ_HANDLED;
        }