From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932213AbcHIJRz (ORCPT ); Tue, 9 Aug 2016 05:17:55 -0400 Received: from mga01.intel.com ([192.55.52.88]:15503 "EHLO mga01.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752174AbcHIJRx (ORCPT ); Tue, 9 Aug 2016 05:17:53 -0400 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.28,494,1464678000"; d="asc'?scan'208";a="862222481" From: Felipe Balbi To: Lu Baolu , Greg Kroah-Hartman , Alan Stern Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, Lu Baolu , stable@vger.kernel.org, Alan Stern Subject: Re: [PATCH 1/1] usb: misc: usbtest: add fix for driver hang In-Reply-To: <1470718894-29325-1-git-send-email-baolu.lu@linux.intel.com> References: <1470718894-29325-1-git-send-email-baolu.lu@linux.intel.com> User-Agent: Notmuch/0.22.1+63~g994277e (https://notmuchmail.org) Emacs/25.1.1 (x86_64-pc-linux-gnu) Date: Tue, 09 Aug 2016 12:17:42 +0300 Message-ID: <87mvkmb8sp.fsf@linux.intel.com> MIME-Version: 1.0 Content-Type: multipart/signed; boundary="=-=-="; micalg=pgp-sha256; protocol="application/pgp-signature" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org --=-=-= Content-Type: text/plain Content-Transfer-Encoding: quoted-printable Hi, Lu Baolu writes: > In sg_timeout(), req->status is set to "-ETIMEDOUT" before calling > into usb_sg_cancel(). usb_sg_cancel() will do nothing and return > directly if req->status has been set to a non-zero value. This will > cause driver hang as soon as transfer time out is triggered. > > In my test case, below system log shows when port reset happens after > urb being submitted. > > [55099.746213] usb 2-3: USB disconnect, device number 2 > [55321.955451] INFO: task kworker/6:0:59 blocked for more than 120 second= s. > [55321.955463] Not tainted 4.7.0-rc6+ #19 > [55321.955466] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disable= s this message. > [55321.955472] kworker/6:0 D ffff88045ad3bbf8 0 59 2 0x00= 000000 > [55321.955489] Workqueue: usb_hub_wq hub_event > [55321.955493] ffff88045ad3bbf8 ffff880400000030 ffff88045ad30f40 ffff88= 045ad3bbd0 > [55321.955499] ffff88045ad3c000 ffff8804590920fc ffff88045ad30f40 000000= 00ffffffff > [55321.955505] ffff880459092100 ffff88045ad3bc10 ffffffff817b5925 ffff88= 04590920f8 > [55321.955511] Call Trace: > [55321.955521] [] schedule+0x35/0x80 > [55321.955527] [] schedule_preempt_disabled+0xe/0x10 > [55321.955533] [] __mutex_lock_slowpath+0x95/0x110 > [55321.955538] [] mutex_lock+0x1f/0x2f > [55321.955544] [] usb_disconnect+0x53/0x270 > [55321.955550] [] hub_port_connect+0x71/0x900 > [55321.955556] [] ? hub_port_reset+0x3de/0x630 > [55321.955562] [] hub_event+0x63e/0xb20 > [55321.955569] [] ? put_prev_entity+0x35/0x730 > [55321.955577] [] process_one_work+0x153/0x3f0 > [55321.955583] [] worker_thread+0x12b/0x4b0 > [55321.955590] [] ? rescuer_thread+0x340/0x340 > [55321.955595] [] kthread+0xc9/0xe0 > [55321.955601] [] ret_from_fork+0x1f/0x40 > [55321.955606] [] ? kthread_park+0x60/0x60 > [55321.955638] INFO: task testusb:3011 blocked for more than 120 seconds. > [55321.955643] Not tainted 4.7.0-rc6+ #19 > [55321.955647] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs" disable= s this message. > [55321.955651] testusb D ffff880449a079f8 0 3011 2367 0x00= 000000 > [55321.955657] ffff880449a079f8 0000000000000002 ffff88045754cc40 ffffff= ff815b91b9 > [55321.955663] ffff880449a08000 7fffffffffffffff ffff880449a07cb0 ffff88= 045754cc40 > [55321.955668] 0000000000000000 ffff880449a07a10 ffffffff817b5925 ffff88= 0449a07cb8 > [55321.955673] Call Trace: > [55321.955680] [] ? usb_hcd_submit_urb+0xa9/0xba0 > [55321.955685] [] schedule+0x35/0x80 > [55321.955691] [] schedule_timeout+0x231/0x2d0 > [55321.955698] [] ? __alloc_pages_nodemask+0x112/0x2b0 > [55321.955703] [] wait_for_completion+0xa4/0x110 > [55321.955709] [] ? wake_up_q+0x80/0x80 > [55321.955713] [] usb_sg_wait+0x138/0x190 > [55321.955722] [] perform_sglist+0xef/0x180 [usbtest] > [55321.955728] [] ? usbtest_resume+0x10/0x10 [usbtest] > [55321.955734] [] usbtest_do_ioctl+0x898/0x1520 [usbte= st] > [55321.955740] [] ? usb_hcd_reset_endpoint+0x25/0x60 > [55321.955745] [] ? usb_enable_endpoint+0x85/0x90 > [55321.955751] [] usbtest_ioctl+0x123/0x26e [usbtest] > [55321.955756] [] ? filemap_map_pages+0x295/0x310 > [55321.955763] [] ? proc_ioctl+0x48/0x210 > [55321.955769] [] proc_ioctl+0x130/0x210 > [55321.955776] [] usbdev_do_ioctl+0x50a/0x1170 > [55321.955782] [] usbdev_ioctl+0xe/0x20 > [55321.955789] [] do_vfs_ioctl+0x96/0x590 > [55321.955794] [] ? putname+0x53/0x60 > [55321.955800] [] SyS_ioctl+0x79/0x90 > [55321.955806] [] entry_SYSCALL_64_fastpath+0x1e/0xa > > This patch fixes this driver hang. It should be back-ported to stable > kernel with version after v3.15. > > Cc: stable@vger.kernel.org > Cc: Alan Stern > Signed-off-by: Lu Baolu > --- > drivers/usb/misc/usbtest.c | 1 - > 1 file changed, 1 deletion(-) > > diff --git a/drivers/usb/misc/usbtest.c b/drivers/usb/misc/usbtest.c > index 6b978f0..6c6586d 100644 > --- a/drivers/usb/misc/usbtest.c > +++ b/drivers/usb/misc/usbtest.c > @@ -585,7 +585,6 @@ static void sg_timeout(unsigned long _req) > { > struct usb_sg_request *req =3D (struct usb_sg_request *) _req; >=20=20 > - req->status =3D -ETIMEDOUT; > usb_sg_cancel(req); > } IMO, req->status =3D -ETIMEDOUT should still be done, but perhaps after usb_sg_cancel(). Alan? =2D-=20 balbi --=-=-= Content-Type: application/pgp-signature; name="signature.asc" -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAEBCAAGBQJXqZ+3AAoJEIaOsuA1yqRElGAQAImRemTeY5+iDk0cbAGDiLGZ j2/lgzRLX9591gv50vMblE59aDMbCJLTdHmr32rXLOtMOAdqy/8GA/buVuZlQW3G NFVFJO6z4SBIvthh4FAcvrOy8GOmTYm9i8Oy92hokeTsW5iLhJJwjTbNu4+bNfra WhM0mDYtJZeD0ynBQs41dCBtYjDfPdHK5SWHZgY6ndnP9ISQGlDbBrCxdS8+Apc/ mKCZCDWGOQcaCtJHWBzXopjorqnXaZ6DUIvjNHAbBdkx7LUIHoid6DiDkAoVWL9s /WkUbqHCdZb5E8YAYBtKALv0JNb38a6Wf/4oV/XXQPQlgjHH9sSrQMpg7Ec9eCfw j+RpE+rW7It5oF+oMr0hToSOaVjZFXdxOyXcA7vIhT4Jg1SHA46tgLwCUTWQqpL0 MEisRVb8A54+ZebrDQ36O0wtZoIrT76W1w4eVMJ9oy6zUITuyeIViaI6AD4aSXRk mtqfVVryvNw00xvxw9kfp94o/CC9aW4EdlKSPSJubuiNjgylwKsoCnj2dE+Q26T9 ZVScNIwBB1a07vCDgeK3cFi94sMxqOf5rKcN9aaT+S3Z9tW8DeAqqOJNvUSU3D7P uvkh7B0kq7MrBujIn0YOpTuFG6GNZQUIwQiNo/7Vqg7cDAgKxS2b2OwrAvr9UqOa bpEXhBEFC/aBsYAtK4EB =xUqh -----END PGP SIGNATURE----- --=-=-=--