release 6.12.6
This commit is contained in:
45
debian/patches/patchset-pf/fixes/0003-USB-core-Disable-LPM-only-for-non-suspended-ports.patch
vendored
Normal file
45
debian/patches/patchset-pf/fixes/0003-USB-core-Disable-LPM-only-for-non-suspended-ports.patch
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
From 1c45e81769d174d02a26a61e3919313fa3b16120 Mon Sep 17 00:00:00 2001
|
||||
From: Kai-Heng Feng <kaihengf@nvidia.com>
|
||||
Date: Fri, 6 Dec 2024 15:48:17 +0800
|
||||
Subject: USB: core: Disable LPM only for non-suspended ports
|
||||
|
||||
There's USB error when tegra board is shutting down:
|
||||
[ 180.919315] usb 2-3: Failed to set U1 timeout to 0x0,error code -113
|
||||
[ 180.919995] usb 2-3: Failed to set U1 timeout to 0xa,error code -113
|
||||
[ 180.920512] usb 2-3: Failed to set U2 timeout to 0x4,error code -113
|
||||
[ 186.157172] tegra-xusb 3610000.usb: xHCI host controller not responding, assume dead
|
||||
[ 186.157858] tegra-xusb 3610000.usb: HC died; cleaning up
|
||||
[ 186.317280] tegra-xusb 3610000.usb: Timeout while waiting for evaluate context command
|
||||
|
||||
The issue is caused by disabling LPM on already suspended ports.
|
||||
|
||||
For USB2 LPM, the LPM is already disabled during port suspend. For USB3
|
||||
LPM, port won't transit to U1/U2 when it's already suspended in U3,
|
||||
hence disabling LPM is only needed for ports that are not suspended.
|
||||
|
||||
Cc: Wayne Chang <waynec@nvidia.com>
|
||||
Cc: stable@vger.kernel.org
|
||||
Fixes: d920a2ed8620 ("usb: Disable USB3 LPM at shutdown")
|
||||
Signed-off-by: Kai-Heng Feng <kaihengf@nvidia.com>
|
||||
Acked-by: Alan Stern <stern@rowland.harvard.edu>
|
||||
---
|
||||
drivers/usb/core/port.c | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/drivers/usb/core/port.c
|
||||
+++ b/drivers/usb/core/port.c
|
||||
@@ -452,10 +452,11 @@ static int usb_port_runtime_suspend(stru
|
||||
static void usb_port_shutdown(struct device *dev)
|
||||
{
|
||||
struct usb_port *port_dev = to_usb_port(dev);
|
||||
+ struct usb_device *udev = port_dev->child;
|
||||
|
||||
- if (port_dev->child) {
|
||||
- usb_disable_usb2_hardware_lpm(port_dev->child);
|
||||
- usb_unlocked_disable_lpm(port_dev->child);
|
||||
+ if (udev && !udev->port_is_suspended) {
|
||||
+ usb_disable_usb2_hardware_lpm(udev);
|
||||
+ usb_unlocked_disable_lpm(udev);
|
||||
}
|
||||
}
|
||||
|
@@ -126,7 +126,7 @@ Reviewed-by: Christoph Hellwig <hch@lst.de>
|
||||
/*
|
||||
--- a/fs/xfs/xfs_trans.c
|
||||
+++ b/fs/xfs/xfs_trans.c
|
||||
@@ -1262,11 +1262,26 @@ retry:
|
||||
@@ -1254,11 +1254,26 @@ retry:
|
||||
gdqp = (new_gdqp != ip->i_gdquot) ? new_gdqp : NULL;
|
||||
pdqp = (new_pdqp != ip->i_pdquot) ? new_pdqp : NULL;
|
||||
if (udqp || gdqp || pdqp) {
|
||||
@@ -153,7 +153,7 @@ Reviewed-by: Christoph Hellwig <hch@lst.de>
|
||||
/*
|
||||
* Reserve enough quota to handle blocks on disk and reserved
|
||||
* for a delayed allocation. We'll actually transfer the
|
||||
@@ -1274,8 +1289,20 @@ retry:
|
||||
@@ -1266,8 +1281,20 @@ retry:
|
||||
* though that part is only semi-transactional.
|
||||
*/
|
||||
error = xfs_trans_reserve_quota_bydquots(tp, mp, udqp, gdqp,
|
||||
|
Reference in New Issue
Block a user