[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20211208182949.69733b8b@kicinski-fedora-pc1c0hjn.dhcp.thefacebook.com>
Date: Wed, 8 Dec 2021 18:29:49 -0800
From: Jakub Kicinski <kuba@...nel.org>
To: Qing Wang <wangqing@...o.com>
Cc: Madalin Bucur <madalin.bucur@....com>,
"David S. Miller" <davem@...emloft.net>, netdev@...r.kernel.org
Subject: Re: [PATCH] ethernet: fman: add missing put_device() call in
mac_probe()
On Tue, 7 Dec 2021 04:56:00 -0800 Qing Wang wrote:
> From: Wang Qing <wangqing@...o.com>
>
> of_find_device_by_node() takes a reference to the embedded struct device
> which needs to be dropped when error return.
>
> Add a jump target to fix the exception handling for this
> function implementation.
>
> Signed-off-by: Wang Qing <wangqing@...o.com>
The entire mac_dev->port[] handling seems entirely pointless and leaky.
Nothing ever reads the mac_dev->port array. We should remove it
completely.
> diff --git a/drivers/net/ethernet/freescale/fman/mac.c b/drivers/net/ethernet/freescale/fman/mac.c
> index d9fc5c4..5180121
> --- a/drivers/net/ethernet/freescale/fman/mac.c
> +++ b/drivers/net/ethernet/freescale/fman/mac.c
> @@ -668,7 +668,7 @@ static int mac_probe(struct platform_device *_of_dev)
> if (err) {
> dev_err(dev, "failed to read cell-index for %pOF\n", dev_node);
> err = -EINVAL;
> - goto _return_of_node_put;
> + goto _return_of_put_device;
> }
> /* cell-index 0 => FMan id 1 */
> fman_id = (u8)(val + 1);
> @@ -677,7 +677,7 @@ static int mac_probe(struct platform_device *_of_dev)
> if (!priv->fman) {
> dev_err(dev, "fman_bind(%pOF) failed\n", dev_node);
> err = -ENODEV;
> - goto _return_of_node_put;
> + goto _return_of_put_device;
> }
>
> of_node_put(dev_node);
> @@ -758,7 +758,7 @@ static int mac_probe(struct platform_device *_of_dev)
> dev_err(dev, "of_find_device_by_node(%pOF) failed\n",
> dev_node);
> err = -EINVAL;
> - goto _return_of_node_put;
> + goto _return_of_put_device;
> }
>
> mac_dev->port[i] = fman_port_bind(&of_dev->dev);
> @@ -766,7 +766,7 @@ static int mac_probe(struct platform_device *_of_dev)
> dev_err(dev, "dev_get_drvdata(%pOF) failed\n",
> dev_node);
> err = -EINVAL;
> - goto _return_of_node_put;
> + goto _return_of_put_device;
> }
> of_node_put(dev_node);
> }
> @@ -863,6 +863,8 @@ static int mac_probe(struct platform_device *_of_dev)
>
> goto _return;
>
> +_return_of_put_device:
> + put_device(&of_dev->dev);
> _return_of_node_put:
> of_node_put(dev_node);
> _return_of_get_parent:
Powered by blists - more mailing lists