On Wed, Mar 25, 2020 at 8:41 AM Gurchetan Singh gurchetansingh@chromium.org wrote:
For 3D buffers, virtio_gpu_gem_object_open notifies. We can have the same behavior for dumb buffer. We just need to make sure the first open notifies the host for dumb buffers.
virtio_gpu_notify is cheap and does not kick unless there is a need. I probably won't bother with adding `bool notified', which adds a (harmless) data race.
v2: virtio_gpu_gem_object_open always notifies
Signed-off-by: Gurchetan Singh gurchetansingh@chromium.org
drivers/gpu/drm/virtio/virtgpu_drv.h | 1 + drivers/gpu/drm/virtio/virtgpu_gem.c | 10 ++++++++-- drivers/gpu/drm/virtio/virtgpu_object.c | 1 - 3 files changed, 9 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/virtio/virtgpu_drv.h b/drivers/gpu/drm/virtio/virtgpu_drv.h index 79ad176aca5a8..842200e01d785 100644 --- a/drivers/gpu/drm/virtio/virtgpu_drv.h +++ b/drivers/gpu/drm/virtio/virtgpu_drv.h @@ -71,6 +71,7 @@ struct virtio_gpu_object { uint32_t hw_res_handle; bool dumb; bool created;
bool notified;
}; #define gem_to_virtio_gpu_obj(gobj) \ container_of((gobj), struct virtio_gpu_object, base.base) diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c index 90c0a8ea1708c..597ddb7391fb9 100644 --- a/drivers/gpu/drm/virtio/virtgpu_gem.c +++ b/drivers/gpu/drm/virtio/virtgpu_gem.c @@ -111,10 +111,13 @@ int virtio_gpu_gem_object_open(struct drm_gem_object *obj, { struct virtio_gpu_device *vgdev = obj->dev->dev_private; struct virtio_gpu_fpriv *vfpriv = file->driver_priv;
struct virtio_gpu_object *bo = gem_to_virtio_gpu_obj(obj); struct virtio_gpu_object_array *objs;
if (!vgdev->has_virgl_3d)
return 0;
if (!vgdev->has_virgl_3d && !bo->notified)
goto out_notify;
else if (!vgdev->has_virgl_3d)
goto out; objs = virtio_gpu_array_alloc(1); if (!objs)
@@ -123,7 +126,10 @@ int virtio_gpu_gem_object_open(struct drm_gem_object *obj,
virtio_gpu_cmd_context_attach_resource(vgdev, vfpriv->ctx_id, objs);
+out_notify:
bo->notified = true; virtio_gpu_notify(vgdev);
+out: return 0; }
diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c index d9039bb7c5e37..51a8da7d5ef3b 100644 --- a/drivers/gpu/drm/virtio/virtgpu_object.c +++ b/drivers/gpu/drm/virtio/virtgpu_object.c @@ -241,7 +241,6 @@ int virtio_gpu_object_create(struct virtio_gpu_device *vgdev, return ret; }
virtio_gpu_notify(vgdev); *bo_ptr = bo; return 0;
-- 2.24.1
dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel