From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Barbalho, Rafael" Subject: Re: [PATCH] drm/i915: Do not leak pages when freeing userptr objects Date: Fri, 26 Sep 2014 14:30:43 +0000 Message-ID: <4B498744C37F034EA16F6FBC6AB9FAD21AEC19BE@IRSMSX103.ger.corp.intel.com> References: <1411740322-12537-1-git-send-email-tvrtko.ursulin@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by gabe.freedesktop.org (Postfix) with ESMTP id EDBA36E055 for ; Fri, 26 Sep 2014 07:31:10 -0700 (PDT) In-Reply-To: <1411740322-12537-1-git-send-email-tvrtko.ursulin@linux.intel.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Tvrtko Ursulin , "Intel-gfx@lists.freedesktop.org" List-Id: intel-gfx@lists.freedesktop.org > -----Original Message----- > From: Tvrtko Ursulin [mailto:tvrtko.ursulin@linux.intel.com] > Sent: Friday, September 26, 2014 3:05 PM > To: Intel-gfx@lists.freedesktop.org > Cc: Ursulin, Tvrtko; Chris Wilson; Barbalho, Rafael > Subject: [PATCH] drm/i915: Do not leak pages when freeing userptr objects > > From: Tvrtko Ursulin > > sg_alloc_table_from_pages() can build us a table with coalesced ranges > which > means we need to iterate over pages and not sg table entries when releasing > page references. > > Signed-off-by: Tvrtko Ursulin > Cc: Chris Wilson > Cc: "Barbalho, Rafael" Tested-by: Rafael Barbalho > --- > drivers/gpu/drm/i915/i915_gem_userptr.c | 6 +++--- > 1 file changed, 3 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem_userptr.c > b/drivers/gpu/drm/i915/i915_gem_userptr.c > index d384139..229694d 100644 > --- a/drivers/gpu/drm/i915/i915_gem_userptr.c > +++ b/drivers/gpu/drm/i915/i915_gem_userptr.c > @@ -682,15 +682,15 @@ static void > i915_gem_userptr_put_pages(struct drm_i915_gem_object *obj) > { > struct scatterlist *sg; > - int i; > + struct sg_page_iter sg_iter; > > BUG_ON(obj->userptr.work != NULL); > > if (obj->madv != I915_MADV_WILLNEED) > obj->dirty = 0; > > - for_each_sg(obj->pages->sgl, sg, obj->pages->nents, i) { > - struct page *page = sg_page(sg); > + for_each_sg_page(obj->pages->sgl, &sg_iter, obj->pages->nents, 0) > { > + struct page *page = sg_page_iter_page(&sg_iter); > > if (obj->dirty) > set_page_dirty(page); > -- > 2.1.0