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: Raul E Rangel Message-Id: <20190417175300.GA74282@google.com> Date: Wed, 17 Apr 2019 11:53:00 -0600 To: Greg Kroah-Hartman 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 , Raul Rangel List-ID: T24gVHVlLCBBcHIgMTYsIDIwMTkgYXQgMTE6NTQ6MjlBTSArMDIwMCwgR3JlZyBLcm9haC1IYXJ0 bWFuIHdyb3RlOgo+IE9uIFRodSwgQXByIDExLCAyMDE5IGF0IDEyOjUyOjExUE0gLTA2MDAsIFJh dWwgRSBSYW5nZWwgd3JvdGU6Cj4gPiBUaGlzIGNoYW5nZSB3aWxsIHNlbmQgYSBDSEFOR0UgZXZl bnQgdG8gdWRldiB3aXRoIHRoZSBERUFEIGVudmlyb25tZW50Cj4gPiB2YXJpYWJsZSBzZXQgd2hl biB0aGUgSEMgZGllcy4gSSBjaG9zZSB0aGlzIGluc3RlYWQgb2YgYW55IG9mIHRoZSBvdGhlcgo+ ID4gdWRldiBldmVudHMgYmVjYXVzZSBpdCdzIHJlcHJlc2VudGluZyBhIHN0YXRlIGNoYW5nZSBp biB0aGUgaG9zdAo+ID4gY29udHJvbGxlci4gVGhlIG9ubHkgb3RoZXIgZXZlbnQgdGhhdCBtaWdo dCBoYXZlIGZpdCB3YXMgT0ZGTElORSwgYnV0Cj4gPiB0aGF0IHNlZW1zIHRvIGJlIHVzZWQgZm9y IGhvdC1yZW1vdmFsIGFuZCBpdCBpbXBsaWVzIHRoZSBkZXZpY2UgY291bGQKPiA+IGNvbWUgT05M SU5FIGFnYWluLgo+IAo+IElzICJERUFEIiB1c2VkIGJ5IGFueSBvdGhlciB1ZXZlbnRzPwpObywg SSB3YXNuJ3QgYWJsZSB0byBmaW5kIGFueSBvdGhlciBldmVudHMgdGhhdCBub3RpZnkgd2hlbiB0 aGUgaG9zdApjb250cm9sbGVyIGhhcyBkaWVkLgo+IAo+ID4gQnkgbm90aWZ5aW5nIHVzZXIgc3Bh Y2UgdGhlIGFwcHJvcHJpYXRlIHBvbGljaWVzIGNhbiBiZSBhcHBsaWVkLgo+ID4gaS5lLiwKPiA+ ICAqIENvbGxlY3QgZXJyb3IgbG9ncy4KPiA+ICAqIE5vdGlmeSB0aGUgdXNlciB0aGF0IFVTQiBp cyBubyBsb25nZXIgZnVuY3Rpb25hbC4KPiA+ICAqIFBlcmZvcm0gYSBncmFjZWZ1bCByZWJvb3Qu Cj4gCj4gV2hhdCB1c2Vyc3BhY2UgY29kZSB1c2VzIHRoaXMgbmV3IHVldmVudCB0byBkbyBhbnkg b2YgdGhpcz8KT24gQ2hyb21lT1Mgd2UgaGF2ZSBhbiBlcnJvciByZXBvcnRlciB0aGF0IGxpc3Rl bnMgZm9yIGhhcmR3YXJlIGVycm9yczoKaHR0cHM6Ly9jaHJvbWl1bS1yZXZpZXcuZ29vZ2xlc291 cmNlLmNvbS9jL2Nocm9taXVtb3MvcGxhdGZvcm0yLysvMTU2MDE3MApUaG91Z2ggbm90IGltcGxl bWVudGVkIHlldCwgSSBhbHNvICB3YW50IHRvIG5vdGlmeSB0aGUgdXNlciB0aGF0IFVTQiBpcyBu bwpsb25nZXIgZnVuY3Rpb25hbCBhbmQgdGhleSBzaG91bGQgcmVzdGFydC4KCj4gCj4gSSB0aGlu ayAiT0ZGTElORSIgaXMgYSBiaXQgYmV0dGVyIGhlcmUsIGl0IGRvZXMgbm90IGFsd2F5cyBpbXBs eSB0aGF0IGl0Cj4gY2FuIGNvbWUgb25saW5lIGFnYWluLgoKSG93IGFib3V0IE9GRkxJTkUgd2l0 aCBFUlJPUj1ERUFEPyBJIHdvdWxkIGxpa2UgdG8gcmVwb3J0IHRoZSBwcm9ibGVtLApidXQgSSdt IE9LIGlmIHlvdSB3YW50IHRvIGp1c3Qgc3RpY2sgd2l0aCBPRkZMSU5FLgoKPiAKPiA+IFNpZ25l ZC1vZmYtYnk6IFJhdWwgRSBSYW5nZWwgPHJyYW5nZWxAY2hyb21pdW0ub3JnPgo+ID4gLS0tCj4g PiBJIHdhc24ndCBhYmxlIHRvIGZpbmQgYW55IGdvb2QgZXhhbXBsZXMgb2Ygb3RoZXIgZHJpdmVy cyBzZW5kaW5nIGEgZGVhZAo+ID4gbm90aWZpY2F0aW9uLgo+ID4gCj4gPiBVc2UgYW4gRVZFTlQ9 IGZvcm1hdAo+ID4gaHR0cHM6Ly9naXRodWIuY29tL3RvcnZhbGRzL2xpbnV4L2Jsb2IvbWFzdGVy L2RyaXZlcnMvYWNwaS9kb2NrLmMjTDMwMgo+ID4gaHR0cHM6Ly9naXRodWIuY29tL3RvcnZhbGRz L2xpbnV4L2Jsb2IvbWFzdGVyL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2F0aC93aWw2MjEwL2ludGVy cnVwdC5jI0w0OTcKPiA+IAo+ID4gVXNlcyBTREVWX01FRElBX0NIQU5HRT0KPiA+IGh0dHBzOi8v Z2l0aHViLmNvbS90b3J2YWxkcy9saW51eC9ibG9iL21hc3Rlci9kcml2ZXJzL3Njc2kvc2NzaV9s aWIuYyNMMjMxOAo+ID4gCj4gPiBVc2VzIEVSUk9SPTEuCj4gPiBodHRwczovL2Nocm9taXVtLmdv b2dsZXNvdXJjZS5jb20vY2hyb21pdW1vcy90aGlyZF9wYXJ0eS9rZXJuZWwvKy83ZjZkOGFlYzU4 MDNhYWM0NDE5MmYwM2RjZTU2MzdiNjZjZGE3YWJmL2RyaXZlcnMvaW5wdXQvdG91Y2hzY3JlZW4v YXRtZWxfbXh0X3RzLmMjMTU4MQo+ID4gSSdtIG5vdCBhIGZhbiBiZWNhdXNlIGl0IGRvZXNuJ3Qg c2lnbmFsIHdoYXQgdGhlIGVycm9yIHdhcy4KPiA+IAo+ID4gV2UgY291bGQgY2hhbmdlIHRoZSBE RUFEPTEgZXZlbnQgdG8gbWF5YmUgRVJST1I9MT8KPiAKPiAiRVJST1I9MSIgaXMgd29yc2UgdGhh biAiREVBRD0xIiA6KAo+IAo+ID4gQWxzbyB3aGVyZSB3b3VsZCBiZSBhIGdvb2QgcGxhY2UgdG8g ZG9jdW1lbnQgdGhpcz8KPiAKPiBEb2N1bWVudGF0aW9uL0FCSS8gaXMgYSBnb29kIHN0YXJ0LgpJ J2xsIGFkZCBzb21ldGhpbmcgdG8gRG9jdW1lbnRhdGlvbi9BQkkvdGVzdGluZy94aGNpLXVldmVu dAo+IAo+ID4gQWxzbyB0aGFua3MgZm9yIHRoZSByZXZpZXcuIFRoaXMgaXMgbXkgZmlyc3Qga2Vy bmVsIHBhdGNoIHNvIGZvcmdpdmUgbWUKPiA+IGlmIEkgZ2V0IHRoZSB3b3JrZmxvdyB3cm9uZy4K PiA+IAo+ID4gQ2hhbmdlcyBpbiB2MjoKPiA+IC0gQ2hlY2sgdGhhdCB0aGUgcm9vdCBodWIgc3Rp bGwgZXhpc3RzIGJlZm9yZSBzZW5kaW5nIHRoZSB1ZXZlbnQuCj4gPiAtIEVuc3VyZSBkaWVkX3dv cmsgaGFzIGNvbXBsZXRlZCBiZWZvcmUgZGVhbGxvY2F0aW5nLgo+ID4gCj4gPiAgZHJpdmVycy91 c2IvY29yZS9oY2QuYyAgfCAzMiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4g IGluY2x1ZGUvbGludXgvdXNiL2hjZC5oIHwgIDEgKwo+ID4gIDIgZmlsZXMgY2hhbmdlZCwgMzMg aW5zZXJ0aW9ucygrKQo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2Qu YyBiL2RyaXZlcnMvdXNiL2NvcmUvaGNkLmMKPiA+IGluZGV4IDk3NWQ3YzEyODhlMy4uNzgzNWYx YTM2NDdkIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy91c2IvY29yZS9oY2QuYwo+ID4gKysrIGIv ZHJpdmVycy91c2IvY29yZS9oY2QuYwo+ID4gQEAgLTIzNDMsNiArMjM0MywyNyBAQCBpbnQgaGNk X2J1c19yZXN1bWUoc3RydWN0IHVzYl9kZXZpY2UgKnJoZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQo+ ID4gIAlyZXR1cm4gc3RhdHVzOwo+ID4gIH0KPiA+ICAKPiA+ICsKPiA+ICsvKioKPiA+ICsgKiBo Y2RfZGllZF93b3JrIC0gV29ya3F1ZXVlIHJvdXRpbmUgZm9yIHJvb3QtaHViIGhhcyBkaWVkLgo+ ID4gKyAqIEBoY2Q6IHByaW1hcnkgaG9zdCBjb250cm9sbGVyIGZvciB0aGlzIHJvb3QgaHViLgo+ ID4gKyAqCj4gPiArICogRG8gbm90IGNhbGwgd2l0aCB0aGUgc2hhcmVkX2hjZC4KPiA+ICsgKiAq Lwo+IAo+IE5vIG5lZWQgZm9yIGtlcm5lbGRvYyBmb3J0dGluZyBmb3IgYSBzdGF0aWMgZnVuY3Rp b24uCj4gCj4gQW5kIHlvdXIgZG9jdW1lbnRhdGlvbiBpc24ndCBldmVuIGNvcnJlY3QsIEBoY2Qg aXMgbm90IGFuIGFyZ3VtZW50IHRvCj4gdGhpcyBmdW5jdGlvbiA6KApPb3BzISBBcHBhcmVudGx5 IEkgbmV2ZXIgdXBkYXRlZCB0aGUgZG9jdW1lbnRhdGlvbiB3aGVuIEkgcmVmYWN0b3JlZAp0aGlz IHRvIHVzZSBhIHdvcmtlci4KPiAKPiA+ICtzdGF0aWMgdm9pZCBoY2RfZGllZF93b3JrKHN0cnVj dCB3b3JrX3N0cnVjdCAqd29yaykKPiA+ICt7Cj4gPiArCXN0cnVjdCB1c2JfaGNkICpoY2QgPSBj b250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9oY2QsIGRpZWRfd29yayk7Cj4gPiArCj4gPiAr CW11dGV4X2xvY2soJnVzYl9idXNfaWRyX2xvY2spOwo+IAo+IFdoeSBkbyB5b3UgbmVlZCB0byBs b2NrIHNvbWV0aGluZyB0aGF0IGlzICJkZWFkIj8gIEFuZCB3aHkgaXMgdGhlIGlkcgo+IGxvY2sg dGhlIGNvcnJlY3Qgb25lIGhlcmU/CldlIG5lZWQgdG8gZW5zdXJlIHRoYXQgcm9vdF9odWIgaXMg bm90IG51bGwuIFRob3VnaCBJJ20gbm90IHN1cmUgdGhlCmxvY2sgaXMgZW50aXJlbHkgbmVjZXNz YXJ5IGluIHRoaXMgY2FzZS4gdXNiX3JlbW92ZV9oY2Qgc3RvcHMgdGhlIHdvcmsKaXRlbSBiZWZv cmUgaXQgc2V0cyB0aGUgcmhkZXYgdG8gbnVsbC4gVGhlIHJlYXNvbiBJIHBpY2tlZAp1c2JfYnVz X2lkcl9sb2NrIHdhcyBiZWNhdXNlIGl0J3MgdGhlIHNhbWUgbG9jayB0aGF0IHVzYl9yZW1vdmVf aGNkIHVzZXMKd2hlbiBzZXR0aW5nIHJoZGV2ID0gTlVMTC4KCkFsYW4sIHdoYXQgZG8geW91IHRo aW5rPyBTaG91bGQgSSByZW1vdmUgdGhlIGxvY2s/Cj4gCj4gPiArCj4gPiArCWlmIChoY2QtPnNl bGYucm9vdF9odWIpCj4gPiArCQkvKiBOb3RpZnkgdXNlciBzcGFjZSB0aGF0IHRoZSBob3N0IGNv bnRyb2xsZXIgaGFzIGRpZWQgKi8KPiA+ICsJCWtvYmplY3RfdWV2ZW50X2VudigmaGNkLT5zZWxm LnJvb3RfaHViLT5kZXYua29iaiwgS09CSl9DSEFOR0UsCj4gPiArCQkJCSAgIChjaGFyICpbXSl7 ICJERUFEPTEiLCBOVUxMIH0pOwo+IAo+IGRlY2xhcmluZyB0aGUgZW52cCBpbiB0aGUgZnVuY3Rp b24gaXMgY3V0ZSwgYnV0IHBsZWFzZSBkb24ndCBkbyB0aGF0LAo+IG1ha2UgaXQgb2J2aW91cyB3 aGF0IGlzIGhhcHBlbmluZyBoZXJlIHdpdGggYSByZWFsIHZhcmlhYmxlLgo+IApJIGNhbiBkbyB0 aGF0Lgo+ID4gKwo+ID4gKwltdXRleF91bmxvY2soJnVzYl9idXNfaWRyX2xvY2spOwo+ID4gK30K PiA+ICsKPiA+ICAvKiBXb3JrcXVldWUgcm91dGluZSBmb3Igcm9vdC1odWIgcmVtb3RlIHdha2V1 cCAqLwo+ID4gIHN0YXRpYyB2b2lkIGhjZF9yZXN1bWVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3Qg KndvcmspCj4gPiAgewo+ID4gQEAgLTI0ODgsNiArMjUwOSwxMyBAQCB2b2lkIHVzYl9oY19kaWVk IChzdHJ1Y3QgdXNiX2hjZCAqaGNkKQo+ID4gIAkJCXVzYl9raWNrX2h1Yl93cShoY2QtPnNlbGYu cm9vdF9odWIpOwo+ID4gIAkJfQo+ID4gIAl9Cj4gPiArCj4gPiArCS8qIEhhbmRsZSB0aGUgY2Fz ZSB3aGVyZSB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdpdGggYSBzaGFyZWQgSENEICovCj4g PiArCWlmICh1c2JfaGNkX2lzX3ByaW1hcnlfaGNkKGhjZCkpCj4gPiArCQlzY2hlZHVsZV93b3Jr KCZoY2QtPmRpZWRfd29yayk7Cj4gPiArCWVsc2UKPiA+ICsJCXNjaGVkdWxlX3dvcmsoJmhjZC0+ cHJpbWFyeV9oY2QtPmRpZWRfd29yayk7Cj4gPiArCj4gPiAgCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUgKCZoY2Rfcm9vdF9odWJfbG9jaywgZmxhZ3MpOwo+ID4gIAkvKiBNYWtlIHN1cmUgdGhhdCB0 aGUgb3RoZXIgcm9vdGh1YiBpcyBhbHNvIGRlYWxsb2NhdGVkLiAqLwo+ID4gIH0KPiA+IEBAIC0y NTU1LDYgKzI1ODMsOCBAQCBzdHJ1Y3QgdXNiX2hjZCAqX191c2JfY3JlYXRlX2hjZChjb25zdCBz dHJ1Y3QgaGNfZHJpdmVyICpkcml2ZXIsCj4gPiAgCUlOSVRfV09SSygmaGNkLT53YWtldXBfd29y aywgaGNkX3Jlc3VtZV93b3JrKTsKPiA+ICAjZW5kaWYKPiA+ICAKPiA+ICsJSU5JVF9XT1JLKCZo Y2QtPmRpZWRfd29yaywgaGNkX2RpZWRfd29yayk7Cj4gPiArCj4gPiAgCWhjZC0+ZHJpdmVyID0g ZHJpdmVyOwo+ID4gIAloY2QtPnNwZWVkID0gZHJpdmVyLT5mbGFncyAmIEhDRF9NQVNLOwo+ID4g IAloY2QtPnByb2R1Y3RfZGVzYyA9IChkcml2ZXItPnByb2R1Y3RfZGVzYykgPyBkcml2ZXItPnBy b2R1Y3RfZGVzYyA6Cj4gPiBAQCAtMjkwOCw2ICsyOTM4LDcgQEAgaW50IHVzYl9hZGRfaGNkKHN0 cnVjdCB1c2JfaGNkICpoY2QsCj4gPiAgI2lmZGVmIENPTkZJR19QTQo+ID4gIAljYW5jZWxfd29y a19zeW5jKCZoY2QtPndha2V1cF93b3JrKTsKPiA+ICAjZW5kaWYKPiA+ICsJY2FuY2VsX3dvcmtf c3luYygmaGNkLT5kaWVkX3dvcmspOwo+ID4gIAltdXRleF9sb2NrKCZ1c2JfYnVzX2lkcl9sb2Nr KTsKPiA+ICAJdXNiX2Rpc2Nvbm5lY3QoJnJoZGV2KTsJCS8qIFNldHMgcmhkZXYgdG8gTlVMTCAq Lwo+ID4gIAltdXRleF91bmxvY2soJnVzYl9idXNfaWRyX2xvY2spOwo+ID4gQEAgLTI5NjgsNiAr Mjk5OSw3IEBAIHZvaWQgdXNiX3JlbW92ZV9oY2Qoc3RydWN0IHVzYl9oY2QgKmhjZCkKPiA+ICAj aWZkZWYgQ09ORklHX1BNCj4gPiAgCWNhbmNlbF93b3JrX3N5bmMoJmhjZC0+d2FrZXVwX3dvcmsp Owo+ID4gICNlbmRpZgo+ID4gKwljYW5jZWxfd29ya19zeW5jKCZoY2QtPmRpZWRfd29yayk7Cj4g PiAgCj4gPiAgCW11dGV4X2xvY2soJnVzYl9idXNfaWRyX2xvY2spOwo+ID4gIAl1c2JfZGlzY29u bmVjdCgmcmhkZXYpOwkJLyogU2V0cyByaGRldiB0byBOVUxMICovCj4gPiBkaWZmIC0tZ2l0IGEv aW5jbHVkZS9saW51eC91c2IvaGNkLmggYi9pbmNsdWRlL2xpbnV4L3VzYi9oY2QuaAo+ID4gaW5k ZXggNjk1OTMxYjAzNjg0Li5hZTUxZDViZDFkZmMgMTAwNjQ0Cj4gPiAtLS0gYS9pbmNsdWRlL2xp bnV4L3VzYi9oY2QuaAo+ID4gKysrIGIvaW5jbHVkZS9saW51eC91c2IvaGNkLmgKPiA+IEBAIC05 OCw2ICs5OCw3IEBAIHN0cnVjdCB1c2JfaGNkIHsKPiA+ICAjaWZkZWYgQ09ORklHX1BNCj4gPiAg CXN0cnVjdCB3b3JrX3N0cnVjdAl3YWtldXBfd29yazsJLyogZm9yIHJlbW90ZSB3YWtldXAgKi8K PiA+ICAjZW5kaWYKPiA+ICsJc3RydWN0IHdvcmtfc3RydWN0CWRpZWRfd29yazsJLyogZm9yIGR5 aW5nICovCj4gCj4gIkZvciB3aGVuIHRoZSBkZXZpY2UgZGllcyI/CldpbGwgZG8KPiAKPiBBbmQg aGF2ZSB5b3UgZXZlciBoaXQgdGhpcyBpbiB0aGUgcmVhbCB3b3JsZD8gIElmIHNvLCB3aGF0IGNh biB5b3UgZG8KPiBhYm91dCBpdD8KClNvIEkndmUgZW5jb3VudGVyZWQgdGhpcyBpbiB0d28gcmVh bCB3b3JsZCBzaXR1YXRpb25zOgoxKSBUaGVyZSBpcyBhIGZpcm13YXJlIGJ1ZyBpbiB0aGUgQU1E IERldmljZSA3ODEyIHhIQyB3aGVyZSBpZiBhIGRldmljZQppcyBkaXNjb25uZWN0ZWQgZHVyaW5n IGEgU0VUX0FERFJFU1MgY29tbWFuZCwgdGhlIGNvbnRyb2xsZXIgd2lsbCBsb2NrCnVwLiBUaGUg eEhDSSBzcGVjIHNheXMgdGhhdCB3aGVuIFNFVF9BRERSRVNTIHRpbWVzIG91dCwgdGhlIENvbW1h bmQKQWJvcnQgYml0IHNob3VsZCBiZSBhc3NlcnRlZCB0byBjYW5jZWwgdGhlIGNvbW1hbmQuClNp bmNlIHRoZSBmaXJtd2FyZSBkb2Vzbid0IHJlc3BvbmQgdG8gdGhlIENBIGJpdCBpbiB0aGlzIHNp dHVhdGlvbiwKdGhlIGNvbW1hbmQgYWJvcnQgdGltZXMgb3V0IGFuZCB0aGUgY29udHJvbGxlciBp cyBkZWVtZWQgZGVhZC4gVGhlIG9ubHkKd2F5IHRvIGdldCBvdXQgb2YgdGhpcyBzaXR1YXRpb24g aXMgdG8gcmVib290IDooIEkgaGF2ZSB0cmllZCBIQ1JTVCwgYnV0CnRoYXQgaXMgaWdub3JlZCBh cyB3ZWxsLgoKMikgTXkgd29ya3N0YXRpb24gdXNpbmcgYSBMZXdpc2J1cmcgVVNCIDMuMCB4SENJ IENvbnRyb2xsZXIuCldlIGhhdmUgc29tZSBVU0IgZGV2aWNlcyB3ZSB1c2UgZm9yIGRlYnVnZ2lu ZyBhbmQgdGVzdGluZyBvdXIgRFVUcy4KRXZlciBzaW5jZSB1cGdyYWRpbmcgb3VyIHdvcmtzdGF0 aW9ucyBmcm9tIDQuMTggdG8gNC4xOSB3ZSBnZXQgdGhlCmZvbGxvd2luZyBlcnJvcjoKeGhjaV9o Y2QgMDAwMDowMDoxNC4wOiBNaXNtYXRjaCBiZXR3ZWVuIGNvbXBsZXRlZCBTZXQgVFIgRGVxIFB0 ciBjb21tYW5kICYgeEhDSSBpbnRlcm5hbCBzdGF0ZS4KeGhjaV9oY2QgMDAwMDowMDoxNC4wOiBl cCBkZXEgc2VnID0gMDAwMDAwMDAwNTUyYjY1OCwgZGVxIHB0ciA9IDAwMDAwMDAwNDg5NWIyZjgK RE1BUjogRFJIRDogaGFuZGxpbmcgZmF1bHQgc3RhdHVzIHJlZyAyCkRNQVI6IFtETUEgUmVhZF0g UmVxdWVzdCBkZXZpY2UgWzAwOjE0LjBdIGZhdWx0IGFkZHIgMCBbZmF1bHQgcmVhc29uIDA2XSBQ VEUgUmVhZCBhY2Nlc3MgaXMgbm90IHNldAp4aGNpX2hjZCAwMDAwOjAwOjE0LjA6IHhIQ0kgaG9z dCBub3QgcmVzcG9uZGluZyB0byBzdG9wIGVuZHBvaW50IGNvbW1hbmQuCnhoY2lfaGNkIDAwMDA6 MDA6MTQuMDogeEhDSSBob3N0IGNvbnRyb2xsZXIgbm90IHJlc3BvbmRpbmcsIGFzc3VtZSBkZWFk CnhoY2lfaGNkIDAwMDA6MDA6MTQuMDogeEhDSSBob3N0IG5vdCByZXNwb25kaW5nIHRvIHN0b3Ag ZW5kcG9pbnQgY29tbWFuZC4KeGhjaV9oY2QgMDAwMDowMDoxNC4wOiBIQyBkaWVkOyBjbGVhbmlu ZyB1cAoKSW4gdGhpcyBzaXR1YXRpb24gd2UgYWxzbyBuZWVkIHRvIHJlYm9vdC4gSSBoYXZlbid0 IHNwZW50IGFueXRpbWUgdHJ5aW5nCnRvIHRyYWNrIGRvd24gdGhlIHByb2JsZW0uCgo+IAo+IHRo YW5rcywKClRoYW5rcyBmb3IgdGhlIHRocm91Z2ggcmV2aWV3IGFuZCBjb21tZW50cy4gSSdsbCBn ZXQgYSBuZXcgcGF0Y2gKdXBsb2FkZWQgc29vbi4KPiAKPiBncmVnIGstaAo= 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=HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, MENTIONS_GIT_HOSTING,SIGNED_OFF_BY,SPF_PASS,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 1EFABC282DA for ; Wed, 17 Apr 2019 17:53:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id DF6312064B for ; Wed, 17 Apr 2019 17:53:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731965AbfDQRxH (ORCPT ); Wed, 17 Apr 2019 13:53:07 -0400 Received: from mail-io1-f65.google.com ([209.85.166.65]:37308 "EHLO mail-io1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729553AbfDQRxG (ORCPT ); Wed, 17 Apr 2019 13:53:06 -0400 Received: by mail-io1-f65.google.com with SMTP id x7so21331202ioh.4 for ; Wed, 17 Apr 2019 10:53:06 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=ZbtnPlxJZO76Uoisj8kOzOCBVlHzykfVfXh/H8Jfi80=; b=MUeRilbtgIk2MTpDc9b+CyQXk3LJs3ZmGesj+uiDrm++qcj9NSv04f1rQSLOXG5Vfd I30IX2KXzurYBj1zSGcD/0HxffTcIp6FV36YDiAoyT1JrPff+5ZPiu834NmXm1fbFI8K DWGeLCngxr0JZuntoy9jLs0Bnm6hixhw/+UAeD1h+3r9lOArcaOvJzTT31PU5/uT61Ra ZwubWMBfc7+op2UCWW+kOYy24WcUydxmPTttKKnTnpmGhAGkaUD7BYOqCkdYv4sr1X/F K0wMCpizuJz56n5Uj7iWA41EjgHvmuYvMMr9n6Ofkf4mBP5z61SLY1PFuAYSzsns+JaF EmUQ== X-Gm-Message-State: APjAAAVGxdY/Uykm/xJozJRDPnt/oPUS0880dyRPVxJNOVJgSTJLFuAD B2ufisr40zEJkc1VKzZ1QVFEHg== X-Google-Smtp-Source: APXvYqwsMgM4hUvyypV1LfcRz36DAWroNn894iMVzSfnpSnQQOscNbCBOztBHkqMJS3u6eeUfU7xlg== X-Received: by 2002:a5e:981a:: with SMTP id s26mr56204649ioj.90.1555523585535; Wed, 17 Apr 2019 10:53:05 -0700 (PDT) Received: from google.com ([2620:15c:183:0:20b8:dee7:5447:d05]) by smtp.gmail.com with ESMTPSA id k201sm1566495itb.10.2019.04.17.10.53.04 (version=TLS1_3 cipher=AEAD-AES256-GCM-SHA384 bits=256/256); Wed, 17 Apr 2019 10:53:04 -0700 (PDT) Date: Wed, 17 Apr 2019 11:53:00 -0600 From: Raul Rangel To: Greg Kroah-Hartman 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 , Raul Rangel Subject: Re: [PATCH v2] usb/hcd: Send a uevent signaling that the host controller has died Message-ID: <20190417175300.GA74282@google.com> References: <20190411185211.235940-1-rrangel@chromium.org> <20190416095429.GC896@kroah.com> MIME-Version: 1.0 Content-Type: text/plain; charset="UTF-8" Content-Disposition: inline In-Reply-To: <20190416095429.GC896@kroah.com> User-Agent: Mutt/1.10.1 (2018-07-13) Sender: linux-usb-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-usb@vger.kernel.org Message-ID: <20190417175300.Y8FlCGD1sRtRYOqOUUnJfjCLpTfjxzHgptXHMd4uC5g@z> On Tue, Apr 16, 2019 at 11:54:29AM +0200, Greg Kroah-Hartman wrote: > 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? No, I wasn't able to find any other events that notify when the host controller has died. > > > 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? On ChromeOS we have an error reporter that listens for hardware errors: https://chromium-review.googlesource.com/c/chromiumos/platform2/+/1560170 Though not implemented yet, I also want to notify the user that USB is no longer functional and they should restart. > > I think "OFFLINE" is a bit better here, it does not always imply that it > can come online again. How about OFFLINE with ERROR=DEAD? I would like to report the problem, but I'm OK if you want to just stick with OFFLINE. > > > 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. I'll add something to Documentation/ABI/testing/xhci-uevent > > > 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 :( Oops! Apparently I never updated the documentation when I refactored this to use a worker. > > > +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? We need to ensure that root_hub is not null. Though I'm not sure the lock is entirely necessary in this case. usb_remove_hcd stops the work item before it sets the rhdev to null. The reason I picked usb_bus_idr_lock was because it's the same lock that usb_remove_hcd uses when setting rhdev = NULL. Alan, what do you think? Should I remove the lock? > > > + > > + 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. > I can do that. > > + > > + 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"? Will do > > And have you ever hit this in the real world? If so, what can you do > about it? So I've encountered this in two real world situations: 1) There is a firmware bug in the AMD Device 7812 xHC where if a device is disconnected during a SET_ADDRESS command, the controller will lock up. The xHCI spec says that when SET_ADDRESS times out, the Command Abort bit should be asserted to cancel the command. Since the firmware doesn't respond to the CA bit in this situation, the command abort times out and the controller is deemed dead. The only way to get out of this situation is to reboot :( I have tried HCRST, but that is ignored as well. 2) My workstation using a Lewisburg USB 3.0 xHCI Controller. We have some USB devices we use for debugging and testing our DUTs. Ever since upgrading our workstations from 4.18 to 4.19 we get the following error: xhci_hcd 0000:00:14.0: Mismatch between completed Set TR Deq Ptr command & xHCI internal state. xhci_hcd 0000:00:14.0: ep deq seg = 000000000552b658, deq ptr = 000000004895b2f8 DMAR: DRHD: handling fault status reg 2 DMAR: [DMA Read] Request device [00:14.0] fault addr 0 [fault reason 06] PTE Read access is not set xhci_hcd 0000:00:14.0: xHCI host not responding to stop endpoint command. xhci_hcd 0000:00:14.0: xHCI host controller not responding, assume dead xhci_hcd 0000:00:14.0: xHCI host not responding to stop endpoint command. xhci_hcd 0000:00:14.0: HC died; cleaning up In this situation we also need to reboot. I haven't spent anytime trying to track down the problem. > > thanks, Thanks for the through review and comments. I'll get a new patch uploaded soon. > > greg k-h