diff options
Diffstat (limited to 'drivers/gpu/drm/ttm')
-rw-r--r-- | drivers/gpu/drm/ttm/ttm_bo_vm.c | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c index b249ab9b1eb2..cdda78458885 100644 --- a/drivers/gpu/drm/ttm/ttm_bo_vm.c +++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c | |||
@@ -220,7 +220,11 @@ static int ttm_bo_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf) | |||
220 | pfn = page_to_pfn(page); | 220 | pfn = page_to_pfn(page); |
221 | } | 221 | } |
222 | 222 | ||
223 | ret = vm_insert_mixed(&cvma, address, pfn); | 223 | if (vma->vm_flags & VM_MIXEDMAP) |
224 | ret = vm_insert_mixed(&cvma, address, pfn); | ||
225 | else | ||
226 | ret = vm_insert_pfn(&cvma, address, pfn); | ||
227 | |||
224 | /* | 228 | /* |
225 | * Somebody beat us to this PTE or prefaulting to | 229 | * Somebody beat us to this PTE or prefaulting to |
226 | * an already populated PTE, or prefaulting error. | 230 | * an already populated PTE, or prefaulting error. |
@@ -319,7 +323,14 @@ int ttm_bo_mmap(struct file *filp, struct vm_area_struct *vma, | |||
319 | */ | 323 | */ |
320 | 324 | ||
321 | vma->vm_private_data = bo; | 325 | vma->vm_private_data = bo; |
322 | vma->vm_flags |= VM_IO | VM_MIXEDMAP | VM_DONTEXPAND | VM_DONTDUMP; | 326 | |
327 | /* | ||
328 | * PFNMAP is faster than MIXEDMAP due to reduced page | ||
329 | * administration. So use MIXEDMAP only if private VMA, where | ||
330 | * we need to support COW. | ||
331 | */ | ||
332 | vma->vm_flags |= (vma->vm_flags & VM_SHARED) ? VM_PFNMAP : VM_MIXEDMAP; | ||
333 | vma->vm_flags |= VM_IO | VM_DONTEXPAND | VM_DONTDUMP; | ||
323 | return 0; | 334 | return 0; |
324 | out_unref: | 335 | out_unref: |
325 | ttm_bo_unref(&bo); | 336 | ttm_bo_unref(&bo); |
@@ -334,7 +345,8 @@ int ttm_fbdev_mmap(struct vm_area_struct *vma, struct ttm_buffer_object *bo) | |||
334 | 345 | ||
335 | vma->vm_ops = &ttm_bo_vm_ops; | 346 | vma->vm_ops = &ttm_bo_vm_ops; |
336 | vma->vm_private_data = ttm_bo_reference(bo); | 347 | vma->vm_private_data = ttm_bo_reference(bo); |
337 | vma->vm_flags |= VM_IO | VM_MIXEDMAP | VM_DONTEXPAND; | 348 | vma->vm_flags |= (vma->vm_flags & VM_SHARED) ? VM_PFNMAP : VM_MIXEDMAP; |
349 | vma->vm_flags |= VM_IO | VM_DONTEXPAND; | ||
338 | return 0; | 350 | return 0; |
339 | } | 351 | } |
340 | EXPORT_SYMBOL(ttm_fbdev_mmap); | 352 | EXPORT_SYMBOL(ttm_fbdev_mmap); |