mirror of
https://github.com/torvalds/linux.git
synced 2025-11-01 17:18:25 +02:00
drm/gem: Inline drm_gem_pin() into PRIME helpers
Inline drm_gem_pin() into its only caller drm_gem_map_attach() and update the documentation in the callback's purpose. Do the equivalent for drm_gem_unpin(). Also add stricter error checking on the involved locking. The pin operation in the GEM object functions is a helper for PRIME-exported buffer objects. Having drm_gem_pin() gives the impression of a general-purpose interface, which is not the case. Removing it makes the pin callback a bit harder to misuse. v2: - clarify comment on pin callback (Dmitry) Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Dmitry Osipenko <dmitry.osipenko@collabora.com> Link: https://lore.kernel.org/r/20250526132634.531789-5-tzimmermann@suse.de
This commit is contained in:
parent
3c89f2d85c
commit
df1c3093ae
4 changed files with 22 additions and 39 deletions
|
|
@ -1184,38 +1184,6 @@ void drm_gem_print_info(struct drm_printer *p, unsigned int indent,
|
|||
obj->funcs->print_info(p, indent, obj);
|
||||
}
|
||||
|
||||
int drm_gem_pin_locked(struct drm_gem_object *obj)
|
||||
{
|
||||
if (obj->funcs->pin)
|
||||
return obj->funcs->pin(obj);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void drm_gem_unpin_locked(struct drm_gem_object *obj)
|
||||
{
|
||||
if (obj->funcs->unpin)
|
||||
obj->funcs->unpin(obj);
|
||||
}
|
||||
|
||||
int drm_gem_pin(struct drm_gem_object *obj)
|
||||
{
|
||||
int ret;
|
||||
|
||||
dma_resv_lock(obj->resv, NULL);
|
||||
ret = drm_gem_pin_locked(obj);
|
||||
dma_resv_unlock(obj->resv);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
void drm_gem_unpin(struct drm_gem_object *obj)
|
||||
{
|
||||
dma_resv_lock(obj->resv, NULL);
|
||||
drm_gem_unpin_locked(obj);
|
||||
dma_resv_unlock(obj->resv);
|
||||
}
|
||||
|
||||
int drm_gem_vmap_locked(struct drm_gem_object *obj, struct iosys_map *map)
|
||||
{
|
||||
int ret;
|
||||
|
|
|
|||
|
|
@ -175,10 +175,6 @@ void drm_gem_release(struct drm_device *dev, struct drm_file *file_private);
|
|||
void drm_gem_print_info(struct drm_printer *p, unsigned int indent,
|
||||
const struct drm_gem_object *obj);
|
||||
|
||||
int drm_gem_pin_locked(struct drm_gem_object *obj);
|
||||
void drm_gem_unpin_locked(struct drm_gem_object *obj);
|
||||
int drm_gem_pin(struct drm_gem_object *obj);
|
||||
void drm_gem_unpin(struct drm_gem_object *obj);
|
||||
int drm_gem_vmap_locked(struct drm_gem_object *obj, struct iosys_map *map);
|
||||
void drm_gem_vunmap_locked(struct drm_gem_object *obj, struct iosys_map *map);
|
||||
|
||||
|
|
|
|||
|
|
@ -599,6 +599,7 @@ int drm_gem_map_attach(struct dma_buf *dma_buf,
|
|||
struct dma_buf_attachment *attach)
|
||||
{
|
||||
struct drm_gem_object *obj = dma_buf->priv;
|
||||
int ret;
|
||||
|
||||
/*
|
||||
* drm_gem_map_dma_buf() requires obj->get_sg_table(), but drivers
|
||||
|
|
@ -608,7 +609,16 @@ int drm_gem_map_attach(struct dma_buf *dma_buf,
|
|||
!obj->funcs->get_sg_table)
|
||||
return -ENOSYS;
|
||||
|
||||
return drm_gem_pin(obj);
|
||||
if (!obj->funcs->pin)
|
||||
return 0;
|
||||
|
||||
ret = dma_resv_lock(obj->resv, NULL);
|
||||
if (ret)
|
||||
return ret;
|
||||
ret = obj->funcs->pin(obj);
|
||||
dma_resv_unlock(obj->resv);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL(drm_gem_map_attach);
|
||||
|
||||
|
|
@ -625,8 +635,16 @@ void drm_gem_map_detach(struct dma_buf *dma_buf,
|
|||
struct dma_buf_attachment *attach)
|
||||
{
|
||||
struct drm_gem_object *obj = dma_buf->priv;
|
||||
int ret;
|
||||
|
||||
drm_gem_unpin(obj);
|
||||
if (!obj->funcs->unpin)
|
||||
return;
|
||||
|
||||
ret = dma_resv_lock(obj->resv, NULL);
|
||||
if (drm_WARN_ON(obj->dev, ret))
|
||||
return;
|
||||
obj->funcs->unpin(obj);
|
||||
dma_resv_unlock(obj->resv);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_gem_map_detach);
|
||||
|
||||
|
|
|
|||
|
|
@ -126,7 +126,8 @@ struct drm_gem_object_funcs {
|
|||
/**
|
||||
* @pin:
|
||||
*
|
||||
* Pin backing buffer in memory. Used by the drm_gem_map_attach() helper.
|
||||
* Pin backing buffer in memory, such that dma-buf importers can
|
||||
* access it. Used by the drm_gem_map_attach() helper.
|
||||
*
|
||||
* This callback is optional.
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in a new issue