From 1c07fe6e4b3f25e1884d97ac8214aaa2ef83d40d Mon Sep 17 00:00:00 2001 From: kib Date: Tue, 13 Dec 2016 19:04:05 +0000 Subject: [PATCH] Fix bug in r309712, do not leak gem object pin count in case of error or retry. Reported and tested by: Michael Butler Sponsored by: The FreeBSD Foundation MFC after: 16 days --- sys/dev/drm2/i915/i915_gem.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sys/dev/drm2/i915/i915_gem.c b/sys/dev/drm2/i915/i915_gem.c index 2a53ae8f8eda..0fa5249e553b 100644 --- a/sys/dev/drm2/i915/i915_gem.c +++ b/sys/dev/drm2/i915/i915_gem.c @@ -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")); -- 2.39.5