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: [v3] usb: hub: add retry routine after intr URB submit error From: Greg Kroah-Hartman Message-Id: <20190107163310.GA17519@kroah.com> Date: Mon, 7 Jan 2019 17:33:10 +0100 To: Nicolas Saenz Julienne Cc: oneukum@suse.com, stern@rowland.harvard.edu, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org List-ID: T24gVHVlLCBOb3YgMjAsIDIwMTggYXQgMDM6MzQ6MzhQTSArMDEwMCwgTmljb2xhcyBTYWVueiBK dWxpZW5uZSB3cm90ZToKPiBUaGUgaHViIHNlbmRzIGhvdC1wbHVnIGV2ZW50cyB0byB0aGUgaG9z dCB0cm91Z2ggaXQncyBpbnRlcnJ1cHQgVVJCLiBUaGUKPiBkcml2ZXIgdGFrZXMgY2FyZSBvZiBj b21wbGV0aW5nIHRoZSBVUkIgYW5kIHJlLXN1Ym1pdHRpbmcgaXQuIENvbXBsZXRpb24KPiBlcnJv cnMgYXJlIGhhbmRsZWQgaW4gdGhlIGh1Yl9ldmVudCgpIHdvcmssIHlldCBzdWJtaXNzaW9uIGVy cm9ycyBhcmUKPiBpZ25vcmVkLCByZW5kZXJpbmcgdGhlIGRldmljZSB1bnJlc3BvbnNpdmUuIEFs bCBmdXJ0aGVyIGV2ZW50cyBhcmUgbG9zdC4KPiAKPiBJdCBpcyBmYWlybHkgaGFyZCB0byBmaW5k IHRoaXMgaXNzdWUgaW4gdGhlIHdpbGQsIHNpbmNlIHlvdSBoYXZlIHRvIHRpbWUKPiB0aGUgVVNC IGhvdC1wbHVnIGV2ZW50IHdpdGggdGhlIFVSQiBzdWJtaXNzaW9uIGZhaWx1cmUuIEZvciBpbnN0 YW5jZSBpdAo+IGNvdWxkIGJlIHRoZSBzeXN0ZW0gcnVubmluZyBvdXQgb2YgbWVtb3J5IG9yIHNv bWUgbWFsZnVuY3Rpb24gaW4gdGhlIFVTQgo+IGNvbnRyb2xsZXIgZHJpdmVyLiBOZXZlcnRoZWxl c3MsIGl0J3MgcHJldHR5IHJlYXNvbmFibGUgdG8gdGhpbmsgaXQnbGwKPiBoYXBwZW4gc29tZXRp bWUuIE9uZSBjYW4gdHJpZ2dlciB0aGlzIGlzc3VlIHVzaW5nIGVCUEYncyBmdW5jdGlvbgo+IG92 ZXJyaWRlIGZlYXR1cmUgKHNlZSBCQ0MncyBpbmplY3QucHkgc2NyaXB0KS4KPiAKPiBUaGlzIHBh dGNoIGFkZHMgYSByZXRyeSByb3V0aW5lIHRvIHRoZSBldmVudCBvZiBhIHN1Ym1pc3Npb24gZXJy b3IuIFRoZQo+IEhVQiBkcml2ZXIgd2lsbCB0cnkgdG8gcmUtc3VibWl0IHRoZSBVUkIgb25jZSBl dmVyeSBzZWNvbmQgdW50aWwgaXQncwo+IHN1Y2Nlc3NmdWwgb3IgdGhlIEhVQiBpcyBkaXNjb25u ZWN0ZWQuCj4gCj4gQXMgc29tZSBVU0Igc3Vic3lzdGVtcyBhbHJlYWR5IHRha2UgY2FyZSBvZiB0 aGlzIGlzc3VlLCB0aGUKPiBpbXBsZW1lbnRhdGlvbiB3YXMgaW5zcGlyZWQgZnJvbSB1c2JoaWQv aGlkX2NvcmUuYydzLgo+IAo+IFNpZ25lZC1vZmYtYnk6IE5pY29sYXMgU2FlbnogSnVsaWVubmUg PG5zYWVuemp1bGllbm5lQHN1c2UuZGU+Cj4gCj4gLS0tCgpXaGF0IGV2ZXIgaGFwcGVuZWQgdG8g dGhpcyBwYXRjaD8gIElzIGl0IHN0aWxsIG5lZWRlZD8gIE9saXZlciBhbmQgQWxhbiwKYW55IG9i amVjdGlvbnMgYWJvdXQgaXQgYW55bW9yZT8KCnRoYW5rcywKCmdyZWcgay1oCgo+IAo+IHYzOiBB cyBwZXIgT2xpdmVyJ3MgcmVxdWVzdDoKPiAgIC0gVGFrZSBjYXJlIG9mIHJhY2UgY29uZGl0aW9u IGJldHdlZW4gZGlzY29ubmVjdCBhbmQgaXJxCj4gCj4gdjI6IGFzIHBlciBBbGFuJ3MgYW5kIE9s aXZlcidzIGNvbW1lbnRzOgo+ICAgLSBSZW5hbWUgdGltZXIKPiAgIC0gRGVsZXRlIHRoZSB0aW1l ciBvbiBkaXNjb25uZWN0Cj4gICAtIERvbid0IHJlc2V0IEhVQiBub3IgZXhwb25lbnRpYWwgc2xv d2Rvd24gdGhlIHRpbWVyLCAxcyBmaXhlZCByZXRyeQo+ICAgICBwZXJpb2QKPiAgIC0gQ2hlY2sg Zm9yIC1FU0hVVERPV04gcHJpb3Iga2lja2luZyB0aGUgdGltZXIKPiAKPiAgZHJpdmVycy91c2Iv Y29yZS9odWIuYyB8IDQ1ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0t LQo+ICBkcml2ZXJzL3VzYi9jb3JlL2h1Yi5oIHwgIDIgKysKPiAgMiBmaWxlcyBjaGFuZ2VkLCA0 MSBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3VzYi9jb3JlL2h1Yi5jIGIvZHJpdmVycy91c2IvY29yZS9odWIuYwo+IGluZGV4IGM2MDc3ZDU4 MmQyOS4uNjMwNDkwYTM1MzAxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvaHViLmMK PiArKysgYi9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5jCj4gQEAgLTYwNyw2ICs2MDcsMzggQEAgc3Rh dGljIGludCBodWJfcG9ydF9zdGF0dXMoc3RydWN0IHVzYl9odWIgKmh1YiwgaW50IHBvcnQxLAo+ ICAJCQkJICAgc3RhdHVzLCBjaGFuZ2UsIE5VTEwpOwo+ICB9Cj4gIAo+ICtzdGF0aWMgdm9pZCBo dWJfcmVzdWJtaXRfaXJxX3VyYihzdHJ1Y3QgdXNiX2h1YiAqaHViKQo+ICt7Cj4gKwl1bnNpZ25l ZCBsb25nIGZsYWdzOwo+ICsJaW50IHN0YXR1czsKPiArCj4gKwlzcGluX2xvY2tfaXJxc2F2ZSgm aHViLT5pcnFfdXJiX2xvY2ssIGZsYWdzKTsKPiArCj4gKwlpZiAoaHViLT5xdWllc2NpbmcpIHsK PiArCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZodWItPmlycV91cmJfbG9jaywgZmxhZ3MpOwo+ ICsJCXJldHVybjsKPiArCX0KPiArCj4gKwlzdGF0dXMgPSB1c2Jfc3VibWl0X3VyYihodWItPnVy YiwgR0ZQX0FUT01JQyk7Cj4gKwlpZiAoc3RhdHVzICYmIHN0YXR1cyAhPSAtRU5PREVWICYmIHN0 YXR1cyAhPSAtRVBFUk0gJiYKPiArCSAgICBzdGF0dXMgIT0gLUVTSFVURE9XTikgewo+ICsJCWRl dl9lcnIoaHViLT5pbnRmZGV2LCAicmVzdWJtaXQgLS0+ICVkXG4iLCBzdGF0dXMpOwo+ICsJCW1v ZF90aW1lcigmaHViLT5pcnFfdXJiX3JldHJ5LAo+ICsJCQkgIGppZmZpZXMgKyBtc2Vjc190b19q aWZmaWVzKE1TRUNfUEVSX1NFQykpOwo+ICsKPiArCX0KPiArCj4gKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZodWItPmlycV91cmJfbG9jaywgZmxhZ3MpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9p ZCBodWJfcmV0cnlfaXJxX3VyYihzdHJ1Y3QgdGltZXJfbGlzdCAqdCkKPiArewo+ICsJc3RydWN0 IHVzYl9odWIgKmh1YiA9IGZyb21fdGltZXIoaHViLCB0LCBpcnFfdXJiX3JldHJ5KTsKPiArCj4g KwlodWJfcmVzdWJtaXRfaXJxX3VyYihodWIpOwo+ICt9Cj4gKwo+ICsKPiAgc3RhdGljIHZvaWQg a2lja19odWJfd3Eoc3RydWN0IHVzYl9odWIgKmh1YikKPiAgewo+ICAJc3RydWN0IHVzYl9pbnRl cmZhY2UgKmludGY7Cj4gQEAgLTcwOSwxMiArNzQxLDcgQEAgc3RhdGljIHZvaWQgaHViX2lycShz dHJ1Y3QgdXJiICp1cmIpCj4gIAlraWNrX2h1Yl93cShodWIpOwo+ICAKPiAgcmVzdWJtaXQ6Cj4g LQlpZiAoaHViLT5xdWllc2NpbmcpCj4gLQkJcmV0dXJuOwo+IC0KPiAtCXN0YXR1cyA9IHVzYl9z dWJtaXRfdXJiKGh1Yi0+dXJiLCBHRlBfQVRPTUlDKTsKPiAtCWlmIChzdGF0dXMgIT0gMCAmJiBz dGF0dXMgIT0gLUVOT0RFViAmJiBzdGF0dXMgIT0gLUVQRVJNKQo+IC0JCWRldl9lcnIoaHViLT5p bnRmZGV2LCAicmVzdWJtaXQgLS0+ICVkXG4iLCBzdGF0dXMpOwo+ICsJaHViX3Jlc3VibWl0X2ly cV91cmIoaHViKTsKPiAgfQo+ICAKPiAgLyogVVNCIDIuMCBzcGVjIFNlY3Rpb24gMTEuMjQuMi4z ICovCj4gQEAgLTEyNTQsMTAgKzEyODEsMTMgQEAgZW51bSBodWJfcXVpZXNjaW5nX3R5cGUgewo+ ICBzdGF0aWMgdm9pZCBodWJfcXVpZXNjZShzdHJ1Y3QgdXNiX2h1YiAqaHViLCBlbnVtIGh1Yl9x dWllc2NpbmdfdHlwZSB0eXBlKQo+ICB7Cj4gIAlzdHJ1Y3QgdXNiX2RldmljZSAqaGRldiA9IGh1 Yi0+aGRldjsKPiArCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Cj4gIAlpbnQgaTsKPiAgCj4gIAkvKiBo dWJfd3EgYW5kIHJlbGF0ZWQgYWN0aXZpdHkgd29uJ3QgcmUtdHJpZ2dlciAqLwo+ICsJc3Bpbl9s b2NrX2lycXNhdmUoJmh1Yi0+aXJxX3VyYl9sb2NrLCBmbGFncyk7Cj4gIAlodWItPnF1aWVzY2lu ZyA9IDE7Cj4gKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZodWItPmlycV91cmJfbG9jaywgZmxh Z3MpOwo+ICAKPiAgCWlmICh0eXBlICE9IEhVQl9TVVNQRU5EKSB7Cj4gIAkJLyogRGlzY29ubmVj dCBhbGwgdGhlIGNoaWxkcmVuICovCj4gQEAgLTEyNjgsNiArMTI5OCw3IEBAIHN0YXRpYyB2b2lk IGh1Yl9xdWllc2NlKHN0cnVjdCB1c2JfaHViICpodWIsIGVudW0gaHViX3F1aWVzY2luZ190eXBl IHR5cGUpCj4gIAl9Cj4gIAo+ICAJLyogU3RvcCBodWJfd3EgYW5kIHJlbGF0ZWQgYWN0aXZpdHkg Ki8KPiArCWRlbF90aW1lcl9zeW5jKCZodWItPmlycV91cmJfcmV0cnkpOwo+ICAJdXNiX2tpbGxf dXJiKGh1Yi0+dXJiKTsKPiAgCWlmIChodWItPmhhc19pbmRpY2F0b3JzKQo+ICAJCWNhbmNlbF9k ZWxheWVkX3dvcmtfc3luYygmaHViLT5sZWRzKTsKPiBAQCAtMTgwMCw2ICsxODMxLDggQEAgc3Rh dGljIGludCBodWJfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsIGNvbnN0IHN0cnVj dCB1c2JfZGV2aWNlX2lkICppZCkKPiAgCUlOSVRfREVMQVlFRF9XT1JLKCZodWItPmxlZHMsIGxl ZF93b3JrKTsKPiAgCUlOSVRfREVMQVlFRF9XT1JLKCZodWItPmluaXRfd29yaywgTlVMTCk7Cj4g IAlJTklUX1dPUksoJmh1Yi0+ZXZlbnRzLCBodWJfZXZlbnQpOwo+ICsJc3Bpbl9sb2NrX2luaXQo Jmh1Yi0+aXJxX3VyYl9sb2NrKTsKPiArCXRpbWVyX3NldHVwKCZodWItPmlycV91cmJfcmV0cnks IGh1Yl9yZXRyeV9pcnFfdXJiLCAwKTsKPiAgCXVzYl9nZXRfaW50ZihpbnRmKTsKPiAgCXVzYl9n ZXRfZGV2KGhkZXYpOwo+ICAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9odWIuaCBi L2RyaXZlcnMvdXNiL2NvcmUvaHViLmgKPiBpbmRleCA0YWNjZmI2M2Y3ZGMuLmE5ZTI0ZTRiOGRm MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL3VzYi9jb3JlL2h1Yi5oCj4gKysrIGIvZHJpdmVycy91 c2IvY29yZS9odWIuaAo+IEBAIC02OSw2ICs2OSw4IEBAIHN0cnVjdCB1c2JfaHViIHsKPiAgCXN0 cnVjdCBkZWxheWVkX3dvcmsJbGVkczsKPiAgCXN0cnVjdCBkZWxheWVkX3dvcmsJaW5pdF93b3Jr Owo+ICAJc3RydWN0IHdvcmtfc3RydWN0ICAgICAgZXZlbnRzOwo+ICsJc3BpbmxvY2tfdAkJaXJx X3VyYl9sb2NrOwo+ICsJc3RydWN0IHRpbWVyX2xpc3QJaXJxX3VyYl9yZXRyeTsKPiAgCXN0cnVj dCB1c2JfcG9ydAkJKipwb3J0czsKPiAgfTsKPiAgCj4gLS0gCj4gMi4xOS4xCj4K From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-13.1 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED,USER_AGENT_MUTT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B1775C43387 for ; Mon, 7 Jan 2019 16:33:17 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 77C492089F for ; Mon, 7 Jan 2019 16:33:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1546878797; bh=3SJHRzAYzwGOUCZJKLg0pNRyB7MJMXVa0JWraZaVOls=; h=Date:From:To:Cc:Subject:References:In-Reply-To:List-ID:From; b=eOqZP9Dp5Ar7ZG22SRXO7hl9rJ3rVNZxd76qfqE0lnQEe9N/GxkHyeaqMHNP41kqr W/aowqliFVrFYwZkFkM7qA6STRE3qJ8rN9fMHqZW1O+dUNFDxEWPZtzkvzfFuFoshC G4LFLDxZV8rrX1fgZ0rhqwnZpIL2DGsBwfAupHTI= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727801AbfAGQdP (ORCPT ); Mon, 7 Jan 2019 11:33:15 -0500 Received: from mail.kernel.org ([198.145.29.99]:46892 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726589AbfAGQdN (ORCPT ); Mon, 7 Jan 2019 11:33:13 -0500 Received: from localhost (5356596B.cm-6-7b.dynamic.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 36F142089F; Mon, 7 Jan 2019 16:33:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1546878792; bh=3SJHRzAYzwGOUCZJKLg0pNRyB7MJMXVa0JWraZaVOls=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Pkt5/9orX15Zz641EkMHFJq+CDdEsQ93mJSIdh7JcEaDnWcNdbTcxBPGL6MFnMAJm SgeheOLuDmzBxPhQpuL1ZItChP/I3p6vjitOqVob+FdGN7MIin5LCOfnIUJSUY46ho mCUVKDCOSRzX+z21bAKV93kVxCpcT7WjZEWBdwL8= Date: Mon, 7 Jan 2019 17:33:10 +0100 From: Greg KH To: Nicolas Saenz Julienne Cc: oneukum@suse.com, stern@rowland.harvard.edu, linux-kernel@vger.kernel.org, linux-usb@vger.kernel.org Subject: Re: [PATCH v3] usb: hub: add retry routine after intr URB submit error Message-ID: <20190107163310.GA17519@kroah.com> References: <20181120143438.18296-1-nsaenzjulienne@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20181120143438.18296-1-nsaenzjulienne@suse.de> User-Agent: Mutt/1.11.1 (2018-12-01) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Nov 20, 2018 at 03:34:38PM +0100, Nicolas Saenz Julienne wrote: > The hub sends hot-plug events to the host trough it's interrupt URB. The > driver takes care of completing the URB and re-submitting it. Completion > errors are handled in the hub_event() work, yet submission errors are > ignored, rendering the device unresponsive. All further events are lost. > > It is fairly hard to find this issue in the wild, since you have to time > the USB hot-plug event with the URB submission failure. For instance it > could be the system running out of memory or some malfunction in the USB > controller driver. Nevertheless, it's pretty reasonable to think it'll > happen sometime. One can trigger this issue using eBPF's function > override feature (see BCC's inject.py script). > > This patch adds a retry routine to the event of a submission error. The > HUB driver will try to re-submit the URB once every second until it's > successful or the HUB is disconnected. > > As some USB subsystems already take care of this issue, the > implementation was inspired from usbhid/hid_core.c's. > > Signed-off-by: Nicolas Saenz Julienne > > --- What ever happened to this patch? Is it still needed? Oliver and Alan, any objections about it anymore? thanks, greg k-h > > v3: As per Oliver's request: > - Take care of race condition between disconnect and irq > > v2: as per Alan's and Oliver's comments: > - Rename timer > - Delete the timer on disconnect > - Don't reset HUB nor exponential slowdown the timer, 1s fixed retry > period > - Check for -ESHUTDOWN prior kicking the timer > > drivers/usb/core/hub.c | 45 ++++++++++++++++++++++++++++++++++++------ > drivers/usb/core/hub.h | 2 ++ > 2 files changed, 41 insertions(+), 6 deletions(-) > > diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c > index c6077d582d29..630490a35301 100644 > --- a/drivers/usb/core/hub.c > +++ b/drivers/usb/core/hub.c > @@ -607,6 +607,38 @@ static int hub_port_status(struct usb_hub *hub, int port1, > status, change, NULL); > } > > +static void hub_resubmit_irq_urb(struct usb_hub *hub) > +{ > + unsigned long flags; > + int status; > + > + spin_lock_irqsave(&hub->irq_urb_lock, flags); > + > + if (hub->quiescing) { > + spin_unlock_irqrestore(&hub->irq_urb_lock, flags); > + return; > + } > + > + status = usb_submit_urb(hub->urb, GFP_ATOMIC); > + if (status && status != -ENODEV && status != -EPERM && > + status != -ESHUTDOWN) { > + dev_err(hub->intfdev, "resubmit --> %d\n", status); > + mod_timer(&hub->irq_urb_retry, > + jiffies + msecs_to_jiffies(MSEC_PER_SEC)); > + > + } > + > + spin_unlock_irqrestore(&hub->irq_urb_lock, flags); > +} > + > +static void hub_retry_irq_urb(struct timer_list *t) > +{ > + struct usb_hub *hub = from_timer(hub, t, irq_urb_retry); > + > + hub_resubmit_irq_urb(hub); > +} > + > + > static void kick_hub_wq(struct usb_hub *hub) > { > struct usb_interface *intf; > @@ -709,12 +741,7 @@ static void hub_irq(struct urb *urb) > kick_hub_wq(hub); > > resubmit: > - if (hub->quiescing) > - return; > - > - status = usb_submit_urb(hub->urb, GFP_ATOMIC); > - if (status != 0 && status != -ENODEV && status != -EPERM) > - dev_err(hub->intfdev, "resubmit --> %d\n", status); > + hub_resubmit_irq_urb(hub); > } > > /* USB 2.0 spec Section 11.24.2.3 */ > @@ -1254,10 +1281,13 @@ enum hub_quiescing_type { > static void hub_quiesce(struct usb_hub *hub, enum hub_quiescing_type type) > { > struct usb_device *hdev = hub->hdev; > + unsigned long flags; > int i; > > /* hub_wq and related activity won't re-trigger */ > + spin_lock_irqsave(&hub->irq_urb_lock, flags); > hub->quiescing = 1; > + spin_unlock_irqrestore(&hub->irq_urb_lock, flags); > > if (type != HUB_SUSPEND) { > /* Disconnect all the children */ > @@ -1268,6 +1298,7 @@ static void hub_quiesce(struct usb_hub *hub, enum hub_quiescing_type type) > } > > /* Stop hub_wq and related activity */ > + del_timer_sync(&hub->irq_urb_retry); > usb_kill_urb(hub->urb); > if (hub->has_indicators) > cancel_delayed_work_sync(&hub->leds); > @@ -1800,6 +1831,8 @@ static int hub_probe(struct usb_interface *intf, const struct usb_device_id *id) > INIT_DELAYED_WORK(&hub->leds, led_work); > INIT_DELAYED_WORK(&hub->init_work, NULL); > INIT_WORK(&hub->events, hub_event); > + spin_lock_init(&hub->irq_urb_lock); > + timer_setup(&hub->irq_urb_retry, hub_retry_irq_urb, 0); > usb_get_intf(intf); > usb_get_dev(hdev); > > diff --git a/drivers/usb/core/hub.h b/drivers/usb/core/hub.h > index 4accfb63f7dc..a9e24e4b8df1 100644 > --- a/drivers/usb/core/hub.h > +++ b/drivers/usb/core/hub.h > @@ -69,6 +69,8 @@ struct usb_hub { > struct delayed_work leds; > struct delayed_work init_work; > struct work_struct events; > + spinlock_t irq_urb_lock; > + struct timer_list irq_urb_retry; > struct usb_port **ports; > }; > > -- > 2.19.1 >