Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.h b/drivers/gpu/drm/nouveau/nouveau_gem.h
- index 277ede200f64..e551a76f1212 100644
- --- a/drivers/gpu/drm/nouveau/nouveau_gem.h
- +++ b/drivers/gpu/drm/nouveau/nouveau_gem.h
- @@ -44,5 +44,7 @@ extern struct drm_gem_object *nouveau_gem_prime_import_sg_table(
- struct drm_device *, struct dma_buf_attachment *, struct sg_table *);
- extern void *nouveau_gem_prime_vmap(struct drm_gem_object *);
- extern void nouveau_gem_prime_vunmap(struct drm_gem_object *, void *);
- +extern int nouveau_gem_prime_mmap(struct drm_gem_object *,
- + struct vm_area_struct *);
- #endif
- diff --git a/drivers/gpu/drm/nouveau/nouveau_prime.c b/drivers/gpu/drm/nouveau/nouveau_prime.c
- index 1fefc93af1d7..e0766fa8868e 100644
- --- a/drivers/gpu/drm/nouveau/nouveau_prime.c
- +++ b/drivers/gpu/drm/nouveau/nouveau_prime.c
- @@ -23,6 +23,7 @@
- */
- #include <drm/drmP.h>
- +#include <drm/drm_legacy.h>
- #include <linux/dma-buf.h>
- #include "nouveau_drv.h"
- @@ -114,3 +115,30 @@ struct reservation_object *nouveau_gem_prime_res_obj(struct drm_gem_object *obj)
- return nvbo->bo.resv;
- }
- +
- +int nouveau_gem_prime_mmap(struct drm_gem_object *obj,
- + struct vm_area_struct *vma)
- +{
- + struct nouveau_bo *nvbo = nouveau_gem_object(obj);
- + int ret;
- +
- + pr_info("> %s(obj=%p, vma=%p)\n", __func__, obj, vma);
- + pr_info(" filp: %p\n", obj->filp);
- +
- + vma->vm_pgoff += drm_vma_node_offset_addr(&nvbo->bo.vma_node) >> PAGE_SHIFT;
- +
- + if (unlikely(vma->vm_pgoff < DRM_FILE_PAGE_OFFSET))
- + return drm_legacy_mmap(vma->vm_file, vma);
- +
- + ret = drm_vma_node_allow(&obj->vma_node, vma->vm_file->private_data);
- + if (ret)
- + goto out;
- +
- + ret = ttm_bo_mmap(vma->vm_file, vma, nvbo->bo.bdev);
- +
- + drm_vma_node_revoke(&obj->vma_node, vma->vm_file->private_data);
- +
- +out:
- + pr_info("< %s() = %d\n", __func__, ret);
- + return ret;
- +}
Advertisement
Add Comment
Please, Sign In to add comment