No need to do the reservation dance, we can just wait on the fence directly. Signed-off-by: Gerd Hoffmann <kraxel at redhat.com> --- drivers/gpu/drm/virtio/virtgpu_plane.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c index 024c2aa0c929..4b805bf466d3 100644 --- a/drivers/gpu/drm/virtio/virtgpu_plane.c +++ b/drivers/gpu/drm/virtio/virtgpu_plane.c @@ -184,7 +184,6 @@ static void virtio_gpu_cursor_plane_update(struct drm_plane *plane, struct virtio_gpu_framebuffer *vgfb; struct virtio_gpu_object *bo = NULL; uint32_t handle; - int ret = 0; if (plane->state->crtc) output = drm_crtc_to_virtio_gpu_output(plane->state->crtc); @@ -208,15 +207,9 @@ static void virtio_gpu_cursor_plane_update(struct drm_plane *plane, cpu_to_le32(plane->state->crtc_w), cpu_to_le32(plane->state->crtc_h), 0, 0, vgfb->fence); - ret = virtio_gpu_object_reserve(bo, false); - if (!ret) { - reservation_object_add_excl_fence(bo->tbo.resv, - &vgfb->fence->f); - dma_fence_put(&vgfb->fence->f); - vgfb->fence = NULL; - virtio_gpu_object_unreserve(bo); - virtio_gpu_object_wait(bo, false); - } + dma_fence_wait(&vgfb->fence->f, true); + dma_fence_put(&vgfb->fence->f); + vgfb->fence = NULL; } if (plane->state->fb != old_state->fb) { -- 2.18.1
On Mon, Jun 17, 2019 at 01:14:05PM +0200, Gerd Hoffmann wrote:> No need to do the reservation dance, > we can just wait on the fence directly. > > Signed-off-by: Gerd Hoffmann <kraxel at redhat.com> > --- > drivers/gpu/drm/virtio/virtgpu_plane.c | 13 +++---------- > 1 file changed, 3 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/virtio/virtgpu_plane.c b/drivers/gpu/drm/virtio/virtgpu_plane.c > index 024c2aa0c929..4b805bf466d3 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_plane.c > +++ b/drivers/gpu/drm/virtio/virtgpu_plane.c > @@ -184,7 +184,6 @@ static void virtio_gpu_cursor_plane_update(struct drm_plane *plane, > struct virtio_gpu_framebuffer *vgfb; > struct virtio_gpu_object *bo = NULL; > uint32_t handle; > - int ret = 0; > > if (plane->state->crtc) > output = drm_crtc_to_virtio_gpu_output(plane->state->crtc); > @@ -208,15 +207,9 @@ static void virtio_gpu_cursor_plane_update(struct drm_plane *plane, > cpu_to_le32(plane->state->crtc_w), > cpu_to_le32(plane->state->crtc_h), > 0, 0, vgfb->fence); > - ret = virtio_gpu_object_reserve(bo, false); > - if (!ret) { > - reservation_object_add_excl_fence(bo->tbo.resv, > - &vgfb->fence->f); > - dma_fence_put(&vgfb->fence->f); > - vgfb->fence = NULL; > - virtio_gpu_object_unreserve(bo); > - virtio_gpu_object_wait(bo, false); > - } > + dma_fence_wait(&vgfb->fence->f, true); > + dma_fence_put(&vgfb->fence->f); > + vgfb->fence = NULL;Even nicer would be to add the fence using drm_atomic_set_fence_for_plane() in the prepare_fb hook. Assuming this isn't necessary for correctness (but then I kinda have questions about races and stuff). But this gets the job done too I think, so: Reviewed-by: Daniel Vetter <daniel.vetter at ffwll.ch>> } > > if (plane->state->fb != old_state->fb) { > -- > 2.18.1 >-- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch
> Even nicer would be to add the fence using > drm_atomic_set_fence_for_plane() in the prepare_fb hook. Assuming this > isn't necessary for correctness (but then I kinda have questions about > races and stuff).I'll have a look. Maybe this way I can drop struct virtio_gpu_framebuffer (where the fence is the only thing beside struct drm_framebuffer). cheers, Gerd
Apparently Analagous Threads
- [PATCH 3/4] drm/virtio: simplify cursor updates
- [PATCH] drm/virtio: move byteorder handling into virtio_gpu_cmd_transfer_to_host_2d function
- [PATCH 3/4] drm/virtio: simplify cursor updates
- [PATCH] drm/virtio: rework batching
- [PATCH v2] drm/virtio: rework batching