From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752774AbbJLBZl (ORCPT ); Sun, 11 Oct 2015 21:25:41 -0400 Received: from szxga02-in.huawei.com ([119.145.14.65]:17828 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752657AbbJLBZk (ORCPT ); Sun, 11 Oct 2015 21:25:40 -0400 Subject: Re: [PATCH V1 2/3] taging: android: ion: Add ion driver for Hi6220 SoC platform To: Dan Carpenter References: <1444459703-183909-1-git-send-email-puck.chen@hisilicon.com> <1444459703-183909-2-git-send-email-puck.chen@hisilicon.com> <20151010140013.GK7289@mwanda> CC: , , , , , , , , , , , , , , , , , , , , , , From: chenfeng Message-ID: <561B0995.8080204@hisilicon.com> Date: Mon, 12 Oct 2015 09:15:01 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:38.0) Gecko/20100101 Thunderbird/38.2.0 MIME-Version: 1.0 In-Reply-To: <20151010140013.GK7289@mwanda> Content-Type: text/plain; charset="windows-1252" Content-Transfer-Encoding: 7bit X-Originating-IP: [10.142.192.172] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2015/10/10 23:00, Dan Carpenter wrote: > On Sat, Oct 10, 2015 at 02:48:22PM +0800, Chen Feng wrote: >> +static int hi6220_ion_probe(struct platform_device *pdev) >> +{ >> + int i; >> + int err = 0; >> + static struct ion_platform_heap *p_heap; >> + >> + idev = ion_device_create(NULL); >> + hi6220_set_platform_data(pdev); >> + heaps = devm_kzalloc(&pdev->dev, >> + sizeof(struct ion_heap *) * num_heaps, >> + GFP_KERNEL); >> + if (!heaps) >> + return -ENOMEM; >> + >> + /* >> + * create the heaps as specified in the dts file >> + */ >> + for (i = 0; i < num_heaps; i++) { >> + p_heap = heaps_data[i]; >> + heaps[i] = ion_heap_create(p_heap); >> + if (IS_ERR_OR_NULL(heaps[i])) { >> + err = PTR_ERR(heaps[i]); >> + goto err_free_heaps; >> + } >> + >> + ion_device_add_heap(idev, heaps[i]); >> + >> + pr_info("%s: adding heap %s of type %d with %lx@%lx\n", >> + __func__, p_heap->name, p_heap->type, >> + p_heap->base, (unsigned long)p_heap->size); >> + } >> + return err; >> + >> +err_free_heaps: >> + ion_device_destroy(idev); >> + for (i = 0; i < num_heaps; ++i) { >> + ion_heap_destroy(heaps[i]); >> + heaps[i] = NULL; >> + } >> + >> + return err; >> +} > > Thanks this is better but still not quite right. You have to unwind in > the reverse order from how you allocated things. > > err_free_heaps: > for (i = 0; i < num_heaps; ++i) { > ion_heap_destroy(heaps[i]); > heaps[i] = NULL; > } > err_destroy_idev: > ion_device_destroy(idev); > > return err; > > And earlier it should be: > > idev = ion_device_create(NULL); > hi6220_set_platform_data(pdev); > heaps = devm_kzalloc(&pdev->dev, > sizeof(struct ion_heap *) * num_heaps, > GFP_KERNEL); > - if (!heaps) > - return -ENOMEM; > + if (!heaps) { > + err = -ENOMEM; > + goto err_destroy_idev; > + } > > Otherwise we leak some resources if we can't allocate "heaps". > Yeah,it's right. I will fix this. > regards, > dan carpenter > > > . >