• Gurchetan Singh's avatar
    drm/virtio: consider dma-fence context when signaling · 36549848
    Gurchetan Singh authored
    This an incremental refactor towards multiple dma-fence contexts
    in virtio-gpu.  Since all fences are still allocated using
    &virtio_gpu_fence_driver.context, nothing should break and every
    processed fence will be signaled.
    
    The overall idea is every 3D context can allocate a number of
    dma-fence contexts.  Each dma-fence context refers to it's own
    timeline.
    
    For example, consider the following case where virgl submits
    commands to the GPU (fence ids 1, 3) and does a metadata query with
    the CPU (fence id 5).  In a different process, gfxstream submits
    commands to the GPU (fence ids 2, 4).
    
    fence_id (&dma_fence.seqno)       | 1 2 3 4 5
    ----------------------------------|-----------
    fence_ctx 0 (virgl gpu)           | 1   3
    fence_ctx 1 (virgl metadata query)|         5
    fence_ctx 2 (gfxstream gpu)       |   2   4
    
    With multiple fence contexts, we can wait for the metadata query
    to finish without waiting for the virgl gpu to finish.  virgl gpu
    does not have to wait for gfxstream gpu.  The fence id still is the
    monotonically increasing sequence number, but it's only revelant to
    the specific dma-fence context.
    
    To fully enable this feature, we'll need to:
      - have each 3d context allocate a number of fence contexts. Not
        too hard with explicit context initialization on the horizon.
      - have guest userspace specify fence context when performing
        ioctls.
      - tag each fence emitted to the host with the fence context
        information.  virtio_gpu_ctrl_hdr has padding + flags available,
        so that should be easy.
    
    This change goes in the direction specified above, by:
      - looking up the virtgpu_fence given a fence_id
      - signalling all prior fences in a given context
      - signalling current fence
    
    v2: fix grammar in comment
    v3: add r-b tags
    Reviewed-by: default avatarAnthoine Bourgeois <anthoine.bourgeois@gmail.com>
    Signed-off-by: default avatarGurchetan Singh <gurchetansingh@chromium.org>
    Link: http://patchwork.freedesktop.org/patch/msgid/20201201021623.619-3-gurchetansingh@chromium.orgSigned-off-by: default avatarGerd Hoffmann <kraxel@redhat.com>
    36549848
virtgpu_drv.h 14.3 KB