From patchwork Tue Oct 8 03:26:41 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Wei Yongjun X-Patchwork-Id: 281310 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id E488F2C007C for ; Tue, 8 Oct 2013 14:26:46 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753089Ab3JHD0o (ORCPT ); Mon, 7 Oct 2013 23:26:44 -0400 Received: from mail-bk0-f45.google.com ([209.85.214.45]:55096 "EHLO mail-bk0-f45.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751806Ab3JHD0m (ORCPT ); Mon, 7 Oct 2013 23:26:42 -0400 Received: by mail-bk0-f45.google.com with SMTP id mx11so2947250bkb.4 for ; Mon, 07 Oct 2013 20:26:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:date:message-id:subject:from:to:cc:content-type; bh=mH935Nmf1uDdBK/LGuXv0XxRj9SuYYkdN8ONJOf9roo=; b=hgKYzlc7xlzFyGoua7IisbEaGKODOT/ZalgrJf5MPAIH1oYr/Zil3xxjToqRg+JjR8 hlJIBmPGk+tVmu29MNOrFejSfHs7Jk2F45wllCuHTqi+i7YpbP2uKpielq2w6rxftlJG dygqpIsLQ45NiJX4yTvPhKvuGGGAFWg0DmdNw4IlFYBySK02fETOtJ7nQgInM62VQtUu KG/SEnX5X/7BgRrj5U9xSt/xwWiF7gLLqN21tvRfrpKMCpubsKMm1CouUecKNnBG1dNS +QvVUEADHh2wg5cnX4PpzmNjsJhgIspF0FP4Hw4LtcHN6MiWBQ86cwvFEcQedx0qsXVA PZ/g== MIME-Version: 1.0 X-Received: by 10.204.226.135 with SMTP id iw7mr30337492bkb.4.1381202801461; Mon, 07 Oct 2013 20:26:41 -0700 (PDT) Received: by 10.205.19.10 with HTTP; Mon, 7 Oct 2013 20:26:41 -0700 (PDT) Date: Tue, 8 Oct 2013 11:26:41 +0800 Message-ID: Subject: [PATCH] moxa: fix the error handling in moxart_mac_probe() From: Wei Yongjun To: grant.likely@linaro.org, rob.herring@calxeda.com, davem@davemloft.net, jg1.han@samsung.com, b.zolnierkie@samsung.com, kyungmin.park@samsung.com Cc: yongjun_wei@trendmicro.com.cn, netdev@vger.kernel.org Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Wei Yongjun This patch fix the error handling in moxart_mac_probe(): - return -ENOMEM in some memory alloc fail cases - add missing free_netdev() in the error handling case Signed-off-by: Wei Yongjun Signed-off-by: Wei Yongjun --- drivers/net/ethernet/moxa/moxart_ether.c | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) -- 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 --git a/drivers/net/ethernet/moxa/moxart_ether.c b/drivers/net/ethernet/moxa/moxart_ether.c index bd1a2d2..ea54d95 100644 --- a/drivers/net/ethernet/moxa/moxart_ether.c +++ b/drivers/net/ethernet/moxa/moxart_ether.c @@ -448,7 +448,8 @@ static int moxart_mac_probe(struct platform_device *pdev) irq = irq_of_parse_and_map(node, 0); if (irq <= 0) { netdev_err(ndev, "irq_of_parse_and_map failed\n"); - return -EINVAL; + ret = -EINVAL; + goto irq_map_fail; } priv = netdev_priv(ndev); @@ -472,24 +473,32 @@ static int moxart_mac_probe(struct platform_device *pdev) priv->tx_desc_base = dma_alloc_coherent(NULL, TX_REG_DESC_SIZE * TX_DESC_NUM, &priv->tx_base, GFP_DMA | GFP_KERNEL); - if (priv->tx_desc_base == NULL) + if (priv->tx_desc_base == NULL) { + ret = -ENOMEM; goto init_fail; + } priv->rx_desc_base = dma_alloc_coherent(NULL, RX_REG_DESC_SIZE * RX_DESC_NUM, &priv->rx_base, GFP_DMA | GFP_KERNEL); - if (priv->rx_desc_base == NULL) + if (priv->rx_desc_base == NULL) { + ret = -ENOMEM; goto init_fail; + } priv->tx_buf_base = kmalloc(priv->tx_buf_size * TX_DESC_NUM, GFP_ATOMIC); - if (!priv->tx_buf_base) + if (!priv->tx_buf_base) { + ret = -ENOMEM; goto init_fail; + } priv->rx_buf_base = kmalloc(priv->rx_buf_size * RX_DESC_NUM, GFP_ATOMIC); - if (!priv->rx_buf_base) + if (!priv->rx_buf_base) { + ret = -ENOMEM; goto init_fail; + } platform_set_drvdata(pdev, ndev); @@ -522,7 +531,8 @@ static int moxart_mac_probe(struct platform_device *pdev) init_fail: netdev_err(ndev, "init failed\n"); moxart_mac_free_memory(ndev); - +irq_map_fail: + free_netdev(ndev); return ret; }