Re: [PATCH] drm/virtio: delete notify in virtio_gpu_object_create
On Thu, Mar 26, 2020 at 7:10 AM Gurchetan Singh wrote: > > For 3D buffers, virtio_gpu_gem_object_open notifies. > We can have the same behavior for dumb buffer. > > v2: virtio_gpu_gem_object_open always notifies > v3: avoid boolean variable Series is Reviewed-by: Chia-I Wu > > Signed-off-by: Gurchetan Singh > --- > drivers/gpu/drm/virtio/virtgpu_gem.c| 3 ++- > drivers/gpu/drm/virtio/virtgpu_object.c | 1 - > 2 files changed, 2 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c > b/drivers/gpu/drm/virtio/virtgpu_gem.c > index 90c0a8ea1708c..1025658be4df2 100644 > --- a/drivers/gpu/drm/virtio/virtgpu_gem.c > +++ b/drivers/gpu/drm/virtio/virtgpu_gem.c > @@ -114,7 +114,7 @@ int virtio_gpu_gem_object_open(struct drm_gem_object *obj, > struct virtio_gpu_object_array *objs; > > if (!vgdev->has_virgl_3d) > - return 0; > + goto out_notify; > > objs = virtio_gpu_array_alloc(1); > if (!objs) > @@ -123,6 +123,7 @@ int virtio_gpu_gem_object_open(struct drm_gem_object *obj, > > virtio_gpu_cmd_context_attach_resource(vgdev, vfpriv->ctx_id, >objs); > +out_notify: > virtio_gpu_notify(vgdev); > 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 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH] drm/virtio: delete notify in virtio_gpu_object_create
For 3D buffers, virtio_gpu_gem_object_open notifies. We can have the same behavior for dumb buffer. v2: virtio_gpu_gem_object_open always notifies v3: avoid boolean variable Signed-off-by: Gurchetan Singh --- drivers/gpu/drm/virtio/virtgpu_gem.c| 3 ++- drivers/gpu/drm/virtio/virtgpu_object.c | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c b/drivers/gpu/drm/virtio/virtgpu_gem.c index 90c0a8ea1708c..1025658be4df2 100644 --- a/drivers/gpu/drm/virtio/virtgpu_gem.c +++ b/drivers/gpu/drm/virtio/virtgpu_gem.c @@ -114,7 +114,7 @@ int virtio_gpu_gem_object_open(struct drm_gem_object *obj, struct virtio_gpu_object_array *objs; if (!vgdev->has_virgl_3d) - return 0; + goto out_notify; objs = virtio_gpu_array_alloc(1); if (!objs) @@ -123,6 +123,7 @@ int virtio_gpu_gem_object_open(struct drm_gem_object *obj, virtio_gpu_cmd_context_attach_resource(vgdev, vfpriv->ctx_id, objs); +out_notify: virtio_gpu_notify(vgdev); 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
Re: [PATCH] drm/virtio: delete notify in virtio_gpu_object_create
On Wed, Mar 25, 2020 at 8:41 AM Gurchetan Singh 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 > --- > 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 ___ dri-devel mailing list dri-devel@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/dri-devel
[PATCH] drm/virtio: delete notify in virtio_gpu_object_create
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. v2: virtio_gpu_gem_object_open always notifies Signed-off-by: Gurchetan Singh --- 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