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