]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
xhci: dbc: Flush queued requests before stopping dbc
authorMathias Nyman <mathias.nyman@linux.intel.com>
Fri, 27 Jun 2025 14:41:22 +0000 (17:41 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 10 Jul 2025 13:59:52 +0000 (15:59 +0200)
commit efe3e3ae5a66cb38ef29c909e951b4039044bae9 upstream.

Flush dbc requests when dbc is stopped and transfer rings are freed.
Failure to flush them lead to leaking memory and dbc completing odd
requests after resuming from suspend, leading to error messages such as:

[   95.344392] xhci_hcd 0000:00:0d.0: no matched request

Cc: stable <stable@kernel.org>
Fixes: dfba2174dc42 ("usb: xhci: Add DbC support in xHCI driver")
Signed-off-by: Mathias Nyman <mathias.nyman@linux.intel.com>
Link: https://lore.kernel.org/r/20250627144127.3889714-5-mathias.nyman@linux.intel.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/host/xhci-dbgcap.c

index 0f8f08f60ceb294b8949ab3dc59976f2c1f9ac56..4346a316c77ab0296a61c8ea47ae0d7643ac141d 100644 (file)
@@ -639,6 +639,10 @@ static void xhci_dbc_stop(struct xhci_dbc *dbc)
        case DS_DISABLED:
                return;
        case DS_CONFIGURED:
+               spin_lock(&dbc->lock);
+               xhci_dbc_flush_requests(dbc);
+               spin_unlock(&dbc->lock);
+
                if (dbc->driver->disconnect)
                        dbc->driver->disconnect(dbc);
                break;