* [PATCHv2 net-next 0/6] gianfar cleanups
@ 2024-11-18 21:27 Rosen Penev
2024-11-18 21:27 ` [PATCHv2 net-next 1/6] net: gianfar: use devm_alloc_etherdev_mqs Rosen Penev
` (6 more replies)
0 siblings, 7 replies; 9+ messages in thread
From: Rosen Penev @ 2024-11-18 21:27 UTC (permalink / raw)
To: netdev
Cc: Claudiu Manoil, maxime.chevallier, Andrew Lunn, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, open list
Mostly devm adjustments and bugfixes along the way.
This was tested on a WatchGuard T10.
Rosen Penev (6):
v2: remove request_irq change. Fix NULL pointer deref with ofdev.
net: gianfar: use devm_alloc_etherdev_mqs
net: gianfar: use devm for register_netdev
net: gianfar: assign ofdev to priv struct
net: gianfar: remove free_gfar_dev
net: gianfar: alloc queues with devm
net: gianfar: iomap with devm
drivers/net/ethernet/freescale/gianfar.c | 93 +++++-------------------
1 file changed, 19 insertions(+), 74 deletions(-)
--
2.47.0
^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCHv2 net-next 1/6] net: gianfar: use devm_alloc_etherdev_mqs
2024-11-18 21:27 [PATCHv2 net-next 0/6] gianfar cleanups Rosen Penev
@ 2024-11-18 21:27 ` Rosen Penev
2024-11-18 21:27 ` [PATCHv2 net-next 2/6] net: gianfar: use devm for register_netdev Rosen Penev
` (5 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Rosen Penev @ 2024-11-18 21:27 UTC (permalink / raw)
To: netdev
Cc: Claudiu Manoil, maxime.chevallier, Andrew Lunn, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, open list
There seems to be a mistake here. There's a num_rx_qs variable that is not
being passed to the allocation function. The mq variant just calls mqs
with the last parameter of the former duplicated to the last parameter
of the latter. That's fine if they match. Not sure they do.
Also avoids manual free_netdev
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
---
drivers/net/ethernet/freescale/gianfar.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
index 435138f4699d..e486b77bc6f4 100644
--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c
@@ -475,8 +475,6 @@ static void free_gfar_dev(struct gfar_private *priv)
kfree(priv->gfargrp[i].irqinfo[j]);
priv->gfargrp[i].irqinfo[j] = NULL;
}
-
- free_netdev(priv->ndev);
}
static void disable_napi(struct gfar_private *priv)
@@ -681,7 +679,8 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
return -EINVAL;
}
- *pdev = alloc_etherdev_mq(sizeof(*priv), num_tx_qs);
+ *pdev = devm_alloc_etherdev_mqs(&ofdev->dev, sizeof(*priv), num_tx_qs,
+ num_rx_qs);
dev = *pdev;
if (NULL == dev)
return -ENOMEM;
--
2.47.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCHv2 net-next 2/6] net: gianfar: use devm for register_netdev
2024-11-18 21:27 [PATCHv2 net-next 0/6] gianfar cleanups Rosen Penev
2024-11-18 21:27 ` [PATCHv2 net-next 1/6] net: gianfar: use devm_alloc_etherdev_mqs Rosen Penev
@ 2024-11-18 21:27 ` Rosen Penev
2024-11-18 21:27 ` [PATCHv2 net-next 3/6] net: gianfar: assign ofdev to priv struct Rosen Penev
` (4 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Rosen Penev @ 2024-11-18 21:27 UTC (permalink / raw)
To: netdev
Cc: Claudiu Manoil, maxime.chevallier, Andrew Lunn, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, open list
Avoid manual unregister of netdev.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/freescale/gianfar.c | 4 +---
1 file changed, 1 insertion(+), 3 deletions(-)
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
index e486b77bc6f4..9ff756130ba8 100644
--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c
@@ -3305,7 +3305,7 @@ static int gfar_probe(struct platform_device *ofdev)
/* Carrier starts down, phylib will bring it up */
netif_carrier_off(dev);
- err = register_netdev(dev);
+ err = devm_register_netdev(&ofdev->dev, dev);
if (err) {
pr_err("%s: Cannot register net device, aborting\n", dev->name);
@@ -3374,8 +3374,6 @@ static void gfar_remove(struct platform_device *ofdev)
of_node_put(priv->phy_node);
of_node_put(priv->tbi_node);
- unregister_netdev(priv->ndev);
-
if (of_phy_is_fixed_link(np))
of_phy_deregister_fixed_link(np);
--
2.47.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCHv2 net-next 3/6] net: gianfar: assign ofdev to priv struct
2024-11-18 21:27 [PATCHv2 net-next 0/6] gianfar cleanups Rosen Penev
2024-11-18 21:27 ` [PATCHv2 net-next 1/6] net: gianfar: use devm_alloc_etherdev_mqs Rosen Penev
2024-11-18 21:27 ` [PATCHv2 net-next 2/6] net: gianfar: use devm for register_netdev Rosen Penev
@ 2024-11-18 21:27 ` Rosen Penev
2024-11-18 21:27 ` [PATCHv2 net-next 4/6] net: gianfar: remove free_gfar_dev Rosen Penev
` (3 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Rosen Penev @ 2024-11-18 21:27 UTC (permalink / raw)
To: netdev
Cc: Claudiu Manoil, maxime.chevallier, Andrew Lunn, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, open list
This is done in probe but not of_init. This will be used for further
devm conversions.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/freescale/gianfar.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
index 9ff756130ba8..4b023beaa0b1 100644
--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c
@@ -687,6 +687,8 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
priv = netdev_priv(dev);
priv->ndev = dev;
+ priv->ofdev = ofdev;
+ priv->dev = &ofdev->dev;
priv->mode = mode;
--
2.47.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCHv2 net-next 4/6] net: gianfar: remove free_gfar_dev
2024-11-18 21:27 [PATCHv2 net-next 0/6] gianfar cleanups Rosen Penev
` (2 preceding siblings ...)
2024-11-18 21:27 ` [PATCHv2 net-next 3/6] net: gianfar: assign ofdev to priv struct Rosen Penev
@ 2024-11-18 21:27 ` Rosen Penev
2024-11-18 21:27 ` [PATCHv2 net-next 5/6] net: gianfar: alloc queues with devm Rosen Penev
` (2 subsequent siblings)
6 siblings, 0 replies; 9+ messages in thread
From: Rosen Penev @ 2024-11-18 21:27 UTC (permalink / raw)
To: netdev
Cc: Claudiu Manoil, maxime.chevallier, Andrew Lunn, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, open list
Use devm for kzalloc. Allows to remove free_gfar_dev as devm handles
freeing it now.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
---
drivers/net/ethernet/freescale/gianfar.c | 18 ++----------------
1 file changed, 2 insertions(+), 16 deletions(-)
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
index 4b023beaa0b1..4799779c9cbe 100644
--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c
@@ -466,17 +466,6 @@ static void unmap_group_regs(struct gfar_private *priv)
iounmap(priv->gfargrp[i].regs);
}
-static void free_gfar_dev(struct gfar_private *priv)
-{
- int i, j;
-
- for (i = 0; i < priv->num_grps; i++)
- for (j = 0; j < GFAR_NUM_IRQS; j++) {
- kfree(priv->gfargrp[i].irqinfo[j]);
- priv->gfargrp[i].irqinfo[j] = NULL;
- }
-}
-
static void disable_napi(struct gfar_private *priv)
{
int i;
@@ -504,8 +493,8 @@ static int gfar_parse_group(struct device_node *np,
int i;
for (i = 0; i < GFAR_NUM_IRQS; i++) {
- grp->irqinfo[i] = kzalloc(sizeof(struct gfar_irqinfo),
- GFP_KERNEL);
+ grp->irqinfo[i] = devm_kzalloc(
+ priv->dev, sizeof(struct gfar_irqinfo), GFP_KERNEL);
if (!grp->irqinfo[i])
return -ENOMEM;
}
@@ -820,7 +809,6 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
gfar_free_rx_queues(priv);
tx_alloc_failed:
gfar_free_tx_queues(priv);
- free_gfar_dev(priv);
return err;
}
@@ -3364,7 +3352,6 @@ static int gfar_probe(struct platform_device *ofdev)
gfar_free_tx_queues(priv);
of_node_put(priv->phy_node);
of_node_put(priv->tbi_node);
- free_gfar_dev(priv);
return err;
}
@@ -3382,7 +3369,6 @@ static void gfar_remove(struct platform_device *ofdev)
unmap_group_regs(priv);
gfar_free_rx_queues(priv);
gfar_free_tx_queues(priv);
- free_gfar_dev(priv);
}
#ifdef CONFIG_PM
--
2.47.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCHv2 net-next 5/6] net: gianfar: alloc queues with devm
2024-11-18 21:27 [PATCHv2 net-next 0/6] gianfar cleanups Rosen Penev
` (3 preceding siblings ...)
2024-11-18 21:27 ` [PATCHv2 net-next 4/6] net: gianfar: remove free_gfar_dev Rosen Penev
@ 2024-11-18 21:27 ` Rosen Penev
2024-11-18 21:27 ` [PATCHv2 net-next 6/6] net: gianfar: iomap " Rosen Penev
2024-11-18 21:41 ` [PATCHv2 net-next 0/6] gianfar cleanups Joe Damato
6 siblings, 0 replies; 9+ messages in thread
From: Rosen Penev @ 2024-11-18 21:27 UTC (permalink / raw)
To: netdev
Cc: Claudiu Manoil, maxime.chevallier, Andrew Lunn, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, open list
Remove the freeing functions as they no longer serve a purpose. devm
handles this automatically.
There seems to be a mistake here where free_tx_queue is called on
failure. Just let devm deal with it.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
---
drivers/net/ethernet/freescale/gianfar.c | 38 +++++-------------------
1 file changed, 7 insertions(+), 31 deletions(-)
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
index 4799779c9cbe..f333ceb11e47 100644
--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c
@@ -412,8 +412,8 @@ static int gfar_alloc_tx_queues(struct gfar_private *priv)
int i;
for (i = 0; i < priv->num_tx_queues; i++) {
- priv->tx_queue[i] = kzalloc(sizeof(struct gfar_priv_tx_q),
- GFP_KERNEL);
+ priv->tx_queue[i] = devm_kzalloc(
+ priv->dev, sizeof(struct gfar_priv_tx_q), GFP_KERNEL);
if (!priv->tx_queue[i])
return -ENOMEM;
@@ -430,8 +430,8 @@ static int gfar_alloc_rx_queues(struct gfar_private *priv)
int i;
for (i = 0; i < priv->num_rx_queues; i++) {
- priv->rx_queue[i] = kzalloc(sizeof(struct gfar_priv_rx_q),
- GFP_KERNEL);
+ priv->rx_queue[i] = devm_kzalloc(
+ priv->dev, sizeof(struct gfar_priv_rx_q), GFP_KERNEL);
if (!priv->rx_queue[i])
return -ENOMEM;
@@ -441,22 +441,6 @@ static int gfar_alloc_rx_queues(struct gfar_private *priv)
return 0;
}
-static void gfar_free_tx_queues(struct gfar_private *priv)
-{
- int i;
-
- for (i = 0; i < priv->num_tx_queues; i++)
- kfree(priv->tx_queue[i]);
-}
-
-static void gfar_free_rx_queues(struct gfar_private *priv)
-{
- int i;
-
- for (i = 0; i < priv->num_rx_queues; i++)
- kfree(priv->rx_queue[i]);
-}
-
static void unmap_group_regs(struct gfar_private *priv)
{
int i;
@@ -687,16 +671,16 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
err = gfar_alloc_tx_queues(priv);
if (err)
- goto tx_alloc_failed;
+ return err;
err = gfar_alloc_rx_queues(priv);
if (err)
- goto rx_alloc_failed;
+ return err;
err = of_property_read_string(np, "model", &model);
if (err) {
pr_err("Device model property missing, aborting\n");
- goto rx_alloc_failed;
+ return err;
}
/* Init Rx queue filer rule set linked list */
@@ -805,10 +789,6 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
err_grp_init:
unmap_group_regs(priv);
-rx_alloc_failed:
- gfar_free_rx_queues(priv);
-tx_alloc_failed:
- gfar_free_tx_queues(priv);
return err;
}
@@ -3348,8 +3328,6 @@ static int gfar_probe(struct platform_device *ofdev)
if (of_phy_is_fixed_link(np))
of_phy_deregister_fixed_link(np);
unmap_group_regs(priv);
- gfar_free_rx_queues(priv);
- gfar_free_tx_queues(priv);
of_node_put(priv->phy_node);
of_node_put(priv->tbi_node);
return err;
@@ -3367,8 +3345,6 @@ static void gfar_remove(struct platform_device *ofdev)
of_phy_deregister_fixed_link(np);
unmap_group_regs(priv);
- gfar_free_rx_queues(priv);
- gfar_free_tx_queues(priv);
}
#ifdef CONFIG_PM
--
2.47.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* [PATCHv2 net-next 6/6] net: gianfar: iomap with devm
2024-11-18 21:27 [PATCHv2 net-next 0/6] gianfar cleanups Rosen Penev
` (4 preceding siblings ...)
2024-11-18 21:27 ` [PATCHv2 net-next 5/6] net: gianfar: alloc queues with devm Rosen Penev
@ 2024-11-18 21:27 ` Rosen Penev
2024-11-18 21:41 ` [PATCHv2 net-next 0/6] gianfar cleanups Joe Damato
6 siblings, 0 replies; 9+ messages in thread
From: Rosen Penev @ 2024-11-18 21:27 UTC (permalink / raw)
To: netdev
Cc: Claudiu Manoil, maxime.chevallier, Andrew Lunn, David S. Miller,
Eric Dumazet, Jakub Kicinski, Paolo Abeni, open list
Remove unmap_group_regs as it no longer served a purpose. devm can
handle this automatically.
Remove gotos as they are no longer needed.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
---
drivers/net/ethernet/freescale/gianfar.c | 26 +++++-------------------
1 file changed, 5 insertions(+), 21 deletions(-)
diff --git a/drivers/net/ethernet/freescale/gianfar.c b/drivers/net/ethernet/freescale/gianfar.c
index f333ceb11e47..d610adc485f7 100644
--- a/drivers/net/ethernet/freescale/gianfar.c
+++ b/drivers/net/ethernet/freescale/gianfar.c
@@ -441,15 +441,6 @@ static int gfar_alloc_rx_queues(struct gfar_private *priv)
return 0;
}
-static void unmap_group_regs(struct gfar_private *priv)
-{
- int i;
-
- for (i = 0; i < MAXGROUPS; i++)
- if (priv->gfargrp[i].regs)
- iounmap(priv->gfargrp[i].regs);
-}
-
static void disable_napi(struct gfar_private *priv)
{
int i;
@@ -483,7 +474,7 @@ static int gfar_parse_group(struct device_node *np,
return -ENOMEM;
}
- grp->regs = of_iomap(np, 0);
+ grp->regs = devm_of_iomap(priv->dev, np, 0, NULL);
if (!grp->regs)
return -ENOMEM;
@@ -700,13 +691,13 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
err = gfar_parse_group(child, priv, model);
if (err) {
of_node_put(child);
- goto err_grp_init;
+ return err;
}
}
} else { /* SQ_SG_MODE */
err = gfar_parse_group(np, priv, model);
if (err)
- goto err_grp_init;
+ return err;
}
if (of_property_read_bool(np, "bd-stash")) {
@@ -729,7 +720,7 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
err = of_get_ethdev_address(np, dev);
if (err == -EPROBE_DEFER)
- goto err_grp_init;
+ return err;
if (err) {
eth_hw_addr_random(dev);
dev_info(&ofdev->dev, "Using random MAC address: %pM\n", dev->dev_addr);
@@ -777,7 +768,7 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
if (!priv->phy_node && of_phy_is_fixed_link(np)) {
err = of_phy_register_fixed_link(np);
if (err)
- goto err_grp_init;
+ return err;
priv->phy_node = of_node_get(np);
}
@@ -786,10 +777,6 @@ static int gfar_of_init(struct platform_device *ofdev, struct net_device **pdev)
priv->tbi_node = of_parse_phandle(np, "tbi-handle", 0);
return 0;
-
-err_grp_init:
- unmap_group_regs(priv);
- return err;
}
static u32 cluster_entry_per_class(struct gfar_private *priv, u32 rqfar,
@@ -3327,7 +3314,6 @@ static int gfar_probe(struct platform_device *ofdev)
register_fail:
if (of_phy_is_fixed_link(np))
of_phy_deregister_fixed_link(np);
- unmap_group_regs(priv);
of_node_put(priv->phy_node);
of_node_put(priv->tbi_node);
return err;
@@ -3343,8 +3329,6 @@ static void gfar_remove(struct platform_device *ofdev)
if (of_phy_is_fixed_link(np))
of_phy_deregister_fixed_link(np);
-
- unmap_group_regs(priv);
}
#ifdef CONFIG_PM
--
2.47.0
^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCHv2 net-next 0/6] gianfar cleanups
2024-11-18 21:27 [PATCHv2 net-next 0/6] gianfar cleanups Rosen Penev
` (5 preceding siblings ...)
2024-11-18 21:27 ` [PATCHv2 net-next 6/6] net: gianfar: iomap " Rosen Penev
@ 2024-11-18 21:41 ` Joe Damato
2024-11-18 21:45 ` Rosen Penev
6 siblings, 1 reply; 9+ messages in thread
From: Joe Damato @ 2024-11-18 21:41 UTC (permalink / raw)
To: Rosen Penev
Cc: netdev, Claudiu Manoil, maxime.chevallier, Andrew Lunn,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
open list
On Mon, Nov 18, 2024 at 01:27:09PM -0800, Rosen Penev wrote:
> Mostly devm adjustments and bugfixes along the way.
>
> This was tested on a WatchGuard T10.
FYI net-next is closed
https://lore.kernel.org/netdev/20241118071654.695bb1a2@kernel.org/
So this series can be submit as an RFC or re-submit in a couple
weeks.
^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCHv2 net-next 0/6] gianfar cleanups
2024-11-18 21:41 ` [PATCHv2 net-next 0/6] gianfar cleanups Joe Damato
@ 2024-11-18 21:45 ` Rosen Penev
0 siblings, 0 replies; 9+ messages in thread
From: Rosen Penev @ 2024-11-18 21:45 UTC (permalink / raw)
To: Joe Damato, Rosen Penev, netdev, Claudiu Manoil,
maxime.chevallier, Andrew Lunn, David S. Miller, Eric Dumazet,
Jakub Kicinski, Paolo Abeni, open list
On Mon, Nov 18, 2024 at 1:41 PM Joe Damato <jdamato@fastly.com> wrote:
>
> On Mon, Nov 18, 2024 at 01:27:09PM -0800, Rosen Penev wrote:
> > Mostly devm adjustments and bugfixes along the way.
> >
> > This was tested on a WatchGuard T10.
>
> FYI net-next is closed
>
> https://lore.kernel.org/netdev/20241118071654.695bb1a2@kernel.org/
>
> So this series can be submit as an RFC or re-submit in a couple
> weeks.
Ah missed. it. Will resend eventually.
^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2024-11-18 21:45 UTC | newest]
Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-18 21:27 [PATCHv2 net-next 0/6] gianfar cleanups Rosen Penev
2024-11-18 21:27 ` [PATCHv2 net-next 1/6] net: gianfar: use devm_alloc_etherdev_mqs Rosen Penev
2024-11-18 21:27 ` [PATCHv2 net-next 2/6] net: gianfar: use devm for register_netdev Rosen Penev
2024-11-18 21:27 ` [PATCHv2 net-next 3/6] net: gianfar: assign ofdev to priv struct Rosen Penev
2024-11-18 21:27 ` [PATCHv2 net-next 4/6] net: gianfar: remove free_gfar_dev Rosen Penev
2024-11-18 21:27 ` [PATCHv2 net-next 5/6] net: gianfar: alloc queues with devm Rosen Penev
2024-11-18 21:27 ` [PATCHv2 net-next 6/6] net: gianfar: iomap " Rosen Penev
2024-11-18 21:41 ` [PATCHv2 net-next 0/6] gianfar cleanups Joe Damato
2024-11-18 21:45 ` Rosen Penev
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).