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.14,33/75] usb: dwc2: Error out of dwc2_hsotg_ep_disable() if were in host mode From: Greg Kroah-Hartman Message-Id: <20171207130820.103079422@linuxfoundation.org> Date: Thu, 7 Dec 2017 14:07:55 +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: NC4xNC1zdGFibGUgcmV2aWV3IHBhdGNoLiAgSWYgYW55b25lIGhhcyBhbnkgb2JqZWN0aW9ucywg cGxlYXNlIGxldCBtZSBrbm93LgoKLS0tLS0tLS0tLS0tLS0tLS0tCgpGcm9tOiBKb2huIFN0dWx0 eiA8am9obi5zdHVsdHpAbGluYXJvLm9yZz4KCgpbIFVwc3RyZWFtIGNvbW1pdCA5YjQ4MTA5MmMy YTMxYTZiNjMwYWZmOWMyOGYwMTQ1YmY2NjgzNzg3IF0KCldlJ3ZlIGZvdW5kIHRoYXQgd2hpbGUg aW4gaG9zdCBtb2RlLCB1c2luZyBBbmRyb2lkLCBpZiBvbmUgcnVucwp0aGUgY29tbWFuZDoKICBz dG9wIGFkYmQKClRoZSBleGlzdGluZyB1c2IgZGV2aWNlcyBiZWluZyB1dGlsaXplZCBpbiBob3N0 IG1vZGUgYXJlIGRpc2Nvbm5lY3RlZC4KVGhpcyBpcyBtb3N0IHZpc2libGUgd2l0aCB1c2IgbmV0 d29ya2luZyBkZXZpY2VzLgoKVGhpcyBzZWVtcyB0byBiZSBkdWUgdG8gYWRiZCBjbG9zaW5nIHRo ZSBmaWxlOgogIC9kZXYvdXNiLWZmcy9hZGIvZXAwCldoaWNoIGNhbGxzIGZmc19lcDBfcmVsZWFz ZSgpIGFuZCB0aGUgZm9sbG93aW5nIGJhY2t0cmFjZToKCls8ZmZmZmZmODAwODc1YTQzMD5dIGR3 YzJfaHNvdGdfZXBfZGlzYWJsZSsweDE0OC8weDE1MApbPGZmZmZmZjgwMDg3NWE0OTg+XSBkd2My X2hzb3RnX3VkY19zdG9wKzB4NjAvMHgxMTAKWzxmZmZmZmY4MDA4Nzg3OTUwPl0gdXNiX2dhZGdl dF9yZW1vdmVfZHJpdmVyKzB4NTgvMHg3OApbPGZmZmZmZjgwMDg3ODc5ZTQ+XSB1c2JfZ2FkZ2V0 X3VucmVnaXN0ZXJfZHJpdmVyKzB4NzQvMHhlOApbPGZmZmZmZjgwMDg3ODUwYzA+XSB1bnJlZ2lz dGVyX2dhZGdldCsweDI4LzB4NTgKWzxmZmZmZmY4MDA4Nzg1MTFjPl0gdW5yZWdpc3Rlcl9nYWRn ZXRfaXRlbSsweDJjLzB4NDAKWzxmZmZmZmY4MDA4NzkwZWE4Pl0gZmZzX2RhdGFfY2xlYXIrMHhl OC8weGY4Cls8ZmZmZmZmODAwODc5MGVkOD5dIGZmc19kYXRhX3Jlc2V0KzB4MjAvMHg1OApbPGZm ZmZmZjgwMDg3OTMyMTg+XSBmZnNfZGF0YV9jbG9zZWQrMHg5OC8weGU4Cls8ZmZmZmZmODAwODc5 MzJkOD5dIGZmc19lcDBfcmVsZWFzZSsweDIwLzB4MzAKClRoZW4gd2hlbiBkd2MyX2hzb3RnX2Vw X2Rpc2FibGUoKSBpcyBjYWxsZWQsIHdlIGNhbGwKa2lsbF9hbGxfcmVxdWVzdHMoKSB3aGljaCBj YXVzZXMgYSBidW5jaCBvZiB0aGUgZm9sbG93aW5nCm1lc3NhZ2VzOgoKZHdjMiBmNzJjMDAwMC51 c2I6IE1vZGUgTWlzbWF0Y2ggSW50ZXJydXB0OiBjdXJyZW50bHkgaW4gSG9zdCBtb2RlCmR3YzIg ZjcyYzAwMDAudXNiOiBNb2RlIE1pc21hdGNoIEludGVycnVwdDogY3VycmVudGx5IGluIEhvc3Qg bW9kZQpkd2MyIGY3MmMwMDAwLnVzYjogTW9kZSBNaXNtYXRjaCBJbnRlcnJ1cHQ6IGN1cnJlbnRs eSBpbiBIb3N0IG1vZGUKZHdjMiBmNzJjMDAwMC51c2I6IE1vZGUgTWlzbWF0Y2ggSW50ZXJydXB0 OiBjdXJyZW50bHkgaW4gSG9zdCBtb2RlCmR3YzIgZjcyYzAwMDAudXNiOiBNb2RlIE1pc21hdGNo IEludGVycnVwdDogY3VycmVudGx5IGluIEhvc3QgbW9kZQpkd2MyIGY3MmMwMDAwLnVzYjogTW9k ZSBNaXNtYXRjaCBJbnRlcnJ1cHQ6IGN1cnJlbnRseSBpbiBIb3N0IG1vZGUKZHdjMiBmNzJjMDAw MC51c2I6IE1vZGUgTWlzbWF0Y2ggSW50ZXJydXB0OiBjdXJyZW50bHkgaW4gSG9zdCBtb2RlCmR3 YzIgZjcyYzAwMDAudXNiOiBNb2RlIE1pc21hdGNoIEludGVycnVwdDogY3VycmVudGx5IGluIEhv c3QgbW9kZQppbml0OiBTZXJ2aWNlICdhZGJkJyAocGlkIDE5MTUpIGtpbGxlZCBieSBzaWduYWwg OQppbml0OiBTZW5kaW5nIHNpZ25hbCA5IHRvIHNlcnZpY2UgJ2FkYmQnIChwaWQgMTkxNSkgcHJv Y2VzcyBncm91cC4uLgppbml0OiBTdWNjZXNzZnVsbHkga2lsbGVkIHByb2Nlc3MgY2dyb3VwIHVp ZCAwIHBpZCAxOTE1IGluIDBtcwppbml0OiBwcm9jZXNzaW5nIGFjdGlvbiAoaW5pdC5zdmMuYWRi ZD1zdG9wcGVkKSBmcm9tICgvaW5pdC51c2IuY29uZmlnZnMucmM6MTUpCmR3YzIgZjcyYzAwMDAu dXNiOiBkd2MyX2hjX2NoaGx0ZF9pbnRyX2RtYTogQ2hhbm5lbCA4IC0gQ2hIbHRkIHNldCwgYnV0 IHJlYXNvbiBpcyB1bmtub3duCmR3YzIgZjcyYzAwMDAudXNiOiBoY2ludCAweDAwMDAwMDAyLCBp bnRzdHMgMHgwNDIwMDAyOQpkd2MyIGY3MmMwMDAwLnVzYjogZHdjMl9oY19jaGhsdGRfaW50cl9k bWE6IENoYW5uZWwgMTIgLSBDaEhsdGQgc2V0LCBidXQgcmVhc29uIGlzIHVua25vd24KZHdjMiBm NzJjMDAwMC51c2I6IGhjaW50IDB4MDAwMDAwMDIsIGludHN0cyAweDA0MjAwMDI5CmR3YzIgZjcy YzAwMDAudXNiOiBkd2MyX2hjX2NoaGx0ZF9pbnRyX2RtYTogQ2hhbm5lbCAxNSAtIENoSGx0ZCBz ZXQsIGJ1dCByZWFzb24gaXMgdW5rbm93bgpkd2MyIGY3MmMwMDAwLnVzYjogaGNpbnQgMHgwMDAw MDAwMiwgaW50c3RzIDB4MDQyMDAwMjkKZHdjMiBmNzJjMDAwMC51c2I6IGR3YzJfaGNfY2hobHRk X2ludHJfZG1hOiBDaGFubmVsIDMgLSBDaEhsdGQgc2V0LCBidXQgcmVhc29uIGlzIHVua25vd24K ZHdjMiBmNzJjMDAwMC51c2I6IGhjaW50IDB4MDAwMDAwMDIsIGludHN0cyAweDA0MjAwMDI5CmR3 YzIgZjcyYzAwMDAudXNiOiBkd2MyX2hjX2NoaGx0ZF9pbnRyX2RtYTogQ2hhbm5lbCA0IC0gQ2hI bHRkIHNldCwgYnV0IHJlYXNvbiBpcyB1bmtub3duCmR3YzIgZjcyYzAwMDAudXNiOiBoY2ludCAw eDAwMDAwMDAyLCBpbnRzdHMgMHgwNDIwMDAyOQpkd2MyIGY3MmMwMDAwLnVzYjogZHdjMl91cGRh dGVfdXJiX3N0YXRlX2FibigpOiB0cmltbWluZyB4ZmVyIGxlbmd0aAoKQW5kIHRoZSB1c2IgZGV2 aWNlcyBjb25uZWN0ZWQgYXJlIGJhc2ljYWxseSBodW5nIGF0IHRoaXMgcG9pbnQuCgpJdCBzZWVt cyBsaWtlIGlmIHdlJ3JlIGluIGhvc3QgbW9kZSwgd2UgcHJvYmFibHkgc2hvdWxkbid0IHJ1bgp0 aGUgZHdjMl9ob3N0Z19lcF9kaXNhYmxlIGxvZ2ljLCBzbyB0aGlzIHBhdGNoIHJldHVybnMgYW4g ZXJyb3IKaW4gdGhhdCBjYXNlLgoKV2l0aCB0aGlzIHBhdGNoIChhbG9uZyB3aXRoIHRoZSBwcmV2 aW91cyBwYXRjaCBpbiB0aGlzIHNldCksIHdlIGF2b2lkCnRoZSBtaXNtYXRjaGVkIGludGVycnVw dHMgYW5kIGNvbm5lY3RlZCB1c2IgZGV2aWNlcyBjb250aW51ZSB0byBmdW5jdGlvbi4KCkknbSBu b3Qgc3VyZSBpZiBzb21lIG90aGVyIHNvbHV0aW9uIHdvdWxkIGJlIGJldHRlciBoZXJlLCBidXQg dGhpcyBzZWVtcwp0byB3b3JrLCBzbyBJIHdhbnRlZCB0byBzZW5kIGl0IG91dCBmb3IgaW5wdXQg b24gd2hhdCB0aGUgcmlnaHQgYXBwcm9hY2gKc2hvdWxkIGJlLgoKQ2M6IFdlaSBYdSA8eHV3ZWk1 QGhpc2lsaWNvbi5jb20+CkNjOiBHdW9kb25nIFh1IDxndW9kb25nLnh1QGxpbmFyby5vcmc+CkNj OiBBbWl0IFB1bmRpciA8YW1pdC5wdW5kaXJAbGluYXJvLm9yZz4KQ2M6IFlvbmdRaW4gTGl1IDx5 b25ncWluLmxpdUBsaW5hcm8ub3JnPgpDYzogSm9obiBZb3VuIDxqb2hueW91bkBzeW5vcHN5cy5j b20+CkNjOiBNaW5hcyBIYXJ1dHl1bnlhbiA8TWluYXMuSGFydXR5dW55YW5Ac3lub3BzeXMuY29t PgpDYzogRG91Z2xhcyBBbmRlcnNvbiA8ZGlhbmRlcnNAY2hyb21pdW0ub3JnPgpDYzogQ2hlbiBZ dSA8Y2hlbnl1NTZAaHVhd2VpLmNvbT4KQ2M6IEZlbGlwZSBCYWxiaSA8ZmVsaXBlLmJhbGJpQGxp bnV4LmludGVsLmNvbT4KQ2M6IEdyZWcgS3JvYWgtSGFydG1hbiA8Z3JlZ2toQGxpbnV4Zm91bmRh dGlvbi5vcmc+CkNjOiBsaW51eC11c2JAdmdlci5rZXJuZWwub3JnCkFja2VkLWJ5OiBNaW5hcyBI YXJ1dHl1bnlhbiA8aG1pbmFzQHN5bm9wc3lzLmNvbT4KVGVzdGVkLWJ5OiBNaW5hcyBIYXJ1dHl1 bnlhbiA8aG1pbmFzQHN5bm9wc3lzLmNvbT4KUmVwb3J0ZWQtYnk6IFlvbmdRaW4gTGl1IDx5b25n cWluLmxpdUBsaW5hcm8ub3JnPgpTaWduZWQtb2ZmLWJ5OiBKb2huIFN0dWx0eiA8am9obi5zdHVs dHpAbGluYXJvLm9yZz4KU2lnbmVkLW9mZi1ieTogRmVsaXBlIEJhbGJpIDxmZWxpcGUuYmFsYmlA bGludXguaW50ZWwuY29tPgpTaWduZWQtb2ZmLWJ5OiBTYXNoYSBMZXZpbiA8YWxleGFuZGVyLmxl dmluQHZlcml6b24uY29tPgpTaWduZWQtb2ZmLWJ5OiBHcmVnIEtyb2FoLUhhcnRtYW4gPGdyZWdr aEBsaW51eGZvdW5kYXRpb24ub3JnPgotLS0KIGRyaXZlcnMvdXNiL2R3YzIvZ2FkZ2V0LmMgfCAg ICA1ICsrKysrCiAxIGZpbGUgY2hhbmdlZCwgNSBpbnNlcnRpb25zKCspCgoKCi0tClRvIHVuc3Vi c2NyaWJlIGZyb20gdGhpcyBsaXN0OiBzZW5kIHRoZSBsaW5lICJ1bnN1YnNjcmliZSBsaW51eC11 c2IiIGluCnRoZSBib2R5IG9mIGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3Jn Ck1vcmUgbWFqb3Jkb21vIGluZm8gYXQgIGh0dHA6Ly92Z2VyLmtlcm5lbC5vcmcvbWFqb3Jkb21v LWluZm8uaHRtbAoKLS0tIGEvZHJpdmVycy91c2IvZHdjMi9nYWRnZXQuYworKysgYi9kcml2ZXJz L3VzYi9kd2MyL2dhZGdldC5jCkBAIC00MDA2LDYgKzQwMDYsMTEgQEAgc3RhdGljIGludCBkd2My X2hzb3RnX2VwX2Rpc2FibGUoc3RydWN0CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmICho c290Zy0+b3Bfc3RhdGUgIT0gT1RHX1NUQVRFX0JfUEVSSVBIRVJBTCkgeworCQlkZXZfZXJyKGhz b3RnLT5kZXYsICIlczogY2FsbGVkIGluIGhvc3QgbW9kZT9cbiIsIF9fZnVuY19fKTsKKwkJcmV0 dXJuIC1FSU5WQUw7CisJfQorCiAJZXBjdHJsX3JlZyA9IGRpcl9pbiA/IERJRVBDVEwoaW5kZXgp IDogRE9FUENUTChpbmRleCk7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmaHNvdGctPmxvY2ssIGZs YWdzKTsK From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932469AbdLGNPi (ORCPT ); Thu, 7 Dec 2017 08:15:38 -0500 Received: from mail.linuxfoundation.org ([140.211.169.12]:34806 "EHLO mail.linuxfoundation.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755475AbdLGNNU (ORCPT ); Thu, 7 Dec 2017 08:13:20 -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.14 33/75] usb: dwc2: Error out of dwc2_hsotg_ep_disable() if were in host mode Date: Thu, 7 Dec 2017 14:07:55 +0100 Message-Id: <20171207130820.103079422@linuxfoundation.org> X-Mailer: git-send-email 2.15.1 In-Reply-To: <20171207130818.742746317@linuxfoundation.org> References: <20171207130818.742746317@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.14-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 @@ -4006,6 +4006,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);