diff options
Diffstat (limited to 'drivers/gpu/drm/drm_gem_shmem_helper.c')
| -rw-r--r-- | drivers/gpu/drm/drm_gem_shmem_helper.c | 16 | 
1 files changed, 11 insertions, 5 deletions
| diff --git a/drivers/gpu/drm/drm_gem_shmem_helper.c b/drivers/gpu/drm/drm_gem_shmem_helper.c index a421a2eed48a..df31e5782eed 100644 --- a/drivers/gpu/drm/drm_gem_shmem_helper.c +++ b/drivers/gpu/drm/drm_gem_shmem_helper.c @@ -254,11 +254,16 @@ static void *drm_gem_shmem_vmap_locked(struct drm_gem_shmem_object *shmem)  	if (ret)  		goto err_zero_use; -	if (obj->import_attach) +	if (obj->import_attach) {  		shmem->vaddr = dma_buf_vmap(obj->import_attach->dmabuf); -	else +	} else { +		pgprot_t prot = PAGE_KERNEL; + +		if (!shmem->map_cached) +			prot = pgprot_writecombine(prot);  		shmem->vaddr = vmap(shmem->pages, obj->size >> PAGE_SHIFT, -				    VM_MAP, pgprot_writecombine(PAGE_KERNEL)); +				    VM_MAP, prot); +	}  	if (!shmem->vaddr) {  		DRM_DEBUG_KMS("Failed to vmap pages\n"); @@ -540,8 +545,9 @@ int drm_gem_shmem_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)  	}  	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_page_prot = vm_get_page_prot(vma->vm_flags); +	if (!shmem->map_cached) +		vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);  	vma->vm_ops = &drm_gem_shmem_vm_ops;  	return 0; |