• Tomasz Figa's avatar
    drm/rockchip: Avoid race with vblank count increment · 7caecdbe
    Tomasz Figa authored
    Since VOP does not have a hardware vblank count register, the ongoing
    commit might be racing with a requested vblank interrupt, which would
    increment the software vblank counter before the changes being committed
    actually happen.
    
    To avoid this, we can extend .atomic_flush(), so after it sets cfg_done
    bit, it polls the vblank interrupt bit until it's inactive to make sure
    that any old vblank interrupt gets to the handler and then uses
    synchronize_irq(vop->irq) to make sure the handler finishes running.
    
    The polling case should happen very rarely, but even if, the total wait
    time should be relatively low and in practice almost equal to the vop
    hardirq handler running time.
    Signed-off-by: default avatarTomasz Figa <tfiga@chromium.org>
    7caecdbe
rockchip_drm_vop.c 42.5 KB