]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - include/drm/drm_gem_shmem_helper.h
Merge tag 'trace-v5.4-2' of git://git.kernel.org/pub/scm/linux/kernel/git/rostedt...
[linux.git] / include / drm / drm_gem_shmem_helper.h
index 038b6d3134471b363234bcd2635209ae26ae8d0e..01f514521687cddf6458e7f7f6c8fa2abd5d082e 100644 (file)
@@ -44,6 +44,9 @@ struct drm_gem_shmem_object {
         */
        unsigned int pages_use_count;
 
+       int madv;
+       struct list_head madv_list;
+
        /**
         * @pages_mark_dirty_on_put:
         *
@@ -121,6 +124,18 @@ void drm_gem_shmem_unpin(struct drm_gem_object *obj);
 void *drm_gem_shmem_vmap(struct drm_gem_object *obj);
 void drm_gem_shmem_vunmap(struct drm_gem_object *obj, void *vaddr);
 
+int drm_gem_shmem_madvise(struct drm_gem_object *obj, int madv);
+
+static inline bool drm_gem_shmem_is_purgeable(struct drm_gem_shmem_object *shmem)
+{
+       return (shmem->madv > 0) &&
+               !shmem->vmap_use_count && shmem->sgt &&
+               !shmem->base.dma_buf && !shmem->base.import_attach;
+}
+
+void drm_gem_shmem_purge_locked(struct drm_gem_object *obj);
+bool drm_gem_shmem_purge(struct drm_gem_object *obj);
+
 struct drm_gem_shmem_object *
 drm_gem_shmem_create_with_handle(struct drm_file *file_priv,
                                 struct drm_device *dev, size_t size,