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: [v2] usb/hcd: Send a uevent signaling that the host controller has died From: Greg Kroah-Hartman Message-Id: <20190416095429.GC896@kroah.com> Date: Tue, 16 Apr 2019 11:54:29 +0200 To: Raul E Rangel Cc: linux-usb@vger.kernel.org, groeck@chromium.org, oneukum@suse.com, djkurtz@chromium.org, zwisler@chromium.org, Sebastian Andrzej Siewior , Martin Blumenstingl , Alan Stern , Dmitry Torokhov , Suwan Kim , linux-kernel@vger.kernel.org, "Gustavo A. R. Silva" , Miquel Raynal , Johan Hovold , Mathias Nyman List-ID: T24gVGh1LCBBcHIgMTEsIDIwMTkgYXQgMTI6NTI6MTFQTSAtMDYwMCwgUmF1bCBFIFJhbmdlbCB3 cm90ZToKPiBUaGlzIGNoYW5nZSB3aWxsIHNlbmQgYSBDSEFOR0UgZXZlbnQgdG8gdWRldiB3aXRo IHRoZSBERUFEIGVudmlyb25tZW50Cj4gdmFyaWFibGUgc2V0IHdoZW4gdGhlIEhDIGRpZXMuIEkg Y2hvc2UgdGhpcyBpbnN0ZWFkIG9mIGFueSBvZiB0aGUgb3RoZXIKPiB1ZGV2IGV2ZW50cyBiZWNh dXNlIGl0J3MgcmVwcmVzZW50aW5nIGEgc3RhdGUgY2hhbmdlIGluIHRoZSBob3N0Cj4gY29udHJv bGxlci4gVGhlIG9ubHkgb3RoZXIgZXZlbnQgdGhhdCBtaWdodCBoYXZlIGZpdCB3YXMgT0ZGTElO RSwgYnV0Cj4gdGhhdCBzZWVtcyB0byBiZSB1c2VkIGZvciBob3QtcmVtb3ZhbCBhbmQgaXQgaW1w bGllcyB0aGUgZGV2aWNlIGNvdWxkCj4gY29tZSBPTkxJTkUgYWdhaW4uCgpJcyAiREVBRCIgdXNl ZCBieSBhbnkgb3RoZXIgdWV2ZW50cz8KCj4gQnkgbm90aWZ5aW5nIHVzZXIgc3BhY2UgdGhlIGFw cHJvcHJpYXRlIHBvbGljaWVzIGNhbiBiZSBhcHBsaWVkLgo+IGkuZS4sCj4gICogQ29sbGVjdCBl cnJvciBsb2dzLgo+ICAqIE5vdGlmeSB0aGUgdXNlciB0aGF0IFVTQiBpcyBubyBsb25nZXIgZnVu Y3Rpb25hbC4KPiAgKiBQZXJmb3JtIGEgZ3JhY2VmdWwgcmVib290LgoKV2hhdCB1c2Vyc3BhY2Ug Y29kZSB1c2VzIHRoaXMgbmV3IHVldmVudCB0byBkbyBhbnkgb2YgdGhpcz8KCkkgdGhpbmsgIk9G RkxJTkUiIGlzIGEgYml0IGJldHRlciBoZXJlLCBpdCBkb2VzIG5vdCBhbHdheXMgaW1wbHkgdGhh dCBpdApjYW4gY29tZSBvbmxpbmUgYWdhaW4uCgo+IFNpZ25lZC1vZmYtYnk6IFJhdWwgRSBSYW5n ZWwgPHJyYW5nZWxAY2hyb21pdW0ub3JnPgo+IC0tLQo+IEkgd2Fzbid0IGFibGUgdG8gZmluZCBh bnkgZ29vZCBleGFtcGxlcyBvZiBvdGhlciBkcml2ZXJzIHNlbmRpbmcgYSBkZWFkCj4gbm90aWZp Y2F0aW9uLgo+IAo+IFVzZSBhbiBFVkVOVD0gZm9ybWF0Cj4gaHR0cHM6Ly9naXRodWIuY29tL3Rv cnZhbGRzL2xpbnV4L2Jsb2IvbWFzdGVyL2RyaXZlcnMvYWNwaS9kb2NrLmMjTDMwMgo+IGh0dHBz Oi8vZ2l0aHViLmNvbS90b3J2YWxkcy9saW51eC9ibG9iL21hc3Rlci9kcml2ZXJzL25ldC93aXJl bGVzcy9hdGgvd2lsNjIxMC9pbnRlcnJ1cHQuYyNMNDk3Cj4gCj4gVXNlcyBTREVWX01FRElBX0NI QU5HRT0KPiBodHRwczovL2dpdGh1Yi5jb20vdG9ydmFsZHMvbGludXgvYmxvYi9tYXN0ZXIvZHJp dmVycy9zY3NpL3Njc2lfbGliLmMjTDIzMTgKPiAKPiBVc2VzIEVSUk9SPTEuCj4gaHR0cHM6Ly9j aHJvbWl1bS5nb29nbGVzb3VyY2UuY29tL2Nocm9taXVtb3MvdGhpcmRfcGFydHkva2VybmVsLysv N2Y2ZDhhZWM1ODAzYWFjNDQxOTJmMDNkY2U1NjM3YjY2Y2RhN2FiZi9kcml2ZXJzL2lucHV0L3Rv dWNoc2NyZWVuL2F0bWVsX214dF90cy5jIzE1ODEKPiBJJ20gbm90IGEgZmFuIGJlY2F1c2UgaXQg ZG9lc24ndCBzaWduYWwgd2hhdCB0aGUgZXJyb3Igd2FzLgo+IAo+IFdlIGNvdWxkIGNoYW5nZSB0 aGUgREVBRD0xIGV2ZW50IHRvIG1heWJlIEVSUk9SPTE/CgoiRVJST1I9MSIgaXMgd29yc2UgdGhh biAiREVBRD0xIiA6KAoKPiBBbHNvIHdoZXJlIHdvdWxkIGJlIGEgZ29vZCBwbGFjZSB0byBkb2N1 bWVudCB0aGlzPwoKRG9jdW1lbnRhdGlvbi9BQkkvIGlzIGEgZ29vZCBzdGFydC4KCj4gQWxzbyB0 aGFua3MgZm9yIHRoZSByZXZpZXcuIFRoaXMgaXMgbXkgZmlyc3Qga2VybmVsIHBhdGNoIHNvIGZv cmdpdmUgbWUKPiBpZiBJIGdldCB0aGUgd29ya2Zsb3cgd3JvbmcuCj4gCj4gQ2hhbmdlcyBpbiB2 MjoKPiAtIENoZWNrIHRoYXQgdGhlIHJvb3QgaHViIHN0aWxsIGV4aXN0cyBiZWZvcmUgc2VuZGlu ZyB0aGUgdWV2ZW50Lgo+IC0gRW5zdXJlIGRpZWRfd29yayBoYXMgY29tcGxldGVkIGJlZm9yZSBk ZWFsbG9jYXRpbmcuCj4gCj4gIGRyaXZlcnMvdXNiL2NvcmUvaGNkLmMgIHwgMzIgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysKPiAgaW5jbHVkZS9saW51eC91c2IvaGNkLmggfCAgMSAr Cj4gIDIgZmlsZXMgY2hhbmdlZCwgMzMgaW5zZXJ0aW9ucygrKQo+IAo+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3VzYi9jb3JlL2hjZC5jIGIvZHJpdmVycy91c2IvY29yZS9oY2QuYwo+IGluZGV4IDk3 NWQ3YzEyODhlMy4uNzgzNWYxYTM2NDdkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL2NvcmUv aGNkLmMKPiArKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCj4gQEAgLTIzNDMsNiArMjM0Mywy NyBAQCBpbnQgaGNkX2J1c19yZXN1bWUoc3RydWN0IHVzYl9kZXZpY2UgKnJoZGV2LCBwbV9tZXNz YWdlX3QgbXNnKQo+ICAJcmV0dXJuIHN0YXR1czsKPiAgfQo+ICAKPiArCj4gKy8qKgo+ICsgKiBo Y2RfZGllZF93b3JrIC0gV29ya3F1ZXVlIHJvdXRpbmUgZm9yIHJvb3QtaHViIGhhcyBkaWVkLgo+ ICsgKiBAaGNkOiBwcmltYXJ5IGhvc3QgY29udHJvbGxlciBmb3IgdGhpcyByb290IGh1Yi4KPiAr ICoKPiArICogRG8gbm90IGNhbGwgd2l0aCB0aGUgc2hhcmVkX2hjZC4KPiArICogKi8KCk5vIG5l ZWQgZm9yIGtlcm5lbGRvYyBmb3J0dGluZyBmb3IgYSBzdGF0aWMgZnVuY3Rpb24uCgpBbmQgeW91 ciBkb2N1bWVudGF0aW9uIGlzbid0IGV2ZW4gY29ycmVjdCwgQGhjZCBpcyBub3QgYW4gYXJndW1l bnQgdG8KdGhpcyBmdW5jdGlvbiA6KAoKPiArc3RhdGljIHZvaWQgaGNkX2RpZWRfd29yayhzdHJ1 Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gK3sKPiArCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBjb250 YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9oY2QsIGRpZWRfd29yayk7Cj4gKwo+ICsJbXV0ZXhf bG9jaygmdXNiX2J1c19pZHJfbG9jayk7CgpXaHkgZG8geW91IG5lZWQgdG8gbG9jayBzb21ldGhp bmcgdGhhdCBpcyAiZGVhZCI/ICBBbmQgd2h5IGlzIHRoZSBpZHIKbG9jayB0aGUgY29ycmVjdCBv bmUgaGVyZT8KCj4gKwo+ICsJaWYgKGhjZC0+c2VsZi5yb290X2h1YikKPiArCQkvKiBOb3RpZnkg dXNlciBzcGFjZSB0aGF0IHRoZSBob3N0IGNvbnRyb2xsZXIgaGFzIGRpZWQgKi8KPiArCQlrb2Jq ZWN0X3VldmVudF9lbnYoJmhjZC0+c2VsZi5yb290X2h1Yi0+ZGV2LmtvYmosIEtPQkpfQ0hBTkdF LAo+ICsJCQkJICAgKGNoYXIgKltdKXsgIkRFQUQ9MSIsIE5VTEwgfSk7CgpkZWNsYXJpbmcgdGhl IGVudnAgaW4gdGhlIGZ1bmN0aW9uIGlzIGN1dGUsIGJ1dCBwbGVhc2UgZG9uJ3QgZG8gdGhhdCwK bWFrZSBpdCBvYnZpb3VzIHdoYXQgaXMgaGFwcGVuaW5nIGhlcmUgd2l0aCBhIHJlYWwgdmFyaWFi bGUuCgo+ICsKPiArCW11dGV4X3VubG9jaygmdXNiX2J1c19pZHJfbG9jayk7Cj4gK30KPiArCj4g IC8qIFdvcmtxdWV1ZSByb3V0aW5lIGZvciByb290LWh1YiByZW1vdGUgd2FrZXVwICovCj4gIHN0 YXRpYyB2b2lkIGhjZF9yZXN1bWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCj4gIHsK PiBAQCAtMjQ4OCw2ICsyNTA5LDEzIEBAIHZvaWQgdXNiX2hjX2RpZWQgKHN0cnVjdCB1c2JfaGNk ICpoY2QpCj4gIAkJCXVzYl9raWNrX2h1Yl93cShoY2QtPnNlbGYucm9vdF9odWIpOwo+ICAJCX0K PiAgCX0KPiArCj4gKwkvKiBIYW5kbGUgdGhlIGNhc2Ugd2hlcmUgdGhpcyBmdW5jdGlvbiBnZXRz IGNhbGxlZCB3aXRoIGEgc2hhcmVkIEhDRCAqLwo+ICsJaWYgKHVzYl9oY2RfaXNfcHJpbWFyeV9o Y2QoaGNkKSkKPiArCQlzY2hlZHVsZV93b3JrKCZoY2QtPmRpZWRfd29yayk7Cj4gKwllbHNlCj4g KwkJc2NoZWR1bGVfd29yaygmaGNkLT5wcmltYXJ5X2hjZC0+ZGllZF93b3JrKTsKPiArCj4gIAlz cGluX3VubG9ja19pcnFyZXN0b3JlICgmaGNkX3Jvb3RfaHViX2xvY2ssIGZsYWdzKTsKPiAgCS8q IE1ha2Ugc3VyZSB0aGF0IHRoZSBvdGhlciByb290aHViIGlzIGFsc28gZGVhbGxvY2F0ZWQuICov Cj4gIH0KPiBAQCAtMjU1NSw2ICsyNTgzLDggQEAgc3RydWN0IHVzYl9oY2QgKl9fdXNiX2NyZWF0 ZV9oY2QoY29uc3Qgc3RydWN0IGhjX2RyaXZlciAqZHJpdmVyLAo+ICAJSU5JVF9XT1JLKCZoY2Qt Pndha2V1cF93b3JrLCBoY2RfcmVzdW1lX3dvcmspOwo+ICAjZW5kaWYKPiAgCj4gKwlJTklUX1dP UksoJmhjZC0+ZGllZF93b3JrLCBoY2RfZGllZF93b3JrKTsKPiArCj4gIAloY2QtPmRyaXZlciA9 IGRyaXZlcjsKPiAgCWhjZC0+c3BlZWQgPSBkcml2ZXItPmZsYWdzICYgSENEX01BU0s7Cj4gIAlo Y2QtPnByb2R1Y3RfZGVzYyA9IChkcml2ZXItPnByb2R1Y3RfZGVzYykgPyBkcml2ZXItPnByb2R1 Y3RfZGVzYyA6Cj4gQEAgLTI5MDgsNiArMjkzOCw3IEBAIGludCB1c2JfYWRkX2hjZChzdHJ1Y3Qg dXNiX2hjZCAqaGNkLAo+ICAjaWZkZWYgQ09ORklHX1BNCj4gIAljYW5jZWxfd29ya19zeW5jKCZo Y2QtPndha2V1cF93b3JrKTsKPiAgI2VuZGlmCj4gKwljYW5jZWxfd29ya19zeW5jKCZoY2QtPmRp ZWRfd29yayk7Cj4gIAltdXRleF9sb2NrKCZ1c2JfYnVzX2lkcl9sb2NrKTsKPiAgCXVzYl9kaXNj b25uZWN0KCZyaGRldik7CQkvKiBTZXRzIHJoZGV2IHRvIE5VTEwgKi8KPiAgCW11dGV4X3VubG9j aygmdXNiX2J1c19pZHJfbG9jayk7Cj4gQEAgLTI5NjgsNiArMjk5OSw3IEBAIHZvaWQgdXNiX3Jl bW92ZV9oY2Qoc3RydWN0IHVzYl9oY2QgKmhjZCkKPiAgI2lmZGVmIENPTkZJR19QTQo+ICAJY2Fu Y2VsX3dvcmtfc3luYygmaGNkLT53YWtldXBfd29yayk7Cj4gICNlbmRpZgo+ICsJY2FuY2VsX3dv cmtfc3luYygmaGNkLT5kaWVkX3dvcmspOwo+ICAKPiAgCW11dGV4X2xvY2soJnVzYl9idXNfaWRy X2xvY2spOwo+ICAJdXNiX2Rpc2Nvbm5lY3QoJnJoZGV2KTsJCS8qIFNldHMgcmhkZXYgdG8gTlVM TCAqLwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaCBiL2luY2x1ZGUvbGlu dXgvdXNiL2hjZC5oCj4gaW5kZXggNjk1OTMxYjAzNjg0Li5hZTUxZDViZDFkZmMgMTAwNjQ0Cj4g LS0tIGEvaW5jbHVkZS9saW51eC91c2IvaGNkLmgKPiArKysgYi9pbmNsdWRlL2xpbnV4L3VzYi9o Y2QuaAo+IEBAIC05OCw2ICs5OCw3IEBAIHN0cnVjdCB1c2JfaGNkIHsKPiAgI2lmZGVmIENPTkZJ R19QTQo+ICAJc3RydWN0IHdvcmtfc3RydWN0CXdha2V1cF93b3JrOwkvKiBmb3IgcmVtb3RlIHdh a2V1cCAqLwo+ICAjZW5kaWYKPiArCXN0cnVjdCB3b3JrX3N0cnVjdAlkaWVkX3dvcms7CS8qIGZv ciBkeWluZyAqLwoKIkZvciB3aGVuIHRoZSBkZXZpY2UgZGllcyI/CgpBbmQgaGF2ZSB5b3UgZXZl ciBoaXQgdGhpcyBpbiB0aGUgcmVhbCB3b3JsZD8gIElmIHNvLCB3aGF0IGNhbiB5b3UgZG8KYWJv dXQgaXQ/Cgp0aGFua3MsCgpncmVnIGstaAo= 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.4 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_PASS,T_DKIMWL_WL_HIGH,URIBL_BLOCKED, USER_AGENT_MUTT autolearn=unavailable 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 5830BC10F14 for ; Tue, 16 Apr 2019 10:38:42 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 2B39D206BA for ; Tue, 16 Apr 2019 10:38:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1555411122; bh=ohQzov7kDeNNEaBQH3skHpH7MgefXxnFWpQMrZVJYxc=; h=Date:From:To:Cc:Subject:References:In-Reply-To:List-ID:From; b=epRBjn0EAVxW5yw4kwmFhO+NgHaaEoDlG58GIiYKWFg2nGoGzv/UJqrLPThew9GpE bkM85pM+n6p94OaTrtu8ODXaJlGAz0CwFIU9GOmOvvOZZHlBzmJDCOkBa+6RqQO3sT Xft0p/gmBgPT30ijEKe7DK7v0k3RSeA+0C7rsPvQ= Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727164AbfDPKif (ORCPT ); Tue, 16 Apr 2019 06:38:35 -0400 Received: from mail.kernel.org ([198.145.29.99]:57152 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726682AbfDPKie (ORCPT ); Tue, 16 Apr 2019 06:38:34 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.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 C7C2220693; Tue, 16 Apr 2019 10:38:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1555411113; bh=ohQzov7kDeNNEaBQH3skHpH7MgefXxnFWpQMrZVJYxc=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=Ty49C1NYqbEaQpi3pPocgsFiy6Pxt7whjMoqgvFLPvmvBEJn3AVsfYro1mxOncwk6 hQmxDv1nm0KTvf7IYzC1CmQa6CPcPyCQWR9YjmapxM5dtuqwrk9SlvEPsRsye+MJWg REDitFWmwvJy30bbw8hAumDLu+HAnQyeoDt6vHyA= Date: Tue, 16 Apr 2019 11:54:29 +0200 From: Greg Kroah-Hartman To: Raul E Rangel Cc: linux-usb@vger.kernel.org, groeck@chromium.org, oneukum@suse.com, djkurtz@chromium.org, zwisler@chromium.org, Sebastian Andrzej Siewior , Martin Blumenstingl , Alan Stern , Dmitry Torokhov , Suwan Kim , linux-kernel@vger.kernel.org, "Gustavo A. R. Silva" , Miquel Raynal , Johan Hovold , Mathias Nyman Subject: Re: [PATCH v2] usb/hcd: Send a uevent signaling that the host controller has died Message-ID: <20190416095429.GC896@kroah.com> References: <20190411185211.235940-1-rrangel@chromium.org> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Disposition: inline In-Reply-To: <20190411185211.235940-1-rrangel@chromium.org> User-Agent: Mutt/1.11.4 (2019-03-13) Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Message-ID: <20190416095429.K2cK8RCJKMYCIr3XsVrOm3Ax1rW1KZVs_q4hRc690Ic@z> On Thu, Apr 11, 2019 at 12:52:11PM -0600, Raul E Rangel wrote: > This change will send a CHANGE event to udev with the DEAD environment > variable set when the HC dies. I chose this instead of any of the other > udev events because it's representing a state change in the host > controller. The only other event that might have fit was OFFLINE, but > that seems to be used for hot-removal and it implies the device could > come ONLINE again. Is "DEAD" used by any other uevents? > By notifying user space the appropriate policies can be applied. > i.e., > * Collect error logs. > * Notify the user that USB is no longer functional. > * Perform a graceful reboot. What userspace code uses this new uevent to do any of this? I think "OFFLINE" is a bit better here, it does not always imply that it can come online again. > Signed-off-by: Raul E Rangel > --- > I wasn't able to find any good examples of other drivers sending a dead > notification. > > Use an EVENT= format > https://github.com/torvalds/linux/blob/master/drivers/acpi/dock.c#L302 > https://github.com/torvalds/linux/blob/master/drivers/net/wireless/ath/wil6210/interrupt.c#L497 > > Uses SDEV_MEDIA_CHANGE= > https://github.com/torvalds/linux/blob/master/drivers/scsi/scsi_lib.c#L2318 > > Uses ERROR=1. > https://chromium.googlesource.com/chromiumos/third_party/kernel/+/7f6d8aec5803aac44192f03dce5637b66cda7abf/drivers/input/touchscreen/atmel_mxt_ts.c#1581 > I'm not a fan because it doesn't signal what the error was. > > We could change the DEAD=1 event to maybe ERROR=1? "ERROR=1" is worse than "DEAD=1" :( > Also where would be a good place to document this? Documentation/ABI/ is a good start. > Also thanks for the review. This is my first kernel patch so forgive me > if I get the workflow wrong. > > Changes in v2: > - Check that the root hub still exists before sending the uevent. > - Ensure died_work has completed before deallocating. > > drivers/usb/core/hcd.c | 32 ++++++++++++++++++++++++++++++++ > include/linux/usb/hcd.h | 1 + > 2 files changed, 33 insertions(+) > > diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c > index 975d7c1288e3..7835f1a3647d 100644 > --- a/drivers/usb/core/hcd.c > +++ b/drivers/usb/core/hcd.c > @@ -2343,6 +2343,27 @@ int hcd_bus_resume(struct usb_device *rhdev, pm_message_t msg) > return status; > } > > + > +/** > + * hcd_died_work - Workqueue routine for root-hub has died. > + * @hcd: primary host controller for this root hub. > + * > + * Do not call with the shared_hcd. > + * */ No need for kerneldoc fortting for a static function. And your documentation isn't even correct, @hcd is not an argument to this function :( > +static void hcd_died_work(struct work_struct *work) > +{ > + struct usb_hcd *hcd = container_of(work, struct usb_hcd, died_work); > + > + mutex_lock(&usb_bus_idr_lock); Why do you need to lock something that is "dead"? And why is the idr lock the correct one here? > + > + if (hcd->self.root_hub) > + /* Notify user space that the host controller has died */ > + kobject_uevent_env(&hcd->self.root_hub->dev.kobj, KOBJ_CHANGE, > + (char *[]){ "DEAD=1", NULL }); declaring the envp in the function is cute, but please don't do that, make it obvious what is happening here with a real variable. > + > + mutex_unlock(&usb_bus_idr_lock); > +} > + > /* Workqueue routine for root-hub remote wakeup */ > static void hcd_resume_work(struct work_struct *work) > { > @@ -2488,6 +2509,13 @@ void usb_hc_died (struct usb_hcd *hcd) > usb_kick_hub_wq(hcd->self.root_hub); > } > } > + > + /* Handle the case where this function gets called with a shared HCD */ > + if (usb_hcd_is_primary_hcd(hcd)) > + schedule_work(&hcd->died_work); > + else > + schedule_work(&hcd->primary_hcd->died_work); > + > spin_unlock_irqrestore (&hcd_root_hub_lock, flags); > /* Make sure that the other roothub is also deallocated. */ > } > @@ -2555,6 +2583,8 @@ struct usb_hcd *__usb_create_hcd(const struct hc_driver *driver, > INIT_WORK(&hcd->wakeup_work, hcd_resume_work); > #endif > > + INIT_WORK(&hcd->died_work, hcd_died_work); > + > hcd->driver = driver; > hcd->speed = driver->flags & HCD_MASK; > hcd->product_desc = (driver->product_desc) ? driver->product_desc : > @@ -2908,6 +2938,7 @@ int usb_add_hcd(struct usb_hcd *hcd, > #ifdef CONFIG_PM > cancel_work_sync(&hcd->wakeup_work); > #endif > + cancel_work_sync(&hcd->died_work); > mutex_lock(&usb_bus_idr_lock); > usb_disconnect(&rhdev); /* Sets rhdev to NULL */ > mutex_unlock(&usb_bus_idr_lock); > @@ -2968,6 +2999,7 @@ void usb_remove_hcd(struct usb_hcd *hcd) > #ifdef CONFIG_PM > cancel_work_sync(&hcd->wakeup_work); > #endif > + cancel_work_sync(&hcd->died_work); > > mutex_lock(&usb_bus_idr_lock); > usb_disconnect(&rhdev); /* Sets rhdev to NULL */ > diff --git a/include/linux/usb/hcd.h b/include/linux/usb/hcd.h > index 695931b03684..ae51d5bd1dfc 100644 > --- a/include/linux/usb/hcd.h > +++ b/include/linux/usb/hcd.h > @@ -98,6 +98,7 @@ struct usb_hcd { > #ifdef CONFIG_PM > struct work_struct wakeup_work; /* for remote wakeup */ > #endif > + struct work_struct died_work; /* for dying */ "For when the device dies"? And have you ever hit this in the real world? If so, what can you do about it? thanks, greg k-h