Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/external/bsd/drm2/dist/drm/i915 Ensure we call uvmfault_...



details:   https://anonhg.NetBSD.org/src/rev/0c8d5b34a2a5
branches:  trunk
changeset: 329673:0c8d5b34a2a5
user:      riastradh <riastradh%NetBSD.org@localhost>
date:      Tue Jun 03 15:06:36 2014 +0000

description:
Ensure we call uvmfault_unlockall on every exit from i915_gem_fault.

diffstat:

 sys/external/bsd/drm2/dist/drm/i915/i915_gem.c |  9 +++------
 1 files changed, 3 insertions(+), 6 deletions(-)

diffs (45 lines):

diff -r 49513f4fdb8f -r 0c8d5b34a2a5 sys/external/bsd/drm2/dist/drm/i915/i915_gem.c
--- a/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c    Tue Jun 03 14:59:30 2014 +0000
+++ b/sys/external/bsd/drm2/dist/drm/i915/i915_gem.c    Tue Jun 03 15:06:36 2014 +0000
@@ -1564,6 +1564,9 @@
 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 @@
     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 @@
        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 @@
                         * 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



Home | Main Index | Thread Index | Old Index