diff options
author | Thomas Hellstrom <thellstrom@vmware.com> | 2014-01-03 03:21:54 -0500 |
---|---|---|
committer | Thomas Hellstrom <thellstrom@vmware.com> | 2014-01-08 03:53:12 -0500 |
commit | 7dfe8b6187f43d791229b1f8eef9b7fa872f7195 (patch) | |
tree | 9242269f1c1b31608b7510ad612e34a0692ec9d2 /drivers/gpu/drm | |
parent | 859ae233cd0ee76b6143f948ba1cb6b0b4c342f8 (diff) |
drm/ttm: Use VM_PFNMAP for shared bo maps
VM_PFNMAP is faster than VM_MIXEDMAP due to reduced page administration so
use it for shared maps where we don't have any Copy-On-Write pages. For
private maps, we continue to use VM_MIXEDMAP.
Signed-off-by: Thomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: Jakob Bornecrantz <jakob@vmware.com>
Diffstat (limited to 'drivers/gpu/drm')
-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); |