mirror of
https://github.com/torvalds/linux.git
synced 2026-05-24 23:22:31 +02:00
ice: ice_init_pf: destroy mutexes and xarrays on memory alloc failure
Unroll actions of ice_init_pf() when it fails. ice_deinit_pf() happens to be perfect to call here. Signed-off-by: Przemek Kitszel <przemyslaw.kitszel@intel.com> Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com> Tested-by: Rinitha S <sx.rinitha@intel.com> (A Contingent worker at Intel) Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
parent
2fe18288fc
commit
71430451f8
|
|
@ -3951,6 +3951,8 @@ u16 ice_get_avail_rxq_count(struct ice_pf *pf)
|
|||
*/
|
||||
static void ice_deinit_pf(struct ice_pf *pf)
|
||||
{
|
||||
/* note that we unroll also on ice_init_pf() failure here */
|
||||
|
||||
mutex_destroy(&pf->lag_mutex);
|
||||
mutex_destroy(&pf->adev_mutex);
|
||||
mutex_destroy(&pf->sw_mutex);
|
||||
|
|
@ -4055,25 +4057,6 @@ static int ice_init_pf(struct ice_pf *pf)
|
|||
init_waitqueue_head(&pf->reset_wait_queue);
|
||||
|
||||
mutex_init(&pf->avail_q_mutex);
|
||||
pf->avail_txqs = bitmap_zalloc(pf->max_pf_txqs, GFP_KERNEL);
|
||||
if (!pf->avail_txqs)
|
||||
return -ENOMEM;
|
||||
|
||||
pf->avail_rxqs = bitmap_zalloc(pf->max_pf_rxqs, GFP_KERNEL);
|
||||
if (!pf->avail_rxqs) {
|
||||
bitmap_free(pf->avail_txqs);
|
||||
pf->avail_txqs = NULL;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
pf->txtime_txqs = bitmap_zalloc(pf->max_pf_txqs, GFP_KERNEL);
|
||||
if (!pf->txtime_txqs) {
|
||||
bitmap_free(pf->avail_txqs);
|
||||
pf->avail_txqs = NULL;
|
||||
bitmap_free(pf->avail_rxqs);
|
||||
pf->avail_rxqs = NULL;
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
mutex_init(&pf->vfs.table_lock);
|
||||
hash_init(pf->vfs.table);
|
||||
|
|
@ -4086,7 +4069,17 @@ static int ice_init_pf(struct ice_pf *pf)
|
|||
xa_init(&pf->dyn_ports);
|
||||
xa_init(&pf->sf_nums);
|
||||
|
||||
pf->avail_txqs = bitmap_zalloc(pf->max_pf_txqs, GFP_KERNEL);
|
||||
pf->avail_rxqs = bitmap_zalloc(pf->max_pf_rxqs, GFP_KERNEL);
|
||||
pf->txtime_txqs = bitmap_zalloc(pf->max_pf_txqs, GFP_KERNEL);
|
||||
if (!pf->avail_txqs || !pf->avail_rxqs || !pf->txtime_txqs)
|
||||
goto undo_init;
|
||||
|
||||
return 0;
|
||||
undo_init:
|
||||
/* deinit handles half-initialized pf just fine */
|
||||
ice_deinit_pf(pf);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user