From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jani Nikula Subject: Re: [BUG] i915 HDMI connector status is connected after disconnection Date: Wed, 19 Sep 2018 15:08:57 +0300 Message-ID: <87k1nhy9ie.fsf@intel.com> References: <20180705144009.GC5565@intel.com> <87tvnjlsap.fsf@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Chris Chiu Cc: David Airlie , intel-gfx@lists.freedesktop.org, Linux Kernel , dri-devel , rodrigo.vivi@intel.com, Linux Upstreaming Team List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCAxOSBTZXAgMjAxOCwgQ2hyaXMgQ2hpdSA8Y2hpdUBlbmRsZXNzbS5jb20+IHdyb3Rl Ogo+IEkgdHJpZWQgdG8gYWRkIGEgc2xpZ2h0IGRlbGF5IGluIHRoZSBob3RwbHVnIHdvcmsgYXMg Zm9sbG93cwo+Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaG90cGx1Zy5jCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaG90cGx1Zy5jCj4gQEAgLTM3OCw2ICsz NzgsOCBAQCBzdGF0aWMgdm9pZCBkb19pOTE1X2hvdHBsdWdfY2hlY2soc3RydWN0IHdvcmtfc3Ry dWN0ICp3b3JrLAo+Cj4gICAgICAgICBzcGluX3VubG9ja19pcnEoJmRldl9wcml2LT5pcnFfbG9j ayk7Cj4KPiArICAgICAgIG1zbGVlcCgxMDApOwo+ICsKPiAgICAgICAgIGRybV9jb25uZWN0b3Jf bGlzdF9pdGVyX2JlZ2luKGRldiwgJmNvbm5faXRlcik7Cj4gICAgICAgICBkcm1fZm9yX2VhY2hf Y29ubmVjdG9yX2l0ZXIoY29ubmVjdG9yLCAmY29ubl9pdGVyKSB7Cj4gICAgICAgICAgICAgICAg IGludGVsX2Nvbm5lY3RvciA9IHRvX2ludGVsX2Nvbm5lY3Rvcihjb25uZWN0b3IpOwo+Cj4gSXQg ZG9lcyB3b3JrIGluIG1vc3QgY2FzZXMsIGJ1dCBzdGlsbCBmYWlsIHRvIHVwZGF0ZSB0aGUgc3Rh dHVzIGlmIEkKPiB1bnBsdWcgdGhlIEhETUkKPiBjYWJsZSB2ZXJ5IHNsb3cuIEkgYmFzaWNhbGx5 IHB1bGwgdGhlIEhETUkgY2FibGUgaW4gbG9vc2UgY29ubmVjdGVkCj4gc3RhdGUgZmlyc3QsIGFu ZAo+IGhvbGQgaW4gdGhhdCBzdGF0ZSB+MSBzZWNvbmQsIHRvdGFsbHkgdW5wbHVnIGFmdGVyIHRo YXQuIFRoZSBzdGF0dXMgaW4KPiBzeXNmcyB3aWxsIHJlcG9ydAo+IGNvbm5lY3RlZCBhcyBpdCB1 c2VkIHRvLiBUaGVyZSB3YXMgbm8gcHJvYmxlbSB3aGVuIEkgdHJpZWQgdGhlIHBhdGNoCj4gaHR0 cHM6Ly9idWdzLmZyZWVkZXNrdG9wLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTA3MTI1I2M4Cj4KPiBJ J2xsIHRyeSB0byBtb2RpZnkgdGhpcyBwYXRjaCBhIGxpdHRsZSBiaXQgYW5kIHNlbmQgdXBzdHJl YW0gZm9yCj4gZGlzY3Vzc2lvbiBsYXRlci4gUGxlYXNlCj4gYWR2aXNlIGlmIGFueS4gVGhhbmtz LgoKUGxlYXNlIGxldCdzIG5vdCBhZGQgZXhjZXNzaXZlIG1zbGVlcHMgaW4gd29yayBmdW5jdGlv bnMuCgpNeSBpZGVhIHdhcyBtb3JlIGFsb25nIHRoZSBsaW5lcyBvZiBtYWtpbmcgdGhlIGhvdHBs dWcgZnVuY3Rpb24gcnVuIGluIGEKZGVsYXllZCB3b3JrLiBBZnRlciBhIGNoYXQgd2l0aCBWaWxs ZSwgYmVsb3cgaXMgd2hhdCBJIGNhbWUgdXAgd2l0aC4KClBsZWFzZSBsZXQgbWUga25vdyBob3cg aXQgd29ya3MuIEZlZWwgZnJlZSB0byB0b3kgd2l0aCB0aGUKZGVsYXkuIEhvd2V2ZXIsIDEtMiBz ZWNvbmRzIG9yIG1vcmUgc2VlbXMgdG9vIG11Y2guCgpCUiwKSmFuaS4KCgoKRnJvbSA3MjUxNWIz ZTg1NjE3MWU1MmU5NmJiNzQ3OTY3NzRmNTk1YTdmNDE4IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAw MQpGcm9tOiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29tPgpEYXRlOiBUdWUsIDE4 IFNlcCAyMDE4IDEzOjEyOjM0ICswMzAwClN1YmplY3Q6IFtQQVRDSF0gZHJtL2k5MTU6IGRlbGF5 IGhvdHBsdWcgc2NoZWR1bGluZwpPcmdhbml6YXRpb246IEludGVsIEZpbmxhbmQgT3kgLSBCSUMg MDM1NzYwNi00IC0gV2VzdGVuZGlua2F0dSA3LCAwMjE2MCBFc3BvbwpDYzogSmFuaSBOaWt1bGEg PGphbmkubmlrdWxhQGludGVsLmNvbT4KCk9uIHNvbWUgc3lzdGVtcyB3ZSBnZXQgdGhlIGhvdHBs dWcgaXJxIG9uIHVucGx1ZyBiZWZvcmUgdGhlIEREQyBwaW5zCmhhdmUgYmVlbiBkaXNjb25uZWN0 ZWQsIHJlc3VsdGluZyBpbiBjb25uZWN0b3Igc3RhdHVzIHJlbWFpbmluZwpjb25uZWN0ZWQuIFNp bmNlIHByZXZpb3VzIGF0dGVtcHRzIGF0IHVzaW5nIGhvdHBsdWcgbGl2ZSBzdGF0dXMgYmVmb3Jl CkREQyBoYXZlIGZhaWxlZCwgdGhlIG9ubHkgdmlhYmxlIG9wdGlvbiBpcyB0byByZWR1Y2UgdGhl IHdpbmRvdyBmb3IKbWlzdGFrZXMuIERlbGF5IHRoZSBob3RwbHVnIHByb2Nlc3NpbmcuCgpTaWdu ZWQtb2ZmLWJ5OiBKYW5pIE5pa3VsYSA8amFuaS5uaWt1bGFAaW50ZWwuY29tPgotLS0KIGRyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmggICAgICB8ICAyICstCiBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pbnRlbF9ob3RwbHVnLmMgfCAxNSArKysrKysrKysrLS0tLS0KIDIgZmlsZXMgY2hhbmdl ZCwgMTEgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYu aAppbmRleCA3ZDRkYWE3NDEyZjEuLjI3ZjU3OWFiZGRhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5oCkBAIC0yODYsNyArMjg2LDcgQEAgZW51bSBocGRfcGluIHsKICNkZWZpbmUgSFBEX1NUT1JN X0RFRkFVTFRfVEhSRVNIT0xEIDUKIAogc3RydWN0IGk5MTVfaG90cGx1ZyB7Ci0Jc3RydWN0IHdv cmtfc3RydWN0IGhvdHBsdWdfd29yazsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIGhvdHBsdWdfd29y azsKIAogCXN0cnVjdCB7CiAJCXVuc2lnbmVkIGxvbmcgbGFzdF9qaWZmaWVzOwpkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaG90cGx1Zy5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfaG90cGx1Zy5jCmluZGV4IDY0OGExM2M2MDQzYy4uM2FmNjRkYWE1Y2ZjIDEw MDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9ob3RwbHVnLmMKKysrIGIvZHJp dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaG90cGx1Zy5jCkBAIC0xMTAsNiArMTEwLDggQEAgZW51 bSBocGRfcGluIGludGVsX2hwZF9waW5fZGVmYXVsdChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYsCiAJfQogfQogCisjZGVmaW5lIEhPVFBMVUdfREVMQVlfTVMJCTMwMAorCiAjZGVm aW5lIEhQRF9TVE9STV9ERVRFQ1RfUEVSSU9ECQkxMDAwCiAjZGVmaW5lIEhQRF9TVE9STV9SRUVO QUJMRV9ERUxBWQkoMiAqIDYwICogMTAwMCkKIApAQCAtMzE5LDcgKzMyMSw4IEBAIHN0YXRpYyB2 b2lkIGk5MTVfZGlncG9ydF93b3JrX2Z1bmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogCQlz cGluX2xvY2tfaXJxKCZkZXZfcHJpdi0+aXJxX2xvY2spOwogCQlkZXZfcHJpdi0+aG90cGx1Zy5l dmVudF9iaXRzIHw9IG9sZF9iaXRzOwogCQlzcGluX3VubG9ja19pcnEoJmRldl9wcml2LT5pcnFf bG9jayk7Ci0JCXNjaGVkdWxlX3dvcmsoJmRldl9wcml2LT5ob3RwbHVnLmhvdHBsdWdfd29yayk7 CisJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2X3ByaXYtPmhvdHBsdWcuaG90cGx1Z193b3Jr LAorCQkJCSAgICAgIG1zZWNzX3RvX2ppZmZpZXMoSE9UUExVR19ERUxBWV9NUykpOwogCX0KIH0K IApAQCAtMzI5LDcgKzMzMiw3IEBAIHN0YXRpYyB2b2lkIGk5MTVfZGlncG9ydF93b3JrX2Z1bmMo c3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogc3RhdGljIHZvaWQgaTkxNV9ob3RwbHVnX3dvcmtf ZnVuYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2ID0KLQkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBkcm1faTkxNV9wcml2 YXRlLCBob3RwbHVnLmhvdHBsdWdfd29yayk7CisJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qg ZHJtX2k5MTVfcHJpdmF0ZSwgaG90cGx1Zy5ob3RwbHVnX3dvcmsud29yayk7CiAJc3RydWN0IGRy bV9kZXZpY2UgKmRldiA9ICZkZXZfcHJpdi0+ZHJtOwogCXN0cnVjdCBpbnRlbF9jb25uZWN0b3Ig KmludGVsX2Nvbm5lY3RvcjsKIAlzdHJ1Y3QgaW50ZWxfZW5jb2RlciAqaW50ZWxfZW5jb2RlcjsK QEAgLTQ2Niw3ICs0NjksOCBAQCB2b2lkIGludGVsX2hwZF9pcnFfaGFuZGxlcihzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCiAJaWYgKHF1ZXVlX2RpZykKIAkJcXVldWVfd29yayhk ZXZfcHJpdi0+aG90cGx1Zy5kcF93cSwgJmRldl9wcml2LT5ob3RwbHVnLmRpZ19wb3J0X3dvcmsp OwogCWlmIChxdWV1ZV9ocCkKLQkJc2NoZWR1bGVfd29yaygmZGV2X3ByaXYtPmhvdHBsdWcuaG90 cGx1Z193b3JrKTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXZfcHJpdi0+aG90cGx1Zy5o b3RwbHVnX3dvcmssCisJCQkJICAgICAgbXNlY3NfdG9famlmZmllcyhIT1RQTFVHX0RFTEFZX01T KSk7CiB9CiAKIC8qKgpAQCAtNTg2LDcgKzU5MCw4IEBAIHZvaWQgaW50ZWxfaHBkX3BvbGxfaW5p dChzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiAKIHZvaWQgaW50ZWxfaHBkX2lu aXRfd29yayhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpCiB7Ci0JSU5JVF9XT1JL KCZkZXZfcHJpdi0+aG90cGx1Zy5ob3RwbHVnX3dvcmssIGk5MTVfaG90cGx1Z193b3JrX2Z1bmMp OworCUlOSVRfREVMQVlFRF9XT1JLKCZkZXZfcHJpdi0+aG90cGx1Zy5ob3RwbHVnX3dvcmssCisJ CQkgIGk5MTVfaG90cGx1Z193b3JrX2Z1bmMpOwogCUlOSVRfV09SSygmZGV2X3ByaXYtPmhvdHBs dWcuZGlnX3BvcnRfd29yaywgaTkxNV9kaWdwb3J0X3dvcmtfZnVuYyk7CiAJSU5JVF9XT1JLKCZk ZXZfcHJpdi0+aG90cGx1Zy5wb2xsX2luaXRfd29yaywgaTkxNV9ocGRfcG9sbF9pbml0X3dvcmsp OwogCUlOSVRfREVMQVlFRF9XT1JLKCZkZXZfcHJpdi0+aG90cGx1Zy5yZWVuYWJsZV93b3JrLApA QCAtNjA0LDcgKzYwOSw3IEBAIHZvaWQgaW50ZWxfaHBkX2NhbmNlbF93b3JrKHN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdikKIAlzcGluX3VubG9ja19pcnEoJmRldl9wcml2LT5pcnFf bG9jayk7CiAKIAljYW5jZWxfd29ya19zeW5jKCZkZXZfcHJpdi0+aG90cGx1Zy5kaWdfcG9ydF93 b3JrKTsKLQljYW5jZWxfd29ya19zeW5jKCZkZXZfcHJpdi0+aG90cGx1Zy5ob3RwbHVnX3dvcmsp OworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmZGV2X3ByaXYtPmhvdHBsdWcuaG90cGx1Z193 b3JrKTsKIAljYW5jZWxfd29ya19zeW5jKCZkZXZfcHJpdi0+aG90cGx1Zy5wb2xsX2luaXRfd29y ayk7CiAJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZkZXZfcHJpdi0+aG90cGx1Zy5yZWVuYWJs ZV93b3JrKTsKIH0KLS0gCjIuMTEuMAoKCi0tIApKYW5pIE5pa3VsYSwgSW50ZWwgT3BlbiBTb3Vy Y2UgR3JhcGhpY3MgQ2VudGVyCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Ry aS1kZXZlbAo= 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=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED 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 BA290ECE562 for ; Wed, 19 Sep 2018 12:08:56 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5CE62214DA for ; Wed, 19 Sep 2018 12:08:56 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5CE62214DA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=intel.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731377AbeISRqb (ORCPT ); Wed, 19 Sep 2018 13:46:31 -0400 Received: from mga06.intel.com ([134.134.136.31]:62396 "EHLO mga06.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727772AbeISRqb (ORCPT ); Wed, 19 Sep 2018 13:46:31 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 19 Sep 2018 05:08:52 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,393,1531810800"; d="scan'208";a="91426762" Received: from jnikula-mobl3.fi.intel.com (HELO localhost) ([10.237.72.61]) by fmsmga001.fm.intel.com with ESMTP; 19 Sep 2018 05:08:50 -0700 From: Jani Nikula To: Chris Chiu Cc: Ville =?utf-8?B?U3lyasOkbMOk?= , joonas.lahtinen@linux.intel.com, rodrigo.vivi@intel.com, David Airlie , intel-gfx@lists.freedesktop.org, Linux Upstreaming Team , Linux Kernel , dri-devel Subject: Re: [BUG] i915 HDMI connector status is connected after disconnection In-Reply-To: Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo References: <20180705144009.GC5565@intel.com> <87tvnjlsap.fsf@intel.com> Date: Wed, 19 Sep 2018 15:08:57 +0300 Message-ID: <87k1nhy9ie.fsf@intel.com> MIME-Version: 1.0 Content-Type: text/plain Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 19 Sep 2018, Chris Chiu wrote: > I tried to add a slight delay in the hotplug work as follows > > --- a/drivers/gpu/drm/i915/intel_hotplug.c > +++ b/drivers/gpu/drm/i915/intel_hotplug.c > @@ -378,6 +378,8 @@ static void do_i915_hotplug_check(struct work_struct *work, > > spin_unlock_irq(&dev_priv->irq_lock); > > + msleep(100); > + > drm_connector_list_iter_begin(dev, &conn_iter); > drm_for_each_connector_iter(connector, &conn_iter) { > intel_connector = to_intel_connector(connector); > > It does work in most cases, but still fail to update the status if I > unplug the HDMI > cable very slow. I basically pull the HDMI cable in loose connected > state first, and > hold in that state ~1 second, totally unplug after that. The status in > sysfs will report > connected as it used to. There was no problem when I tried the patch > https://bugs.freedesktop.org/show_bug.cgi?id=107125#c8 > > I'll try to modify this patch a little bit and send upstream for > discussion later. Please > advise if any. Thanks. Please let's not add excessive msleeps in work functions. My idea was more along the lines of making the hotplug function run in a delayed work. After a chat with Ville, below is what I came up with. Please let me know how it works. Feel free to toy with the delay. However, 1-2 seconds or more seems too much. BR, Jani. >From 72515b3e856171e52e96bb74796774f595a7f418 Mon Sep 17 00:00:00 2001 From: Jani Nikula Date: Tue, 18 Sep 2018 13:12:34 +0300 Subject: [PATCH] drm/i915: delay hotplug scheduling Organization: Intel Finland Oy - BIC 0357606-4 - Westendinkatu 7, 02160 Espoo Cc: Jani Nikula On some systems we get the hotplug irq on unplug before the DDC pins have been disconnected, resulting in connector status remaining connected. Since previous attempts at using hotplug live status before DDC have failed, the only viable option is to reduce the window for mistakes. Delay the hotplug processing. Signed-off-by: Jani Nikula --- drivers/gpu/drm/i915/i915_drv.h | 2 +- drivers/gpu/drm/i915/intel_hotplug.c | 15 ++++++++++----- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 7d4daa7412f1..27f579abddae 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -286,7 +286,7 @@ enum hpd_pin { #define HPD_STORM_DEFAULT_THRESHOLD 5 struct i915_hotplug { - struct work_struct hotplug_work; + struct delayed_work hotplug_work; struct { unsigned long last_jiffies; diff --git a/drivers/gpu/drm/i915/intel_hotplug.c b/drivers/gpu/drm/i915/intel_hotplug.c index 648a13c6043c..3af64daa5cfc 100644 --- a/drivers/gpu/drm/i915/intel_hotplug.c +++ b/drivers/gpu/drm/i915/intel_hotplug.c @@ -110,6 +110,8 @@ enum hpd_pin intel_hpd_pin_default(struct drm_i915_private *dev_priv, } } +#define HOTPLUG_DELAY_MS 300 + #define HPD_STORM_DETECT_PERIOD 1000 #define HPD_STORM_REENABLE_DELAY (2 * 60 * 1000) @@ -319,7 +321,8 @@ static void i915_digport_work_func(struct work_struct *work) spin_lock_irq(&dev_priv->irq_lock); dev_priv->hotplug.event_bits |= old_bits; spin_unlock_irq(&dev_priv->irq_lock); - schedule_work(&dev_priv->hotplug.hotplug_work); + schedule_delayed_work(&dev_priv->hotplug.hotplug_work, + msecs_to_jiffies(HOTPLUG_DELAY_MS)); } } @@ -329,7 +332,7 @@ static void i915_digport_work_func(struct work_struct *work) static void i915_hotplug_work_func(struct work_struct *work) { struct drm_i915_private *dev_priv = - container_of(work, struct drm_i915_private, hotplug.hotplug_work); + container_of(work, struct drm_i915_private, hotplug.hotplug_work.work); struct drm_device *dev = &dev_priv->drm; struct intel_connector *intel_connector; struct intel_encoder *intel_encoder; @@ -466,7 +469,8 @@ void intel_hpd_irq_handler(struct drm_i915_private *dev_priv, if (queue_dig) queue_work(dev_priv->hotplug.dp_wq, &dev_priv->hotplug.dig_port_work); if (queue_hp) - schedule_work(&dev_priv->hotplug.hotplug_work); + schedule_delayed_work(&dev_priv->hotplug.hotplug_work, + msecs_to_jiffies(HOTPLUG_DELAY_MS)); } /** @@ -586,7 +590,8 @@ void intel_hpd_poll_init(struct drm_i915_private *dev_priv) void intel_hpd_init_work(struct drm_i915_private *dev_priv) { - INIT_WORK(&dev_priv->hotplug.hotplug_work, i915_hotplug_work_func); + INIT_DELAYED_WORK(&dev_priv->hotplug.hotplug_work, + i915_hotplug_work_func); INIT_WORK(&dev_priv->hotplug.dig_port_work, i915_digport_work_func); INIT_WORK(&dev_priv->hotplug.poll_init_work, i915_hpd_poll_init_work); INIT_DELAYED_WORK(&dev_priv->hotplug.reenable_work, @@ -604,7 +609,7 @@ void intel_hpd_cancel_work(struct drm_i915_private *dev_priv) spin_unlock_irq(&dev_priv->irq_lock); cancel_work_sync(&dev_priv->hotplug.dig_port_work); - cancel_work_sync(&dev_priv->hotplug.hotplug_work); + cancel_delayed_work_sync(&dev_priv->hotplug.hotplug_work); cancel_work_sync(&dev_priv->hotplug.poll_init_work); cancel_delayed_work_sync(&dev_priv->hotplug.reenable_work); } -- 2.11.0 -- Jani Nikula, Intel Open Source Graphics Center