diff mbox

[2/2] sata_mv: More error handling for phy_power_off() in mv_platform_remove()

Message ID 54D08871.6030304@users.sourceforge.net
State Not Applicable
Delegated to: David Miller
Headers show

Commit Message

SF Markus Elfring Feb. 3, 2015, 8:36 a.m. UTC
From: Markus Elfring <elfring@users.sourceforge.net>
Date: Mon, 2 Feb 2015 23:30:34 +0100

The return value from the phy_power_off() function was not used by the
mv_platform_remove() function.

Let us improve error detection and eventually return a corresponding
failure code.

Signed-off-by: Markus Elfring <elfring@users.sourceforge.net>
---
 drivers/ata/sata_mv.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

Comments

Tejun Heo Feb. 3, 2015, 12:10 p.m. UTC | #1
On Tue, Feb 03, 2015 at 09:36:01AM +0100, SF Markus Elfring wrote:
...
> @@ -4215,7 +4215,9 @@ static int mv_platform_remove(struct platform_device *pdev)
>  			clk_disable_unprepare(hpriv->port_clks[port]);
>  			clk_put(hpriv->port_clks[port]);
>  		}
> -		phy_power_off(hpriv->port_phys[port]);
> +		rc = phy_power_off(hpriv->port_phys[port]);
> +		if (rc)
> +			return rc;

So, this is a removal function which is ignoring failure from turning
off phy, which seems like the right thing to do.  The same thing with
suspend routines.  If something auxliary which isn't strictly
necessary in reaching suspend state fails, the failure should be
ignored.

Running static code analysis to locate trivial irregularities and
performing identity transformations is fine, even great, but you're
changing the behavior here without actually understanding what's going
on.  Please don't do these things automatically.

Thanks.
diff mbox

Patch

diff --git a/drivers/ata/sata_mv.c b/drivers/ata/sata_mv.c
index f8c33e3..4f9bc33 100644
--- a/drivers/ata/sata_mv.c
+++ b/drivers/ata/sata_mv.c
@@ -4203,7 +4203,7 @@  static int mv_platform_remove(struct platform_device *pdev)
 {
 	struct ata_host *host = platform_get_drvdata(pdev);
 	struct mv_host_priv *hpriv = host->private_data;
-	int port;
+	int port, rc;
 	ata_host_detach(host);
 
 	if (!IS_ERR(hpriv->clk)) {
@@ -4215,7 +4215,9 @@  static int mv_platform_remove(struct platform_device *pdev)
 			clk_disable_unprepare(hpriv->port_clks[port]);
 			clk_put(hpriv->port_clks[port]);
 		}
-		phy_power_off(hpriv->port_phys[port]);
+		rc = phy_power_off(hpriv->port_phys[port]);
+		if (rc)
+			return rc;
 	}
 	return 0;
 }