2012-08-10 06:20:21

by Venu Byravarasu

[permalink] [raw]
Subject: [PATCH] usb: host: tegra: fix warning messages in ehci_remove

Existing implementation of tegra_ehci_remove() calls
usb_put_hcd(hcd) first and then iounmap(hcd->regs).

usb_put_hcd() implementation calls hcd_release()
which frees up memory allocated for hcd.

As iounmap is trying to unmap hcd->regs, after hcd
getting freed up, warning messages were observed during
unload of USB.

Hence fixing it.

Signed-off-by: Venu Byravarasu <[email protected]>
---
drivers/usb/host/ehci-tegra.c | 3 ++-
1 files changed, 2 insertions(+), 1 deletions(-)

diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c
index 950e95e..26dedb3 100644
--- a/drivers/usb/host/ehci-tegra.c
+++ b/drivers/usb/host/ehci-tegra.c
@@ -799,11 +799,12 @@ static int tegra_ehci_remove(struct platform_device *pdev)
#endif

usb_remove_hcd(hcd);
- usb_put_hcd(hcd);

tegra_usb_phy_close(tegra->phy);
iounmap(hcd->regs);

+ usb_put_hcd(hcd);
+
clk_disable_unprepare(tegra->clk);
clk_put(tegra->clk);

--
1.7.1.1


2012-08-10 13:51:46

by Alan Stern

[permalink] [raw]
Subject: Re: [PATCH] usb: host: tegra: fix warning messages in ehci_remove

On Fri, 10 Aug 2012, Venu Byravarasu wrote:

> Existing implementation of tegra_ehci_remove() calls
> usb_put_hcd(hcd) first and then iounmap(hcd->regs).
>
> usb_put_hcd() implementation calls hcd_release()
> which frees up memory allocated for hcd.
>
> As iounmap is trying to unmap hcd->regs, after hcd
> getting freed up, warning messages were observed during
> unload of USB.
>
> Hence fixing it.
>
> Signed-off-by: Venu Byravarasu <[email protected]>
> ---
> drivers/usb/host/ehci-tegra.c | 3 ++-
> 1 files changed, 2 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/usb/host/ehci-tegra.c b/drivers/usb/host/ehci-tegra.c
> index 950e95e..26dedb3 100644
> --- a/drivers/usb/host/ehci-tegra.c
> +++ b/drivers/usb/host/ehci-tegra.c
> @@ -799,11 +799,12 @@ static int tegra_ehci_remove(struct platform_device *pdev)
> #endif
>
> usb_remove_hcd(hcd);
> - usb_put_hcd(hcd);
>
> tegra_usb_phy_close(tegra->phy);
> iounmap(hcd->regs);
>
> + usb_put_hcd(hcd);
> +
> clk_disable_unprepare(tegra->clk);
> clk_put(tegra->clk);

Acked-by: Alan Stern <[email protected]>