Guest User

Untitled

a guest
Jan 4th, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 1.84 KB | None | 0 0
  1. diff --git a/drivers/gpu/drm/nouveau/nouveau_gem.h b/drivers/gpu/drm/nouveau/nouveau_gem.h
  2. index 277ede200f64..e551a76f1212 100644
  3. --- a/drivers/gpu/drm/nouveau/nouveau_gem.h
  4. +++ b/drivers/gpu/drm/nouveau/nouveau_gem.h
  5. @@ -44,5 +44,7 @@ extern struct drm_gem_object *nouveau_gem_prime_import_sg_table(
  6.     struct drm_device *, struct dma_buf_attachment *, struct sg_table *);
  7.  extern void *nouveau_gem_prime_vmap(struct drm_gem_object *);
  8.  extern void nouveau_gem_prime_vunmap(struct drm_gem_object *, void *);
  9. +extern int nouveau_gem_prime_mmap(struct drm_gem_object *,
  10. +                 struct vm_area_struct *);
  11.  
  12.  #endif
  13. diff --git a/drivers/gpu/drm/nouveau/nouveau_prime.c b/drivers/gpu/drm/nouveau/nouveau_prime.c
  14. index 1fefc93af1d7..e0766fa8868e 100644
  15. --- a/drivers/gpu/drm/nouveau/nouveau_prime.c
  16. +++ b/drivers/gpu/drm/nouveau/nouveau_prime.c
  17. @@ -23,6 +23,7 @@
  18.   */
  19.  
  20.  #include <drm/drmP.h>
  21. +#include <drm/drm_legacy.h>
  22.  #include <linux/dma-buf.h>
  23.  
  24.  #include "nouveau_drv.h"
  25. @@ -114,3 +115,30 @@ struct reservation_object *nouveau_gem_prime_res_obj(struct drm_gem_object *obj)
  26.  
  27.     return nvbo->bo.resv;
  28.  }
  29. +
  30. +int nouveau_gem_prime_mmap(struct drm_gem_object *obj,
  31. +              struct vm_area_struct *vma)
  32. +{
  33. +   struct nouveau_bo *nvbo = nouveau_gem_object(obj);
  34. +   int ret;
  35. +
  36. +   pr_info("> %s(obj=%p, vma=%p)\n", __func__, obj, vma);
  37. +   pr_info("  filp: %p\n", obj->filp);
  38. +
  39. +   vma->vm_pgoff += drm_vma_node_offset_addr(&nvbo->bo.vma_node) >> PAGE_SHIFT;
  40. +
  41. +   if (unlikely(vma->vm_pgoff < DRM_FILE_PAGE_OFFSET))
  42. +       return drm_legacy_mmap(vma->vm_file, vma);
  43. +
  44. +   ret = drm_vma_node_allow(&obj->vma_node, vma->vm_file->private_data);
  45. +   if (ret)
  46. +       goto out;
  47. +
  48. +   ret = ttm_bo_mmap(vma->vm_file, vma, nvbo->bo.bdev);
  49. +
  50. +   drm_vma_node_revoke(&obj->vma_node, vma->vm_file->private_data);
  51. +
  52. +out:
  53. +   pr_info("< %s() = %d\n", __func__, ret);
  54. +   return ret;
  55. +}
Advertisement
Add Comment
Please, Sign In to add comment