diff mbox

stmmac: fix kernel crash when device probed for SPEAr with DT

Message ID 91ea900ce78bb2054d83e0575c16ac70f3f11511.1334654597.git.viresh.kumar@st.com
State Superseded, archived
Delegated to: David Miller
Headers show

Commit Message

Viresh KUMAR April 17, 2012, 9:24 a.m. UTC
plat->dma_cfg is never allocated memory and is tried to be filled when we boot
it for SPEAr SoCs with DT. And so get a kernel crash.

Fix it by allocating memory for dma_cfg.

Signed-off-by: Viresh Kumar <viresh.kumar@st.com>
---
 .../net/ethernet/stmicro/stmmac/stmmac_platform.c  |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

Comments

Giuseppe CAVALLARO April 18, 2012, 5:11 a.m. UTC | #1
Hi Viresh

On 4/17/2012 11:24 AM, Viresh KUMAR wrote:
> plat->dma_cfg is never allocated memory and is tried to be filled when we boot
> it for SPEAr SoCs with DT. And so get a kernel crash.
> 
> Fix it by allocating memory for dma_cfg.

The fix seems to be legal but I'd like to do a review of the code again.
I was reluctant to add the dma_cfg because it had a big impact on
several platforms etc (as discussed with SPEAr guys). I accepted it
because logically correct and tidied-up the code, indeed.
I hoped it was fully tested on SPEAr platforms. at any rate, I'll look
at you patch and perform some tests on my boards and then come-back to you.

Kind Regards
Peppe

> 
> Signed-off-by: Viresh Kumar <viresh.kumar@st.com>
> ---
>  .../net/ethernet/stmicro/stmmac/stmmac_platform.c  |    8 ++++++++
>  1 files changed, 8 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
> index 12bd221..f124f60 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
> @@ -110,6 +110,14 @@ static int stmmac_pltfr_probe(struct platform_device *pdev)
>  			goto out_unmap;
>  		}
>  
> +		plat_dat->dma_cfg = devm_kzalloc(&pdev->dev,
> +				sizeof(*plat_dat->dma_cfg), GFP_KERNEL);
> +		if (!plat_dat->dma_cfg) {
> +			pr_err("%s: ERROR: no memory for dma_cfg", __func__);
> +			ret = -ENOMEM;
> +			goto out_unmap;
> +		}
> +
>  		ret = stmmac_probe_config_dt(pdev, plat_dat, &mac);
>  		if (ret) {
>  			pr_err("%s: main dt probe failed", __func__);

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Viresh KUMAR April 18, 2012, 5:14 a.m. UTC | #2
On 4/18/2012 10:41 AM, Giuseppe CAVALLARO wrote:
> I hoped it was fully tested on SPEAr platforms. at any rate

I am only working for SPEAr3xx with DT support and this patch is must as
without it we have build failures. Haven't tested on any other SPEAr SoCs, they
may require extra pdata fields to be initialized, but that will follow with
their DT support.
Giuseppe CAVALLARO April 19, 2012, 5:51 a.m. UTC | #3
Hello Viresh.

On 4/18/2012 7:14 AM, Viresh Kumar wrote:
> On 4/18/2012 10:41 AM, Giuseppe CAVALLARO wrote:
>> I hoped it was fully tested on SPEAr platforms. at any rate
> 
> I am only working for SPEAr3xx with DT support and this patch is must as
> without it we have build failures. Haven't tested on any other SPEAr SoCs, they
> may require extra pdata fields to be initialized, but that will follow with
> their DT support.
> 

I've just sent 4 patches so I kindly ask you to review the patch named:
  [net-next 3/4] stmmac: verify the dma_cfg platform fields
where I reworked the logic behind the dma_cfg conf.

Peppe
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
index 12bd221..f124f60 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_platform.c
@@ -110,6 +110,14 @@  static int stmmac_pltfr_probe(struct platform_device *pdev)
 			goto out_unmap;
 		}
 
+		plat_dat->dma_cfg = devm_kzalloc(&pdev->dev,
+				sizeof(*plat_dat->dma_cfg), GFP_KERNEL);
+		if (!plat_dat->dma_cfg) {
+			pr_err("%s: ERROR: no memory for dma_cfg", __func__);
+			ret = -ENOMEM;
+			goto out_unmap;
+		}
+
 		ret = stmmac_probe_config_dt(pdev, plat_dat, &mac);
 		if (ret) {
 			pr_err("%s: main dt probe failed", __func__);