Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit beff0d0f authored by Ville Syrjälä's avatar Ville Syrjälä Committed by Daniel Vetter
Browse files

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 b90b91d8
 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: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Testcase: igt/gem_mmap/short-mmap
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 84c33a64
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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);