<div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Jun 19, 2023 at 3:02 PM Dmitry Osipenko <<a href="mailto:dmitry.osipenko@collabora.com">dmitry.osipenko@collabora.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 6/13/23 20:43, Gurchetan Singh wrote:<br>
> We don't want to create a fence for every command submission.  It's<br>
> only necessary when userspace provides a waitable token for submission.<br>
> This could be:<br>
> <br>
> 1) bo_handles, to be used with VIRTGPU_WAIT<br>
> 2) out_fence_fd, to be used with dma_fence apis<br>
> 3) a ring_idx provided with VIRTGPU_CONTEXT_PARAM_POLL_RINGS_MASK<br>
>    + DRM event API<br>
> 4) syncobjs in the future<br>
> <br>
> The use case for just submitting a command to the host, and expecting<br>
> no response.  For example, gfxstream has GFXSTREAM_CONTEXT_PING that<br>
> just wakes up the host side worker threads.  There's also<br>
> CROSS_DOMAIN_CMD_SEND which just sends data to the Wayland server.<br>
> <br>
> This prevents the need to signal the automatically created<br>
> virtio_gpu_fence.<br>
> <br>
> Signed-off-by: Gurchetan Singh <<a href="mailto:gurchetansingh@chromium.org" target="_blank">gurchetansingh@chromium.org</a>><br>
> ---<br>
>  drivers/gpu/drm/virtio/virtgpu_submit.c | 10 +++++++---<br>
>  1 file changed, 7 insertions(+), 3 deletions(-)<br>
> <br>
> diff --git a/drivers/gpu/drm/virtio/virtgpu_submit.c b/drivers/gpu/drm/virtio/virtgpu_submit.c<br>
> index cf3c04b16a7a..add106c06ab2 100644<br>
> --- a/drivers/gpu/drm/virtio/virtgpu_submit.c<br>
> +++ b/drivers/gpu/drm/virtio/virtgpu_submit.c<br>
> @@ -168,9 +168,13 @@ static int virtio_gpu_init_submit(struct virtio_gpu_submit *submit,<br>
>  <br>
>       memset(submit, 0, sizeof(*submit));<br>
>  <br>
> -     out_fence = virtio_gpu_fence_alloc(vgdev, fence_ctx, ring_idx);<br>
> -     if (!out_fence)<br>
> -             return -ENOMEM;<br>
> +     if ((exbuf->flags & VIRTGPU_EXECBUF_FENCE_FD_OUT) ||<br>
> +             ((exbuf->flags & VIRTGPU_EXECBUF_RING_IDX) &&<br>
> +             (vfpriv->ring_idx_mask & BIT_ULL(ring_idx))) ||<br>
> +             exbuf->num_bo_handles)<br>
> +             out_fence = virtio_gpu_fence_alloc(vgdev, fence_ctx, ring_idx);<br>
> +     else<br>
> +             out_fence = NULL;<br>
>  <br>
>       err = virtio_gpu_fence_event_create(dev, file, out_fence, ring_idx);<br>
>       if (err) {<br>
<br>
Looks okay, code indentation may be improved a tad to make it more eye-friendly:<br>
<br>
+       if ((exbuf->flags & VIRTGPU_EXECBUF_FENCE_FD_OUT) ||<br>
+          ((exbuf->flags & VIRTGPU_EXECBUF_RING_IDX) && (vfpriv->ring_idx_mask & BIT_ULL(ring_idx))) ||<br>
+            exbuf->num_bo_handles)<br>
+               out_fence = virtio_gpu_fence_alloc(vgdev, fence_ctx, ring_idx);<br>
+       else<br>
+               out_fence = NULL;<br>
<br>
Checkpatch will complain about this variant, but the complaint can be ignored in this case.<br></blockquote><div><br></div><div>Added you r-b and fixed indent in v2.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
-- <br>
Best regards,<br>
Dmitry<br>
<br>
</blockquote></div></div>