net/i40e: fix port segmentation fault when restart
This patch will go into the process of clear all queue region related configuration when dev stop even if there is no queue region command before, so this is a bug, it may cause error. So add code to check if there is queue configuration exist when flush queue region config and remove this process when device stop. Queue region clear only do when device initialization or PMD get flush command. Fixes: 7cbecc2f7424 ("net/i40e: support queue region set and flush") Cc: stable@dpdk.org Signed-off-by: Wei Zhao <wei.zhao1@intel.com> Acked-by: Qi Zhang <qi.z.zhang@intel.com>
This commit is contained in:
parent
8d1e8e70ff
commit
37b68eacfc
@ -2144,9 +2144,6 @@ i40e_dev_stop(struct rte_eth_dev *dev)
|
||||
/* reset hierarchy commit */
|
||||
pf->tm_conf.committed = false;
|
||||
|
||||
/* Remove all the queue region configuration */
|
||||
i40e_flush_queue_region_all_conf(dev, hw, pf, 0);
|
||||
|
||||
hw->adapter_stopped = 1;
|
||||
}
|
||||
|
||||
|
@ -2816,22 +2816,23 @@ i40e_flush_queue_region_all_conf(struct rte_eth_dev *dev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
info->queue_region_number = 1;
|
||||
info->region[0].queue_num = main_vsi->nb_used_qps;
|
||||
info->region[0].queue_start_index = 0;
|
||||
if (info->queue_region_number) {
|
||||
info->queue_region_number = 1;
|
||||
info->region[0].queue_num = main_vsi->nb_used_qps;
|
||||
info->region[0].queue_start_index = 0;
|
||||
|
||||
ret = i40e_vsi_update_queue_region_mapping(hw, pf);
|
||||
if (ret != I40E_SUCCESS)
|
||||
PMD_DRV_LOG(INFO, "Failed to flush queue region mapping.");
|
||||
ret = i40e_vsi_update_queue_region_mapping(hw, pf);
|
||||
if (ret != I40E_SUCCESS)
|
||||
PMD_DRV_LOG(INFO, "Failed to flush queue region mapping.");
|
||||
|
||||
ret = i40e_dcb_init_configure(dev, TRUE);
|
||||
if (ret != I40E_SUCCESS) {
|
||||
PMD_DRV_LOG(INFO, "Failed to flush dcb.");
|
||||
pf->flags &= ~I40E_FLAG_DCB;
|
||||
ret = i40e_dcb_init_configure(dev, TRUE);
|
||||
if (ret != I40E_SUCCESS) {
|
||||
PMD_DRV_LOG(INFO, "Failed to flush dcb.");
|
||||
pf->flags &= ~I40E_FLAG_DCB;
|
||||
}
|
||||
|
||||
i40e_init_queue_region_conf(dev);
|
||||
}
|
||||
|
||||
i40e_init_queue_region_conf(dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user