]> xenbits.xensource.com Git - people/royger/freebsd.git/commitdiff
Fix bug in r309712, do not leak gem object pin count in case of error
authorkib <kib@FreeBSD.org>
Tue, 13 Dec 2016 19:04:05 +0000 (19:04 +0000)
committerkib <kib@FreeBSD.org>
Tue, 13 Dec 2016 19:04:05 +0000 (19:04 +0000)
or retry.

Reported and tested by: Michael Butler <imb@protected-networks.net>
Sponsored by: The FreeBSD Foundation
MFC after: 16 days

sys/dev/drm2/i915/i915_gem.c

index 2a53ae8f8eda69542163a0dca059184cdc6808a1..0fa5249e553b78e114741de86813ecdadc7674d3 100644 (file)
@@ -1521,7 +1521,7 @@ retry:
        /* Now bind it into the GTT if needed */
        ret = i915_gem_object_pin(obj, 0, true, false);
        if (ret)
-               goto unpin;
+               goto unlock;
        pinned = 1;
 
        ret = i915_gem_object_set_to_gtt_domain(obj, write);
@@ -1580,6 +1580,8 @@ have_page:
        return (VM_PAGER_OK);
 
 unpin:
+       i915_gem_object_unpin(obj);
+unlock:
        DRM_UNLOCK(dev);
 out:
        KASSERT(ret != 0, ("i915_gem_pager_fault: wrong return"));