Skip to content
Snippets Groups Projects
Commit 0455b28e authored by Dmitry Osipenko's avatar Dmitry Osipenko
Browse files

drm/gem: Add drm_gem_pin_unlocked()


Add unlocked variants of drm_gem_un/pin() functions and make them public.
These new helpers will take care of GEM dma-reservation locking for DRM
drivers.

We are going to add memory shrinking support to the VirtIO-GPU driver
that will need to pin framebuffers explicitly to prevent eviction of the
actively used buffers by the shrinker. VirtIO-GPU driver will use these
new generic helpers to pin shmem framebuffers.

Signed-off-by: default avatarDmitry Osipenko <dmitry.osipenko@collabora.com>
parent b1033e52
No related branches found
No related tags found
No related merge requests found
......@@ -1179,6 +1179,35 @@ void drm_gem_unpin(struct drm_gem_object *obj)
obj->funcs->unpin(obj);
}
int drm_gem_pin_unlocked(struct drm_gem_object *obj)
{
int ret;
if (!obj->funcs->pin)
return 0;
ret = dma_resv_lock_interruptible(obj->resv, NULL);
if (ret)
return ret;
ret = obj->funcs->pin(obj);
dma_resv_unlock(obj->resv);
return ret;
}
EXPORT_SYMBOL(drm_gem_pin_unlocked);
void drm_gem_unpin_unlocked(struct drm_gem_object *obj)
{
if (!obj->funcs->unpin)
return;
dma_resv_lock(obj->resv, NULL);
obj->funcs->unpin(obj);
dma_resv_unlock(obj->resv);
}
EXPORT_SYMBOL(drm_gem_unpin_unlocked);
int drm_gem_vmap(struct drm_gem_object *obj, struct iosys_map *map)
{
int ret;
......
......@@ -413,4 +413,7 @@ int drm_gem_dumb_map_offset(struct drm_file *file, struct drm_device *dev,
int drm_gem_vmap_unlocked(struct drm_gem_object *obj, struct iosys_map *map);
void drm_gem_vunmap_unlocked(struct drm_gem_object *obj, struct iosys_map *map);
int drm_gem_pin_unlocked(struct drm_gem_object *obj);
void drm_gem_unpin_unlocked(struct drm_gem_object *obj);
#endif /* __DRM_GEM_H__ */
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment