From mboxrd@z Thu Jan 1 00:00:00 1970 From: Konrad Rzeszutek Wilk Subject: Re: [PATCH -fixes] drm/ttm: Fix buffer object metadata accounting regression v2 Date: Tue, 12 Jun 2012 08:50:37 -0400 Message-ID: <20120612125037.GD559@phenom.dumpdata.com> References: <1339500522-5392-1-git-send-email-thellstrom@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from acsinet15.oracle.com (acsinet15.oracle.com [141.146.126.227]) by gabe.freedesktop.org (Postfix) with ESMTP id B5FED9E7BE for ; Tue, 12 Jun 2012 05:57:53 -0700 (PDT) Content-Disposition: inline In-Reply-To: <1339500522-5392-1-git-send-email-thellstrom@vmware.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: Thomas Hellstrom Cc: dri-devel@lists.freedesktop.org, Jerome Glisse , linux-graphics-maintainer@vmware.com, stable@vger.kernel.org, airlied@redhat.com List-Id: dri-devel@lists.freedesktop.org On Tue, Jun 12, 2012 at 01:28:42PM +0200, Thomas Hellstrom wrote: > A regression was introduced in the 3.3 rc series, commit > "drm/ttm: simplify memory accounting for ttm user v2", > causing the metadata of buffer objects created using the ttm_bo_create() > function to be accounted twice. > That causes massive leaks with the vmwgfx driver running for example > SpecViewperf Catia-03 test 2, eventually killing the app. > > Furthermore, the same commit introduces a regression where > metadata accounting is leaked if a buffer object is > initialized with an illegal size. This is also fixed with this commit. > > v2: Fixed an error path and removed an unused variable. > > Signed-off-by: Thomas Hellstrom > Cc: Jerome Glisse > Cc: stable@vger.kernel.org Reviewed-by: Konrad Rzeszutek Wilk > --- > drivers/gpu/drm/ttm/ttm_bo.c | 13 +++---------- > 1 files changed, 3 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c > index b67cfca..36f4b28 100644 > --- a/drivers/gpu/drm/ttm/ttm_bo.c > +++ b/drivers/gpu/drm/ttm/ttm_bo.c > @@ -1204,6 +1204,7 @@ int ttm_bo_init(struct ttm_bo_device *bdev, > (*destroy)(bo); > else > kfree(bo); > + ttm_mem_global_free(mem_glob, acc_size); > return -EINVAL; > } > bo->destroy = destroy; > @@ -1307,22 +1308,14 @@ int ttm_bo_create(struct ttm_bo_device *bdev, > struct ttm_buffer_object **p_bo) > { > struct ttm_buffer_object *bo; > - struct ttm_mem_global *mem_glob = bdev->glob->mem_glob; > size_t acc_size; > int ret; > > - acc_size = ttm_bo_acc_size(bdev, size, sizeof(struct ttm_buffer_object)); > - ret = ttm_mem_global_alloc(mem_glob, acc_size, false, false); > - if (unlikely(ret != 0)) > - return ret; > - > bo = kzalloc(sizeof(*bo), GFP_KERNEL); > - > - if (unlikely(bo == NULL)) { > - ttm_mem_global_free(mem_glob, acc_size); > + if (unlikely(bo == NULL)) > return -ENOMEM; > - } > > + acc_size = ttm_bo_acc_size(bdev, size, sizeof(struct ttm_buffer_object)); > ret = ttm_bo_init(bdev, bo, size, type, placement, page_alignment, > buffer_start, interruptible, > persistent_swap_storage, acc_size, NULL, NULL); > -- > 1.7.7.5 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel