All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] usb: phy: tegra: Using devm API for memory allocation
@ 2012-12-18  6:21 Venu Byravarasu
  2012-12-18 16:33 ` Stephen Warren
  0 siblings, 1 reply; 5+ messages in thread
From: Venu Byravarasu @ 2012-12-18  6:21 UTC (permalink / raw)
  To: balbi, gregkh; +Cc: linux-kernel, swarren, linux-usb, Venu Byravarasu

Using devm_kzalloc for allocating memory needed for PHY
pointer and hence removing kfree calls to PHY pointer.

Signed-off-by: Venu Byravarasu <vbyravarasu@nvidia.com>
---
 drivers/usb/phy/tegra_usb_phy.c |    4 +---
 1 files changed, 1 insertions(+), 3 deletions(-)

diff --git a/drivers/usb/phy/tegra_usb_phy.c b/drivers/usb/phy/tegra_usb_phy.c
index 9d13c81..0b99e1f 100644
--- a/drivers/usb/phy/tegra_usb_phy.c
+++ b/drivers/usb/phy/tegra_usb_phy.c
@@ -704,7 +704,6 @@ static void tegra_usb_phy_close(struct usb_phy *x)
 		utmip_pad_close(phy);
 	clk_disable_unprepare(phy->pll_u);
 	clk_put(phy->pll_u);
-	kfree(phy);
 }
 
 static int tegra_usb_phy_power_on(struct tegra_usb_phy *phy)
@@ -740,7 +739,7 @@ struct tegra_usb_phy *tegra_usb_phy_open(struct device *dev, int instance,
 	int i;
 	int err;
 
-	phy = kmalloc(sizeof(struct tegra_usb_phy), GFP_KERNEL);
+	phy = devm_kzalloc(dev, sizeof(struct tegra_usb_phy), GFP_KERNEL);
 	if (!phy)
 		return ERR_PTR(-ENOMEM);
 
@@ -791,7 +790,6 @@ err1:
 	clk_disable_unprepare(phy->pll_u);
 	clk_put(phy->pll_u);
 err0:
-	kfree(phy);
 	return ERR_PTR(err);
 }
 EXPORT_SYMBOL_GPL(tegra_usb_phy_open);
-- 
1.7.0.4


^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCH] usb: phy: tegra: Using devm API for memory allocation
  2012-12-18  6:21 [PATCH] usb: phy: tegra: Using devm API for memory allocation Venu Byravarasu
@ 2012-12-18 16:33 ` Stephen Warren
  2012-12-19  5:38   ` Venu Byravarasu
  0 siblings, 1 reply; 5+ messages in thread
From: Stephen Warren @ 2012-12-18 16:33 UTC (permalink / raw)
  To: Venu Byravarasu; +Cc: balbi, gregkh, linux-kernel, linux-usb

On 12/17/2012 11:21 PM, Venu Byravarasu wrote:
> Using devm_kzalloc for allocating memory needed for PHY
> pointer and hence removing kfree calls to PHY pointer.

Since the kfree() here used to be in tegra_usb_phy_close() rather than
any remove() function, does it actually make sense to use
devm_kzalloc(); would plain using kzalloc() instead, and not removing
the kfree() calls, be better?

When the PHY code gets converted to be an actual probed driver, then
perhaps using devm will make sense.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH] usb: phy: tegra: Using devm API for memory allocation
  2012-12-18 16:33 ` Stephen Warren
@ 2012-12-19  5:38   ` Venu Byravarasu
  2012-12-19 17:38     ` Stephen Warren
  0 siblings, 1 reply; 5+ messages in thread
From: Venu Byravarasu @ 2012-12-19  5:38 UTC (permalink / raw)
  To: Stephen Warren; +Cc: balbi, gregkh, linux-kernel, linux-usb

> -----Original Message-----
> From: Stephen Warren [mailto:swarren@wwwdotorg.org]
> Sent: Tuesday, December 18, 2012 10:03 PM
> To: Venu Byravarasu
> Cc: balbi@ti.com; gregkh@linuxfoundation.org; linux-
> kernel@vger.kernel.org; linux-usb@vger.kernel.org
> Subject: Re: [PATCH] usb: phy: tegra: Using devm API for memory allocation
> 
> On 12/17/2012 11:21 PM, Venu Byravarasu wrote:
> > Using devm_kzalloc for allocating memory needed for PHY
> > pointer and hence removing kfree calls to PHY pointer.
> 
> Since the kfree() here used to be in tegra_usb_phy_close() rather than
> any remove() function, does it actually make sense to use
> devm_kzalloc(); would plain using kzalloc() instead, and not removing
> the kfree() calls, be better?
> 
 
Stephen,
As you mentioned I can replace kmalloc with kzalloc in the original code 
and push an updated patch.
However, I just wanted to understand if there exists any issue
in using devm_kzalloc instead of kzalloc?

> When the PHY code gets converted to be an actual probed driver, then
> perhaps using devm will make sense.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] usb: phy: tegra: Using devm API for memory allocation
  2012-12-19  5:38   ` Venu Byravarasu
@ 2012-12-19 17:38     ` Stephen Warren
  2012-12-20  8:48       ` Venu Byravarasu
  0 siblings, 1 reply; 5+ messages in thread
From: Stephen Warren @ 2012-12-19 17:38 UTC (permalink / raw)
  To: Venu Byravarasu; +Cc: balbi, gregkh, linux-kernel, linux-usb

On 12/18/2012 10:38 PM, Venu Byravarasu wrote:
>> -----Original Message-----
>> From: Stephen Warren [mailto:swarren@wwwdotorg.org]
>> Sent: Tuesday, December 18, 2012 10:03 PM
>> To: Venu Byravarasu
>> Cc: balbi@ti.com; gregkh@linuxfoundation.org; linux-
>> kernel@vger.kernel.org; linux-usb@vger.kernel.org
>> Subject: Re: [PATCH] usb: phy: tegra: Using devm API for memory allocation
>>
>> On 12/17/2012 11:21 PM, Venu Byravarasu wrote:
>>> Using devm_kzalloc for allocating memory needed for PHY
>>> pointer and hence removing kfree calls to PHY pointer.
>>
>> Since the kfree() here used to be in tegra_usb_phy_close() rather than
>> any remove() function, does it actually make sense to use
>> devm_kzalloc(); would plain using kzalloc() instead, and not removing
>> the kfree() calls, be better?
>>
>  
> Stephen,
> As you mentioned I can replace kmalloc with kzalloc in the original code 
> and push an updated patch.
> However, I just wanted to understand if there exists any issue
> in using devm_kzalloc instead of kzalloc?

devm_* are intended for objects allocated during probe(), and free()d
during remove(). The object you're allocating here isn't that case.

Now, once you convert the Tegra PHY driver to be a true device, perhaps
this object will be allocated/freed during probe/remove, so the devm_
functions will be useful then?

The problem this may cause is a memory leak. Consider the Tegra EHCI and
PHY drivers being built as modules, the PHY driver module being inserted
and never removed, yet the EHCI driver being continually inserted and
removed. Since the PHY is never removed, the memory allocated by its
devm_kzalloc() call is never freed, but it's continually re-allocated
since tegra_usb_phy_open() is called whenever the EHCI driver module is
inserted. You need the explicit kfree() to avoid that, and since you're
kfree()ing somewhere other than remove(), using devm_* to make the
allocation isn't appropriate.

^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCH] usb: phy: tegra: Using devm API for memory allocation
  2012-12-19 17:38     ` Stephen Warren
@ 2012-12-20  8:48       ` Venu Byravarasu
  0 siblings, 0 replies; 5+ messages in thread
From: Venu Byravarasu @ 2012-12-20  8:48 UTC (permalink / raw)
  To: Stephen Warren; +Cc: balbi, gregkh, linux-kernel, linux-usb

> -----Original Message-----
> From: Stephen Warren [mailto:swarren@wwwdotorg.org]
> Sent: Wednesday, December 19, 2012 11:08 PM
> To: Venu Byravarasu
> Cc: balbi@ti.com; gregkh@linuxfoundation.org; linux-
> kernel@vger.kernel.org; linux-usb@vger.kernel.org
> Subject: Re: [PATCH] usb: phy: tegra: Using devm API for memory allocation
> 
> On 12/18/2012 10:38 PM, Venu Byravarasu wrote:
> >> -----Original Message-----
> >> From: Stephen Warren [mailto:swarren@wwwdotorg.org]
> >> Sent: Tuesday, December 18, 2012 10:03 PM
> >> To: Venu Byravarasu
> >> Cc: balbi@ti.com; gregkh@linuxfoundation.org; linux-
> >> kernel@vger.kernel.org; linux-usb@vger.kernel.org
> >> Subject: Re: [PATCH] usb: phy: tegra: Using devm API for memory
> allocation
> >>
> >
> > Stephen,
> > As you mentioned I can replace kmalloc with kzalloc in the original code
> > and push an updated patch.
> > However, I just wanted to understand if there exists any issue
> > in using devm_kzalloc instead of kzalloc?
> 
> devm_* are intended for objects allocated during probe(), and free()d
> during remove(). The object you're allocating here isn't that case.
> 
> Now, once you convert the Tegra PHY driver to be a true device, perhaps
> this object will be allocated/freed during probe/remove, so the devm_
> functions will be useful then?
> 
> The problem this may cause is a memory leak. Consider the Tegra EHCI and
> PHY drivers being built as modules, the PHY driver module being inserted
> and never removed, yet the EHCI driver being continually inserted and
> removed. Since the PHY is never removed, the memory allocated by its
> devm_kzalloc() call is never freed, but it's continually re-allocated
> since tegra_usb_phy_open() is called whenever the EHCI driver module is
> inserted. You need the explicit kfree() to avoid that, and since you're
> kfree()ing somewhere other than remove(), using devm_* to make the
> allocation isn't appropriate.
 
Thanks Stephen for the detailed explanation.
Sent updated patch for review: http://marc.info/?l=linux-usb&m=135599303216132&w=2 .


^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2012-12-20  8:49 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-12-18  6:21 [PATCH] usb: phy: tegra: Using devm API for memory allocation Venu Byravarasu
2012-12-18 16:33 ` Stephen Warren
2012-12-19  5:38   ` Venu Byravarasu
2012-12-19 17:38     ` Stephen Warren
2012-12-20  8:48       ` Venu Byravarasu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.