Skip to content

Commit b6e2db0

Browse files
haokexinkuba-moo
authored andcommitted
net: ti: icssg: Remove dedicated workqueue for ndo_set_rx_mode callback
Currently, both the icssg-prueth and icssg-prueth-sr1 drivers create a dedicated 'emac->cmd_wq' workqueue. In the icssg-prueth-sr1 driver, this workqueue is not utilized at all. In the icssg-prueth driver, the workqueue is only used to execute the actual processing of ndo_set_rx_mode. However, creating a dedicated workqueue for such a simple use case is unnecessary. To simplify the code, switch to using the system default workqueue instead. Signed-off-by: Kevin Hao <haokexin@gmail.com> Tested-by: Meghana Malladi <m-malladi@ti.com> Reviewed-by: MD Danish Anwar <danishanwar@ti.com> Link: https://patch.msgid.link/20260205-icssg-prueth-workqueue-v2-1-cf5cf97efb37@gmail.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
1 parent a35b6e4 commit b6e2db0

4 files changed

Lines changed: 5 additions & 19 deletions

File tree

drivers/net/ethernet/ti/icssg/icssg_common.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1720,7 +1720,6 @@ void prueth_netdev_exit(struct prueth *prueth,
17201720
netif_napi_del(&emac->napi_rx);
17211721

17221722
pruss_release_mem_region(prueth->pruss, &emac->dram);
1723-
destroy_workqueue(emac->cmd_wq);
17241723
free_netdev(emac->ndev);
17251724
prueth->emac[mac] = NULL;
17261725
}

drivers/net/ethernet/ti/icssg/icssg_prueth.c

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1099,7 +1099,7 @@ static void emac_ndo_set_rx_mode(struct net_device *ndev)
10991099
{
11001100
struct prueth_emac *emac = netdev_priv(ndev);
11011101

1102-
queue_work(emac->cmd_wq, &emac->rx_mode_work);
1102+
schedule_work(&emac->rx_mode_work);
11031103
}
11041104

11051105
static netdev_features_t emac_ndo_fix_features(struct net_device *ndev,
@@ -1451,11 +1451,6 @@ static int prueth_netdev_init(struct prueth *prueth,
14511451
emac->port_id = port;
14521452
emac->xdp_prog = NULL;
14531453
emac->ndev->pcpu_stat_type = NETDEV_PCPU_STAT_TSTATS;
1454-
emac->cmd_wq = create_singlethread_workqueue("icssg_cmd_wq");
1455-
if (!emac->cmd_wq) {
1456-
ret = -ENOMEM;
1457-
goto free_ndev;
1458-
}
14591454
INIT_WORK(&emac->rx_mode_work, emac_ndo_set_rx_mode_work);
14601455

14611456
INIT_DELAYED_WORK(&emac->stats_work, icssg_stats_work_handler);
@@ -1467,7 +1462,7 @@ static int prueth_netdev_init(struct prueth *prueth,
14671462
if (ret) {
14681463
dev_err(prueth->dev, "unable to get DRAM: %d\n", ret);
14691464
ret = -ENOMEM;
1470-
goto free_wq;
1465+
goto free_ndev;
14711466
}
14721467

14731468
emac->tx_ch_num = 1;
@@ -1566,8 +1561,6 @@ static int prueth_netdev_init(struct prueth *prueth,
15661561

15671562
free:
15681563
pruss_release_mem_region(prueth->pruss, &emac->dram);
1569-
free_wq:
1570-
destroy_workqueue(emac->cmd_wq);
15711564
free_ndev:
15721565
emac->ndev = NULL;
15731566
prueth->emac[mac] = NULL;
@@ -2236,6 +2229,7 @@ static int prueth_probe(struct platform_device *pdev)
22362229
prueth->emac[i]->ndev->phydev = NULL;
22372230
}
22382231
unregister_netdev(prueth->registered_netdevs[i]);
2232+
disable_work_sync(&prueth->emac[i]->rx_mode_work);
22392233
}
22402234

22412235
netdev_exit:
@@ -2295,6 +2289,7 @@ static void prueth_remove(struct platform_device *pdev)
22952289
phy_disconnect(prueth->emac[i]->ndev->phydev);
22962290
prueth->emac[i]->ndev->phydev = NULL;
22972291
unregister_netdev(prueth->registered_netdevs[i]);
2292+
disable_work_sync(&prueth->emac[i]->rx_mode_work);
22982293
}
22992294

23002295
for (i = 0; i < PRUETH_NUM_MACS; i++) {

drivers/net/ethernet/ti/icssg/icssg_prueth.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,6 @@ struct prueth_emac {
236236
/* Mutex to serialize access to firmware command interface */
237237
struct mutex cmd_lock;
238238
struct work_struct rx_mode_work;
239-
struct workqueue_struct *cmd_wq;
240239

241240
struct pruss_mem_region dram;
242241

drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -783,11 +783,6 @@ static int prueth_netdev_init(struct prueth *prueth,
783783
emac->prueth = prueth;
784784
emac->ndev = ndev;
785785
emac->port_id = port;
786-
emac->cmd_wq = create_singlethread_workqueue("icssg_cmd_wq");
787-
if (!emac->cmd_wq) {
788-
ret = -ENOMEM;
789-
goto free_ndev;
790-
}
791786

792787
INIT_DELAYED_WORK(&emac->stats_work, icssg_stats_work_handler);
793788

@@ -798,7 +793,7 @@ static int prueth_netdev_init(struct prueth *prueth,
798793
if (ret) {
799794
dev_err(prueth->dev, "unable to get DRAM: %d\n", ret);
800795
ret = -ENOMEM;
801-
goto free_wq;
796+
goto free_ndev;
802797
}
803798

804799
/* SR1.0 uses a dedicated high priority channel
@@ -883,8 +878,6 @@ static int prueth_netdev_init(struct prueth *prueth,
883878

884879
free:
885880
pruss_release_mem_region(prueth->pruss, &emac->dram);
886-
free_wq:
887-
destroy_workqueue(emac->cmd_wq);
888881
free_ndev:
889882
emac->ndev = NULL;
890883
prueth->emac[mac] = NULL;

0 commit comments

Comments
 (0)