On Mon, Jun 29, 2026 at 2:39 PM Dmitry Osipenko <[email protected]> wrote: > > Hi, > > On 6/25/26 20:08, Jason Macnak wrote: > > Applies the same treatment as commit 7cf6dd467e87 ("drm/virtio: > > Don't attach GEM to a non-created context in gem_object_open()") > > to virtio_gpu_gem_object_close() to avoid trying to detach > > a resource that was never attached due to a context > > never being created when context_init is supported. > > > > Fixes: 086b9f27f0ab ("drm/virtio: Don't create a context with default param > > if context_init is supported") > > Cc: <[email protected]> # v6.14+ > > Signed-off-by: Jason Macnak <[email protected]> > > --- > > drivers/gpu/drm/virtio/virtgpu_gem.c | 14 ++++++++------ > > 1 file changed, 8 insertions(+), 6 deletions(-) > > > > diff --git a/drivers/gpu/drm/virtio/virtgpu_gem.c > > b/drivers/gpu/drm/virtio/virtgpu_gem.c > > index 435d37d36034..66c3f6f74e9c 100644 > > --- a/drivers/gpu/drm/virtio/virtgpu_gem.c > > +++ b/drivers/gpu/drm/virtio/virtgpu_gem.c > > @@ -139,13 +139,15 @@ void virtio_gpu_gem_object_close(struct > > drm_gem_object *obj, > > if (!vgdev->has_virgl_3d) > > return; > > > > - objs = virtio_gpu_array_alloc(1); > > - if (!objs) > > - return; > > - virtio_gpu_array_add_obj(objs, obj); > > + if (vfpriv->context_created) { > > + objs = virtio_gpu_array_alloc(1); > > + if (!objs) > > + return; > > + virtio_gpu_array_add_obj(objs, obj); > > > > - virtio_gpu_cmd_context_detach_resource(vgdev, vfpriv->ctx_id, > > - objs); > > + virtio_gpu_cmd_context_detach_resource(vgdev, vfpriv->ctx_id, > > + objs); > > + } > > virtio_gpu_notify(vgdev); > > } > > The following scenario still will be troubling: > > 1. vgdev->has_context_init = true > 2. virtio_gpu_gem_object_open() invoked, GEM created and not attached to ctx > 3. virtio_gpu_context_init_ioctl() invoked, now vfpriv->context_created > = true > 4. virtio_gpu_gem_object_close() will detach resource that wasn't attached > > Add obj->ctx_attached member to struct virtio_gpu_object. See > virtio_gpu_object_attach() that uses obj->attached, do the same for > virtio_gpu_cmd_context_attach_resource(). > > -- > Best regards, > Dmitry
Hi Dmitry, WIth context_init, resource attach/detach is per-context based. So a simple obj->ctx_attached won't work. One would have to track in the guest context_init ctx for whether a bo has been attached or not. Another option is to accept this patch and live with the case you mentioned. We can consider that "invalid" user behavior. Best, Yiwei

