net/qede: fix port reconfiguration

This patch fixes deallocation of all fastpath resources unconditionally,
when re-configuring the device. When re-allocating resources PMD depends
on application to explicitly setup the Rx/Tx queue.

Deallocation of all the resources is only required if the Rx/Tx queue
configuration changes. For other scenarios like KNI MTU change we'd keep
existing configuration.

Fixes: 8de0c42019 ("net/qede: fix odd number of queues usage in 100G mode")
Fixes: dd28bc8c6e ("net/qede: fix VF port creation sequence")
Cc: stable@dpdk.org

Signed-off-by: Rasesh Mody <rmody@marvell.com>
Signed-off-by: Igor Russkikh <irusskikh@marvell.com>
This commit is contained in:
Rasesh Mody 2020-05-14 23:34:19 -07:00 committed by Ferruh Yigit
parent a60704d1ac
commit 05ccc9d8a9
2 changed files with 16 additions and 7 deletions

View File

@ -1273,6 +1273,8 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
struct qede_dev *qdev = QEDE_INIT_QDEV(eth_dev);
struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
struct rte_eth_rxmode *rxmode = &eth_dev->data->dev_conf.rxmode;
uint8_t num_rxqs;
uint8_t num_txqs;
int ret;
PMD_INIT_FUNC_TRACE(edev);
@ -1305,12 +1307,17 @@ static int qede_dev_configure(struct rte_eth_dev *eth_dev)
if (qede_check_fdir_support(eth_dev))
return -ENOTSUP;
qede_dealloc_fp_resc(eth_dev);
qdev->num_tx_queues = eth_dev->data->nb_tx_queues * edev->num_hwfns;
qdev->num_rx_queues = eth_dev->data->nb_rx_queues * edev->num_hwfns;
if (qede_alloc_fp_resc(qdev))
return -ENOMEM;
/* Allocate/reallocate fastpath resources only for new queue config */
num_txqs = eth_dev->data->nb_tx_queues * edev->num_hwfns;
num_rxqs = eth_dev->data->nb_rx_queues * edev->num_hwfns;
if (qdev->num_tx_queues != num_txqs ||
qdev->num_rx_queues != num_rxqs) {
qede_dealloc_fp_resc(eth_dev);
qdev->num_tx_queues = num_txqs;
qdev->num_rx_queues = num_rxqs;
if (qede_alloc_fp_resc(qdev))
return -ENOMEM;
}
/* If jumbo enabled adjust MTU */
if (rxmode->offloads & DEV_RX_OFFLOAD_JUMBO_FRAME)

View File

@ -593,12 +593,14 @@ qede_alloc_mem_sb(struct qede_dev *qdev, struct ecore_sb_info *sb_info,
int qede_alloc_fp_resc(struct qede_dev *qdev)
{
struct ecore_dev *edev = &qdev->edev;
struct ecore_dev *edev = QEDE_INIT_EDEV(qdev);
struct qede_fastpath *fp;
uint32_t num_sbs;
uint16_t sb_idx;
int i;
PMD_INIT_FUNC_TRACE(edev);
if (IS_VF(edev))
ecore_vf_get_num_sbs(ECORE_LEADING_HWFN(edev), &num_sbs);
else