Merge tag 'selinux-pr-20200210' of git://git.kernel.org/pub/scm/linux/kernel/git...
[linux-2.6-microblaze.git] / drivers / gpu / drm / drm_prime.c
index 0814211..86d9b0e 100644 (file)
@@ -240,6 +240,7 @@ void drm_prime_destroy_file_private(struct drm_prime_file_private *prime_fpriv)
 struct dma_buf *drm_gem_dmabuf_export(struct drm_device *dev,
                                      struct dma_buf_export_info *exp_info)
 {
+       struct drm_gem_object *obj = exp_info->priv;
        struct dma_buf *dma_buf;
 
        dma_buf = dma_buf_export(exp_info);
@@ -247,7 +248,8 @@ struct dma_buf *drm_gem_dmabuf_export(struct drm_device *dev,
                return dma_buf;
 
        drm_dev_get(dev);
-       drm_gem_object_get(exp_info->priv);
+       drm_gem_object_get(obj);
+       dma_buf->file->f_mapping = obj->dev->anon_inode->i_mapping;
 
        return dma_buf;
 }
@@ -713,6 +715,9 @@ int drm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
        struct file *fil;
        int ret;
 
+       /* Add the fake offset */
+       vma->vm_pgoff += drm_vma_node_start(&obj->vma_node);
+
        if (obj->funcs && obj->funcs->mmap) {
                ret = obj->funcs->mmap(obj, vma);
                if (ret)
@@ -737,8 +742,6 @@ int drm_gem_prime_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
        if (ret)
                goto out;
 
-       vma->vm_pgoff += drm_vma_node_start(&obj->vma_node);
-
        ret = obj->dev->driver->fops->mmap(fil, vma);
 
        drm_vma_node_revoke(&obj->vma_node, priv);