Skip to content

Commit 2b8db6a

Browse files
Michal Swiatkowskianguy11
authored andcommitted
ice: move RDMA init to ice_idc.c
Simplify probe flow by moving all RDMA related code to ice_init_rdma(). Unroll irq allocation if RDMA initialization fails. Implement ice_deinit_rdma() and use it in remove flow. Signed-off-by: Michal Swiatkowski <[email protected]> Acked-by: Dave Ertman <[email protected]> Signed-off-by: Tony Nguyen <[email protected]>
1 parent 8065c0e commit 2b8db6a

File tree

3 files changed

+57
-25
lines changed

3 files changed

+57
-25
lines changed

drivers/net/ethernet/intel/ice/ice.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -907,6 +907,7 @@ void ice_print_link_msg(struct ice_vsi *vsi, bool isup);
907907
int ice_plug_aux_dev(struct ice_pf *pf);
908908
void ice_unplug_aux_dev(struct ice_pf *pf);
909909
int ice_init_rdma(struct ice_pf *pf);
910+
void ice_deinit_rdma(struct ice_pf *pf);
910911
const char *ice_aq_str(enum ice_aq_err aq_err);
911912
bool ice_is_wol_supported(struct ice_hw *hw);
912913
void ice_fdir_del_all_fltrs(struct ice_vsi *vsi);

drivers/net/ethernet/intel/ice/ice_idc.c

Lines changed: 50 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66
#include "ice_lib.h"
77
#include "ice_dcb_lib.h"
88

9+
static DEFINE_IDA(ice_aux_ida);
10+
911
/**
1012
* ice_get_auxiliary_drv - retrieve iidc_auxiliary_drv struct
1113
* @pf: pointer to PF struct
@@ -245,6 +247,17 @@ static int ice_reserve_rdma_qvector(struct ice_pf *pf)
245247
return 0;
246248
}
247249

250+
/**
251+
* ice_free_rdma_qvector - free vector resources reserved for RDMA driver
252+
* @pf: board private structure to initialize
253+
*/
254+
static void ice_free_rdma_qvector(struct ice_pf *pf)
255+
{
256+
pf->num_avail_sw_msix -= pf->num_rdma_msix;
257+
ice_free_res(pf->irq_tracker, pf->rdma_base_vector,
258+
ICE_RES_RDMA_VEC_ID);
259+
}
260+
248261
/**
249262
* ice_adev_release - function to be mapped to AUX dev's release op
250263
* @dev: pointer to device to free
@@ -331,12 +344,47 @@ int ice_init_rdma(struct ice_pf *pf)
331344
struct device *dev = &pf->pdev->dev;
332345
int ret;
333346

347+
if (!ice_is_rdma_ena(pf)) {
348+
dev_warn(dev, "RDMA is not supported on this device\n");
349+
return 0;
350+
}
351+
352+
pf->aux_idx = ida_alloc(&ice_aux_ida, GFP_KERNEL);
353+
if (pf->aux_idx < 0) {
354+
dev_err(dev, "Failed to allocate device ID for AUX driver\n");
355+
return -ENOMEM;
356+
}
357+
334358
/* Reserve vector resources */
335359
ret = ice_reserve_rdma_qvector(pf);
336360
if (ret < 0) {
337361
dev_err(dev, "failed to reserve vectors for RDMA\n");
338-
return ret;
362+
goto err_reserve_rdma_qvector;
339363
}
340364
pf->rdma_mode |= IIDC_RDMA_PROTOCOL_ROCEV2;
341-
return ice_plug_aux_dev(pf);
365+
ret = ice_plug_aux_dev(pf);
366+
if (ret)
367+
goto err_plug_aux_dev;
368+
return 0;
369+
370+
err_plug_aux_dev:
371+
ice_free_rdma_qvector(pf);
372+
err_reserve_rdma_qvector:
373+
pf->adev = NULL;
374+
ida_free(&ice_aux_ida, pf->aux_idx);
375+
return ret;
376+
}
377+
378+
/**
379+
* ice_deinit_rdma - deinitialize RDMA on PF
380+
* @pf: ptr to ice_pf
381+
*/
382+
void ice_deinit_rdma(struct ice_pf *pf)
383+
{
384+
if (!ice_is_rdma_ena(pf))
385+
return;
386+
387+
ice_unplug_aux_dev(pf);
388+
ice_free_rdma_qvector(pf);
389+
ida_free(&ice_aux_ida, pf->aux_idx);
342390
}

drivers/net/ethernet/intel/ice/ice_main.c

Lines changed: 6 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ MODULE_PARM_DESC(debug, "netif level (0=none,...,16=all), hw debug_mask (0x8XXXX
4444
MODULE_PARM_DESC(debug, "netif level (0=none,...,16=all)");
4545
#endif /* !CONFIG_DYNAMIC_DEBUG */
4646

47-
static DEFINE_IDA(ice_aux_ida);
4847
DEFINE_STATIC_KEY_FALSE(ice_xdp_locking_key);
4948
EXPORT_SYMBOL(ice_xdp_locking_key);
5049

@@ -4932,30 +4931,16 @@ ice_probe(struct pci_dev *pdev, const struct pci_device_id __always_unused *ent)
49324931

49334932
/* ready to go, so clear down state bit */
49344933
clear_bit(ICE_DOWN, pf->state);
4935-
if (ice_is_rdma_ena(pf)) {
4936-
pf->aux_idx = ida_alloc(&ice_aux_ida, GFP_KERNEL);
4937-
if (pf->aux_idx < 0) {
4938-
dev_err(dev, "Failed to allocate device ID for AUX driver\n");
4939-
err = -ENOMEM;
4940-
goto err_devlink_reg_param;
4941-
}
4942-
4943-
err = ice_init_rdma(pf);
4944-
if (err) {
4945-
dev_err(dev, "Failed to initialize RDMA: %d\n", err);
4946-
err = -EIO;
4947-
goto err_init_aux_unroll;
4948-
}
4949-
} else {
4950-
dev_warn(dev, "RDMA is not supported on this device\n");
4934+
err = ice_init_rdma(pf);
4935+
if (err) {
4936+
dev_err(dev, "Failed to initialize RDMA: %d\n", err);
4937+
err = -EIO;
4938+
goto err_devlink_reg_param;
49514939
}
49524940

49534941
ice_devlink_register(pf);
49544942
return 0;
49554943

4956-
err_init_aux_unroll:
4957-
pf->adev = NULL;
4958-
ida_free(&ice_aux_ida, pf->aux_idx);
49594944
err_devlink_reg_param:
49604945
ice_devlink_unregister_params(pf);
49614946
err_netdev_reg:
@@ -5075,9 +5060,7 @@ static void ice_remove(struct pci_dev *pdev)
50755060
ice_service_task_stop(pf);
50765061

50775062
ice_aq_cancel_waiting_tasks(pf);
5078-
ice_unplug_aux_dev(pf);
5079-
if (pf->aux_idx >= 0)
5080-
ida_free(&ice_aux_ida, pf->aux_idx);
5063+
ice_deinit_rdma(pf);
50815064
ice_devlink_unregister_params(pf);
50825065
set_bit(ICE_DOWN, pf->state);
50835066

0 commit comments

Comments
 (0)