drm/i915: Don't prefault the entire obj if the vma is smaller
Take the minimum of the object size and the vma size and prefault
only that much. Avoids a SIGBUS when mmapping only a portion of the
object.
Prefaulting was introduced here:
commit b90b91d870
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date: Tue Jun 10 12:14:40 2014 +0100
drm/i915: Prefault the entire object on first page fault
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Testcase: igt/gem_mmap/short-mmap
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
parent
84c33a64b4
commit
beff0d0f61
@ -1570,9 +1570,12 @@ int i915_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
|
||||
pfn >>= PAGE_SHIFT;
|
||||
|
||||
if (!obj->fault_mappable) {
|
||||
unsigned long size = min_t(unsigned long,
|
||||
vma->vm_end - vma->vm_start,
|
||||
obj->base.size);
|
||||
int i;
|
||||
|
||||
for (i = 0; i < obj->base.size >> PAGE_SHIFT; i++) {
|
||||
for (i = 0; i < size >> PAGE_SHIFT; i++) {
|
||||
ret = vm_insert_pfn(vma,
|
||||
(unsigned long)vma->vm_start + i * PAGE_SIZE,
|
||||
pfn + i);
|
||||
|
Loading…
Reference in New Issue
Block a user