• Mario Kleiner's avatar
    drm/nouveau: Dis/Enable vblank irqs during suspend/resume. · 9cba5efa
    Mario Kleiner authored
    Vblank irqs don't get disabled during suspend or driver
    unload, which causes irq delivery after "suspend" or
    driver unload, at least until the gpu is powered off.
    This could race with drm_vblank_cleanup() in the case
    of nouveau and cause a use-after-free bug if the driver
    is unloaded.
    
    More annoyingly during everyday use, at least on nv50
    display engine (likely also others), vblank irqs are
    off after a resume from suspend, but the drm doesn't
    know this, so all vblank related functionality is dead
    after a resume. E.g., all windowed OpenGL clients will
    hang at swapbuffers time, as well as many fullscreen
    clients in many cases. This makes suspend/resume useless
    if one wants to use any OpenGL apps after the resume.
    
    In Linux 3.16, drm_vblank_on() was added, complementing
    the older drm_vblank_off()  to solve these problems
    elegantly, so use those calls in nouveaus suspend/resume
    code.
    
    For kernels 3.8 - 3.15, we need to cherry-pick the
    drm_vblank_on() patch to support this patch.
    Signed-off-by: default avatarMario Kleiner <mario.kleiner.de@gmail.com>
    Cc: <stable@vger.kernel.org> #v3.16
    Cc: <stable@vger.kernel.org> #v3.8+: f2752282: drm: Add drm_vblank_on()
    Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
    9cba5efa
nouveau_display.c 22.9 KB