On 7/7/26 22:01, Yiwei Zhang wrote: > 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.
Indeed, obj->ctx_attached shouldn't work for a shared/exported BO. Will think on it for a couple days more and then merge this version if no better ideas will appear. -- Best regards, Dmitry

