Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

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>

authored by

Kevin Hao and committed by
Jakub Kicinski
b6e2db0e a35b6e48

+5 -19
-1
drivers/net/ethernet/ti/icssg/icssg_common.c
··· 1720 1720 netif_napi_del(&emac->napi_rx); 1721 1721 1722 1722 pruss_release_mem_region(prueth->pruss, &emac->dram); 1723 - destroy_workqueue(emac->cmd_wq); 1724 1723 free_netdev(emac->ndev); 1725 1724 prueth->emac[mac] = NULL; 1726 1725 }
+4 -9
drivers/net/ethernet/ti/icssg/icssg_prueth.c
··· 1099 1099 { 1100 1100 struct prueth_emac *emac = netdev_priv(ndev); 1101 1101 1102 - queue_work(emac->cmd_wq, &emac->rx_mode_work); 1102 + schedule_work(&emac->rx_mode_work); 1103 1103 } 1104 1104 1105 1105 static netdev_features_t emac_ndo_fix_features(struct net_device *ndev, ··· 1451 1451 emac->port_id = port; 1452 1452 emac->xdp_prog = NULL; 1453 1453 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 - } 1459 1454 INIT_WORK(&emac->rx_mode_work, emac_ndo_set_rx_mode_work); 1460 1455 1461 1456 INIT_DELAYED_WORK(&emac->stats_work, icssg_stats_work_handler); ··· 1462 1467 if (ret) { 1463 1468 dev_err(prueth->dev, "unable to get DRAM: %d\n", ret); 1464 1469 ret = -ENOMEM; 1465 - goto free_wq; 1470 + goto free_ndev; 1466 1471 } 1467 1472 1468 1473 emac->tx_ch_num = 1; ··· 1561 1566 1562 1567 free: 1563 1568 pruss_release_mem_region(prueth->pruss, &emac->dram); 1564 - free_wq: 1565 - destroy_workqueue(emac->cmd_wq); 1566 1569 free_ndev: 1567 1570 emac->ndev = NULL; 1568 1571 prueth->emac[mac] = NULL; ··· 2229 2236 prueth->emac[i]->ndev->phydev = NULL; 2230 2237 } 2231 2238 unregister_netdev(prueth->registered_netdevs[i]); 2239 + disable_work_sync(&prueth->emac[i]->rx_mode_work); 2232 2240 } 2233 2241 2234 2242 netdev_exit: ··· 2289 2295 phy_disconnect(prueth->emac[i]->ndev->phydev); 2290 2296 prueth->emac[i]->ndev->phydev = NULL; 2291 2297 unregister_netdev(prueth->registered_netdevs[i]); 2298 + disable_work_sync(&prueth->emac[i]->rx_mode_work); 2292 2299 } 2293 2300 2294 2301 for (i = 0; i < PRUETH_NUM_MACS; i++) {
-1
drivers/net/ethernet/ti/icssg/icssg_prueth.h
··· 236 236 /* Mutex to serialize access to firmware command interface */ 237 237 struct mutex cmd_lock; 238 238 struct work_struct rx_mode_work; 239 - struct workqueue_struct *cmd_wq; 240 239 241 240 struct pruss_mem_region dram; 242 241
+1 -8
drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
··· 783 783 emac->prueth = prueth; 784 784 emac->ndev = ndev; 785 785 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 - } 791 786 792 787 INIT_DELAYED_WORK(&emac->stats_work, icssg_stats_work_handler); 793 788 ··· 793 798 if (ret) { 794 799 dev_err(prueth->dev, "unable to get DRAM: %d\n", ret); 795 800 ret = -ENOMEM; 796 - goto free_wq; 801 + goto free_ndev; 797 802 } 798 803 799 804 /* SR1.0 uses a dedicated high priority channel ··· 878 883 879 884 free: 880 885 pruss_release_mem_region(prueth->pruss, &emac->dram); 881 - free_wq: 882 - destroy_workqueue(emac->cmd_wq); 883 886 free_ndev: 884 887 emac->ndev = NULL; 885 888 prueth->emac[mac] = NULL;