* Add CHANGE_HANDLE ioctl for drm gem v2 @ 2025-07-11 14:53 David Francis 2025-07-11 14:53 ` [PATCH 1/2] drm: Add DRM prime interface to reassign GEM handle David Francis 2025-07-11 14:53 ` [PATCH 2/2] drm: Move drm_gem ioctl kerneldoc to uapi file David Francis 0 siblings, 2 replies; 8+ messages in thread From: David Francis @ 2025-07-11 14:53 UTC (permalink / raw) To: dri-devel Cc: tvrtko.ursulin, Felix.Kuehling, David.YatSin, Chris.Freehill, Christian.Koenig, dcostantino, sruffell, simona, mripard, tzimmermann This patch adds a new ioctl GEM_CHANGE_HANDLE which is needed by amdgpu CRIU for dmabuf. The ioctl allows a user to move a gem object to a new handle. In this version, I have added kerneldoc comments for the new ioctl in drm.h and have moved over the other drm_gem.c ioctl docs to drm.h. Accompanying changes: kernel (for dmabuf CRIU support) https://lore.kernel.org/dri-devel/20250617194536.538681-1-David.Francis@amd.com/ igt (for this ioctl) https://gitlab.freedesktop.org/fdavid-amd/igt-gpu-tools CRIU (for dmabuf CRIU support) https://github.com/checkpoint-restore/criu/pull/2613 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/2] drm: Add DRM prime interface to reassign GEM handle 2025-07-11 14:53 Add CHANGE_HANDLE ioctl for drm gem v2 David Francis @ 2025-07-11 14:53 ` David Francis 2025-07-17 6:23 ` Zhang, Jesse(Jie) 2025-07-11 14:53 ` [PATCH 2/2] drm: Move drm_gem ioctl kerneldoc to uapi file David Francis 1 sibling, 1 reply; 8+ messages in thread From: David Francis @ 2025-07-11 14:53 UTC (permalink / raw) To: dri-devel Cc: tvrtko.ursulin, Felix.Kuehling, David.YatSin, Chris.Freehill, Christian.Koenig, dcostantino, sruffell, simona, mripard, tzimmermann, David Francis CRIU restore of drm buffer objects requires the ability to create or import a buffer object with a specific gem handle. Add new drm ioctl DRM_IOCTL_GEM_CHANGE_HANDLE, which takes the gem handle of an object and moves that object to a specified new gem handle. This ioctl needs to call drm_prime_remove_buf_handle, but that function acquires the prime lock, which the ioctl needs to hold for other purposes. Make drm_prime_remove_buf_handle not acquire the prime lock, and change its other caller to reflect this. The rest of the kernel patches required to enable CRIU can be found at https://lore.kernel.org/dri-devel/20250617194536.538681-1-David.Francis@amd.com/ Signed-off-by: David Francis <David.Francis@amd.com> --- drivers/gpu/drm/drm_gem.c | 54 ++++++++++++++++++++++++++++++++++ drivers/gpu/drm/drm_internal.h | 4 +++ drivers/gpu/drm/drm_ioctl.c | 1 + drivers/gpu/drm/drm_prime.c | 6 +--- include/uapi/drm/drm.h | 23 +++++++++++++++ 5 files changed, 83 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index c6240bab3fa5..3166230d0119 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c @@ -282,7 +282,12 @@ drm_gem_object_release_handle(int id, void *ptr, void *data) if (obj->funcs->close) obj->funcs->close(obj, file_priv); + mutex_lock(&file_priv->prime.lock); + drm_prime_remove_buf_handle(&file_priv->prime, id); + + mutex_unlock(&file_priv->prime.lock); + drm_vma_node_revoke(&obj->vma_node, file_priv); drm_gem_object_handle_put_unlocked(obj); @@ -933,6 +938,55 @@ drm_gem_open_ioctl(struct drm_device *dev, void *data, return ret; } +int drm_gem_change_handle_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_gem_change_handle *args = data; + struct drm_gem_object *obj; + int ret; + + if (!drm_core_check_feature(dev, DRIVER_GEM)) + return -EOPNOTSUPP; + + obj = drm_gem_object_lookup(file_priv, args->handle); + if (!obj) + return -ENOENT; + + if (args->handle == args->new_handle) + return 0; + + mutex_lock(&file_priv->prime.lock); + + spin_lock(&file_priv->table_lock); + ret = idr_alloc(&file_priv->object_idr, obj, + args->new_handle, args->new_handle + 1, GFP_NOWAIT); + spin_unlock(&file_priv->table_lock); + + if (ret < 0) + goto out_unlock; + + if (obj->dma_buf) { + ret = drm_prime_add_buf_handle(&file_priv->prime, obj->dma_buf, args->new_handle); + if (ret < 0) { + spin_lock(&file_priv->table_lock); + idr_remove(&file_priv->object_idr, args->new_handle); + spin_unlock(&file_priv->table_lock); + goto out_unlock; + } + + drm_prime_remove_buf_handle(&file_priv->prime, args->handle); + } + + spin_lock(&file_priv->table_lock); + idr_remove(&file_priv->object_idr, args->handle); + spin_unlock(&file_priv->table_lock); + +out_unlock: + mutex_unlock(&file_priv->prime.lock); + + return ret; +} + /** * drm_gem_open - initializes GEM file-private structures at devnode open time * @dev: drm_device which is being opened by userspace diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h index b2b6a8e49dda..e9d5cdf7e033 100644 --- a/drivers/gpu/drm/drm_internal.h +++ b/drivers/gpu/drm/drm_internal.h @@ -85,6 +85,8 @@ int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data, void drm_prime_init_file_private(struct drm_prime_file_private *prime_fpriv); void drm_prime_destroy_file_private(struct drm_prime_file_private *prime_fpriv); +int drm_prime_add_buf_handle(struct drm_prime_file_private *prime_fpriv, + struct dma_buf *dma_buf, uint32_t handle); void drm_prime_remove_buf_handle(struct drm_prime_file_private *prime_fpriv, uint32_t handle); @@ -168,6 +170,8 @@ int drm_gem_close_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv); int drm_gem_flink_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv); +int drm_gem_change_handle_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); int drm_gem_open_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv); void drm_gem_open(struct drm_device *dev, struct drm_file *file_private); diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index f593dc569d31..d8a24875a7ba 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -653,6 +653,7 @@ static const struct drm_ioctl_desc drm_ioctls[] = { DRM_IOCTL_DEF(DRM_IOCTL_GEM_CLOSE, drm_gem_close_ioctl, DRM_RENDER_ALLOW), DRM_IOCTL_DEF(DRM_IOCTL_GEM_FLINK, drm_gem_flink_ioctl, DRM_AUTH), DRM_IOCTL_DEF(DRM_IOCTL_GEM_OPEN, drm_gem_open_ioctl, DRM_AUTH), + DRM_IOCTL_DEF(DRM_IOCTL_GEM_CHANGE_HANDLE, drm_gem_change_handle_ioctl, DRM_RENDER_ALLOW), DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETRESOURCES, drm_mode_getresources, 0), diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c index bdb51c8f262e..1f2e858e5000 100644 --- a/drivers/gpu/drm/drm_prime.c +++ b/drivers/gpu/drm/drm_prime.c @@ -93,7 +93,7 @@ struct drm_prime_member { struct rb_node handle_rb; }; -static int drm_prime_add_buf_handle(struct drm_prime_file_private *prime_fpriv, +int drm_prime_add_buf_handle(struct drm_prime_file_private *prime_fpriv, struct dma_buf *dma_buf, uint32_t handle) { struct drm_prime_member *member; @@ -190,8 +190,6 @@ void drm_prime_remove_buf_handle(struct drm_prime_file_private *prime_fpriv, { struct rb_node *rb; - mutex_lock(&prime_fpriv->lock); - rb = prime_fpriv->handles.rb_node; while (rb) { struct drm_prime_member *member; @@ -210,8 +208,6 @@ void drm_prime_remove_buf_handle(struct drm_prime_file_private *prime_fpriv, rb = rb->rb_left; } } - - mutex_unlock(&prime_fpriv->lock); } void drm_prime_init_file_private(struct drm_prime_file_private *prime_fpriv) diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h index 7fba37b94401..e3940b657e16 100644 --- a/include/uapi/drm/drm.h +++ b/include/uapi/drm/drm.h @@ -625,6 +625,21 @@ struct drm_gem_open { __u64 size; }; +/** + * struct drm_gem_change_handle - Argument for &DRM_IOCTL_GEM_CHANGE_HANDLE ioctl. + * @handle: The handle of a gem object. + * @new_handle: An available gem handle. + * + * This ioctl changes the handle of a GEM object to the specified one. + * The new handle must be unused. On success the old handle is closed + * and all further IOCTL should refer to the new handle only. + * Calls to DRM_IOCTL_PRIME_FD_TO_HANDLE will return the new handle. + */ +struct drm_gem_change_handle { + __u32 handle; + __u32 new_handle; +}; + /** * DRM_CAP_DUMB_BUFFER * @@ -1305,6 +1320,14 @@ extern "C" { */ #define DRM_IOCTL_SET_CLIENT_NAME DRM_IOWR(0xD1, struct drm_set_client_name) +/** + * DRM_IOCTL_GEM_CHANGE_HANDLE - Move an object to a different handle + * + * Some applications (notably CRIU) need objects to have specific gem handles. + * This ioctl changes the object at one gem handle to use a new gem handle. + */ +#define DRM_IOCTL_GEM_CHANGE_HANDLE DRM_IOWR(0xD2, struct drm_gem_change_handle) + /* * Device specific ioctls should only be in their respective headers * The device specific ioctl range is from 0x40 to 0x9f. -- 2.34.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* RE: [PATCH 1/2] drm: Add DRM prime interface to reassign GEM handle 2025-07-11 14:53 ` [PATCH 1/2] drm: Add DRM prime interface to reassign GEM handle David Francis @ 2025-07-17 6:23 ` Zhang, Jesse(Jie) 0 siblings, 0 replies; 8+ messages in thread From: Zhang, Jesse(Jie) @ 2025-07-17 6:23 UTC (permalink / raw) To: Francis, David, dri-devel@lists.freedesktop.org Cc: tvrtko.ursulin@igalia.com, Kuehling, Felix, Yat Sin, David, Freehill, Chris, Koenig, Christian, dcostantino@meta.com, sruffell@meta.com, simona@ffwll.ch, mripard@kernel.org, tzimmermann@suse.de, Francis, David [AMD Official Use Only - AMD Internal Distribution Only] -----Original Message----- From: dri-devel <dri-devel-bounces@lists.freedesktop.org> On Behalf Of David Francis Sent: Friday, July 11, 2025 10:54 PM To: dri-devel@lists.freedesktop.org Cc: tvrtko.ursulin@igalia.com; Kuehling, Felix <Felix.Kuehling@amd.com>; Yat Sin, David <David.YatSin@amd.com>; Freehill, Chris <Chris.Freehill@amd.com>; Koenig, Christian <Christian.Koenig@amd.com>; dcostantino@meta.com; sruffell@meta.com; simona@ffwll.ch; mripard@kernel.org; tzimmermann@suse.de; Francis, David <David.Francis@amd.com> Subject: [PATCH 1/2] drm: Add DRM prime interface to reassign GEM handle CRIU restore of drm buffer objects requires the ability to create or import a buffer object with a specific gem handle. Add new drm ioctl DRM_IOCTL_GEM_CHANGE_HANDLE, which takes the gem handle of an object and moves that object to a specified new gem handle. This ioctl needs to call drm_prime_remove_buf_handle, but that function acquires the prime lock, which the ioctl needs to hold for other purposes. Make drm_prime_remove_buf_handle not acquire the prime lock, and change its other caller to reflect this. The rest of the kernel patches required to enable CRIU can be found at https://lore.kernel.org/dri-devel/20250617194536.538681-1-David.Francis@amd.com/ Signed-off-by: David Francis <David.Francis@amd.com> --- drivers/gpu/drm/drm_gem.c | 54 ++++++++++++++++++++++++++++++++++ drivers/gpu/drm/drm_internal.h | 4 +++ drivers/gpu/drm/drm_ioctl.c | 1 + drivers/gpu/drm/drm_prime.c | 6 +--- include/uapi/drm/drm.h | 23 +++++++++++++++ 5 files changed, 83 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index c6240bab3fa5..3166230d0119 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c @@ -282,7 +282,12 @@ drm_gem_object_release_handle(int id, void *ptr, void *data) if (obj->funcs->close) obj->funcs->close(obj, file_priv); + mutex_lock(&file_priv->prime.lock); + drm_prime_remove_buf_handle(&file_priv->prime, id); + + mutex_unlock(&file_priv->prime.lock); + drm_vma_node_revoke(&obj->vma_node, file_priv); drm_gem_object_handle_put_unlocked(obj); @@ -933,6 +938,55 @@ drm_gem_open_ioctl(struct drm_device *dev, void *data, return ret; } +int drm_gem_change_handle_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv) +{ + struct drm_gem_change_handle *args = data; + struct drm_gem_object *obj; + int ret; + + if (!drm_core_check_feature(dev, DRIVER_GEM)) + return -EOPNOTSUPP; + + obj = drm_gem_object_lookup(file_priv, args->handle); + if (!obj) + return -ENOENT; + + if (args->handle == args->new_handle) + return 0; + + mutex_lock(&file_priv->prime.lock); + + spin_lock(&file_priv->table_lock); + ret = idr_alloc(&file_priv->object_idr, obj, + args->new_handle, args->new_handle + 1, GFP_NOWAIT); + spin_unlock(&file_priv->table_lock); + + if (ret < 0) + goto out_unlock; + + if (obj->dma_buf) { + ret = drm_prime_add_buf_handle(&file_priv->prime, obj->dma_buf, args->new_handle); + if (ret < 0) { + spin_lock(&file_priv->table_lock); + idr_remove(&file_priv->object_idr, args->new_handle); + spin_unlock(&file_priv->table_lock); + goto out_unlock; + } + + drm_prime_remove_buf_handle(&file_priv->prime, args->handle); + } + Added ret = 0 before out_unlock to ensure proper return value ret = 0; Thanks Jesse + spin_lock(&file_priv->table_lock); + idr_remove(&file_priv->object_idr, args->handle); + spin_unlock(&file_priv->table_lock); + +out_unlock: + mutex_unlock(&file_priv->prime.lock); + + return ret; +} + /** * drm_gem_open - initializes GEM file-private structures at devnode open time * @dev: drm_device which is being opened by userspace diff --git a/drivers/gpu/drm/drm_internal.h b/drivers/gpu/drm/drm_internal.h index b2b6a8e49dda..e9d5cdf7e033 100644 --- a/drivers/gpu/drm/drm_internal.h +++ b/drivers/gpu/drm/drm_internal.h @@ -85,6 +85,8 @@ int drm_prime_fd_to_handle_ioctl(struct drm_device *dev, void *data, void drm_prime_init_file_private(struct drm_prime_file_private *prime_fpriv); void drm_prime_destroy_file_private(struct drm_prime_file_private *prime_fpriv); +int drm_prime_add_buf_handle(struct drm_prime_file_private *prime_fpriv, + struct dma_buf *dma_buf, uint32_t handle); void drm_prime_remove_buf_handle(struct drm_prime_file_private *prime_fpriv, uint32_t handle); @@ -168,6 +170,8 @@ int drm_gem_close_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv); int drm_gem_flink_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv); +int drm_gem_change_handle_ioctl(struct drm_device *dev, void *data, + struct drm_file *file_priv); int drm_gem_open_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv); void drm_gem_open(struct drm_device *dev, struct drm_file *file_private); diff --git a/drivers/gpu/drm/drm_ioctl.c b/drivers/gpu/drm/drm_ioctl.c index f593dc569d31..d8a24875a7ba 100644 --- a/drivers/gpu/drm/drm_ioctl.c +++ b/drivers/gpu/drm/drm_ioctl.c @@ -653,6 +653,7 @@ static const struct drm_ioctl_desc drm_ioctls[] = { DRM_IOCTL_DEF(DRM_IOCTL_GEM_CLOSE, drm_gem_close_ioctl, DRM_RENDER_ALLOW), DRM_IOCTL_DEF(DRM_IOCTL_GEM_FLINK, drm_gem_flink_ioctl, DRM_AUTH), DRM_IOCTL_DEF(DRM_IOCTL_GEM_OPEN, drm_gem_open_ioctl, DRM_AUTH), + DRM_IOCTL_DEF(DRM_IOCTL_GEM_CHANGE_HANDLE, +drm_gem_change_handle_ioctl, DRM_RENDER_ALLOW), DRM_IOCTL_DEF(DRM_IOCTL_MODE_GETRESOURCES, drm_mode_getresources, 0), diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c index bdb51c8f262e..1f2e858e5000 100644 --- a/drivers/gpu/drm/drm_prime.c +++ b/drivers/gpu/drm/drm_prime.c @@ -93,7 +93,7 @@ struct drm_prime_member { struct rb_node handle_rb; }; -static int drm_prime_add_buf_handle(struct drm_prime_file_private *prime_fpriv, +int drm_prime_add_buf_handle(struct drm_prime_file_private +*prime_fpriv, struct dma_buf *dma_buf, uint32_t handle) { struct drm_prime_member *member; @@ -190,8 +190,6 @@ void drm_prime_remove_buf_handle(struct drm_prime_file_private *prime_fpriv, { struct rb_node *rb; - mutex_lock(&prime_fpriv->lock); - rb = prime_fpriv->handles.rb_node; while (rb) { struct drm_prime_member *member; @@ -210,8 +208,6 @@ void drm_prime_remove_buf_handle(struct drm_prime_file_private *prime_fpriv, rb = rb->rb_left; } } - - mutex_unlock(&prime_fpriv->lock); } void drm_prime_init_file_private(struct drm_prime_file_private *prime_fpriv) diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h index 7fba37b94401..e3940b657e16 100644 --- a/include/uapi/drm/drm.h +++ b/include/uapi/drm/drm.h @@ -625,6 +625,21 @@ struct drm_gem_open { __u64 size; }; +/** + * struct drm_gem_change_handle - Argument for &DRM_IOCTL_GEM_CHANGE_HANDLE ioctl. + * @handle: The handle of a gem object. + * @new_handle: An available gem handle. + * + * This ioctl changes the handle of a GEM object to the specified one. + * The new handle must be unused. On success the old handle is closed + * and all further IOCTL should refer to the new handle only. + * Calls to DRM_IOCTL_PRIME_FD_TO_HANDLE will return the new handle. + */ +struct drm_gem_change_handle { + __u32 handle; + __u32 new_handle; +}; + /** * DRM_CAP_DUMB_BUFFER * @@ -1305,6 +1320,14 @@ extern "C" { */ #define DRM_IOCTL_SET_CLIENT_NAME DRM_IOWR(0xD1, struct drm_set_client_name) +/** + * DRM_IOCTL_GEM_CHANGE_HANDLE - Move an object to a different handle + * + * Some applications (notably CRIU) need objects to have specific gem handles. + * This ioctl changes the object at one gem handle to use a new gem handle. + */ +#define DRM_IOCTL_GEM_CHANGE_HANDLE DRM_IOWR(0xD2, struct drm_gem_change_handle) + /* * Device specific ioctls should only be in their respective headers * The device specific ioctl range is from 0x40 to 0x9f. -- 2.34.1 ^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/2] drm: Move drm_gem ioctl kerneldoc to uapi file 2025-07-11 14:53 Add CHANGE_HANDLE ioctl for drm gem v2 David Francis 2025-07-11 14:53 ` [PATCH 1/2] drm: Add DRM prime interface to reassign GEM handle David Francis @ 2025-07-11 14:53 ` David Francis 2025-07-11 21:55 ` Simona Vetter 1 sibling, 1 reply; 8+ messages in thread From: David Francis @ 2025-07-11 14:53 UTC (permalink / raw) To: dri-devel Cc: tvrtko.ursulin, Felix.Kuehling, David.YatSin, Chris.Freehill, Christian.Koenig, dcostantino, sruffell, simona, mripard, tzimmermann, David Francis The drm_gem ioctls were documented in internal file drm_gem.c instead of uapi header drm.h. Move them there and change to appropriate kerneldoc formatting. Signed-off-by: David Francis <David.Francis@amd.com> --- drivers/gpu/drm/drm_gem.c | 30 ----------------------------- include/uapi/drm/drm.h | 40 +++++++++++++++++++++++++++------------ 2 files changed, 28 insertions(+), 42 deletions(-) diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c index 3166230d0119..08778a15eefb 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c @@ -820,14 +820,6 @@ long drm_gem_dma_resv_wait(struct drm_file *filep, u32 handle, } EXPORT_SYMBOL(drm_gem_dma_resv_wait); -/** - * drm_gem_close_ioctl - implementation of the GEM_CLOSE ioctl - * @dev: drm_device - * @data: ioctl data - * @file_priv: drm file-private structure - * - * Releases the handle to an mm object. - */ int drm_gem_close_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv) @@ -843,17 +835,6 @@ drm_gem_close_ioctl(struct drm_device *dev, void *data, return ret; } -/** - * drm_gem_flink_ioctl - implementation of the GEM_FLINK ioctl - * @dev: drm_device - * @data: ioctl data - * @file_priv: drm file-private structure - * - * Create a global name for an object, returning the name. - * - * Note that the name does not hold a reference; when the object - * is freed, the name goes away. - */ int drm_gem_flink_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv) @@ -893,17 +874,6 @@ drm_gem_flink_ioctl(struct drm_device *dev, void *data, return ret; } -/** - * drm_gem_open_ioctl - implementation of the GEM_OPEN ioctl - * @dev: drm_device - * @data: ioctl data - * @file_priv: drm file-private structure - * - * Open an object using the global name, returning a handle and the size. - * - * This handle (of course) holds a reference to the object, so the object - * will not go away until the handle is deleted. - */ int drm_gem_open_ioctl(struct drm_device *dev, void *data, struct drm_file *file_priv) diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h index e3940b657e16..e512da8f3baf 100644 --- a/include/uapi/drm/drm.h +++ b/include/uapi/drm/drm.h @@ -597,31 +597,47 @@ struct drm_set_version { int drm_dd_minor; }; -/* DRM_IOCTL_GEM_CLOSE ioctl argument type */ +/** + * struct drm_gem_close - Argument for &DRM_IOCTL_GEM_CLOSE ioctl. + * @handle: Handle of the object to be closed. + * @pad: Padding. + * + * Releases the handle to an mm object. + */ struct drm_gem_close { - /** Handle of the object to be closed. */ __u32 handle; __u32 pad; }; -/* DRM_IOCTL_GEM_FLINK ioctl argument type */ +/** + * struct drm_gem_flink - Argument for &DRM_IOCTL_GEM_FLINK ioctl. + * @handle: Handle for the object being named. + * @name: Returned global name. + * + * Create a global name for an object, returning the name. + * + * Note that the name does not hold a reference; when the object + * is freed, the name goes away. + */ struct drm_gem_flink { - /** Handle for the object being named */ __u32 handle; - - /** Returned global name */ __u32 name; }; -/* DRM_IOCTL_GEM_OPEN ioctl argument type */ +/** + * struct drm_gem_open - Argument for &DRM_IOCTL_GEM_OPEN ioctl. + * @name: Name of object being opened. + * @handle: Returned handle for the object. + * @size: Returned size of the object + * + * Open an object using the global name, returning a handle and the size. + * + * This handle (of course) holds a reference to the object, so the object + * will not go away until the handle is deleted. + */ struct drm_gem_open { - /** Name of object being opened */ __u32 name; - - /** Returned handle for the object */ __u32 handle; - - /** Returned size of the object */ __u64 size; }; -- 2.34.1 ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] drm: Move drm_gem ioctl kerneldoc to uapi file 2025-07-11 14:53 ` [PATCH 2/2] drm: Move drm_gem ioctl kerneldoc to uapi file David Francis @ 2025-07-11 21:55 ` Simona Vetter 2025-07-14 9:50 ` Christian König 0 siblings, 1 reply; 8+ messages in thread From: Simona Vetter @ 2025-07-11 21:55 UTC (permalink / raw) To: David Francis Cc: dri-devel, tvrtko.ursulin, Felix.Kuehling, David.YatSin, Chris.Freehill, Christian.Koenig, dcostantino, sruffell, simona, mripard, tzimmermann On Fri, Jul 11, 2025 at 10:53:42AM -0400, David Francis wrote: > The drm_gem ioctls were documented in internal file drm_gem.c > instead of uapi header drm.h. Move them there and change to > appropriate kerneldoc formatting. > > Signed-off-by: David Francis <David.Francis@amd.com> Thanks a lot for taking care of this! Reviewed-by: Simona Vetter <simona.vetter@ffwll.ch> I'll leave review for the first patch to folks who care about criu, but it looked good to me too. -Sima > --- > drivers/gpu/drm/drm_gem.c | 30 ----------------------------- > include/uapi/drm/drm.h | 40 +++++++++++++++++++++++++++------------ > 2 files changed, 28 insertions(+), 42 deletions(-) > > diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c > index 3166230d0119..08778a15eefb 100644 > --- a/drivers/gpu/drm/drm_gem.c > +++ b/drivers/gpu/drm/drm_gem.c > @@ -820,14 +820,6 @@ long drm_gem_dma_resv_wait(struct drm_file *filep, u32 handle, > } > EXPORT_SYMBOL(drm_gem_dma_resv_wait); > > -/** > - * drm_gem_close_ioctl - implementation of the GEM_CLOSE ioctl > - * @dev: drm_device > - * @data: ioctl data > - * @file_priv: drm file-private structure > - * > - * Releases the handle to an mm object. > - */ > int > drm_gem_close_ioctl(struct drm_device *dev, void *data, > struct drm_file *file_priv) > @@ -843,17 +835,6 @@ drm_gem_close_ioctl(struct drm_device *dev, void *data, > return ret; > } > > -/** > - * drm_gem_flink_ioctl - implementation of the GEM_FLINK ioctl > - * @dev: drm_device > - * @data: ioctl data > - * @file_priv: drm file-private structure > - * > - * Create a global name for an object, returning the name. > - * > - * Note that the name does not hold a reference; when the object > - * is freed, the name goes away. > - */ > int > drm_gem_flink_ioctl(struct drm_device *dev, void *data, > struct drm_file *file_priv) > @@ -893,17 +874,6 @@ drm_gem_flink_ioctl(struct drm_device *dev, void *data, > return ret; > } > > -/** > - * drm_gem_open_ioctl - implementation of the GEM_OPEN ioctl > - * @dev: drm_device > - * @data: ioctl data > - * @file_priv: drm file-private structure > - * > - * Open an object using the global name, returning a handle and the size. > - * > - * This handle (of course) holds a reference to the object, so the object > - * will not go away until the handle is deleted. > - */ > int > drm_gem_open_ioctl(struct drm_device *dev, void *data, > struct drm_file *file_priv) > diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h > index e3940b657e16..e512da8f3baf 100644 > --- a/include/uapi/drm/drm.h > +++ b/include/uapi/drm/drm.h > @@ -597,31 +597,47 @@ struct drm_set_version { > int drm_dd_minor; > }; > > -/* DRM_IOCTL_GEM_CLOSE ioctl argument type */ > +/** > + * struct drm_gem_close - Argument for &DRM_IOCTL_GEM_CLOSE ioctl. > + * @handle: Handle of the object to be closed. > + * @pad: Padding. > + * > + * Releases the handle to an mm object. > + */ > struct drm_gem_close { > - /** Handle of the object to be closed. */ > __u32 handle; > __u32 pad; > }; > > -/* DRM_IOCTL_GEM_FLINK ioctl argument type */ > +/** > + * struct drm_gem_flink - Argument for &DRM_IOCTL_GEM_FLINK ioctl. > + * @handle: Handle for the object being named. > + * @name: Returned global name. > + * > + * Create a global name for an object, returning the name. > + * > + * Note that the name does not hold a reference; when the object > + * is freed, the name goes away. > + */ > struct drm_gem_flink { > - /** Handle for the object being named */ > __u32 handle; > - > - /** Returned global name */ > __u32 name; > }; > > -/* DRM_IOCTL_GEM_OPEN ioctl argument type */ > +/** > + * struct drm_gem_open - Argument for &DRM_IOCTL_GEM_OPEN ioctl. > + * @name: Name of object being opened. > + * @handle: Returned handle for the object. > + * @size: Returned size of the object > + * > + * Open an object using the global name, returning a handle and the size. > + * > + * This handle (of course) holds a reference to the object, so the object > + * will not go away until the handle is deleted. > + */ > struct drm_gem_open { > - /** Name of object being opened */ > __u32 name; > - > - /** Returned handle for the object */ > __u32 handle; > - > - /** Returned size of the object */ > __u64 size; > }; > > -- > 2.34.1 > -- Simona Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] drm: Move drm_gem ioctl kerneldoc to uapi file 2025-07-11 21:55 ` Simona Vetter @ 2025-07-14 9:50 ` Christian König 2025-07-14 12:40 ` Simona Vetter 0 siblings, 1 reply; 8+ messages in thread From: Christian König @ 2025-07-14 9:50 UTC (permalink / raw) To: Simona Vetter, David Francis Cc: dri-devel, tvrtko.ursulin, Felix.Kuehling, David.YatSin, Chris.Freehill, dcostantino, sruffell, simona, mripard, tzimmermann On 11.07.25 23:55, Simona Vetter wrote: > On Fri, Jul 11, 2025 at 10:53:42AM -0400, David Francis wrote: >> The drm_gem ioctls were documented in internal file drm_gem.c >> instead of uapi header drm.h. Move them there and change to >> appropriate kerneldoc formatting. >> >> Signed-off-by: David Francis <David.Francis@amd.com> > > Thanks a lot for taking care of this! > > Reviewed-by: Simona Vetter <simona.vetter@ffwll.ch> > > I'll leave review for the first patch to folks who care about criu, but it > looked good to me too. I will take that as an Acked-by. Are you ok that we push this into drm-misc-next by the end of the week when we have the IGT test ready? The patches for the CRIU code are ready and IIRC there will be a merge request made, but it will take quite a while until they are actually merged I think. Christian. > -Sima > >> --- >> drivers/gpu/drm/drm_gem.c | 30 ----------------------------- >> include/uapi/drm/drm.h | 40 +++++++++++++++++++++++++++------------ >> 2 files changed, 28 insertions(+), 42 deletions(-) >> >> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c >> index 3166230d0119..08778a15eefb 100644 >> --- a/drivers/gpu/drm/drm_gem.c >> +++ b/drivers/gpu/drm/drm_gem.c >> @@ -820,14 +820,6 @@ long drm_gem_dma_resv_wait(struct drm_file *filep, u32 handle, >> } >> EXPORT_SYMBOL(drm_gem_dma_resv_wait); >> >> -/** >> - * drm_gem_close_ioctl - implementation of the GEM_CLOSE ioctl >> - * @dev: drm_device >> - * @data: ioctl data >> - * @file_priv: drm file-private structure >> - * >> - * Releases the handle to an mm object. >> - */ >> int >> drm_gem_close_ioctl(struct drm_device *dev, void *data, >> struct drm_file *file_priv) >> @@ -843,17 +835,6 @@ drm_gem_close_ioctl(struct drm_device *dev, void *data, >> return ret; >> } >> >> -/** >> - * drm_gem_flink_ioctl - implementation of the GEM_FLINK ioctl >> - * @dev: drm_device >> - * @data: ioctl data >> - * @file_priv: drm file-private structure >> - * >> - * Create a global name for an object, returning the name. >> - * >> - * Note that the name does not hold a reference; when the object >> - * is freed, the name goes away. >> - */ >> int >> drm_gem_flink_ioctl(struct drm_device *dev, void *data, >> struct drm_file *file_priv) >> @@ -893,17 +874,6 @@ drm_gem_flink_ioctl(struct drm_device *dev, void *data, >> return ret; >> } >> >> -/** >> - * drm_gem_open_ioctl - implementation of the GEM_OPEN ioctl >> - * @dev: drm_device >> - * @data: ioctl data >> - * @file_priv: drm file-private structure >> - * >> - * Open an object using the global name, returning a handle and the size. >> - * >> - * This handle (of course) holds a reference to the object, so the object >> - * will not go away until the handle is deleted. >> - */ >> int >> drm_gem_open_ioctl(struct drm_device *dev, void *data, >> struct drm_file *file_priv) >> diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h >> index e3940b657e16..e512da8f3baf 100644 >> --- a/include/uapi/drm/drm.h >> +++ b/include/uapi/drm/drm.h >> @@ -597,31 +597,47 @@ struct drm_set_version { >> int drm_dd_minor; >> }; >> >> -/* DRM_IOCTL_GEM_CLOSE ioctl argument type */ >> +/** >> + * struct drm_gem_close - Argument for &DRM_IOCTL_GEM_CLOSE ioctl. >> + * @handle: Handle of the object to be closed. >> + * @pad: Padding. >> + * >> + * Releases the handle to an mm object. >> + */ >> struct drm_gem_close { >> - /** Handle of the object to be closed. */ >> __u32 handle; >> __u32 pad; >> }; >> >> -/* DRM_IOCTL_GEM_FLINK ioctl argument type */ >> +/** >> + * struct drm_gem_flink - Argument for &DRM_IOCTL_GEM_FLINK ioctl. >> + * @handle: Handle for the object being named. >> + * @name: Returned global name. >> + * >> + * Create a global name for an object, returning the name. >> + * >> + * Note that the name does not hold a reference; when the object >> + * is freed, the name goes away. >> + */ >> struct drm_gem_flink { >> - /** Handle for the object being named */ >> __u32 handle; >> - >> - /** Returned global name */ >> __u32 name; >> }; >> >> -/* DRM_IOCTL_GEM_OPEN ioctl argument type */ >> +/** >> + * struct drm_gem_open - Argument for &DRM_IOCTL_GEM_OPEN ioctl. >> + * @name: Name of object being opened. >> + * @handle: Returned handle for the object. >> + * @size: Returned size of the object >> + * >> + * Open an object using the global name, returning a handle and the size. >> + * >> + * This handle (of course) holds a reference to the object, so the object >> + * will not go away until the handle is deleted. >> + */ >> struct drm_gem_open { >> - /** Name of object being opened */ >> __u32 name; >> - >> - /** Returned handle for the object */ >> __u32 handle; >> - >> - /** Returned size of the object */ >> __u64 size; >> }; >> >> -- >> 2.34.1 >> > ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] drm: Move drm_gem ioctl kerneldoc to uapi file 2025-07-14 9:50 ` Christian König @ 2025-07-14 12:40 ` Simona Vetter 2025-07-18 7:24 ` Christian König 0 siblings, 1 reply; 8+ messages in thread From: Simona Vetter @ 2025-07-14 12:40 UTC (permalink / raw) To: Christian König Cc: Simona Vetter, David Francis, dri-devel, tvrtko.ursulin, Felix.Kuehling, David.YatSin, Chris.Freehill, dcostantino, sruffell, simona, mripard, tzimmermann On Mon, Jul 14, 2025 at 11:50:32AM +0200, Christian König wrote: > On 11.07.25 23:55, Simona Vetter wrote: > > On Fri, Jul 11, 2025 at 10:53:42AM -0400, David Francis wrote: > >> The drm_gem ioctls were documented in internal file drm_gem.c > >> instead of uapi header drm.h. Move them there and change to > >> appropriate kerneldoc formatting. > >> > >> Signed-off-by: David Francis <David.Francis@amd.com> > > > > Thanks a lot for taking care of this! > > > > Reviewed-by: Simona Vetter <simona.vetter@ffwll.ch> > > > > I'll leave review for the first patch to folks who care about criu, but it > > looked good to me too. > > I will take that as an Acked-by. > > Are you ok that we push this into drm-misc-next by the end of the week when we have the IGT test ready? Aye, sounds like a plan. -Sima > > The patches for the CRIU code are ready and IIRC there will be a merge > request made, but it will take quite a while until they are actually > merged I think. > > Christian. > > > -Sima > > > >> --- > >> drivers/gpu/drm/drm_gem.c | 30 ----------------------------- > >> include/uapi/drm/drm.h | 40 +++++++++++++++++++++++++++------------ > >> 2 files changed, 28 insertions(+), 42 deletions(-) > >> > >> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c > >> index 3166230d0119..08778a15eefb 100644 > >> --- a/drivers/gpu/drm/drm_gem.c > >> +++ b/drivers/gpu/drm/drm_gem.c > >> @@ -820,14 +820,6 @@ long drm_gem_dma_resv_wait(struct drm_file *filep, u32 handle, > >> } > >> EXPORT_SYMBOL(drm_gem_dma_resv_wait); > >> > >> -/** > >> - * drm_gem_close_ioctl - implementation of the GEM_CLOSE ioctl > >> - * @dev: drm_device > >> - * @data: ioctl data > >> - * @file_priv: drm file-private structure > >> - * > >> - * Releases the handle to an mm object. > >> - */ > >> int > >> drm_gem_close_ioctl(struct drm_device *dev, void *data, > >> struct drm_file *file_priv) > >> @@ -843,17 +835,6 @@ drm_gem_close_ioctl(struct drm_device *dev, void *data, > >> return ret; > >> } > >> > >> -/** > >> - * drm_gem_flink_ioctl - implementation of the GEM_FLINK ioctl > >> - * @dev: drm_device > >> - * @data: ioctl data > >> - * @file_priv: drm file-private structure > >> - * > >> - * Create a global name for an object, returning the name. > >> - * > >> - * Note that the name does not hold a reference; when the object > >> - * is freed, the name goes away. > >> - */ > >> int > >> drm_gem_flink_ioctl(struct drm_device *dev, void *data, > >> struct drm_file *file_priv) > >> @@ -893,17 +874,6 @@ drm_gem_flink_ioctl(struct drm_device *dev, void *data, > >> return ret; > >> } > >> > >> -/** > >> - * drm_gem_open_ioctl - implementation of the GEM_OPEN ioctl > >> - * @dev: drm_device > >> - * @data: ioctl data > >> - * @file_priv: drm file-private structure > >> - * > >> - * Open an object using the global name, returning a handle and the size. > >> - * > >> - * This handle (of course) holds a reference to the object, so the object > >> - * will not go away until the handle is deleted. > >> - */ > >> int > >> drm_gem_open_ioctl(struct drm_device *dev, void *data, > >> struct drm_file *file_priv) > >> diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h > >> index e3940b657e16..e512da8f3baf 100644 > >> --- a/include/uapi/drm/drm.h > >> +++ b/include/uapi/drm/drm.h > >> @@ -597,31 +597,47 @@ struct drm_set_version { > >> int drm_dd_minor; > >> }; > >> > >> -/* DRM_IOCTL_GEM_CLOSE ioctl argument type */ > >> +/** > >> + * struct drm_gem_close - Argument for &DRM_IOCTL_GEM_CLOSE ioctl. > >> + * @handle: Handle of the object to be closed. > >> + * @pad: Padding. > >> + * > >> + * Releases the handle to an mm object. > >> + */ > >> struct drm_gem_close { > >> - /** Handle of the object to be closed. */ > >> __u32 handle; > >> __u32 pad; > >> }; > >> > >> -/* DRM_IOCTL_GEM_FLINK ioctl argument type */ > >> +/** > >> + * struct drm_gem_flink - Argument for &DRM_IOCTL_GEM_FLINK ioctl. > >> + * @handle: Handle for the object being named. > >> + * @name: Returned global name. > >> + * > >> + * Create a global name for an object, returning the name. > >> + * > >> + * Note that the name does not hold a reference; when the object > >> + * is freed, the name goes away. > >> + */ > >> struct drm_gem_flink { > >> - /** Handle for the object being named */ > >> __u32 handle; > >> - > >> - /** Returned global name */ > >> __u32 name; > >> }; > >> > >> -/* DRM_IOCTL_GEM_OPEN ioctl argument type */ > >> +/** > >> + * struct drm_gem_open - Argument for &DRM_IOCTL_GEM_OPEN ioctl. > >> + * @name: Name of object being opened. > >> + * @handle: Returned handle for the object. > >> + * @size: Returned size of the object > >> + * > >> + * Open an object using the global name, returning a handle and the size. > >> + * > >> + * This handle (of course) holds a reference to the object, so the object > >> + * will not go away until the handle is deleted. > >> + */ > >> struct drm_gem_open { > >> - /** Name of object being opened */ > >> __u32 name; > >> - > >> - /** Returned handle for the object */ > >> __u32 handle; > >> - > >> - /** Returned size of the object */ > >> __u64 size; > >> }; > >> > >> -- > >> 2.34.1 > >> > > > -- Simona Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 2/2] drm: Move drm_gem ioctl kerneldoc to uapi file 2025-07-14 12:40 ` Simona Vetter @ 2025-07-18 7:24 ` Christian König 0 siblings, 0 replies; 8+ messages in thread From: Christian König @ 2025-07-18 7:24 UTC (permalink / raw) To: Simona Vetter Cc: David Francis, dri-devel, tvrtko.ursulin, Felix.Kuehling, David.YatSin, Chris.Freehill, dcostantino, sruffell, simona, mripard, tzimmermann On 14.07.25 14:40, Simona Vetter wrote: > On Mon, Jul 14, 2025 at 11:50:32AM +0200, Christian König wrote: >> On 11.07.25 23:55, Simona Vetter wrote: >>> On Fri, Jul 11, 2025 at 10:53:42AM -0400, David Francis wrote: >>>> The drm_gem ioctls were documented in internal file drm_gem.c >>>> instead of uapi header drm.h. Move them there and change to >>>> appropriate kerneldoc formatting. >>>> >>>> Signed-off-by: David Francis <David.Francis@amd.com> >>> >>> Thanks a lot for taking care of this! >>> >>> Reviewed-by: Simona Vetter <simona.vetter@ffwll.ch> >>> >>> I'll leave review for the first patch to folks who care about criu, but it >>> looked good to me too. >> >> I will take that as an Acked-by. >> >> Are you ok that we push this into drm-misc-next by the end of the week when we have the IGT test ready? > > Aye, sounds like a plan. Added the reviews, acks and links to the cover letter to the v2 from this morning and pushed the result to drm-misc-next. We just haven't been quick enough with the IGT test (which BTW found another bug) to push it earlier. Fingers crossed that there will be another misc-next pull request before 6.17-rc1. Regards, Christian. > -Sima > >> >> The patches for the CRIU code are ready and IIRC there will be a merge >> request made, but it will take quite a while until they are actually >> merged I think. > >> >> Christian. >> >>> -Sima >>> >>>> --- >>>> drivers/gpu/drm/drm_gem.c | 30 ----------------------------- >>>> include/uapi/drm/drm.h | 40 +++++++++++++++++++++++++++------------ >>>> 2 files changed, 28 insertions(+), 42 deletions(-) >>>> >>>> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c >>>> index 3166230d0119..08778a15eefb 100644 >>>> --- a/drivers/gpu/drm/drm_gem.c >>>> +++ b/drivers/gpu/drm/drm_gem.c >>>> @@ -820,14 +820,6 @@ long drm_gem_dma_resv_wait(struct drm_file *filep, u32 handle, >>>> } >>>> EXPORT_SYMBOL(drm_gem_dma_resv_wait); >>>> >>>> -/** >>>> - * drm_gem_close_ioctl - implementation of the GEM_CLOSE ioctl >>>> - * @dev: drm_device >>>> - * @data: ioctl data >>>> - * @file_priv: drm file-private structure >>>> - * >>>> - * Releases the handle to an mm object. >>>> - */ >>>> int >>>> drm_gem_close_ioctl(struct drm_device *dev, void *data, >>>> struct drm_file *file_priv) >>>> @@ -843,17 +835,6 @@ drm_gem_close_ioctl(struct drm_device *dev, void *data, >>>> return ret; >>>> } >>>> >>>> -/** >>>> - * drm_gem_flink_ioctl - implementation of the GEM_FLINK ioctl >>>> - * @dev: drm_device >>>> - * @data: ioctl data >>>> - * @file_priv: drm file-private structure >>>> - * >>>> - * Create a global name for an object, returning the name. >>>> - * >>>> - * Note that the name does not hold a reference; when the object >>>> - * is freed, the name goes away. >>>> - */ >>>> int >>>> drm_gem_flink_ioctl(struct drm_device *dev, void *data, >>>> struct drm_file *file_priv) >>>> @@ -893,17 +874,6 @@ drm_gem_flink_ioctl(struct drm_device *dev, void *data, >>>> return ret; >>>> } >>>> >>>> -/** >>>> - * drm_gem_open_ioctl - implementation of the GEM_OPEN ioctl >>>> - * @dev: drm_device >>>> - * @data: ioctl data >>>> - * @file_priv: drm file-private structure >>>> - * >>>> - * Open an object using the global name, returning a handle and the size. >>>> - * >>>> - * This handle (of course) holds a reference to the object, so the object >>>> - * will not go away until the handle is deleted. >>>> - */ >>>> int >>>> drm_gem_open_ioctl(struct drm_device *dev, void *data, >>>> struct drm_file *file_priv) >>>> diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h >>>> index e3940b657e16..e512da8f3baf 100644 >>>> --- a/include/uapi/drm/drm.h >>>> +++ b/include/uapi/drm/drm.h >>>> @@ -597,31 +597,47 @@ struct drm_set_version { >>>> int drm_dd_minor; >>>> }; >>>> >>>> -/* DRM_IOCTL_GEM_CLOSE ioctl argument type */ >>>> +/** >>>> + * struct drm_gem_close - Argument for &DRM_IOCTL_GEM_CLOSE ioctl. >>>> + * @handle: Handle of the object to be closed. >>>> + * @pad: Padding. >>>> + * >>>> + * Releases the handle to an mm object. >>>> + */ >>>> struct drm_gem_close { >>>> - /** Handle of the object to be closed. */ >>>> __u32 handle; >>>> __u32 pad; >>>> }; >>>> >>>> -/* DRM_IOCTL_GEM_FLINK ioctl argument type */ >>>> +/** >>>> + * struct drm_gem_flink - Argument for &DRM_IOCTL_GEM_FLINK ioctl. >>>> + * @handle: Handle for the object being named. >>>> + * @name: Returned global name. >>>> + * >>>> + * Create a global name for an object, returning the name. >>>> + * >>>> + * Note that the name does not hold a reference; when the object >>>> + * is freed, the name goes away. >>>> + */ >>>> struct drm_gem_flink { >>>> - /** Handle for the object being named */ >>>> __u32 handle; >>>> - >>>> - /** Returned global name */ >>>> __u32 name; >>>> }; >>>> >>>> -/* DRM_IOCTL_GEM_OPEN ioctl argument type */ >>>> +/** >>>> + * struct drm_gem_open - Argument for &DRM_IOCTL_GEM_OPEN ioctl. >>>> + * @name: Name of object being opened. >>>> + * @handle: Returned handle for the object. >>>> + * @size: Returned size of the object >>>> + * >>>> + * Open an object using the global name, returning a handle and the size. >>>> + * >>>> + * This handle (of course) holds a reference to the object, so the object >>>> + * will not go away until the handle is deleted. >>>> + */ >>>> struct drm_gem_open { >>>> - /** Name of object being opened */ >>>> __u32 name; >>>> - >>>> - /** Returned handle for the object */ >>>> __u32 handle; >>>> - >>>> - /** Returned size of the object */ >>>> __u64 size; >>>> }; >>>> >>>> -- >>>> 2.34.1 >>>> >>> >> > ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-07-18 7:25 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-07-11 14:53 Add CHANGE_HANDLE ioctl for drm gem v2 David Francis 2025-07-11 14:53 ` [PATCH 1/2] drm: Add DRM prime interface to reassign GEM handle David Francis 2025-07-17 6:23 ` Zhang, Jesse(Jie) 2025-07-11 14:53 ` [PATCH 2/2] drm: Move drm_gem ioctl kerneldoc to uapi file David Francis 2025-07-11 21:55 ` Simona Vetter 2025-07-14 9:50 ` Christian König 2025-07-14 12:40 ` Simona Vetter 2025-07-18 7:24 ` Christian König
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.