Module Name:    src
Committed By:   riastradh
Date:           Tue Jun  3 15:06:36 UTC 2014

Modified Files:
        src/sys/external/bsd/drm2/dist/drm/i915: i915_gem.c

Log Message:
Ensure we call uvmfault_unlockall on every exit from i915_gem_fault.


To generate a diff of this commit:
cvs rdiff -u -r1.9 -r1.10 src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c
diff -u src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.9 src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.10
--- src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c:1.9	Tue May 20 15:15:04 2014
+++ src/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c	Tue Jun  3 15:06:36 2014
@@ -1564,6 +1564,9 @@ unpin:
 unlock:
 	mutex_unlock(&dev->struct_mutex);
 out:
+	uvmfault_unlockall(ufi, ufi->entry->aref.ar_amap, uobj);
+	if (ret == -ERESTART)
+		uvm_wait("i915flt");
 	return ret;
 }
 
@@ -1581,7 +1584,6 @@ i915_udv_fault(struct uvm_faultinfo *ufi
     paddr_t gtt_paddr)
 {
 	struct vm_map_entry *entry = ufi->entry;
-	struct uvm_object *uobj = entry->object.uvm_obj;
 	vaddr_t curr_va;
 	off_t curr_offset;
 	paddr_t paddr;
@@ -1599,7 +1601,6 @@ i915_udv_fault(struct uvm_faultinfo *ufi
 	if (UVM_ET_ISCOPYONWRITE(entry)) {
 		UVMHIST_LOG(maphist, "<- failed -- COW entry (etype=0x%x)",
 		entry->etype, 0,0,0);
-		uvmfault_unlockall(ufi, ufi->entry->aref.ar_amap, uobj);
 		return(EIO);
 	}
 
@@ -1647,15 +1648,11 @@ i915_udv_fault(struct uvm_faultinfo *ufi
 			 * XXX case.
 			 */
 			pmap_update(ufi->orig_map->pmap);	/* sync what we have so far */
-			uvmfault_unlockall(ufi, ufi->entry->aref.ar_amap,
-			    uobj);
-			uvm_wait("i915flt");
 			return (ERESTART);
 		}
 	}
 
 	pmap_update(ufi->orig_map->pmap);
-	uvmfault_unlockall(ufi, ufi->entry->aref.ar_amap, uobj);
 	return (retval);
 }
 #else

Reply via email to