[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20230419135536.gnteyh4pu6p53epr@skbuf>
Date: Wed, 19 Apr 2023 16:55:36 +0300
From: Vladimir Oltean <olteanv@...il.com>
To: Jiawen Wu <jiawenwu@...stnetic.com>
Cc: netdev@...r.kernel.org, linux@...linux.org.uk,
linux-i2c@...r.kernel.org, linux-gpio@...r.kernel.org,
mengyuanlou@...-swift.com
Subject: Re: [PATCH net-next v3 4/8] net: txgbe: Add SFP module identify
On Wed, Apr 19, 2023 at 04:27:35PM +0800, Jiawen Wu wrote:
> + ret = txgbe_sfp_register(txgbe);
> + if (ret) {
> + wx_err(txgbe->wx, "failed to register sfp\n");
> + goto err;
> + }
The usual error handling pattern is to jump to specific labels within
the error unwind code path (which duplicates the normal teardown path
except for the first operation), rather than calling the single cleanup
function - here txgbe_remove_phy() - and filling that with "if" conditions.
Normally (at least in the networking layer except for Qdiscs, that's all
I know), one would expect that if txgbe_init_phy() fails, txgbe_remove_phy()
is never called. So, given that expectation, txgbe->sfp_dev would never
be NULL.
> +
> return 0;
>
> err:
> @@ -131,6 +156,8 @@ int txgbe_init_phy(struct txgbe *txgbe)
>
> void txgbe_remove_phy(struct txgbe *txgbe)
> {
> + if (txgbe->sfp_dev)
> + platform_device_unregister(txgbe->sfp_dev);
> if (txgbe->i2c_dev)
> platform_device_unregister(txgbe->i2c_dev);
>
> diff --git a/drivers/net/ethernet/wangxun/txgbe/txgbe_type.h b/drivers/net/ethernet/wangxun/txgbe/txgbe_type.h
> index 771aefbc7c80..aa94c4fce311 100644
> --- a/drivers/net/ethernet/wangxun/txgbe/txgbe_type.h
> +++ b/drivers/net/ethernet/wangxun/txgbe/txgbe_type.h
> @@ -149,6 +149,7 @@ struct txgbe_nodes {
> struct txgbe {
> struct wx *wx;
> struct txgbe_nodes nodes;
> + struct platform_device *sfp_dev;
> struct platform_device *i2c_dev;
> };
>
> --
> 2.27.0
>
Powered by blists - more mailing lists