• Lyude Paul's avatar
    drm/nouveau/drm/nouveau: Fix bogus drm_kms_helper_poll_enable() placement · d77ef138
    Lyude Paul authored
    Turns out this part is my fault for not noticing when reviewing
    9a2eba33 ("drm/nouveau: Fix drm poll_helper handling"). Currently
    we call drm_kms_helper_poll_enable() from nouveau_display_hpd_work().
    This makes basically no sense however, because that means we're calling
    drm_kms_helper_poll_enable() every time we schedule the hotplug
    detection work. This is also against the advice mentioned in
    drm_kms_helper_poll_enable()'s documentation:
    
     Note that calls to enable and disable polling must be strictly ordered,
     which is automatically the case when they're only call from
     suspend/resume callbacks.
    
    Of course, hotplugs can't really be ordered. They could even happen
    immediately after we called drm_kms_helper_poll_disable() in
    nouveau_display_fini(), which can lead to all sorts of issues.
    
    Additionally; enabling polling /after/ we call
    drm_helper_hpd_irq_event() could also mean that we'd miss a hotplug
    event anyway, since drm_helper_hpd_irq_event() wouldn't bother trying to
    probe connectors so long as polling is disabled.
    
    So; simply move this back into nouveau_display_init() again. The race
    condition that both of these patches attempted to work around has
    already been fixed properly in
    
      d61a5c10 ("drm/nouveau: Fix deadlock on runtime suspend")
    
    Fixes: 9a2eba33 ("drm/nouveau: Fix drm poll_helper handling")
    Signed-off-by: default avatarLyude Paul <lyude@redhat.com>
    Acked-by: default avatarKarol Herbst <kherbst@redhat.com>
    Acked-by: default avatarDaniel Vetter <daniel@ffwll.ch>
    Cc: Lukas Wunner <lukas@wunner.de>
    Cc: Peter Ujfalusi <peter.ujfalusi@ti.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
    d77ef138
nouveau_display.c 25 KB