Skip to content

Commit

Permalink
fsl/fman: Save device references taken in mac_probe()
Browse files Browse the repository at this point in the history
In mac_probe() there are calls to of_find_device_by_node() which takes
references to of_dev->dev. These references are not saved and not released
later on error path in mac_probe() and in mac_remove().

Add new fields into mac_device structure to save references taken for
future use in mac_probe() and mac_remove().

This is a preparation for further reference leaks fix.

Signed-off-by: Aleksandr Mishin <amishin@t-argos.ru>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
  • Loading branch information
Aleksandr Mishin authored and Paolo Abeni committed Oct 21, 2024
1 parent 3b05b9c commit efeddd5
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 3 deletions.
6 changes: 4 additions & 2 deletions drivers/net/ethernet/freescale/fman/mac.c
Original file line number Diff line number Diff line change
Expand Up @@ -197,6 +197,7 @@ static int mac_probe(struct platform_device *_of_dev)
err = -EINVAL;
goto _return_of_node_put;
}
mac_dev->fman_dev = &of_dev->dev;

/* Get the FMan cell-index */
err = of_property_read_u32(dev_node, "cell-index", &val);
Expand All @@ -208,7 +209,7 @@ static int mac_probe(struct platform_device *_of_dev)
/* cell-index 0 => FMan id 1 */
fman_id = (u8)(val + 1);

priv->fman = fman_bind(&of_dev->dev);
priv->fman = fman_bind(mac_dev->fman_dev);
if (!priv->fman) {
dev_err(dev, "fman_bind(%pOF) failed\n", dev_node);
err = -ENODEV;
Expand Down Expand Up @@ -284,8 +285,9 @@ static int mac_probe(struct platform_device *_of_dev)
err = -EINVAL;
goto _return_of_node_put;
}
mac_dev->fman_port_devs[i] = &of_dev->dev;

mac_dev->port[i] = fman_port_bind(&of_dev->dev);
mac_dev->port[i] = fman_port_bind(mac_dev->fman_port_devs[i]);
if (!mac_dev->port[i]) {
dev_err(dev, "dev_get_drvdata(%pOF) failed\n",
dev_node);
Expand Down
6 changes: 5 additions & 1 deletion drivers/net/ethernet/freescale/fman/mac.h
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@
struct fman_mac;
struct mac_priv_s;

#define PORT_NUM 2
struct mac_device {
void __iomem *vaddr;
struct device *dev;
struct resource *res;
u8 addr[ETH_ALEN];
struct fman_port *port[2];
struct fman_port *port[PORT_NUM];
struct phylink *phylink;
struct phylink_config phylink_config;
phy_interface_t phy_if;
Expand Down Expand Up @@ -52,6 +53,9 @@ struct mac_device {

struct fman_mac *fman_mac;
struct mac_priv_s *priv;

struct device *fman_dev;
struct device *fman_port_devs[PORT_NUM];
};

static inline struct mac_device
Expand Down

0 comments on commit efeddd5

Please sign in to comment.