From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753694AbdLGM6L (ORCPT ); Thu, 7 Dec 2017 07:58:11 -0500 Received: from mail.linuxfoundation.org ([140.211.169.12]:60102 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753442AbdLGM6H (ORCPT ); Thu, 7 Dec 2017 07:58:07 -0500 From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Wei Xu , Guodong Xu , Amit Pundir , YongQin Liu , John Youn , Minas Harutyunyan , Douglas Anderson , Chen Yu , Felipe Balbi , linux-usb@vger.kernel.org, Minas Harutyunyan , John Stultz , Sasha Levin Subject: [PATCH 4.9 023/109] usb: dwc2: Error out of dwc2_hsotg_ep_disable() if were in host mode Date: Thu, 7 Dec 2017 13:56:07 +0100 Message-Id: <20171207125637.316597152@linuxfoundation.org> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20171207125634.631485452@linuxfoundation.org> References: <20171207125634.631485452@linuxfoundation.org> User-Agent: quilt/0.65 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 4.9-stable review patch. If anyone has any objections, please let me know. ------------------ From: John Stultz [ Upstream commit 9b481092c2a31a6b630aff9c28f0145bf6683787 ] We've found that while in host mode, using Android, if one runs the command: stop adbd The existing usb devices being utilized in host mode are disconnected. This is most visible with usb networking devices. This seems to be due to adbd closing the file: /dev/usb-ffs/adb/ep0 Which calls ffs_ep0_release() and the following backtrace: [] dwc2_hsotg_ep_disable+0x148/0x150 [] dwc2_hsotg_udc_stop+0x60/0x110 [] usb_gadget_remove_driver+0x58/0x78 [] usb_gadget_unregister_driver+0x74/0xe8 [] unregister_gadget+0x28/0x58 [] unregister_gadget_item+0x2c/0x40 [] ffs_data_clear+0xe8/0xf8 [] ffs_data_reset+0x20/0x58 [] ffs_data_closed+0x98/0xe8 [] ffs_ep0_release+0x20/0x30 Then when dwc2_hsotg_ep_disable() is called, we call kill_all_requests() which causes a bunch of the following messages: dwc2 f72c0000.usb: Mode Mismatch Interrupt: currently in Host mode dwc2 f72c0000.usb: Mode Mismatch Interrupt: currently in Host mode dwc2 f72c0000.usb: Mode Mismatch Interrupt: currently in Host mode dwc2 f72c0000.usb: Mode Mismatch Interrupt: currently in Host mode dwc2 f72c0000.usb: Mode Mismatch Interrupt: currently in Host mode dwc2 f72c0000.usb: Mode Mismatch Interrupt: currently in Host mode dwc2 f72c0000.usb: Mode Mismatch Interrupt: currently in Host mode dwc2 f72c0000.usb: Mode Mismatch Interrupt: currently in Host mode init: Service 'adbd' (pid 1915) killed by signal 9 init: Sending signal 9 to service 'adbd' (pid 1915) process group... init: Successfully killed process cgroup uid 0 pid 1915 in 0ms init: processing action (init.svc.adbd=stopped) from (/init.usb.configfs.rc:15) dwc2 f72c0000.usb: dwc2_hc_chhltd_intr_dma: Channel 8 - ChHltd set, but reason is unknown dwc2 f72c0000.usb: hcint 0x00000002, intsts 0x04200029 dwc2 f72c0000.usb: dwc2_hc_chhltd_intr_dma: Channel 12 - ChHltd set, but reason is unknown dwc2 f72c0000.usb: hcint 0x00000002, intsts 0x04200029 dwc2 f72c0000.usb: dwc2_hc_chhltd_intr_dma: Channel 15 - ChHltd set, but reason is unknown dwc2 f72c0000.usb: hcint 0x00000002, intsts 0x04200029 dwc2 f72c0000.usb: dwc2_hc_chhltd_intr_dma: Channel 3 - ChHltd set, but reason is unknown dwc2 f72c0000.usb: hcint 0x00000002, intsts 0x04200029 dwc2 f72c0000.usb: dwc2_hc_chhltd_intr_dma: Channel 4 - ChHltd set, but reason is unknown dwc2 f72c0000.usb: hcint 0x00000002, intsts 0x04200029 dwc2 f72c0000.usb: dwc2_update_urb_state_abn(): trimming xfer length And the usb devices connected are basically hung at this point. It seems like if we're in host mode, we probably shouldn't run the dwc2_hostg_ep_disable logic, so this patch returns an error in that case. With this patch (along with the previous patch in this set), we avoid the mismatched interrupts and connected usb devices continue to function. I'm not sure if some other solution would be better here, but this seems to work, so I wanted to send it out for input on what the right approach should be. Cc: Wei Xu Cc: Guodong Xu Cc: Amit Pundir Cc: YongQin Liu Cc: John Youn Cc: Minas Harutyunyan Cc: Douglas Anderson Cc: Chen Yu Cc: Felipe Balbi Cc: Greg Kroah-Hartman Cc: linux-usb@vger.kernel.org Acked-by: Minas Harutyunyan Tested-by: Minas Harutyunyan Reported-by: YongQin Liu Signed-off-by: John Stultz Signed-off-by: Felipe Balbi Signed-off-by: Sasha Levin Signed-off-by: Greg Kroah-Hartman --- drivers/usb/dwc2/gadget.c | 5 +++++ 1 file changed, 5 insertions(+) --- a/drivers/usb/dwc2/gadget.c +++ b/drivers/usb/dwc2/gadget.c @@ -3117,6 +3117,11 @@ static int dwc2_hsotg_ep_disable(struct return -EINVAL; } + if (hsotg->op_state != OTG_STATE_B_PERIPHERAL) { + dev_err(hsotg->dev, "%s: called in host mode?\n", __func__); + return -EINVAL; + } + epctrl_reg = dir_in ? DIEPCTL(index) : DOEPCTL(index); spin_lock_irqsave(&hsotg->lock, flags); From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [4.9,023/109] usb: dwc2: Error out of dwc2_hsotg_ep_disable() if were in host mode From: Greg Kroah-Hartman Message-Id: <20171207125637.316597152@linuxfoundation.org> Date: Thu, 7 Dec 2017 13:56:07 +0100 To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Wei Xu , Guodong Xu , Amit Pundir , YongQin Liu , John Youn , Minas Harutyunyan , Douglas Anderson , Chen Yu , Felipe Balbi , linux-usb@vger.kernel.org, Minas Harutyunyan , John Stultz , Sasha Levin List-ID: NC45LXN0YWJsZSByZXZpZXcgcGF0Y2guICBJZiBhbnlvbmUgaGFzIGFueSBvYmplY3Rpb25zLCBw bGVhc2UgbGV0IG1lIGtub3cuCgotLS0tLS0tLS0tLS0tLS0tLS0KCkZyb206IEpvaG4gU3R1bHR6 IDxqb2huLnN0dWx0ekBsaW5hcm8ub3JnPgoKClsgVXBzdHJlYW0gY29tbWl0IDliNDgxMDkyYzJh MzFhNmI2MzBhZmY5YzI4ZjAxNDViZjY2ODM3ODcgXQoKV2UndmUgZm91bmQgdGhhdCB3aGlsZSBp biBob3N0IG1vZGUsIHVzaW5nIEFuZHJvaWQsIGlmIG9uZSBydW5zCnRoZSBjb21tYW5kOgogIHN0 b3AgYWRiZAoKVGhlIGV4aXN0aW5nIHVzYiBkZXZpY2VzIGJlaW5nIHV0aWxpemVkIGluIGhvc3Qg bW9kZSBhcmUgZGlzY29ubmVjdGVkLgpUaGlzIGlzIG1vc3QgdmlzaWJsZSB3aXRoIHVzYiBuZXR3 b3JraW5nIGRldmljZXMuCgpUaGlzIHNlZW1zIHRvIGJlIGR1ZSB0byBhZGJkIGNsb3NpbmcgdGhl IGZpbGU6CiAgL2Rldi91c2ItZmZzL2FkYi9lcDAKV2hpY2ggY2FsbHMgZmZzX2VwMF9yZWxlYXNl KCkgYW5kIHRoZSBmb2xsb3dpbmcgYmFja3RyYWNlOgoKWzxmZmZmZmY4MDA4NzVhNDMwPl0gZHdj Ml9oc290Z19lcF9kaXNhYmxlKzB4MTQ4LzB4MTUwCls8ZmZmZmZmODAwODc1YTQ5OD5dIGR3YzJf aHNvdGdfdWRjX3N0b3ArMHg2MC8weDExMApbPGZmZmZmZjgwMDg3ODc5NTA+XSB1c2JfZ2FkZ2V0 X3JlbW92ZV9kcml2ZXIrMHg1OC8weDc4Cls8ZmZmZmZmODAwODc4NzllND5dIHVzYl9nYWRnZXRf dW5yZWdpc3Rlcl9kcml2ZXIrMHg3NC8weGU4Cls8ZmZmZmZmODAwODc4NTBjMD5dIHVucmVnaXN0 ZXJfZ2FkZ2V0KzB4MjgvMHg1OApbPGZmZmZmZjgwMDg3ODUxMWM+XSB1bnJlZ2lzdGVyX2dhZGdl dF9pdGVtKzB4MmMvMHg0MApbPGZmZmZmZjgwMDg3OTBlYTg+XSBmZnNfZGF0YV9jbGVhcisweGU4 LzB4ZjgKWzxmZmZmZmY4MDA4NzkwZWQ4Pl0gZmZzX2RhdGFfcmVzZXQrMHgyMC8weDU4Cls8ZmZm ZmZmODAwODc5MzIxOD5dIGZmc19kYXRhX2Nsb3NlZCsweDk4LzB4ZTgKWzxmZmZmZmY4MDA4Nzkz MmQ4Pl0gZmZzX2VwMF9yZWxlYXNlKzB4MjAvMHgzMAoKVGhlbiB3aGVuIGR3YzJfaHNvdGdfZXBf ZGlzYWJsZSgpIGlzIGNhbGxlZCwgd2UgY2FsbApraWxsX2FsbF9yZXF1ZXN0cygpIHdoaWNoIGNh dXNlcyBhIGJ1bmNoIG9mIHRoZSBmb2xsb3dpbmcKbWVzc2FnZXM6Cgpkd2MyIGY3MmMwMDAwLnVz YjogTW9kZSBNaXNtYXRjaCBJbnRlcnJ1cHQ6IGN1cnJlbnRseSBpbiBIb3N0IG1vZGUKZHdjMiBm NzJjMDAwMC51c2I6IE1vZGUgTWlzbWF0Y2ggSW50ZXJydXB0OiBjdXJyZW50bHkgaW4gSG9zdCBt b2RlCmR3YzIgZjcyYzAwMDAudXNiOiBNb2RlIE1pc21hdGNoIEludGVycnVwdDogY3VycmVudGx5 IGluIEhvc3QgbW9kZQpkd2MyIGY3MmMwMDAwLnVzYjogTW9kZSBNaXNtYXRjaCBJbnRlcnJ1cHQ6 IGN1cnJlbnRseSBpbiBIb3N0IG1vZGUKZHdjMiBmNzJjMDAwMC51c2I6IE1vZGUgTWlzbWF0Y2gg SW50ZXJydXB0OiBjdXJyZW50bHkgaW4gSG9zdCBtb2RlCmR3YzIgZjcyYzAwMDAudXNiOiBNb2Rl IE1pc21hdGNoIEludGVycnVwdDogY3VycmVudGx5IGluIEhvc3QgbW9kZQpkd2MyIGY3MmMwMDAw LnVzYjogTW9kZSBNaXNtYXRjaCBJbnRlcnJ1cHQ6IGN1cnJlbnRseSBpbiBIb3N0IG1vZGUKZHdj MiBmNzJjMDAwMC51c2I6IE1vZGUgTWlzbWF0Y2ggSW50ZXJydXB0OiBjdXJyZW50bHkgaW4gSG9z dCBtb2RlCmluaXQ6IFNlcnZpY2UgJ2FkYmQnIChwaWQgMTkxNSkga2lsbGVkIGJ5IHNpZ25hbCA5 CmluaXQ6IFNlbmRpbmcgc2lnbmFsIDkgdG8gc2VydmljZSAnYWRiZCcgKHBpZCAxOTE1KSBwcm9j ZXNzIGdyb3VwLi4uCmluaXQ6IFN1Y2Nlc3NmdWxseSBraWxsZWQgcHJvY2VzcyBjZ3JvdXAgdWlk IDAgcGlkIDE5MTUgaW4gMG1zCmluaXQ6IHByb2Nlc3NpbmcgYWN0aW9uIChpbml0LnN2Yy5hZGJk PXN0b3BwZWQpIGZyb20gKC9pbml0LnVzYi5jb25maWdmcy5yYzoxNSkKZHdjMiBmNzJjMDAwMC51 c2I6IGR3YzJfaGNfY2hobHRkX2ludHJfZG1hOiBDaGFubmVsIDggLSBDaEhsdGQgc2V0LCBidXQg cmVhc29uIGlzIHVua25vd24KZHdjMiBmNzJjMDAwMC51c2I6IGhjaW50IDB4MDAwMDAwMDIsIGlu dHN0cyAweDA0MjAwMDI5CmR3YzIgZjcyYzAwMDAudXNiOiBkd2MyX2hjX2NoaGx0ZF9pbnRyX2Rt YTogQ2hhbm5lbCAxMiAtIENoSGx0ZCBzZXQsIGJ1dCByZWFzb24gaXMgdW5rbm93bgpkd2MyIGY3 MmMwMDAwLnVzYjogaGNpbnQgMHgwMDAwMDAwMiwgaW50c3RzIDB4MDQyMDAwMjkKZHdjMiBmNzJj MDAwMC51c2I6IGR3YzJfaGNfY2hobHRkX2ludHJfZG1hOiBDaGFubmVsIDE1IC0gQ2hIbHRkIHNl dCwgYnV0IHJlYXNvbiBpcyB1bmtub3duCmR3YzIgZjcyYzAwMDAudXNiOiBoY2ludCAweDAwMDAw MDAyLCBpbnRzdHMgMHgwNDIwMDAyOQpkd2MyIGY3MmMwMDAwLnVzYjogZHdjMl9oY19jaGhsdGRf aW50cl9kbWE6IENoYW5uZWwgMyAtIENoSGx0ZCBzZXQsIGJ1dCByZWFzb24gaXMgdW5rbm93bgpk d2MyIGY3MmMwMDAwLnVzYjogaGNpbnQgMHgwMDAwMDAwMiwgaW50c3RzIDB4MDQyMDAwMjkKZHdj MiBmNzJjMDAwMC51c2I6IGR3YzJfaGNfY2hobHRkX2ludHJfZG1hOiBDaGFubmVsIDQgLSBDaEhs dGQgc2V0LCBidXQgcmVhc29uIGlzIHVua25vd24KZHdjMiBmNzJjMDAwMC51c2I6IGhjaW50IDB4 MDAwMDAwMDIsIGludHN0cyAweDA0MjAwMDI5CmR3YzIgZjcyYzAwMDAudXNiOiBkd2MyX3VwZGF0 ZV91cmJfc3RhdGVfYWJuKCk6IHRyaW1taW5nIHhmZXIgbGVuZ3RoCgpBbmQgdGhlIHVzYiBkZXZp Y2VzIGNvbm5lY3RlZCBhcmUgYmFzaWNhbGx5IGh1bmcgYXQgdGhpcyBwb2ludC4KCkl0IHNlZW1z IGxpa2UgaWYgd2UncmUgaW4gaG9zdCBtb2RlLCB3ZSBwcm9iYWJseSBzaG91bGRuJ3QgcnVuCnRo ZSBkd2MyX2hvc3RnX2VwX2Rpc2FibGUgbG9naWMsIHNvIHRoaXMgcGF0Y2ggcmV0dXJucyBhbiBl cnJvcgppbiB0aGF0IGNhc2UuCgpXaXRoIHRoaXMgcGF0Y2ggKGFsb25nIHdpdGggdGhlIHByZXZp b3VzIHBhdGNoIGluIHRoaXMgc2V0KSwgd2UgYXZvaWQKdGhlIG1pc21hdGNoZWQgaW50ZXJydXB0 cyBhbmQgY29ubmVjdGVkIHVzYiBkZXZpY2VzIGNvbnRpbnVlIHRvIGZ1bmN0aW9uLgoKSSdtIG5v dCBzdXJlIGlmIHNvbWUgb3RoZXIgc29sdXRpb24gd291bGQgYmUgYmV0dGVyIGhlcmUsIGJ1dCB0 aGlzIHNlZW1zCnRvIHdvcmssIHNvIEkgd2FudGVkIHRvIHNlbmQgaXQgb3V0IGZvciBpbnB1dCBv biB3aGF0IHRoZSByaWdodCBhcHByb2FjaApzaG91bGQgYmUuCgpDYzogV2VpIFh1IDx4dXdlaTVA aGlzaWxpY29uLmNvbT4KQ2M6IEd1b2RvbmcgWHUgPGd1b2RvbmcueHVAbGluYXJvLm9yZz4KQ2M6 IEFtaXQgUHVuZGlyIDxhbWl0LnB1bmRpckBsaW5hcm8ub3JnPgpDYzogWW9uZ1FpbiBMaXUgPHlv bmdxaW4ubGl1QGxpbmFyby5vcmc+CkNjOiBKb2huIFlvdW4gPGpvaG55b3VuQHN5bm9wc3lzLmNv bT4KQ2M6IE1pbmFzIEhhcnV0eXVueWFuIDxNaW5hcy5IYXJ1dHl1bnlhbkBzeW5vcHN5cy5jb20+ CkNjOiBEb3VnbGFzIEFuZGVyc29uIDxkaWFuZGVyc0BjaHJvbWl1bS5vcmc+CkNjOiBDaGVuIFl1 IDxjaGVueXU1NkBodWF3ZWkuY29tPgpDYzogRmVsaXBlIEJhbGJpIDxmZWxpcGUuYmFsYmlAbGlu dXguaW50ZWwuY29tPgpDYzogR3JlZyBLcm9haC1IYXJ0bWFuIDxncmVna2hAbGludXhmb3VuZGF0 aW9uLm9yZz4KQ2M6IGxpbnV4LXVzYkB2Z2VyLmtlcm5lbC5vcmcKQWNrZWQtYnk6IE1pbmFzIEhh cnV0eXVueWFuIDxobWluYXNAc3lub3BzeXMuY29tPgpUZXN0ZWQtYnk6IE1pbmFzIEhhcnV0eXVu eWFuIDxobWluYXNAc3lub3BzeXMuY29tPgpSZXBvcnRlZC1ieTogWW9uZ1FpbiBMaXUgPHlvbmdx aW4ubGl1QGxpbmFyby5vcmc+ClNpZ25lZC1vZmYtYnk6IEpvaG4gU3R1bHR6IDxqb2huLnN0dWx0 ekBsaW5hcm8ub3JnPgpTaWduZWQtb2ZmLWJ5OiBGZWxpcGUgQmFsYmkgPGZlbGlwZS5iYWxiaUBs aW51eC5pbnRlbC5jb20+ClNpZ25lZC1vZmYtYnk6IFNhc2hhIExldmluIDxhbGV4YW5kZXIubGV2 aW5AdmVyaXpvbi5jb20+ClNpZ25lZC1vZmYtYnk6IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2to QGxpbnV4Zm91bmRhdGlvbi5vcmc+Ci0tLQogZHJpdmVycy91c2IvZHdjMi9nYWRnZXQuYyB8ICAg IDUgKysrKysKIDEgZmlsZSBjaGFuZ2VkLCA1IGluc2VydGlvbnMoKykKCgoKLS0KVG8gdW5zdWJz Y3JpYmUgZnJvbSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LXVz YiIgaW4KdGhlIGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcK TW9yZSBtYWpvcmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8t aW5mby5odG1sCgotLS0gYS9kcml2ZXJzL3VzYi9kd2MyL2dhZGdldC5jCisrKyBiL2RyaXZlcnMv dXNiL2R3YzIvZ2FkZ2V0LmMKQEAgLTMxMTcsNiArMzExNywxMSBAQCBzdGF0aWMgaW50IGR3YzJf aHNvdGdfZXBfZGlzYWJsZShzdHJ1Y3QKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJaWYgKGhz b3RnLT5vcF9zdGF0ZSAhPSBPVEdfU1RBVEVfQl9QRVJJUEhFUkFMKSB7CisJCWRldl9lcnIoaHNv dGctPmRldiwgIiVzOiBjYWxsZWQgaW4gaG9zdCBtb2RlP1xuIiwgX19mdW5jX18pOworCQlyZXR1 cm4gLUVJTlZBTDsKKwl9CisKIAllcGN0cmxfcmVnID0gZGlyX2luID8gRElFUENUTChpbmRleCkg OiBET0VQQ1RMKGluZGV4KTsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZoc290Zy0+bG9jaywgZmxh Z3MpOwo=