• Melissa Wen's avatar
    drm/vkms: guarantee vblank when capturing crc · 5bd858d7
    Melissa Wen authored
    VKMS needs vblank interrupts enabled to capture CRC. When vblank is
    disabled, tests like kms_cursor_crc and kms_pipe_crc_basic getting stuck
    waiting for a capture that will not occur until vkms wakes up. This patch
    adds a helper to set composer and ensure that vblank remains enabled as
    long as the CRC capture is needed.
    
    It clears the execution of the following kms_cursor_crc subtests:
    1. pipe-A-cursor-[size,alpha-opaque, NxN-(on-screen, off-screen, sliding,
    random, fast-moving])] - successful when running individually.
    2. pipe-A-cursor-dpms passes again
    3. pipe-A-cursor-suspend also passes
    
    The issue was initially tracked in the sequential execution of IGT
    kms_cursor_crc subtests: when running the test sequence or one of its
    subtests twice, the odd execs complete and the pairs get stuck in an
    endless wait. In the IGT code, calling a wait_for_vblank on preparing for
    CRC capture prevented the busy-wait. But the problem persisted in the
    pipe-A-cursor-dpms and -suspend subtests.
    
    Checking the history, the pipe-A-cursor-dpms subtest was successful when,
    in vkms_atomic_commit_tail, instead of using the flip_done op, it used
    wait_for_vblanks. Another way to prevent blocking was wait_one_vblank when
    enabling crtc. However, in both cases, pipe-A-cursor-suspend persisted
    blocking in the 2nd start of CRC capture, which may indicate that
    something got stuck in the step of CRC setup. Indeed, wait_one_vblank in
    the crc setup was able to sync things and free all kms_cursor_crc
    subtests. Besides, other alternatives to force enabling vblanks or prevent
    disabling them such as calling drm_crtc_put_vblank or modeset_enables
    before commit_planes + offdelay = 0, also unlock all subtests executions.
    
    Finally, due to vkms's dependence on vblank interruptions to perform
    tasks, this patch uses refcount to ensure that vblanks happen when
    enabling composer and while crc capture is needed.
    
    Cc: Rodrigo Siqueira <rodrigosiqueiramelo@gmail.com>
    Cc: Haneen Mohammed <hamohammed.sa@gmail.com>
    
    v2:
    - extract a vkms_set_composer helper
    - fix vblank refcounting for the disabling case
    
    v3:
    - make the vkms_set_composer helper static
    - review the credit tags
    Co-debugged-by: default avatarSidong Yang <realwakka@gmail.com>
    Signed-off-by: default avatarSidong Yang <realwakka@gmail.com>
    Signed-off-by: default avatarMelissa Wen <melissa.srw@gmail.com>
    Reviewed-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    [danvet: add changelog back in]
    Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
    Link: https://patchwork.freedesktop.org/patch/msgid/20200808120900.pudwwrfz44g3rqx7@smtp.gmail.com
    5bd858d7
vkms_composer.c 6.7 KB