From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: Re: [PATCH 1/2] drm/i915: Remove redundant reprobe in i915_drm_resume Date: Thu, 03 Nov 2016 12:42:45 -0400 Message-ID: <1478191365.4192.10.camel@redhat.com> References: <1478187758-32740-1-git-send-email-lyude@redhat.com> <1478187758-32740-2-git-send-email-lyude@redhat.com> <20161103160253.GA24715@nuc-i3427.alporthouse.com> <1478189469.28703.8.camel@redhat.com> <1478189515.28703.9.camel@redhat.com> <20161103162543.GB24715@nuc-i3427.alporthouse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20161103162543.GB24715@nuc-i3427.alporthouse.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson Cc: Daniel Vetter , intel-gfx@lists.freedesktop.org, Lyude , linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCAyMDE2LTExLTAzIGF0IDE2OjI1ICswMDAwLCBDaHJpcyBXaWxzb24gd3JvdGU6Cj4g T24gVGh1LCBOb3YgMDMsIDIwMTYgYXQgMTI6MTE6NTVQTSAtMDQwMCwgTHl1ZGUgUGF1bCB3cm90 ZToKPiA+IAo+ID4gT24gVGh1LCAyMDE2LTExLTAzIGF0IDEyOjExIC0wNDAwLCBMeXVkZSBQYXVs IHdyb3RlOgo+ID4gPiAKPiA+ID4gT24gVGh1LCAyMDE2LTExLTAzIGF0IDE2OjAyICswMDAwLCBD aHJpcyBXaWxzb24gd3JvdGU6Cj4gPiA+ID4gCj4gPiA+ID4gCj4gPiA+ID4gT24gVGh1LCBOb3Yg MDMsIDIwMTYgYXQgMTE6NDI6MzdBTSAtMDQwMCwgTHl1ZGUgd3JvdGU6Cj4gPiA+ID4gPiAKPiA+ ID4gPiA+IAo+ID4gPiA+ID4gCj4gPiA+ID4gPiBXZWluZSdzIGludmVzdGlnYXRpb24gb24gYmVu Y2htYXJraW5nIHRoZSBzdXNwZW5kL3Jlc3VtZSBwcm9jZXNzCj4gPiA+ID4gPiBwb2ludGVkCj4g PiA+ID4gPiBvdXQgYSBsb3Qgb2YgdGhlIHRpbWUgaW4gc3VzcGVuZC9yZXN1bWUgaXMgYmVpbmcg c3BlbnQgcmVwcm9iaW5nLgo+ID4gPiA+ID4gV2hpbGUKPiA+ID4gPiA+IHRoZSByZXByb2Jpbmcg cHJvY2VzcyBpcyBhIGxlbmd0aHkgb25lIGZvciBnb29kIHJlYXNvbiwgd2UgZG9uJ3QgbmVlZAo+ ID4gPiA+ID4gdG8KPiA+ID4gPiA+IGhvbGQgdXAgdGhlIGVudGlyZSBzdXNwZW5kL3Jlc3VtZSBw cm9jZXNzIHdoaWxlIHdlIHdhaXQgZm9yIGl0IHRvCj4gPiA+ID4gPiBmaW5pc2guIEx1Y2tpbHkg YXMgaXQgdHVybnMgb3V0LCB3ZSBhbHJlYWR5IHRyaWdnZXIgYSBmdWxsIGNvbm5lY3Rvcgo+ID4g PiA+ID4gcmVwcm9iZSBpbiBpOTE1X2hwZF9wb2xsX2luaXRfd29yaygpLCBzbyB3ZSBjYW4ganVz dCBkaXRjaCByZXByb2JpbmcKPiA+ID4gPiA+IGluCj4gPiA+ID4gPiBpOTE1X2RybV9yZXN1bWUo KSBlbnRpcmVseS4KPiA+ID4gPiA+IAo+ID4gPiA+ID4gVGhpcyB3b24ndCBsZWFkIHRvIGxlc3Mg dGltZSBzcGVudCByZXN1bWluZyBqdXN0IHlldCBzaW5jZSBub3cgdGhlCj4gPiA+ID4gPiBib3R0 bGVuZWNrIHdpbGwgYmUgd2FpdGluZyBmb3IgdGhlIG1vZGVfY29uZmlnIGxvY2sgaW4KPiA+ID4g PiA+IGRybV9rbXNfaGVscGVyX3BvbGxfZW5hYmxlKCksIHNpbmNlIHRoYXQgd2lsbCBiZSBoZWxk IGFzIGxvbmcgYXMKPiA+ID4gPiA+IGk5MTVfaHBkX3BvbGxfaW5pdF93b3JrKCkgaXMgcmVwcm9i aW5nIGFsbCBvZiB0aGUgY29ubmVjdG9ycy4gQnV0Cj4gPiA+ID4gPiB3ZSdsbAo+ID4gPiA+ID4g YWRkcmVzcyB0aGF0IGluIHRoZSBuZXh0IHBhdGNoLgo+ID4gPiA+ID4gCj4gPiA+ID4gPiBTaWdu ZWQtb2ZmLWJ5OiBMeXVkZSA8bHl1ZGVAcmVkaGF0LmNvbT4KPiA+ID4gPiA+IENjOiBEYXZpZCBX ZWluZWhhbGwgPGRhdmlkLndlaW5laGFsbEBsaW51eC5pbnRlbC5jb20+Cj4gPiA+ID4gPiAtLS0K PiA+ID4gPiA+IMKgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyB8IDIgLS0KPiA+ID4g PiA+IMKgMSBmaWxlIGNoYW5nZWQsIDIgZGVsZXRpb25zKC0pCj4gPiA+ID4gPiAKPiA+ID4gPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4gPiA+ID4gPiBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKPiA+ID4gPiA+IGluZGV4IGJmYjJlZmQu LjUzMmNjMGYgMTAwNjQ0Cj4gPiA+ID4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2Rydi5jCj4gPiA+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCj4g PiA+ID4gPiBAQCAtMTYwMiw4ICsxNjAyLDYgQEAgc3RhdGljIGludCBpOTE1X2RybV9yZXN1bWUo c3RydWN0IGRybV9kZXZpY2UKPiA+ID4gPiA+ICpkZXYpCj4gPiA+ID4gPiDCoAnCoCogbm90aWZp Y2F0aW9ucy4KPiA+ID4gPiA+IMKgCcKgKiAqLwo+ID4gPiA+ID4gwqAJaW50ZWxfaHBkX2luaXQo ZGV2X3ByaXYpOwo+ID4gPiA+ID4gLQkvKiBDb25maWcgbWF5IGhhdmUgY2hhbmdlZCBiZXR3ZWVu IHN1c3BlbmQgYW5kIHJlc3VtZSAqLwo+ID4gPiA+ID4gLQlkcm1faGVscGVyX2hwZF9pcnFfZXZl bnQoZGV2KTsKPiA+ID4gPiAKPiA+ID4gPiBUaGUgY29tbWVudCBpcyBzdGlsbCBhcHQuIFRoaXMg Y29kZSBpcyBrbm93biB0byBiZSBicm9rZW4gc2luY2UgaXQKPiA+ID4gPiBkb2Vzbid0IGRldGVj dCBhIGNoYW5nZSBpbiBtb25pdG9ycyAoZS5nLiBhIGNoYW5nZSBpbiBleHRlcm5hbAo+ID4gPiA+ IGNvbm5lY3RvcnMKPiA+ID4gPiBmcm9tIGRvY2tpbmcpIGJldHdlZW4gc3VzcGVuZCBhbmQgcmVz ZW5kLiBXZSBzdGlsbCBoYXZlIHRvIHNlbmQgdGhlCj4gPiA+ID4gdWV2ZW50Lgo+ID4gPiA+IAo+ ID4gPiA+ICsJZHJtX2ttc19oZWxwZXJfaG90cGx1Z19ldmVudChkZXYpOwo+ID4gPiAKPiA+ID4g SSBtaWdodCBub3QgaGF2ZSBleHBsYWluZWQgbXlzZWxmIHZlcnkgd2VsbC4gVGhlIHdheSB0aGlu Z3Mgc2hvdWxkIGxvb2sKPiA+ID4gd2l0aAo+ID4gPiB0aGlzIHBhdGNoIGlzIGxpa2UgdGhpczoK PiA+ID4gCj4gPiA+IGk5MTVfZHJtX3Jlc3VtZSgpCj4gPiA+IMKgLT4gaW50ZWxfaHBkX2luaXQo KQo+ID4gPiDCoCDCoC0+IHNldHMgZGV2X3ByaXYtPmhvdHBsdWcucG9sbF9lbmFibGVkIHRvIHRy dWUKPiA+IFdob29wcywgcy90cnVlL2ZhbHNlLwo+ID4gCj4gPiA+IAo+ID4gPiDCoCDCoC0+IHNj aGVkdWxlcyBkZXZfcHJpdi0+aG90cGx1Zy5wb2xsX2luaXRfd29yawo+ID4gPiDCoC0+IGNvbnRp bnVlIHJlc3VtZeKApgo+ID4gPiAKPiA+ID4gYXQgdGhlIHNhbWUgdGltZToKPiA+ID4gCj4gPiA+ IGk5MTVfaHBkX3BvbGxfaW5pdF93b3JrKCkgZ2V0cyBzY2hlZHVsZWQgYW5kIHN0YXJ0cwo+ID4g PiDCoC0+IHNpbmNlIGRldl9wcml2LT5ob3RwbHVnLnBvbGxfZW5hYmxlZCA9PSBmYWxzZSwKPiA+ ID4gZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KCkKPiA+ID4gaXMgY2FsbGVkCj4gPiA+IMKgIC0+ IGRybV9oZWxwZXJfaHBkX2lycV9ldmVudCgpIHJlcHJvYmVzIGNvbm5lY3RvcnMKPiA+ID4gwqDC oMKgLT4gaWYgYW55dGhpbmcgY2hhbmdlZCwgZHJtX2ttc19oZWxwZXJfaG90cGx1Z19ldmVudCgp IGdldHMgY2FsbGVkLgo+IAo+IGRybV9oZWxwZXJfaHBkX2lycV9ldmVudCgpIGRvZXMgbm90IGRl dGVjdCBhIGNoYW5nZSBpbiBtb25pdG9ycywgZm9yCj4gZXhhbXBsZSwgc28gdGhlcmUgaXMgbm8g dWV2ZW50IGluIHRoYXQgY2FzZS4KCkkgc3RpbGwgdGhpbmsgeW91J3JlIG1pc3Rha2VuIChhbmQg SSB3b3VsZG4ndCBibGFtZSB5b3UsCmRybV9oZWxwZXJfaHBkX2lycV9ldmVudCgpIGhhcyBhIHJh dGhlciBtaXNsZWFkaW5nIG5hbWUpLiBDb250ZW50cwpvZsKgZHJtX2hlbHBlcl9ocGRfaXJxX2V2 ZW50KCkKCmJvb2wgZHJtX2hlbHBlcl9ocGRfaXJxX2V2ZW50KHN0cnVjdCBkcm1fZGV2aWNlICpk ZXYpCnsKCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7CgllbnVtIGRybV9jb25uZWN0 b3Jfc3RhdHVzIG9sZF9zdGF0dXM7Cglib29sIGNoYW5nZWQgPSBmYWxzZTsKCglpZiAoIWRldi0+ bW9kZV9jb25maWcucG9sbF9lbmFibGVkKQoJCXJldHVybiBmYWxzZTsKCgltdXRleF9sb2NrKCZk ZXYtPm1vZGVfY29uZmlnLm11dGV4KTsKCWRybV9mb3JfZWFjaF9jb25uZWN0b3IoY29ubmVjdG9y LCBkZXYpIHsKCgkJLyogT25seSBoYW5kbGUgSFBEIGNhcGFibGUgY29ubmVjdG9ycy4gKi8KCQlp ZiAoIShjb25uZWN0b3ItPnBvbGxlZCAmIERSTV9DT05ORUNUT1JfUE9MTF9IUEQpKQoJCQljb250 aW51ZTsKCgkJb2xkX3N0YXR1cyA9IGNvbm5lY3Rvci0+c3RhdHVzOwoKCQljb25uZWN0b3ItPnN0 YXR1cyA9IGNvbm5lY3Rvci0+ZnVuY3MtPmRldGVjdChjb25uZWN0b3IsIGZhbHNlKTsKCQlEUk1f REVCVUdfS01TKCJbQ09OTkVDVE9SOiVkOiVzXSBzdGF0dXMgdXBkYXRlZCBmcm9tICVzIHRvCiVz XG4iLAoJCQnCoMKgwqDCoMKgwqBjb25uZWN0b3ItPmJhc2UuaWQsCgkJCcKgwqDCoMKgwqDCoGNv bm5lY3Rvci0+bmFtZSwKCQkJwqDCoMKgwqDCoMKgZHJtX2dldF9jb25uZWN0b3Jfc3RhdHVzX25h bWUob2xkX3N0YXR1cyksCgkJCcKgwqDCoMKgwqDCoGRybV9nZXRfY29ubmVjdG9yX3N0YXR1c19u YW1lKGNvbm5lY3Rvci0+c3RhdHVzKSk7CgkJaWYgKG9sZF9zdGF0dXMgIT0gY29ubmVjdG9yLT5z dGF0dXMpCgkJCWNoYW5nZWQgPSB0cnVlOwoJfQoKCW11dGV4X3VubG9jaygmZGV2LT5tb2RlX2Nv bmZpZy5tdXRleCk7CgoJaWYgKGNoYW5nZWQpCgkJZHJtX2ttc19oZWxwZXJfaG90cGx1Z19ldmVu dChkZXYpOwoKCXJldHVybiBjaGFuZ2VkOwp9CgpVbmxlc3MgSSBtYWRlIGEgbWlzdGFrZSBzb21l d2hlcmUgZG93biB0aGUgbGluZSBvZiB3cml0aW5nIHRoZXNlOiBwb2xsX2VuYWJsZWQKd2lsbCBi ZSBzZXQgdG8gdHJ1ZSAoZHVlIHRvIHRoZSBjaGFuZ2UgZG9uZSBpbiB0aGUgc2Vjb25kIHBhdGNo IHdoZXJlIHdlIG1vdmUKdGhlIGNhbGwgZm9yIGVuYWJsaW5nIHBvbGxpbmcgdXAgc28gdGhhdCBp dCBnZXRzIGNhbGxlZCBiZWZvcmUKaW50ZWxfaHBkX2luaXQoKSksIHdoaWNoIGNhdXNlcyBpdCB0 byBnbyB0aHJvdWdoIGFsbCB0aGUgY29ubmVjdG9ycyBhbmQgY2FsbApjb25uZWN0b3ItPmZ1bmNz LT5kZXRlY3QoKSAod2hpY2ggd2lsbCBiZSBpbnRlbF9kcF9kZXRlY3QoKSwKaW50ZWxfaGRtaV9k ZXRlY3QoKSwgZXRjLiBBbmQgdGhlbiBzZW5kIGEgdWV2ZW50IGlmIHRoZWlyIHN0YXR1cyBjaGFu Z2VkLgoKVGhpcyBiZWluZyBzYWlkIHRoZXJlJ3MgYSBjb3VwbGUgb2YgY2FzZXMgSSBrbm93IHdl IGRvbid0IGhhbmRsZSBjb3JyZWN0bHkgZnJvbQp3cml0aW5nIHVwIGlndCB0ZXN0cyB3aXRoIHRo ZSBjaGFtZWxpdW06IHdlIGRvbid0IHNpbXVsYXRlIGEgZGlzY29ubmVjdCArCmNvbm5lY3Qgd2hl biB0aGUgRURJRCBjaGFuZ2VkIGZyb20gd2hhdCB3ZSBoYWQgbGFzdCwgc28gaWYgd2Ugc3VzcGVu ZCB0aGUgc3lzdGVtCndpdGggbW9uaXRvciBBIGNvbm5lY3RlZCB0byBwb3J0IGZvbyBhbmQgcmVz dW1lIGl0IHdpdGggbW9uaXRvciBCIGNvbm5lY3RlZCB0bwpwb3J0IGZvbywgaXQgd2lsbCBzdGls bCB0aGluayB3ZSdyZSBjb25uZWN0ZWQgdG8gbW9uaXRvciBBLiBIb3dldmVyLCB3ZSBkb24ndApo YW5kbGUgdGhpcyBwcm9wZXJseSB3aXRoIHRoZSBjdXJyZW50IGNvZGUgZWl0aGVyLgoKQXMgZm9y IGNvbm5lY3Rvci0+ZnVuY3MtPmRldGVjdCgpLCBpdCBkb2VzIGRvIGEgcmVhbCBjb25uZWN0b3Ig cmVwcm9iZSBhcwpvcHBvc2VkIHRvIGp1c3QgY2hlY2tpbmcgdGhlIHN0YXR1cyBvZiB0aGUgSFBE IHBpbnMsIEknZCBsb29rIGF0IHRoZSBkZXRlY3QoKQpmdW5jdGlvbnMgaWYgeW91J3JlIHN0aWxs IHNrZXB0aWNhbC4KCj4gLUNocmlzCj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3Rp bmZvL2ludGVsLWdmeAo= From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758389AbcKCQmu (ORCPT ); Thu, 3 Nov 2016 12:42:50 -0400 Received: from mx1.redhat.com ([209.132.183.28]:48872 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754015AbcKCQmr (ORCPT ); Thu, 3 Nov 2016 12:42:47 -0400 Message-ID: <1478191365.4192.10.camel@redhat.com> Subject: Re: [Intel-gfx] [PATCH 1/2] drm/i915: Remove redundant reprobe in i915_drm_resume From: Lyude Paul To: Chris Wilson Cc: Lyude , Daniel Vetter , intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org Date: Thu, 03 Nov 2016 12:42:45 -0400 In-Reply-To: <20161103162543.GB24715@nuc-i3427.alporthouse.com> References: <1478187758-32740-1-git-send-email-lyude@redhat.com> <1478187758-32740-2-git-send-email-lyude@redhat.com> <20161103160253.GA24715@nuc-i3427.alporthouse.com> <1478189469.28703.8.camel@redhat.com> <1478189515.28703.9.camel@redhat.com> <20161103162543.GB24715@nuc-i3427.alporthouse.com> Organization: Red Hat Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: 8bit X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Thu, 03 Nov 2016 16:42:46 +0000 (UTC) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, 2016-11-03 at 16:25 +0000, Chris Wilson wrote: > On Thu, Nov 03, 2016 at 12:11:55PM -0400, Lyude Paul wrote: > > > > On Thu, 2016-11-03 at 12:11 -0400, Lyude Paul wrote: > > > > > > On Thu, 2016-11-03 at 16:02 +0000, Chris Wilson wrote: > > > > > > > > > > > > On Thu, Nov 03, 2016 at 11:42:37AM -0400, Lyude wrote: > > > > > > > > > > > > > > > > > > > > Weine's investigation on benchmarking the suspend/resume process > > > > > pointed > > > > > out a lot of the time in suspend/resume is being spent reprobing. > > > > > While > > > > > the reprobing process is a lengthy one for good reason, we don't need > > > > > to > > > > > hold up the entire suspend/resume process while we wait for it to > > > > > finish. Luckily as it turns out, we already trigger a full connector > > > > > reprobe in i915_hpd_poll_init_work(), so we can just ditch reprobing > > > > > in > > > > > i915_drm_resume() entirely. > > > > > > > > > > This won't lead to less time spent resuming just yet since now the > > > > > bottleneck will be waiting for the mode_config lock in > > > > > drm_kms_helper_poll_enable(), since that will be held as long as > > > > > i915_hpd_poll_init_work() is reprobing all of the connectors. But > > > > > we'll > > > > > address that in the next patch. > > > > > > > > > > Signed-off-by: Lyude > > > > > Cc: David Weinehall > > > > > --- > > > > >  drivers/gpu/drm/i915/i915_drv.c | 2 -- > > > > >  1 file changed, 2 deletions(-) > > > > > > > > > > diff --git a/drivers/gpu/drm/i915/i915_drv.c > > > > > b/drivers/gpu/drm/i915/i915_drv.c > > > > > index bfb2efd..532cc0f 100644 > > > > > --- a/drivers/gpu/drm/i915/i915_drv.c > > > > > +++ b/drivers/gpu/drm/i915/i915_drv.c > > > > > @@ -1602,8 +1602,6 @@ static int i915_drm_resume(struct drm_device > > > > > *dev) > > > > >    * notifications. > > > > >    * */ > > > > >   intel_hpd_init(dev_priv); > > > > > - /* Config may have changed between suspend and resume */ > > > > > - drm_helper_hpd_irq_event(dev); > > > > > > > > The comment is still apt. This code is known to be broken since it > > > > doesn't detect a change in monitors (e.g. a change in external > > > > connectors > > > > from docking) between suspend and resend. We still have to send the > > > > uevent. > > > > > > > > + drm_kms_helper_hotplug_event(dev); > > > > > > I might not have explained myself very well. The way things should look > > > with > > > this patch is like this: > > > > > > i915_drm_resume() > > >  -> intel_hpd_init() > > >    -> sets dev_priv->hotplug.poll_enabled to true > > Whoops, s/true/false/ > > > > > > > >    -> schedules dev_priv->hotplug.poll_init_work > > >  -> continue resume… > > > > > > at the same time: > > > > > > i915_hpd_poll_init_work() gets scheduled and starts > > >  -> since dev_priv->hotplug.poll_enabled == false, > > > drm_helper_hpd_irq_event() > > > is called > > >   -> drm_helper_hpd_irq_event() reprobes connectors > > >    -> if anything changed, drm_kms_helper_hotplug_event() gets called. > > drm_helper_hpd_irq_event() does not detect a change in monitors, for > example, so there is no uevent in that case. I still think you're mistaken (and I wouldn't blame you, drm_helper_hpd_irq_event() has a rather misleading name). Contents of drm_helper_hpd_irq_event() bool drm_helper_hpd_irq_event(struct drm_device *dev) { struct drm_connector *connector; enum drm_connector_status old_status; bool changed = false; if (!dev->mode_config.poll_enabled) return false; mutex_lock(&dev->mode_config.mutex); drm_for_each_connector(connector, dev) { /* Only handle HPD capable connectors. */ if (!(connector->polled & DRM_CONNECTOR_POLL_HPD)) continue; old_status = connector->status; connector->status = connector->funcs->detect(connector, false); DRM_DEBUG_KMS("[CONNECTOR:%d:%s] status updated from %s to %s\n",       connector->base.id,       connector->name,       drm_get_connector_status_name(old_status),       drm_get_connector_status_name(connector->status)); if (old_status != connector->status) changed = true; } mutex_unlock(&dev->mode_config.mutex); if (changed) drm_kms_helper_hotplug_event(dev); return changed; } Unless I made a mistake somewhere down the line of writing these: poll_enabled will be set to true (due to the change done in the second patch where we move the call for enabling polling up so that it gets called before intel_hpd_init()), which causes it to go through all the connectors and call connector->funcs->detect() (which will be intel_dp_detect(), intel_hdmi_detect(), etc. And then send a uevent if their status changed. This being said there's a couple of cases I know we don't handle correctly from writing up igt tests with the chamelium: we don't simulate a disconnect + connect when the EDID changed from what we had last, so if we suspend the system with monitor A connected to port foo and resume it with monitor B connected to port foo, it will still think we're connected to monitor A. However, we don't handle this properly with the current code either. As for connector->funcs->detect(), it does do a real connector reprobe as opposed to just checking the status of the HPD pins, I'd look at the detect() functions if you're still skeptical. > -Chris >