net/bnxt: fix dynamic VNIC count
Ensure that the current count of in-use VNICs is decremented when a VNIC is freed. Don't attempt VNIC allocation when the maximum supported number of VNICs is currently allocated. Fixes:49d0709b25
("net/bnxt: delete and flush L2 filters cleanly") Fixes:d24610f7bf
("net/bnxt: allow flow creation when RSS is enabled") Cc: stable@dpdk.org Signed-off-by: Lance Richardson <lance.richardson@broadcom.com> Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com> Reported-by: Stephen Hemminger <sthemmin@microsoft.com>
This commit is contained in:
parent
f8120fd07b
commit
a0c2315a2a
@ -720,7 +720,7 @@ struct bnxt {
|
||||
uint32_t max_ring_grps;
|
||||
struct bnxt_ring_grp_info *grp_info;
|
||||
|
||||
unsigned int nr_vnics;
|
||||
uint16_t nr_vnics;
|
||||
|
||||
#define BNXT_GET_DEFAULT_VNIC(bp) (&(bp)->vnic_info[0])
|
||||
struct bnxt_vnic_info *vnic_info;
|
||||
|
@ -925,6 +925,9 @@ static int bnxt_vnic_prep(struct bnxt *bp, struct bnxt_vnic_info *vnic)
|
||||
uint64_t rx_offloads = dev_conf->rxmode.offloads;
|
||||
int rc;
|
||||
|
||||
if (bp->nr_vnics > bp->max_vnics - 1)
|
||||
return -ENOMEM;
|
||||
|
||||
rc = bnxt_vnic_grp_alloc(bp, vnic);
|
||||
if (rc)
|
||||
goto ret;
|
||||
@ -1550,6 +1553,7 @@ bnxt_flow_validate(struct rte_eth_dev *dev,
|
||||
bnxt_hwrm_vnic_ctx_free(bp, vnic);
|
||||
bnxt_hwrm_vnic_free(bp, vnic);
|
||||
vnic->rx_queue_cnt = 0;
|
||||
bp->nr_vnics--;
|
||||
PMD_DRV_LOG(DEBUG, "Free VNIC\n");
|
||||
}
|
||||
}
|
||||
@ -2011,6 +2015,7 @@ _bnxt_flow_destroy(struct bnxt *bp,
|
||||
|
||||
bnxt_hwrm_vnic_free(bp, vnic);
|
||||
vnic->rx_queue_cnt = 0;
|
||||
bp->nr_vnics--;
|
||||
}
|
||||
} else {
|
||||
rte_flow_error_set(error, -ret,
|
||||
|
Loading…
Reference in New Issue
Block a user