mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 01:32:21 +02:00
pds_core: check for workqueue allocation failure
pdsc_init_pf() does not check whether create_singlethread_workqueue()
succeeded.
Fail probe on failure. The workqueue is set up before the timer and
mutexes, so its failure path must unwind only the earlier setup.
Fixes: c2dbb09043 ("pds_core: health timer and workqueue")
Reported-by: sashiko-bot <sashiko-bot@kernel.org>
Closes: https://sashiko.dev/#/patchset/20260629200358.2626129-1-nikhil.rao%40amd.com?part=2
Signed-off-by: Nikhil P. Rao <nikhil.rao@amd.com>
Reviewed-by: Brett Creeley <brett.creeley@amd.com>
Reviewed-by: Pavan Chebbi <pavan.chebbi@broadcom.com>
Link: https://patch.msgid.link/20260714212713.1788438-1-nikhil.rao@amd.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
bfa33cd513
commit
3a660ca49e
|
|
@ -238,6 +238,10 @@ static int pdsc_init_pf(struct pdsc *pdsc)
|
|||
/* General workqueue and timer, but don't start timer yet */
|
||||
snprintf(wq_name, sizeof(wq_name), "%s.%d", PDS_CORE_DRV_NAME, pdsc->uid);
|
||||
pdsc->wq = create_singlethread_workqueue(wq_name);
|
||||
if (!pdsc->wq) {
|
||||
err = -ENOMEM;
|
||||
goto err_out_unmap_bars;
|
||||
}
|
||||
INIT_WORK(&pdsc->health_work, pdsc_health_thread);
|
||||
INIT_WORK(&pdsc->pci_reset_work, pdsc_pci_reset_thread);
|
||||
timer_setup(&pdsc->wdtimer, pdsc_wdtimer_cb, 0);
|
||||
|
|
@ -253,7 +257,7 @@ static int pdsc_init_pf(struct pdsc *pdsc)
|
|||
err = pdsc_setup(pdsc, PDSC_SETUP_INIT);
|
||||
if (err) {
|
||||
mutex_unlock(&pdsc->config_lock);
|
||||
goto err_out_unmap_bars;
|
||||
goto err_out_shutdown_timer;
|
||||
}
|
||||
|
||||
err = pdsc_start(pdsc);
|
||||
|
|
@ -305,13 +309,14 @@ static int pdsc_init_pf(struct pdsc *pdsc)
|
|||
pdsc_stop(pdsc);
|
||||
err_out_teardown:
|
||||
pdsc_teardown(pdsc, PDSC_TEARDOWN_REMOVING);
|
||||
err_out_unmap_bars:
|
||||
err_out_shutdown_timer:
|
||||
timer_shutdown_sync(&pdsc->wdtimer);
|
||||
if (pdsc->wq)
|
||||
destroy_workqueue(pdsc->wq);
|
||||
mutex_destroy(&pdsc->config_lock);
|
||||
mutex_destroy(&pdsc->devcmd_lock);
|
||||
pci_free_irq_vectors(pdsc->pdev);
|
||||
err_out_unmap_bars:
|
||||
pdsc_unmap_bars(pdsc);
|
||||
err_out_release_regions:
|
||||
pci_release_regions(pdsc->pdev);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user