From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mr90p54im-ztdg04151901.me.com ([17.120.66.147]:22905 "EHLO mr90p54im-ztdg04151901.me.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725800AbeGLEih (ORCPT ); Thu, 12 Jul 2018 00:38:37 -0400 Content-type: text/plain; charset=us-ascii; delsp=yes; format=flowed MIME-version: 1.0 (Mac OS X Mail 11.4 \(3445.8.2\)) Subject: Re: [1/5] xhci: Fix perceived dead host due to runtime suspend race with event handler From: Kai-Heng Feng In-reply-to: <1529587185-2776-2-git-send-email-mathias.nyman@linux.intel.com> Date: Thu, 12 Jul 2018 11:30:46 +0800 Cc: gregkh@linuxfoundation.org, linux-usb@vger.kernel.org, stable@vger.kernel.org Content-transfer-encoding: 7bit Message-id: <9995D389-A7EF-41FA-AAE4-70ADBD8CFAC9@me.com> References: <1529587185-2776-2-git-send-email-mathias.nyman@linux.intel.com> To: Mathias Nyman Sender: stable-owner@vger.kernel.org List-ID: Hi Mathias, at 21:19, Mathias Nyman wrote: > Don't rely on event interrupt (EINT) bit alone to detect pending port > change in resume. If no change event is detected the host may be suspended > again, oterwise roothubs are resumed. > > There is a lag in xHC setting EINT. If we don't notice the pending change > in resume, and the controller is runtime suspeded again, it causes the > event handler to assume host is dead as it will fail to read xHC registers > once PCI puts the controller to D3 state. > > [ 268.520969] xhci_hcd: xhci_resume: starting port polling. > [ 268.520985] xhci_hcd: xhci_hub_status_data: stopping port polling. > [ 268.521030] xhci_hcd: xhci_suspend: stopping port polling. > [ 268.521040] xhci_hcd: // Setting command ring address to 0x349bd001 > [ 268.521139] xhci_hcd: Port Status Change Event for port 3 > [ 268.521149] xhci_hcd: resume root hub > [ 268.521163] xhci_hcd: port resume event for port 3 > [ 268.521168] xhci_hcd: xHC is not running. > [ 268.521174] xhci_hcd: handle_port_status: starting port polling. > [ 268.596322] xhci_hcd: xhci_hc_died: xHCI host controller not > responding, assume dead > > The EINT lag is described in a additional note in xhci specs 4.19.2: > > "Due to internal xHC scheduling and system delays, there will be a lag > between a change bit being set and the Port Status Change Event that it > generated being written to the Event Ring. If SW reads the PORTSC and > sees a change bit set, there is no guarantee that the corresponding Port > Status Change Event has already been written into the Event Ring." > > Cc: I tried to backport this patch to v4.15, and "xhci: Create new structures to store xhci port information" series is a dependency for this patch. The series brings substantial changes, so I am wondering if you have any plan to backport this patch to older kernels? Kai-Heng > Signed-off-by: Mathias Nyman 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: [1/5] xhci: Fix perceived dead host due to runtime suspend race with event handler From: Kai-Heng Feng Message-Id: <9995D389-A7EF-41FA-AAE4-70ADBD8CFAC9@me.com> Date: Thu, 12 Jul 2018 11:30:46 +0800 To: Mathias Nyman Cc: gregkh@linuxfoundation.org, linux-usb@vger.kernel.org, stable@vger.kernel.org List-ID: SGkgTWF0aGlhcywKCmF0IDIxOjE5LCBNYXRoaWFzIE55bWFuIDxtYXRoaWFzLm55bWFuQGxpbnV4 LmludGVsLmNvbT4gd3JvdGU6Cgo+IERvbid0IHJlbHkgb24gZXZlbnQgaW50ZXJydXB0IChFSU5U KSBiaXQgYWxvbmUgdG8gZGV0ZWN0IHBlbmRpbmcgcG9ydAo+IGNoYW5nZSBpbiByZXN1bWUuIElm IG5vIGNoYW5nZSBldmVudCBpcyBkZXRlY3RlZCB0aGUgaG9zdCBtYXkgYmUgc3VzcGVuZGVkCj4g YWdhaW4sIG90ZXJ3aXNlIHJvb3RodWJzIGFyZSByZXN1bWVkLgo+Cj4gVGhlcmUgaXMgYSBsYWcg aW4geEhDIHNldHRpbmcgRUlOVC4gSWYgd2UgZG9uJ3Qgbm90aWNlIHRoZSBwZW5kaW5nIGNoYW5n ZQo+IGluIHJlc3VtZSwgYW5kIHRoZSBjb250cm9sbGVyIGlzIHJ1bnRpbWUgc3VzcGVkZWQgYWdh aW4sIGl0IGNhdXNlcyB0aGUKPiBldmVudCBoYW5kbGVyIHRvIGFzc3VtZSBob3N0IGlzIGRlYWQg YXMgaXQgd2lsbCBmYWlsIHRvIHJlYWQgeEhDIHJlZ2lzdGVycwo+IG9uY2UgUENJIHB1dHMgdGhl IGNvbnRyb2xsZXIgdG8gRDMgc3RhdGUuCj4KPiBbICAyNjguNTIwOTY5XSB4aGNpX2hjZDogeGhj aV9yZXN1bWU6IHN0YXJ0aW5nIHBvcnQgcG9sbGluZy4KPiBbICAyNjguNTIwOTg1XSB4aGNpX2hj ZDogeGhjaV9odWJfc3RhdHVzX2RhdGE6IHN0b3BwaW5nIHBvcnQgcG9sbGluZy4KPiBbICAyNjgu NTIxMDMwXSB4aGNpX2hjZDogeGhjaV9zdXNwZW5kOiBzdG9wcGluZyBwb3J0IHBvbGxpbmcuCj4g WyAgMjY4LjUyMTA0MF0geGhjaV9oY2Q6IC8vIFNldHRpbmcgY29tbWFuZCByaW5nIGFkZHJlc3Mg dG8gMHgzNDliZDAwMQo+IFsgIDI2OC41MjExMzldIHhoY2lfaGNkOiBQb3J0IFN0YXR1cyBDaGFu Z2UgRXZlbnQgZm9yIHBvcnQgMwo+IFsgIDI2OC41MjExNDldIHhoY2lfaGNkOiByZXN1bWUgcm9v dCBodWIKPiBbICAyNjguNTIxMTYzXSB4aGNpX2hjZDogcG9ydCByZXN1bWUgZXZlbnQgZm9yIHBv cnQgMwo+IFsgIDI2OC41MjExNjhdIHhoY2lfaGNkOiB4SEMgaXMgbm90IHJ1bm5pbmcuCj4gWyAg MjY4LjUyMTE3NF0geGhjaV9oY2Q6IGhhbmRsZV9wb3J0X3N0YXR1czogc3RhcnRpbmcgcG9ydCBw b2xsaW5nLgo+IFsgIDI2OC41OTYzMjJdIHhoY2lfaGNkOiB4aGNpX2hjX2RpZWQ6IHhIQ0kgaG9z dCBjb250cm9sbGVyIG5vdCAgCj4gcmVzcG9uZGluZywgYXNzdW1lIGRlYWQKPgo+IFRoZSBFSU5U IGxhZyBpcyBkZXNjcmliZWQgaW4gYSBhZGRpdGlvbmFsIG5vdGUgaW4geGhjaSBzcGVjcyA0LjE5 LjI6Cj4KPiAiRHVlIHRvIGludGVybmFsIHhIQyBzY2hlZHVsaW5nIGFuZCBzeXN0ZW0gZGVsYXlz LCB0aGVyZSB3aWxsIGJlIGEgbGFnCj4gYmV0d2VlbiBhIGNoYW5nZSBiaXQgYmVpbmcgc2V0IGFu ZCB0aGUgUG9ydCBTdGF0dXMgQ2hhbmdlIEV2ZW50IHRoYXQgaXQKPiBnZW5lcmF0ZWQgYmVpbmcg d3JpdHRlbiB0byB0aGUgRXZlbnQgUmluZy4gSWYgU1cgcmVhZHMgdGhlIFBPUlRTQyBhbmQKPiBz ZWVzIGEgY2hhbmdlIGJpdCBzZXQsIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IHRoZSBjb3Jy ZXNwb25kaW5nIFBvcnQKPiBTdGF0dXMgQ2hhbmdlIEV2ZW50IGhhcyBhbHJlYWR5IGJlZW4gd3Jp dHRlbiBpbnRvIHRoZSBFdmVudCBSaW5nLiIKPgo+IENjOiA8c3RhYmxlQHZnZXIua2VybmVsLm9y Zz4KCgpJIHRyaWVkIHRvIGJhY2twb3J0IHRoaXMgcGF0Y2ggdG8gdjQuMTUsIGFuZCAieGhjaTog Q3JlYXRlIG5ldyBzdHJ1Y3R1cmVzICAKdG8gc3RvcmUgeGhjaSBwb3J0IGluZm9ybWF0aW9uIiBz ZXJpZXMgaXMgYSBkZXBlbmRlbmN5IGZvciB0aGlzIHBhdGNoLgoKVGhlIHNlcmllcyBicmluZ3Mg c3Vic3RhbnRpYWwgY2hhbmdlcywgc28gSSBhbSB3b25kZXJpbmcgaWYgeW91IGhhdmUgYW55ICAK cGxhbiB0byBiYWNrcG9ydCB0aGlzIHBhdGNoIHRvIG9sZGVyIGtlcm5lbHM/CgpLYWktSGVuZwoK Cj4gU2lnbmVkLW9mZi1ieTogTWF0aGlhcyBOeW1hbiA8bWF0aGlhcy5ueW1hbkBsaW51eC5pbnRl bC5jb20+Ci0tLQpUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAi dW5zdWJzY3JpYmUgbGludXgtdXNiIiBpbgp0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jk b21vQHZnZXIua2VybmVsLm9yZwpNb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdlci5r ZXJuZWwub3JnL21ham9yZG9tby1pbmZvLmh0bWwK