|
@@ -129,10 +129,9 @@ void etnaviv_gem_put_pages(struct etnaviv_gem_object *etnaviv_obj)
|
|
|
/* when we start tracking the pin count, then do something here */
|
|
|
}
|
|
|
|
|
|
-static int etnaviv_gem_mmap_obj(struct drm_gem_object *obj,
|
|
|
+static int etnaviv_gem_mmap_obj(struct etnaviv_gem_object *etnaviv_obj,
|
|
|
struct vm_area_struct *vma)
|
|
|
{
|
|
|
- struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
|
|
|
pgprot_t vm_page_prot;
|
|
|
|
|
|
vma->vm_flags &= ~VM_PFNMAP;
|
|
@@ -151,9 +150,9 @@ static int etnaviv_gem_mmap_obj(struct drm_gem_object *obj,
|
|
|
* in particular in the case of mmap'd dmabufs)
|
|
|
*/
|
|
|
fput(vma->vm_file);
|
|
|
- get_file(obj->filp);
|
|
|
+ get_file(etnaviv_obj->base.filp);
|
|
|
vma->vm_pgoff = 0;
|
|
|
- vma->vm_file = obj->filp;
|
|
|
+ vma->vm_file = etnaviv_obj->base.filp;
|
|
|
|
|
|
vma->vm_page_prot = vm_page_prot;
|
|
|
}
|
|
@@ -173,7 +172,7 @@ int etnaviv_gem_mmap(struct file *filp, struct vm_area_struct *vma)
|
|
|
}
|
|
|
|
|
|
obj = to_etnaviv_bo(vma->vm_private_data);
|
|
|
- return etnaviv_gem_mmap_obj(vma->vm_private_data, vma);
|
|
|
+ return obj->ops->mmap(obj, vma);
|
|
|
}
|
|
|
|
|
|
int etnaviv_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
|
|
@@ -545,6 +544,7 @@ static const struct etnaviv_gem_ops etnaviv_gem_shmem_ops = {
|
|
|
.get_pages = etnaviv_gem_shmem_get_pages,
|
|
|
.release = etnaviv_gem_shmem_release,
|
|
|
.vmap = etnaviv_gem_vmap_impl,
|
|
|
+ .mmap = etnaviv_gem_mmap_obj,
|
|
|
};
|
|
|
|
|
|
void etnaviv_gem_free_object(struct drm_gem_object *obj)
|
|
@@ -886,10 +886,17 @@ static void etnaviv_gem_userptr_release(struct etnaviv_gem_object *etnaviv_obj)
|
|
|
put_task_struct(etnaviv_obj->userptr.task);
|
|
|
}
|
|
|
|
|
|
+static int etnaviv_gem_userptr_mmap_obj(struct etnaviv_gem_object *etnaviv_obj,
|
|
|
+ struct vm_area_struct *vma)
|
|
|
+{
|
|
|
+ return -EINVAL;
|
|
|
+}
|
|
|
+
|
|
|
static const struct etnaviv_gem_ops etnaviv_gem_userptr_ops = {
|
|
|
.get_pages = etnaviv_gem_userptr_get_pages,
|
|
|
.release = etnaviv_gem_userptr_release,
|
|
|
.vmap = etnaviv_gem_vmap_impl,
|
|
|
+ .mmap = etnaviv_gem_userptr_mmap_obj,
|
|
|
};
|
|
|
|
|
|
int etnaviv_gem_new_userptr(struct drm_device *dev, struct drm_file *file,
|