Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753069AbcCRHQA (ORCPT ); Fri, 18 Mar 2016 03:16:00 -0400 Received: from mail-bn1bon0087.outbound.protection.outlook.com ([157.56.111.87]:16256 "EHLO na01-bn1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752939AbcCRHPu (ORCPT ); Fri, 18 Mar 2016 03:15:50 -0400 Authentication-Results: spf=none (sender IP is 192.88.168.50) smtp.mailfrom=lvd4224.freescale.com; vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=nxp.com; From: Rajesh Bhagat To: , CC: , , , Rajesh Bhagat Subject: [PATCH] usb: xhci: Fix incomplete PM resume operation due to XHCI commmand timeout Date: Fri, 18 Mar 2016 12:31:03 +0530 Message-ID: <1458284463-12743-1-git-send-email-rajesh.bhagat@nxp.com> X-Mailer: git-send-email 1.7.7.4 X-EOPAttributedMessage: 0 X-Matching-Connectors: 131027580676706249;(91ab9b29-cfa4-454e-5278-08d120cd25b8);() X-Forefront-Antispam-Report: CIP:192.88.168.50;IPV:NLI;CTRY:US;EFV:NLI;SFV:NSPM;SFS:(10009020)(6009001)(6039001)(2980300002)(428002)(199003)(189002)(377424004)(48376002)(5008740100001)(101416001)(6806005)(33646002)(11100500001)(50466002)(1220700001)(45336002)(90966002)(50986999)(103686003)(47776003)(189998001)(86372001)(87936001)(52956003)(42186005)(5003940100001)(586003)(105586002)(19580405001)(19580395003)(36756003)(16796002)(106466001)(4326007)(960300001)(50226001)(81166005)(92566002)(5001770100001)(229853001)(49343001)(7059030)(42882005)(4720700001);DIR:OUT;SFP:1101;SCL:1;SRVR:BL2PR03MB372;H:tx30smr01.am.freescale.net;FPR:;SPF:None;MLV:sfv;A:0;MX:1;LANG:en; X-Microsoft-Exchange-Diagnostics: 1;BN1AFFO11FD028;1:XHDq1FHgTlOTSkvqAz2yfb2/0hpsVzX6q2QoDDDfQbR3FMCJh4cBE+KrmmHStJ/0lCrRItidKRTVAbZ3/HkkwLvzsUfCeZeTYlkU8jdd90R391k4NVIcwo4gDEthzxhrRb4pGz38ObHFJh6vFF2I0EC/EeRfR64tdq7y+yoQ2RmbJM7QGwJi/1c/vU4qb/qU6z3ySg907ra76juTT6yb81rnNI7DrBefh7oY8bPN8YXIAL/sUEoBy07ghHkggaLUurpe+I+SH/qT8NR29Mih2SjDaztxkEIKF/kJYM/nRCwcNavHTnmSD+eFP3Ma4S7sYxlnk94mvnL8IcQrZm1xNEtiB56YPWJY+GpnCjEYQpisyxIDXa6EjKFDyl4a05Ef4scglAxlKZk2MoDHwij2UByKPwPbRFsLCWUMfSP0MfnB8F5kL/3jcpEKaH5LUzVD7tm4cTsAMT8FHkfvrJUjZBEbm+mk2trv0qSH7Hewalb6bhr3LgVwYVOO5uivAJJgwlPQqtVN6itN/aiTijfKnlAaex+tfBfHIotLw1lpPhU= MIME-Version: 1.0 Content-Type: text/plain X-MS-Office365-Filtering-Correlation-Id: 503bd38e-2372-4c75-9ddc-08d34efb145b X-Microsoft-Exchange-Diagnostics: 1;BL2PR03MB372;2:ugbTS+dP+OWHtCGVM9ph3bZ/EHOsMy8x3WY/RbgCYBG9IpdM0jqbldWy17TevbnTnIqT4CFR2vOKGXq6VmXMgPxxXarcmfSPrsw63VehHTxxl0PWRoVb0gx+G+RvIlljZDnihTuSanRaqynEgjYR0gIseppBT0CaFYiTkq+E8yN3sF5BsYMCZ5EoxPnxNpIp;3:N0KM77Z13ZvGNo6YvE8fL9Fu/yIzluCHjl3ElnryTg4vQmLnUCVQqR+QkahFD9YRXQP9csDKz2TPapAb2fc7AqyOFR8EZ3XkDOhQCb2Om1Qc2UCjvq/KR/klYNF0MKCfZ98tPGNv557CqC1YDz8vmuept28XaHut15hWgN2tnQjb0soifDns6oYC2vrzQBRGOlMT6GzDmPjV+rf4K8n52SgE2UG39b+DCTjvP1ZY7rw=;25:VzVkQdBNkdu/esAyCBj6JuWHZnz2kZDVuncVrM+1P++mmMTRtnFx71/SR/vHMeYEZDTzkgIcmNWqTVIBrtflScuczl894IwkFuzXC85/BUzixJcGX0fFKAOpN3UMRvUojfG8NH449LtO+3E5Y14iAcsPzfwZdF0bbEdCdymt7G/xQ+F+6PvykpsLRn+wM0HgcdyD6Zzyr0NEieXyqx4LT/xmp3sEuFRnnaAIVo3EmCjkhzgbfC/T+2gzQX1aFB1hTG/wFw13IZu4IFVx9pGe7TaNt6bTvq7sUGP1Qbj62ZyU2OoJdkRIA6BQjmQwg9z+kq+DlUehedSLZJmb0VjndA== X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BL2PR03MB372; X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-Test: UriScan:; X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(601004)(2401047)(13015025)(8121501046)(13023025)(13017025)(5005006)(13024025)(13018025)(10201501046)(3002001);SRVR:BL2PR03MB372;BCL:0;PCL:0;RULEID:(400006);SRVR:BL2PR03MB372; X-Microsoft-Exchange-Diagnostics: 1;BL2PR03MB372;4:mTaRDKnWSEZWoGB0wCrF4q9GOoF13xyteoGBdpCAO2LECE+ViYX4Tom21QpGc68S0j8t7UutNjHCiW3+PdqB3Dt0DUHiFYiPMEn3Kpu6LRK/zJwB2of3w5i7CUXsn9vkysAZmpuU5ZMdxf9xx1I3bvBJJmkZnByDTG7OM4ogBJS4eCcKz9ckMyhkr938mz3VQE6XoqLI7rjqXq7VfaHX+KauSYWHQp5R3ndAHmMNyVsf06lw5ptGQt/sIeX79IJBBg02FZWaLflPpbIstFeHL8eQCuVPXAd94sQKF+E0LOd0SfMWF42scrKCEkrIm0vIOaUoFjzr5eymnbMHxkMvWHb7weVVeOiGqbnRwjcbLkvNZCl7Zt4WSHAHWEEqBjbR4gZ1DvPUUE68BfszYI8Qvn81bp+WAFYbJfOVpfS7127DL1u+Sb8Vc0ujL8RJswfM1P0TWRDkPgwYdwuFFKFNOA== X-Forefront-PRVS: 088552DE73 X-Microsoft-Exchange-Diagnostics: =?us-ascii?Q?1;BL2PR03MB372;23:Fs95Fb4eq5QgFkn2+fbh5ltMiTL/hrTD44GFcE+Gz9?= =?us-ascii?Q?M6GT+/o+d2g13MY5Jj0Luai75LNJfoZ5Ei7aqJsMIt4vWy0pVQU4rtl7Jun7?= =?us-ascii?Q?F7C07IBl2QWWL5hZYzBcGZ0IgBWGw/KC8kIyo118mBDesQhHyid+s1f7GK08?= =?us-ascii?Q?6vAioUU0jF0vu58KqYZ/PCXDzpqycia8YF69w2NFfMOBor50EUXlkoWlt2SM?= =?us-ascii?Q?unZbZ6J2vBCEq7qEQLsHM7sB6ifeeRFZSlhq/lUkWmvA+1SX93koCaUx1qh0?= =?us-ascii?Q?o05j4SQWpj/shsqrTOrm3eXpc5lPN9mAQ4iF0+Jzqva9lSNU9N0Yb9qwdhB5?= =?us-ascii?Q?OR9+J1NIk0eHQbdpP74zm/sQfMQ3NlNd6NeRXeoHEaMMqT+UqQWiP+B1OjMo?= =?us-ascii?Q?26GEhHHdK0Nm9N3T/6ZFKXuisVyPf8+gftg5aH6tVxWbROaSG73Zf4bdAlU5?= =?us-ascii?Q?wOW0DtQiCXJEaYUPpzG8nuJMpSSC+BXBE2RMjC/+vQekkdQkSJfwTeUkUqK+?= =?us-ascii?Q?FG648Kf3FSaVhFlpxQHwmQtZqHlhgcUyWmgcVw4xx+UPEW5eHNfP9E3NLjLW?= =?us-ascii?Q?HjdF9v85Dx9XnkXewCPJ1viCLMsNFeWy+ums/fm/CFiGFre6rNsE6uks6HWM?= =?us-ascii?Q?Wzd/KlUMOTNQRoa+TmWyiwyz9vVtyz4cpIa/e4YMynyUeAQmneI2OZgLxWnc?= =?us-ascii?Q?sRBN9BTYV8bJa4y6h2PE7ZCIhhv+KOzHDro3b+RucPiO8tNH2MCSbLDrKBFW?= =?us-ascii?Q?0+wxjd0t+jI0SmVidME34OiNckpiOJ1CXrnjwLXudFZApib78S6w3lRYIhuB?= =?us-ascii?Q?rdw5O6lVoy0Trfep68c0Uj38a+gDq3PZuhc2WlBLS9FLC8VIA1lH8RtMATiS?= =?us-ascii?Q?C1mZ7az9p8tVvCMLlNQYF4pfJSGeWvfPB/OJMOy7qW2JT/J4qZUVheg6Dx6Z?= =?us-ascii?Q?FAL3yfbKmkFtPaZKqbDoMf988zehJMA3NNG5aHpaUlGXjIlVJ0etYhk9OCNd?= =?us-ascii?Q?vCIyW/FlbR3LjvDBlYtxNGc4wO4URHYorPOI6GMMcdLz90SuUC+ptr1rAejM?= =?us-ascii?Q?PzXX4mr3CM5njAZ4690qp4W8OwZGXT92Guy5nu7v/FKVkduO+xR6h9RRfDmB?= =?us-ascii?Q?4Pi8PR5kln380GH7n165Oqn8eQoWFY?= X-Microsoft-Exchange-Diagnostics: 1;BL2PR03MB372;5:zkZmfuTUMkNnNKp4Ee+Drf9ExZbMo2//Epre3Gqv/eAS9EkWjl/iivIIkSeLeZ9oO5rCAKgEev3bDSQuMfppr0pLOBL/awLtKfvbHtTW9xvhSA+ZvY9xJHCkct+bDS/0Ccqe816CI9K3BGQp12w2IxvnhxqVSms9VRZvDt/SjJ0=;24:fFdM7G10mq7pZsW9/Q859VXISOg/Un/s/BGo944PDyyAnArCFwSCAzsA4lzwxePpd41NdqJlyxig3zqLpLWD0Ij4LnzkhO1z+tNV05ZYSJI= SpamDiagnosticOutput: 1:23 SpamDiagnosticMetadata: NSPM X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Mar 2016 07:01:07.2182 (UTC) X-MS-Exchange-CrossTenant-Id: 5afe0b00-7697-4969-b663-5eab37d5f47e X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=5afe0b00-7697-4969-b663-5eab37d5f47e;Ip=[192.88.168.50];Helo=[tx30smr01.am.freescale.net] X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL2PR03MB372 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5080 Lines: 123 We are facing issue while performing the system resume operation from STR where XHCI is going to indefinite hang/sleep state due to wait_for_completion API called in function xhci_alloc_dev for command TRB_ENABLE_SLOT which never completes. Now, xhci_handle_command_timeout function is called and prints "Command timeout" message but never calls complete API for above TRB_ENABLE_SLOT command as xhci_abort_cmd_ring is successful. Solution to above problem is: 1. calling xhci_cleanup_command_queue API even if xhci_abort_cmd_ring is successful or not. 2. checking the status of reset_device in usb core code. Before Fix: root@phoenix:~# echo mem > /sys/power/state PM: Syncing filesystems ... done. Freezing user space processes ... (elapsed 0.001 seconds) done. Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done. PM: suspend of devices complete after 103.144 msecs PM: late suspend of devices complete after 1.503 msecs PM: noirq suspend of devices complete after 1.220 msecs Disabling non-boot CPUs ... CPU1: shutdown Retrying again to check for CPU kill CPU1 killed. Enabling non-boot CPUs ... CPU1 is up PM: noirq resume of devices complete after 1.996 msecs PM: early resume of devices complete after 1.152 msecs usb usb1: root hub lost power or was reset usb usb2: root hub lost power or was reset ----- <> -------------- After Fix: root@phoenix:~# echo mem > /sys/power/state PM: Syncing filesystems ... done. Freezing user space processes ... (elapsed 0.001 seconds) done. Freezing remaining freezable tasks ... (elapsed 0.001 seconds) done. PM: suspend of devices complete after 103.086 msecs PM: late suspend of devices complete after 1.517 msecs PM: noirq suspend of devices complete after 1.217 msecs Disabling non-boot CPUs ... CPU1: shutdown Retrying again to check for CPU kill CPU1 killed. Enabling non-boot CPUs ... CPU1 is up PM: noirq resume of devices complete after 1.991 msecs PM: early resume of devices complete after 1.239 msecs usb usb1: root hub lost power or was reset usb usb2: root hub lost power or was reset xhci-hcd xhci-hcd.0.auto: Error while assigning device slot ID xhci-hcd xhci-hcd.0.auto: Max number of devices this xHCI host supports is 127. xhci-hcd xhci-hcd.0.auto: Error while assigning device slot ID xhci-hcd xhci-hcd.0.auto: Max number of devices this xHCI host supports is 127. xhci-hcd xhci-hcd.0.auto: Error while assigning device slot ID xhci-hcd xhci-hcd.0.auto: Max number of devices this xHCI host supports is 127. xhci-hcd xhci-hcd.0.auto: Error while assigning device slot ID xhci-hcd xhci-hcd.0.auto: Max number of devices this xHCI host supports is 127. xhci-hcd xhci-hcd.0.auto: Error while assigning device slot ID xhci-hcd xhci-hcd.0.auto: Max number of devices this xHCI host supports is 127. xhci-hcd xhci-hcd.0.auto: Error while assigning device slot ID xhci-hcd xhci-hcd.0.auto: Max number of devices this xHCI host supports is 127. xhci-hcd xhci-hcd.0.auto: Error while assigning device slot ID xhci-hcd xhci-hcd.0.auto: Max number of devices this xHCI host supports is 127. xhci-hcd xhci-hcd.0.auto: Error while assigning device slot ID xhci-hcd xhci-hcd.0.auto: Max number of devices this xHCI host supports is 127. PM: resume of devices complete after 75567.769 msecs Restarting tasks ... usb 1-1: USB disconnect, device number 2 usb 2-1: USB disconnect, device number 2 usb 2-1.1: USB disconnect, device number 3 done. root@phoenix:~# Signed-off-by: Sriram Dash Signed-off-by: Rajesh Bhagat --- drivers/usb/core/hub.c | 12 ++++++++---- drivers/usb/host/xhci-ring.c | 2 +- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c index 38cc4ba..c906018 100644 --- a/drivers/usb/core/hub.c +++ b/drivers/usb/core/hub.c @@ -2897,10 +2897,14 @@ done: /* The xHC may think the device is already reset, * so ignore the status. */ - if (hcd->driver->reset_device) - hcd->driver->reset_device(hcd, udev); - - usb_set_device_state(udev, USB_STATE_DEFAULT); + if (hcd->driver->reset_device) { + status = hcd->driver->reset_device(hcd, udev); + if (status == 0) + usb_set_device_state(udev, USB_STATE_DEFAULT); + else + usb_set_device_state(udev, USB_STATE_NOTATTACHED); + } else + usb_set_device_state(udev, USB_STATE_DEFAULT); } } else { if (udev) diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c index 7cf6621..be8fd61 100644 --- a/drivers/usb/host/xhci-ring.c +++ b/drivers/usb/host/xhci-ring.c @@ -1272,9 +1272,9 @@ void xhci_handle_command_timeout(unsigned long data) spin_unlock_irqrestore(&xhci->lock, flags); xhci_dbg(xhci, "Command timeout\n"); ret = xhci_abort_cmd_ring(xhci); + xhci_cleanup_command_queue(xhci); if (unlikely(ret == -ESHUTDOWN)) { xhci_err(xhci, "Abort command ring failed\n"); - xhci_cleanup_command_queue(xhci); usb_hc_died(xhci_to_hcd(xhci)->primary_hcd); xhci_dbg(xhci, "xHCI host controller is dead.\n"); } -- 1.7.7.4