diff options
author | Alex Maftei (amaftei) <amaftei@solarflare.com> | 2020-01-08 17:10:59 +0100 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2020-01-08 22:28:02 +0100 |
commit | 82c64484024af04489bb1870bd1c6b61c603ca78 (patch) | |
tree | 5475147b15b8094c93634e6debb63a6577b9085c /drivers/net/ethernet/sfc/efx.c | |
parent | sfc: further preparation for code split (diff) | |
download | linux-82c64484024af04489bb1870bd1c6b61c603ca78.tar.xz linux-82c64484024af04489bb1870bd1c6b61c603ca78.zip |
sfc: move reset workqueue code
Small functions doing work that will be common, related to reset
workqueue management.
Signed-off-by: Alexandru-Mihai Maftei <amaftei@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/sfc/efx.c')
-rw-r--r-- | drivers/net/ethernet/sfc/efx.c | 22 |
1 files changed, 7 insertions, 15 deletions
diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c index ce8c0db2ba4b..c881e35b0477 100644 --- a/drivers/net/ethernet/sfc/efx.c +++ b/drivers/net/ethernet/sfc/efx.c @@ -108,12 +108,6 @@ void efx_get_udp_tunnel_type_name(u16 type, char *buf, size_t buflen) snprintf(buf, buflen, "type %d", type); } -/* Reset workqueue. If any NIC has a hardware failure then a reset will be - * queued onto this work queue. This is not a per-nic work queue, because - * efx_reset_work() acquires the rtnl lock, so resets are naturally serialised. - */ -static struct workqueue_struct *reset_workqueue; - /* How often and how many times to poll for a reset while waiting for a * BIST that another function started to complete. */ @@ -3106,7 +3100,7 @@ void efx_schedule_reset(struct efx_nic *efx, enum reset_type type) * reset is scheduled. So switch back to poll'd MCDI completions. */ efx_mcdi_mode_poll(efx); - queue_work(reset_workqueue, &efx->reset_work); + efx_queue_reset_work(efx); } /************************************************************************** @@ -3492,7 +3486,7 @@ static void efx_pci_remove_main(struct efx_nic *efx) * are not READY. */ BUG_ON(efx->state == STATE_READY); - cancel_work_sync(&efx->reset_work); + efx_flush_reset_workqueue(efx); efx_disable_interrupts(efx); efx_clear_interrupt_affinity(efx); @@ -3878,7 +3872,7 @@ static int efx_pm_thaw(struct device *dev) rtnl_unlock(); /* Reschedule any quenched resets scheduled during efx_pm_freeze() */ - queue_work(reset_workqueue, &efx->reset_work); + efx_queue_reset_work(efx); return 0; @@ -4077,11 +4071,9 @@ static int __init efx_init_module(void) goto err_sriov; #endif - reset_workqueue = create_singlethread_workqueue("sfc_reset"); - if (!reset_workqueue) { - rc = -ENOMEM; + rc = efx_create_reset_workqueue(); + if (rc) goto err_reset; - } rc = pci_register_driver(&efx_pci_driver); if (rc < 0) @@ -4090,7 +4082,7 @@ static int __init efx_init_module(void) return 0; err_pci: - destroy_workqueue(reset_workqueue); + efx_destroy_reset_workqueue(); err_reset: #ifdef CONFIG_SFC_SRIOV efx_fini_sriov(); @@ -4106,7 +4098,7 @@ static void __exit efx_exit_module(void) printk(KERN_INFO "Solarflare NET driver unloading\n"); pci_unregister_driver(&efx_pci_driver); - destroy_workqueue(reset_workqueue); + efx_destroy_reset_workqueue(); #ifdef CONFIG_SFC_SRIOV efx_fini_sriov(); #endif |