Having runtime PM makes no difference on whether or not we want polling, and it's now safe to just enable polling unconditionally in drm_load() thanks to d61a5c106351 ("drm/nouveau: Fix deadlock on runtime suspend")
Signed-off-by: Lyude Paul lyude@redhat.com Cc: Lukas Wunner lukas@wunner.de Cc: Peter Ujfalusi peter.ujfalusi@ti.com Cc: stable@vger.kernel.org --- drivers/gpu/drm/nouveau/nouveau_drm.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index 5fdc1fbe2ee5..ee2546db09c9 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c @@ -592,10 +592,11 @@ nouveau_drm_load(struct drm_device *dev, unsigned long flags) pm_runtime_allow(dev->dev); pm_runtime_mark_last_busy(dev->dev); pm_runtime_put(dev->dev); - } else { - /* enable polling for external displays */ - drm_kms_helper_poll_enable(dev); } + + /* enable polling for connectors without hpd */ + drm_kms_helper_poll_enable(dev); + return 0;
fail_dispinit:
On Wed, Aug 01, 2018 at 05:14:52PM -0400, Lyude Paul wrote:
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c @@ -592,10 +592,11 @@ nouveau_drm_load(struct drm_device *dev, unsigned long flags) pm_runtime_allow(dev->dev); pm_runtime_mark_last_busy(dev->dev); pm_runtime_put(dev->dev);
- } else {
/* enable polling for external displays */
}drm_kms_helper_poll_enable(dev);
- /* enable polling for connectors without hpd */
- drm_kms_helper_poll_enable(dev);
I'm wondering why drm_kms_helper_poll_enable() is called here at all. Does the invocation in nouveau_display_init() not suffice? Can there be a situation when nouveau_display_init() is not called despite there being connectors that need to be polled?
Thanks,
Lukas
oooh, thanks for pointing that out. I should have grepped for this function before doing that commit. There also appears to be another duplicate drm_kms_helper_poll_enable() in nouveau_vga.c which also looks equally suspecious as being useless. I will fix this up and also remove that other duplicate call in the next version of this
On Thu, 2018-08-02 at 21:14 +0200, Lukas Wunner wrote:
On Wed, Aug 01, 2018 at 05:14:52PM -0400, Lyude Paul wrote:
--- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c @@ -592,10 +592,11 @@ nouveau_drm_load(struct drm_device *dev, unsigned long flags) pm_runtime_allow(dev->dev); pm_runtime_mark_last_busy(dev->dev); pm_runtime_put(dev->dev);
- } else {
/* enable polling for external displays */
}drm_kms_helper_poll_enable(dev);
- /* enable polling for connectors without hpd */
- drm_kms_helper_poll_enable(dev);
I'm wondering why drm_kms_helper_poll_enable() is called here at all. Does the invocation in nouveau_display_init() not suffice? Can there be a situation when nouveau_display_init() is not called despite there being connectors that need to be polled?
Thanks,
Lukas
linux-stable-mirror@lists.linaro.org