Message ID | 20180801211459.7731-3-lyude@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | Fix connector probing deadlocks from RPM bugs | expand |
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
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:
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(-)