diff options
Diffstat (limited to 'drivers/gpu/drm/drm_gem_shmem_helper.c')
| -rw-r--r-- | drivers/gpu/drm/drm_gem_shmem_helper.c | 31 | 
1 files changed, 10 insertions, 21 deletions
diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c index f5918707672f..0810d3ef6961 100644 --- a/drivers/gpu/drm/drm_gem_shmem_helper.c +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c @@ -32,7 +32,7 @@ static const struct drm_gem_object_funcs drm_gem_shmem_funcs = {  	.get_sg_table = drm_gem_shmem_get_sg_table,  	.vmap = drm_gem_shmem_vmap,  	.vunmap = drm_gem_shmem_vunmap, -	.vm_ops = &drm_gem_shmem_vm_ops, +	.mmap = drm_gem_shmem_mmap,  };  /** @@ -505,39 +505,30 @@ static void drm_gem_shmem_vm_close(struct vm_area_struct *vma)  	drm_gem_vm_close(vma);  } -const struct vm_operations_struct drm_gem_shmem_vm_ops = { +static const struct vm_operations_struct drm_gem_shmem_vm_ops = {  	.fault = drm_gem_shmem_fault,  	.open = drm_gem_shmem_vm_open,  	.close = drm_gem_shmem_vm_close,  }; -EXPORT_SYMBOL_GPL(drm_gem_shmem_vm_ops);  /**   * drm_gem_shmem_mmap - Memory-map a shmem GEM object - * @filp: File object + * @obj: gem object   * @vma: VMA for the area to be mapped   *   * This function implements an augmented version of the GEM DRM file mmap   * operation for shmem objects. Drivers which employ the shmem helpers should - * use this function as their &file_operations.mmap handler in the DRM device file's - * file_operations structure. - * - * Instead of directly referencing this function, drivers should use the - * DEFINE_DRM_GEM_SHMEM_FOPS() macro. + * use this function as their &drm_gem_object_funcs.mmap handler.   *   * Returns:   * 0 on success or a negative error code on failure.   */ -int drm_gem_shmem_mmap(struct file *filp, struct vm_area_struct *vma) +int drm_gem_shmem_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)  {  	struct drm_gem_shmem_object *shmem;  	int ret; -	ret = drm_gem_mmap(filp, vma); -	if (ret) -		return ret; - -	shmem = to_drm_gem_shmem_obj(vma->vm_private_data); +	shmem = to_drm_gem_shmem_obj(obj);  	ret = drm_gem_shmem_get_pages(shmem);  	if (ret) { @@ -545,12 +536,10 @@ int drm_gem_shmem_mmap(struct file *filp, struct vm_area_struct *vma)  		return ret;  	} -	/* VM_PFNMAP was set by drm_gem_mmap() */ -	vma->vm_flags &= ~VM_PFNMAP; -	vma->vm_flags |= VM_MIXEDMAP; - -	/* Remove the fake offset */ -	vma->vm_pgoff -= drm_vma_node_start(&shmem->base.vma_node); +	vma->vm_flags |= VM_MIXEDMAP | VM_DONTEXPAND; +	vma->vm_page_prot = pgprot_writecombine(vm_get_page_prot(vma->vm_flags)); +	vma->vm_page_prot = pgprot_decrypted(vma->vm_page_prot); +	vma->vm_ops = &drm_gem_shmem_vm_ops;  	return 0;  }  |