Ensure we call uvmfault_unlockall on every exit from i915_gem_fault.

This commit is contained in:
riastradh 2014-06-03 15:06:36 +00:00
parent a21c03fe5f
commit db479d6e55
1 changed files with 3 additions and 6 deletions

View File

@ -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, vaddr_t vaddr, struct vm_page **pps,
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, vaddr_t vaddr, struct vm_page **pps,
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, vaddr_t vaddr, struct vm_page **pps,
* 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