From patchwork Tue Aug 23 02:01:18 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabio Estevam X-Patchwork-Id: 661680 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 3sJDGY1qHKz9sCY for ; Tue, 23 Aug 2016 12:02:29 +1000 (AEST) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=eDtvNzIO; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755175AbcHWCCZ (ORCPT ); Mon, 22 Aug 2016 22:02:25 -0400 Received: from mail-qt0-f196.google.com ([209.85.216.196]:36611 "EHLO mail-qt0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753509AbcHWCCY (ORCPT ); Mon, 22 Aug 2016 22:02:24 -0400 Received: by mail-qt0-f196.google.com with SMTP id u25so3352514qtb.3 for ; Mon, 22 Aug 2016 19:02:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=H3FEEIhM0qw6TRYYEAmhVFlGkznWh3sahQBUd+4TesA=; b=eDtvNzIOrYl3N4PmOpU4PlWLcJGgau7gN2lp/Q+w6tpsVPn0JgG7aSqUWQTwDsCPkm UDmqGRjEM8OYALw5uRM6Fk9boI00ORh+3fWL0PTZOL4y8W4vDeGcYbme8SfYmnGrq0J+ 34ygVAPmtX5adiXvv+scoxZF0tHvuD/WzHdj3ciBOtMqN3zhs08i/sMJlP/BoADD3gmd CmxMDtWKv2AucrihpPdXJAnhlhpZf4YaacTq25kZpMvrNTZTpVg5B185ihrh5GA/CA9S n+1jaa2F5PPxAoOznB9FdcD4yNLEz9NkSYDtDcwWspYXacMP+QODcQ7R1tx2Trgejd3Y WCCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=H3FEEIhM0qw6TRYYEAmhVFlGkznWh3sahQBUd+4TesA=; b=hxwGH19Tq4f6FbW13kOQaEh3gE0OkhpH/W9VizvsRtDgMIPkTADlMGE/ygUZurqi5T gj8biFFK+MQOy8+1UolAuKnUXdIpGxOazg3tYDoUR+Fs7rlOYIfRw1U66Wx43q7c3jJg Civ6JJKBrqKfNj5S7Hf0LH1x0CNIDwYoUnFc45V6nWjN6bpN5qcr9oKSI8DPtzSCofas 2QQcMZlgIgBOJ08pTaR86BSVAybBqOxTkn5P/kaHR3aBmX+4KKJTktDUOYpPIq1LgWut UVir2GZ8Q6ZGqnsQDbGh5R++mAzF6I4vWtZ/ANqykSG2yPr8tw7ykZHOR3kdihNEk8/u DaSw== X-Gm-Message-State: AEkooutILdU22LjAzkllA5vTil2W0go3vUtWIjzzPGXSpQSizeSKreLQb2KlUwdSgCpeAQ== X-Received: by 10.237.40.66 with SMTP id r60mr27521439qtd.112.1471917742949; Mon, 22 Aug 2016 19:02:22 -0700 (PDT) Received: from localhost.localdomain ([187.180.185.30]) by smtp.gmail.com with ESMTPSA id l22sm534329qtl.34.2016.08.22.19.02.20 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 22 Aug 2016 19:02:22 -0700 (PDT) From: Fabio Estevam To: davem@davemloft.net Cc: vz@mleia.com, netdev@vger.kernel.org, Fabio Estevam Subject: [PATCH] net: lpc_eth: Check clk_prepare_enable() error Date: Mon, 22 Aug 2016 23:01:18 -0300 Message-Id: <1471917678-9130-1-git-send-email-festevam@gmail.com> X-Mailer: git-send-email 1.9.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Fabio Estevam clk_prepare_enable() may fail, so we should better check its return value and propagate it in the case of failure. Signed-off-by: Fabio Estevam --- drivers/net/ethernet/nxp/lpc_eth.c | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/drivers/net/ethernet/nxp/lpc_eth.c b/drivers/net/ethernet/nxp/lpc_eth.c index 4d4ecba..7c796f7 100644 --- a/drivers/net/ethernet/nxp/lpc_eth.c +++ b/drivers/net/ethernet/nxp/lpc_eth.c @@ -475,12 +475,19 @@ static void __lpc_get_mac(struct netdata_local *pldat, u8 *mac) mac[5] = tmp >> 8; } -static void __lpc_eth_clock_enable(struct netdata_local *pldat, bool enable) +static int __lpc_eth_clock_enable(struct netdata_local *pldat, bool enable) { - if (enable) - clk_prepare_enable(pldat->clk); - else + int ret; + + if (enable) { + ret = clk_prepare_enable(pldat->clk); + if (ret) + return ret; + } else { clk_disable_unprepare(pldat->clk); + } + + return 0; } static void __lpc_params_setup(struct netdata_local *pldat) @@ -1039,6 +1046,7 @@ static int lpc_eth_close(struct net_device *ndev) { unsigned long flags; struct netdata_local *pldat = netdev_priv(ndev); + int ret; if (netif_msg_ifdown(pldat)) dev_dbg(&pldat->pdev->dev, "shutting down %s\n", ndev->name); @@ -1056,7 +1064,9 @@ static int lpc_eth_close(struct net_device *ndev) writel(0, LPC_ENET_MAC2(pldat->net_base)); spin_unlock_irqrestore(&pldat->lock, flags); - __lpc_eth_clock_enable(pldat, false); + ret = __lpc_eth_clock_enable(pldat, false); + if (ret) + return ret; return 0; } @@ -1197,11 +1207,14 @@ static int lpc_eth_ioctl(struct net_device *ndev, struct ifreq *req, int cmd) static int lpc_eth_open(struct net_device *ndev) { struct netdata_local *pldat = netdev_priv(ndev); + int ret; if (netif_msg_ifup(pldat)) dev_dbg(&pldat->pdev->dev, "enabling %s\n", ndev->name); - __lpc_eth_clock_enable(pldat, true); + ret = __lpc_eth_clock_enable(pldat, true); + if (ret) + return ret; /* Suspended PHY makes LPC ethernet core block, so resume now */ phy_resume(ndev->phydev); @@ -1320,7 +1333,9 @@ static int lpc_eth_drv_probe(struct platform_device *pdev) } /* Enable network clock */ - __lpc_eth_clock_enable(pldat, true); + ret = __lpc_eth_clock_enable(pldat, true); + if (ret) + goto err_out_free_dev; /* Map IO space */ pldat->net_base = ioremap(res->start, resource_size(res));