From: Lyude Paul <lyude@redhat.com>
To: nouveau@lists.freedesktop.org
Cc: stable@vger.kernel.org, Lukas Wunner <lukas@wunner.de>,
Karol Herbst <karolherbst@gmail.com>,
Ben Skeggs <bskeggs@redhat.com>, David Airlie <airlied@linux.ie>,
dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org
Subject: [PATCH v4 5/8] drm/nouveau: Use pm_runtime_get_noresume() in connector_detect()
Date: Wed, 1 Aug 2018 17:14:55 -0400 [thread overview]
Message-ID: <20180801211459.7731-6-lyude@redhat.com> (raw)
In-Reply-To: <20180801211459.7731-1-lyude@redhat.com>
It's true we can't resume the device from poll workers in
nouveau_connector_detect(). We can however, prevent the autosuspend
timer from elapsing immediately if it hasn't already without risking any
sort of deadlock with the runtime suspend/resume operations. So do that
instead of entirely avoiding grabbing a power reference.
Signed-off-by: Lyude Paul <lyude@redhat.com>
Cc: stable@vger.kernel.org
Cc: Lukas Wunner <lukas@wunner.de>
Cc: Karol Herbst <karolherbst@gmail.com>
---
drivers/gpu/drm/nouveau/nouveau_connector.c | 20 +++++++++++---------
1 file changed, 11 insertions(+), 9 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
index 2a45b4c2ceb0..010d6db14cba 100644
--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
+++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
@@ -572,12 +572,16 @@ nouveau_connector_detect(struct drm_connector *connector, bool force)
nv_connector->edid = NULL;
}
- /* Outputs are only polled while runtime active, so acquiring a
- * runtime PM ref here is unnecessary (and would deadlock upon
- * runtime suspend because it waits for polling to finish).
+ /* Outputs are only polled while runtime active, so resuming the
+ * device here is unnecessary (and would deadlock upon runtime suspend
+ * because it waits for polling to finish). We do however, want to
+ * prevent the autosuspend timer from elapsing during this operation
+ * if possible.
*/
- if (!drm_kms_helper_is_poll_worker()) {
- ret = pm_runtime_get_sync(connector->dev->dev);
+ if (drm_kms_helper_is_poll_worker()) {
+ pm_runtime_get_noresume(dev->dev);
+ } else {
+ ret = pm_runtime_get_sync(dev->dev);
if (ret < 0 && ret != -EACCES)
return conn_status;
}
@@ -655,10 +659,8 @@ nouveau_connector_detect(struct drm_connector *connector, bool force)
out:
- if (!drm_kms_helper_is_poll_worker()) {
- pm_runtime_mark_last_busy(connector->dev->dev);
- pm_runtime_put_autosuspend(connector->dev->dev);
- }
+ pm_runtime_mark_last_busy(dev->dev);
+ pm_runtime_put_autosuspend(dev->dev);
return conn_status;
}
--
2.17.1
next prev parent reply other threads:[~2018-08-01 21:14 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-08-01 21:14 [PATCH v4 0/8] Fix connector probing deadlocks from RPM bugs Lyude Paul
2018-08-01 21:14 ` Lyude Paul
[not found] ` <20180801211459.7731-1-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2018-08-01 21:14 ` [PATCH v4 1/8] drm/nouveau: Fix bogus drm_kms_helper_poll_enable() placement Lyude Paul
2018-08-01 21:14 ` Lyude Paul
[not found] ` <20180801211459.7731-2-lyude-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2018-08-02 19:10 ` Lukas Wunner
2018-08-02 19:10 ` Lukas Wunner
2018-08-01 21:14 ` [PATCH v4 4/8] drm/nouveau: Fix deadlock with fb_helper using new helpers Lyude Paul
2018-08-01 21:14 ` Lyude Paul
2018-08-01 21:14 ` [PATCH v4 2/8] drm/nouveau: Enable polling even if we have runtime PM Lyude Paul
2018-08-02 19:14 ` Lukas Wunner
2018-08-02 19:37 ` Lyude Paul
2018-08-02 19:37 ` Lyude Paul
2018-08-01 21:14 ` [PATCH v4 3/8] drm/fb_helper: Introduce suspend/resume_hotplug() Lyude Paul
2018-08-01 21:14 ` Lyude Paul
2018-08-01 21:14 ` Lyude Paul [this message]
2018-08-01 21:14 ` [PATCH v4 6/8] drm/nouveau: Respond to HPDs by probing one conn at a time Lyude Paul
2018-08-01 21:14 ` [PATCH v4 7/8] drm/nouveau: Fix deadlocks in nouveau_connector_detect() Lyude Paul
2018-08-06 9:15 ` Daniel Vetter
[not found] ` <20180806091517.GL3008-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
2018-08-06 19:29 ` Lyude Paul
2018-08-06 19:29 ` Lyude Paul
2018-08-01 21:14 ` [PATCH v4 8/8] drm/nouveau: Call pm_runtime_get_noresume() from hpd handlers Lyude Paul
2018-08-02 19:40 ` Lukas Wunner
2018-08-02 20:00 ` Lyude Paul
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20180801211459.7731-6-lyude@redhat.com \
--to=lyude@redhat.com \
--cc=airlied@linux.ie \
--cc=bskeggs@redhat.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=karolherbst@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lukas@wunner.de \
--cc=nouveau@lists.freedesktop.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.