From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lyude Paul Subject: [PATCH v4 4/8] drm/nouveau: Fix deadlock with fb_helper using new helpers Date: Wed, 1 Aug 2018 17:14:54 -0400 Message-ID: <20180801211459.7731-5-lyude@redhat.com> References: <20180801211459.7731-1-lyude@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180801211459.7731-1-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: nouveau-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "Nouveau" To: nouveau-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Cc: David Airlie , dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, stable-u79uwXL29TY76Z2rM5mHXA@public.gmane.org, Ben Skeggs List-Id: nouveau.vger.kernel.org VGhpcyByZW1vdmVzIHRoZSBwb3RlbnRpYWwgb2YgZGVhZGxvY2tpbmcgd2l0aCBmYl9oZWxwZXIg ZW50aXJlbHkgYnkKcHJldmVudGluZyBpdCBmcm9tIGhhbmRsaW5nIGhvdHBsdWdzIGR1cmluZyB0 aGUgcnVudGltZSBzdXNwZW5kIHByb2Nlc3MKYXMgZWFybHkgYXMgcG9zc2libGUgaW4gdGhlIHN1 c3BlbmQgcHJvY2Vzcy4gSWYgaXQgdHVybnMgb3V0IHRoaXMgaXMgbm90CnBvc3NpYmxlLCBkdWUg dG8gc29tZSBmYl9oZWxwZXIgYWN0aW9uIGhhdmluZyBiZWVuIHF1ZXVlZCB1cCBiZWZvcmUgd2UK Z290IGEgdGltZSB0byBkaXNhYmxlIGhvdHBsdWdnaW5nLCB3ZSBzaW1wbHkgcmV0dXJuIC1FQlVT WSBzbyB0aGF0IHRoZQpydW50aW1lIFBNIGNvcmUgYXR0ZW1wdHMgYXV0b3N1c3BlbmRpbmcgdGhl IGRldmljZSBhZ2FpbiBvbmNlIGZiX2hlbHBlcgppc24ndCBkb2luZyBhbnl0aGluZy4KClRoaXMg Zml4ZXMgb25lIG9mIHRoZSBpc3N1ZXMgY2F1c2luZyBkZWFkbG9ja3Mgb24gcnVudGltZSBzdXNw ZW5kL3Jlc3VtZQp3aXRoIG5vdXZlYXUgb24gbXkgUDUwLgoKU2lnbmVkLW9mZi1ieTogTHl1ZGUg UGF1bCA8bHl1ZGVAcmVkaGF0LmNvbT4KQ2M6IHN0YWJsZUB2Z2VyLmtlcm5lbC5vcmcKQ2M6IEx1 a2FzIFd1bm5lciA8bHVrYXNAd3VubmVyLmRlPgpDYzogS2Fyb2wgSGVyYnN0IDxrYXJvbGhlcmJz dEBnbWFpbC5jb20+Ci0tLQogZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9kcm0uYyAg IHwgOCArKysrKysrKwogZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jIHwg MSArCiAyIGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmMgYi9kcml2ZXJzL2dwdS9kcm0vbm91dmVh dS9ub3V2ZWF1X2RybS5jCmluZGV4IGVlMjU0NmRiMDljOS4uZDQ3Y2I1YjJhZjk4IDEwMDY0NAot LS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9ub3V2ZWF1X2RybS5jCisrKyBiL2RyaXZlcnMv Z3B1L2RybS9ub3V2ZWF1L25vdXZlYXVfZHJtLmMKQEAgLTgzNiw2ICs4MzYsMTQgQEAgbm91dmVh dV9wbW9wc19ydW50aW1lX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogCQlyZXR1cm4gLUVC VVNZOwogCX0KIAorCS8qIFRoZXJlJ3Mgbm8gd2F5IGZvciB1cyB0byBzdG9wIGZiX2hlbHBlciB3 b3JrIGluIHJlYWN0aW9uIHRvCisJICogaG90cGx1Z3MgbGF0ZXIgaW4gdGhlIFJQTSBwcm9jZXNz LiBGaXJzdCBvZmY6IHdlIGRvbid0IHdhbnQgdG8sCisJICogZmJfaGVscGVyIHNob3VsZCBiZSBh YmxlIHRvIGtlZXAgdGhlIEdQVSBhd2FrZS4gU2Vjb25kIG9mZjogaXQgaXMKKwkgKiBjYXBhYmxl IG9mIGdyYWJiaW5nIGJhc2ljYWxseSBhbnkgbG9jayBpbiBleGlzdGVuY2UuCisJICovCisJaWYg KCFkcm1fZmJfaGVscGVyX3N1c3BlbmRfaG90cGx1Zyhkcm1fZGV2LT5mYl9oZWxwZXIpKQorCQly ZXR1cm4gLUVCVVNZOworCiAJbm91dmVhdV9zd2l0Y2hlcm9vX29wdGltdXNfZHNtKCk7CiAJcmV0 ID0gbm91dmVhdV9kb19zdXNwZW5kKGRybV9kZXYsIHRydWUpOwogCXBjaV9zYXZlX3N0YXRlKHBk ZXYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5j IGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNvbi5jCmluZGV4IDg1YzFmMTBi YzJiNi4uOTYzYmE2MzBmZDA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbm91dmVhdS9u b3V2ZWF1X2ZiY29uLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL25vdXZlYXUvbm91dmVhdV9mYmNv bi5jCkBAIC00NjYsNiArNDY2LDcgQEAgbm91dmVhdV9mYmNvbl9zZXRfc3VzcGVuZF93b3JrKHN0 cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIAljb25zb2xlX3VubG9jaygpOwogCiAJaWYgKHN0YXRl ID09IEZCSU5GT19TVEFURV9SVU5OSU5HKSB7CisJCWRybV9mYl9oZWxwZXJfcmVzdW1lX2hvdHBs dWcoZHJtLT5kZXYtPmZiX2hlbHBlcik7CiAJCXBtX3J1bnRpbWVfbWFya19sYXN0X2J1c3koZHJt LT5kZXYtPmRldik7CiAJCXBtX3J1bnRpbWVfcHV0X3N5bmMoZHJtLT5kZXYtPmRldik7CiAJfQot LSAKMi4xNy4xCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f XwpOb3V2ZWF1IG1haWxpbmcgbGlzdApOb3V2ZWF1QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRw czovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL25vdXZlYXUK 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=-1.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,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 80708C28CF6 for ; Wed, 1 Aug 2018 21:15:47 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 46115208A3 for ; Wed, 1 Aug 2018 21:15:47 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 46115208A3 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.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 S1732486AbeHAXD0 (ORCPT ); Wed, 1 Aug 2018 19:03:26 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:45360 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1731650AbeHAXC7 (ORCPT ); Wed, 1 Aug 2018 19:02:59 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B73F7402243B; Wed, 1 Aug 2018 21:15:17 +0000 (UTC) Received: from malachite.bss.redhat.com (dhcp-10-20-1-11.bss.redhat.com [10.20.1.11]) by smtp.corp.redhat.com (Postfix) with ESMTP id 667532026D68; Wed, 1 Aug 2018 21:15:17 +0000 (UTC) From: Lyude Paul To: nouveau@lists.freedesktop.org Cc: stable@vger.kernel.org, Lukas Wunner , Karol Herbst , Ben Skeggs , David Airlie , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org Subject: [PATCH v4 4/8] drm/nouveau: Fix deadlock with fb_helper using new helpers Date: Wed, 1 Aug 2018 17:14:54 -0400 Message-Id: <20180801211459.7731-5-lyude@redhat.com> In-Reply-To: <20180801211459.7731-1-lyude@redhat.com> References: <20180801211459.7731-1-lyude@redhat.com> X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Wed, 01 Aug 2018 21:15:17 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.6]); Wed, 01 Aug 2018 21:15:17 +0000 (UTC) for IP:'10.11.54.4' DOMAIN:'int-mx04.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'lyude@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This removes the potential of deadlocking with fb_helper entirely by preventing it from handling hotplugs during the runtime suspend process as early as possible in the suspend process. If it turns out this is not possible, due to some fb_helper action having been queued up before we got a time to disable hotplugging, we simply return -EBUSY so that the runtime PM core attempts autosuspending the device again once fb_helper isn't doing anything. This fixes one of the issues causing deadlocks on runtime suspend/resume with nouveau on my P50. Signed-off-by: Lyude Paul Cc: stable@vger.kernel.org Cc: Lukas Wunner Cc: Karol Herbst --- drivers/gpu/drm/nouveau/nouveau_drm.c | 8 ++++++++ drivers/gpu/drm/nouveau/nouveau_fbcon.c | 1 + 2 files changed, 9 insertions(+) diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index ee2546db09c9..d47cb5b2af98 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c @@ -836,6 +836,14 @@ nouveau_pmops_runtime_suspend(struct device *dev) return -EBUSY; } + /* There's no way for us to stop fb_helper work in reaction to + * hotplugs later in the RPM process. First off: we don't want to, + * fb_helper should be able to keep the GPU awake. Second off: it is + * capable of grabbing basically any lock in existence. + */ + if (!drm_fb_helper_suspend_hotplug(drm_dev->fb_helper)) + return -EBUSY; + nouveau_switcheroo_optimus_dsm(); ret = nouveau_do_suspend(drm_dev, true); pci_save_state(pdev); diff --git a/drivers/gpu/drm/nouveau/nouveau_fbcon.c b/drivers/gpu/drm/nouveau/nouveau_fbcon.c index 85c1f10bc2b6..963ba630fd04 100644 --- a/drivers/gpu/drm/nouveau/nouveau_fbcon.c +++ b/drivers/gpu/drm/nouveau/nouveau_fbcon.c @@ -466,6 +466,7 @@ nouveau_fbcon_set_suspend_work(struct work_struct *work) console_unlock(); if (state == FBINFO_STATE_RUNNING) { + drm_fb_helper_resume_hotplug(drm->dev->fb_helper); pm_runtime_mark_last_busy(drm->dev->dev); pm_runtime_put_sync(drm->dev->dev); } -- 2.17.1