• Mario Kleiner's avatar
    drm/nouveau/kms: Increase max retries in scanout position queries. · 60b95d70
    Mario Kleiner authored
    So far we only allowed for 1 retry and just failed the query
    - and thereby high precision vblank timestamping - if we did
    not get a reasonable result, as such a failure wasn't considered
    all too horrible. There are a few NVidia gpu models out there which
    may need a bit more than 1 retry to get a successful query result
    under some conditions.
    
    Since Linux 4.4 the update code for vblank counter and timestamp
    in drm_update_vblank_count() changed so that the implementation
    assumes that high precision vblank timestamping of a kms driver
    either consistently succeeds or consistently fails for a given
    video mode and encoder/connector combo. Iow. switching from success
    to fail or vice versa on a modeset or connector change is ok, but
    spurious temporary failure for a given setup can confuse the core
    code and potentially cause bad miscounting of vblanks and confusion
    or hangs in userspace clients which rely on vblank  stuff, e.g.,
    desktop compositors.
    
    Therefore change the max retry count to a larger number - more than
    any gpu so far is known to need to succeed, but still low enough
    so that these queries which do also happen in vblank interrupt are
    still fast enough to be not disastrously long if something would
    go badly wrong with them.
    
    As such sporadic retries only happen seldom even on affected gpu's,
    this could mean a vblank irq could take a few dozen microseconds
    longer every few hours of uptime -- better than a desktop compositor
    randomly hanging every couple of hours or days of uptime in a hard
    to reproduce manner.
    Signed-off-by: default avatarMario Kleiner <mario.kleiner.de@gmail.com>
    Signed-off-by: default avatarBen Skeggs <bskeggs@redhat.com>
    60b95d70
nouveau_display.c 25.1 KB