drm/nouveau: Turn off CRTCs on driver unload
authorLukas Wunner <lukas@wunner.de>
Wed, 8 Jun 2016 16:47:27 +0000 (18:47 +0200)
committerDaniel Vetter <daniel.vetter@ffwll.ch>
Fri, 24 Jun 2016 06:49:34 +0000 (08:49 +0200)
commit523872f6b0724ee93d4dad898219306c45c78553
tree1d318958561a1e4521c08bc9218094e832973943
parent6a0d95285035c43361c72776b4c618f60c0f4ab4
drm/nouveau: Turn off CRTCs on driver unload

nouveau leaks a runtime pm ref if at least one CRTC is enabled on
unload. The ref is taken by nouveau_crtc_set_config() and held as long
as a CRTC is in use.

nv04_display_destroy() should solve this by turning off all CRTCs, but

(1) nv50_display_destroy() doesn't do the same and

(2) it's broken since commit d6bf2f370703 ("drm/nouveau: run mode_config
    destructor before destroying internal display state") because the
    crtc structs are torn down by drm_mode_config_cleanup() before being
    turned off. Also, there's no locking.

Move the code to turn off all CRTCs from nv04_display_destroy() to
nouveau_display_destroy() so that it's called for both nv04 and nv50
and before drm_mode_config_cleanup(). Use drm_crtc_force_disable_all()
helper to save on code and have proper locking.

Cc: Ben Skeggs <bskeggs@redhat.com>
Signed-off-by: Lukas Wunner <lukas@wunner.de>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/66daa161322444bbde05d83cb0210b90a66988a4.1465392124.git.lukas@wunner.de
drivers/gpu/drm/nouveau/dispnv04/disp.c
drivers/gpu/drm/nouveau/nouveau_display.c