Message ID | 1349432276-22919-2-git-send-email-inderpal.singh@linaro.org |
---|---|
State | New |
Headers | show |
On Fri, 2012-10-05 at 15:47 +0530, Inderpal Singh wrote: > The allocated memory for peripheral channels is not being freed upon > failure in probe and in module's remove funtion. It will lead to memory > leakage. Hence free the allocated memory. > > Signed-off-by: Inderpal Singh <inderpal.singh@linaro.org> > --- > drivers/dma/pl330.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c > index 2ebd4cd..10c6b6a 100644 > --- a/drivers/dma/pl330.c > +++ b/drivers/dma/pl330.c > @@ -2962,7 +2962,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) > ret = dma_async_device_register(pd); > if (ret) { > dev_err(&adev->dev, "unable to register DMAC\n"); > - goto probe_err4; > + goto probe_err5; > } > > dev_info(&adev->dev, > @@ -2975,6 +2975,8 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) > > return 0; > > +probe_err5: > + kfree(pdmac->peripherals); > probe_err4: > pl330_del(pi); > probe_err3: > @@ -3025,6 +3027,7 @@ static int __devexit pl330_remove(struct amba_device *adev) > res = &adev->res; > release_mem_region(res->start, resource_size(res)); > > + kfree(pdmac->peripherals); > kfree(pdmac); > > return 0; This looks fine, but if you use devm_ functions then you dont need to do all this. Can you do that conversion instead?
Hi Vinod, Thanks for reviewing. On 24 October 2012 09:35, Vinod Koul <vkoul@infradead.org> wrote: > On Fri, 2012-10-05 at 15:47 +0530, Inderpal Singh wrote: >> The allocated memory for peripheral channels is not being freed upon >> failure in probe and in module's remove funtion. It will lead to memory >> leakage. Hence free the allocated memory. >> >> Signed-off-by: Inderpal Singh <inderpal.singh@linaro.org> >> --- >> drivers/dma/pl330.c | 5 ++++- >> 1 file changed, 4 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c >> index 2ebd4cd..10c6b6a 100644 >> --- a/drivers/dma/pl330.c >> +++ b/drivers/dma/pl330.c >> @@ -2962,7 +2962,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) >> ret = dma_async_device_register(pd); >> if (ret) { >> dev_err(&adev->dev, "unable to register DMAC\n"); >> - goto probe_err4; >> + goto probe_err5; >> } >> >> dev_info(&adev->dev, >> @@ -2975,6 +2975,8 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) >> >> return 0; >> >> +probe_err5: >> + kfree(pdmac->peripherals); >> probe_err4: >> pl330_del(pi); >> probe_err3: >> @@ -3025,6 +3027,7 @@ static int __devexit pl330_remove(struct amba_device *adev) >> res = &adev->res; >> release_mem_region(res->start, resource_size(res)); >> >> + kfree(pdmac->peripherals); >> kfree(pdmac); >> >> return 0; > > This looks fine, but if you use devm_ functions then you dont need to do > all this. > Can you do that conversion instead? > Good point. I will do the conversion and send it again. Regards, Inder > -- > Vinod Koul > Intel Corp. > > -- > To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c index 2ebd4cd..10c6b6a 100644 --- a/drivers/dma/pl330.c +++ b/drivers/dma/pl330.c @@ -2962,7 +2962,7 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) ret = dma_async_device_register(pd); if (ret) { dev_err(&adev->dev, "unable to register DMAC\n"); - goto probe_err4; + goto probe_err5; } dev_info(&adev->dev, @@ -2975,6 +2975,8 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id) return 0; +probe_err5: + kfree(pdmac->peripherals); probe_err4: pl330_del(pi); probe_err3: @@ -3025,6 +3027,7 @@ static int __devexit pl330_remove(struct amba_device *adev) res = &adev->res; release_mem_region(res->start, resource_size(res)); + kfree(pdmac->peripherals); kfree(pdmac); return 0;
The allocated memory for peripheral channels is not being freed upon failure in probe and in module's remove funtion. It will lead to memory leakage. Hence free the allocated memory. Signed-off-by: Inderpal Singh <inderpal.singh@linaro.org> --- drivers/dma/pl330.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)