Skip to content

Commit

Permalink
net/bnxt: fix memzone allocation per VNIC
Browse files Browse the repository at this point in the history
In case of Thor RSS table size is too big. This could result in
memory allocation failure when the supported vnic count is high.
Instead of allocating the memzone for all VNICs in one shot,
allocate for each VNIC individually.

Also, fixed to free the memzone in the uninit path.

Fixes: 9738793 ("net/bnxt: add VNIC functions and structs")
Cc: stable@dpdk.org

Signed-off-by: Kalesh AP <kalesh-anakkur.purayil@broadcom.com>
Reviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>
Reviewed-by: Ajit Khaparde <ajit.khaparde@broadcom.com>
  • Loading branch information
Kalesh AP authored and ajitkhaparde committed Jan 25, 2022
1 parent 75915b2 commit 5b8b248
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 39 deletions.
68 changes: 29 additions & 39 deletions drivers/net/bnxt/bnxt_vnic.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,18 +98,11 @@ void bnxt_free_vnic_attributes(struct bnxt *bp)

for (i = 0; i < bp->max_vnics; i++) {
vnic = &bp->vnic_info[i];
if (vnic->rss_table) {
/* 'Unreserve' the rss_table */
/* N/A */

vnic->rss_table = NULL;
}

if (vnic->rss_hash_key) {
/* 'Unreserve' the rss_hash_key */
/* N/A */

if (vnic->rss_mz != NULL) {
rte_memzone_free(vnic->rss_mz);
vnic->rss_mz = NULL;
vnic->rss_hash_key = NULL;
vnic->rss_table = NULL;
}
}
}
Expand All @@ -122,7 +115,6 @@ int bnxt_alloc_vnic_attributes(struct bnxt *bp, bool reconfig)
char mz_name[RTE_MEMZONE_NAMESIZE];
uint32_t entry_length;
size_t rss_table_size;
uint16_t max_vnics;
int i;
rte_iova_t mz_phys_addr;

Expand All @@ -136,38 +128,36 @@ int bnxt_alloc_vnic_attributes(struct bnxt *bp, bool reconfig)

entry_length = RTE_CACHE_LINE_ROUNDUP(entry_length + rss_table_size);

max_vnics = bp->max_vnics;
snprintf(mz_name, RTE_MEMZONE_NAMESIZE,
"bnxt_" PCI_PRI_FMT "_vnicattr", pdev->addr.domain,
pdev->addr.bus, pdev->addr.devid, pdev->addr.function);
mz_name[RTE_MEMZONE_NAMESIZE - 1] = 0;
mz = rte_memzone_lookup(mz_name);
if (!mz) {
mz = rte_memzone_reserve(mz_name,
entry_length * max_vnics,
bp->eth_dev->device->numa_node,
RTE_MEMZONE_2MB |
RTE_MEMZONE_SIZE_HINT_ONLY |
RTE_MEMZONE_IOVA_CONTIG);
if (!mz)
return -ENOMEM;
}
mz_phys_addr = mz->iova;

for (i = 0; i < max_vnics; i++) {
for (i = 0; i < bp->max_vnics; i++) {
vnic = &bp->vnic_info[i];

snprintf(mz_name, RTE_MEMZONE_NAMESIZE,
"bnxt_" PCI_PRI_FMT "_vnicattr_%d", pdev->addr.domain,
pdev->addr.bus, pdev->addr.devid, pdev->addr.function, i);
mz_name[RTE_MEMZONE_NAMESIZE - 1] = 0;
mz = rte_memzone_lookup(mz_name);
if (mz == NULL) {
mz = rte_memzone_reserve(mz_name,
entry_length,
bp->eth_dev->device->numa_node,
RTE_MEMZONE_2MB |
RTE_MEMZONE_SIZE_HINT_ONLY |
RTE_MEMZONE_IOVA_CONTIG);
if (mz == NULL) {
PMD_DRV_LOG(ERR, "Cannot allocate bnxt vnic_attributes memory\n");
return -ENOMEM;
}
}
vnic->rss_mz = mz;
mz_phys_addr = mz->iova;

/* Allocate rss table and hash key */
vnic->rss_table =
(void *)((char *)mz->addr + (entry_length * i));
vnic->rss_table = (void *)((char *)mz->addr);
vnic->rss_table_dma_addr = mz_phys_addr;
memset(vnic->rss_table, -1, entry_length);

vnic->rss_table_dma_addr = mz_phys_addr + (entry_length * i);
vnic->rss_hash_key = (void *)((char *)vnic->rss_table +
rss_table_size);

vnic->rss_hash_key_dma_addr = vnic->rss_table_dma_addr +
rss_table_size;
vnic->rss_hash_key = (void *)((char *)vnic->rss_table + rss_table_size);
vnic->rss_hash_key_dma_addr = vnic->rss_table_dma_addr + rss_table_size;
if (!reconfig) {
bnxt_prandom_bytes(vnic->rss_hash_key, HW_HASH_KEY_SIZE);
memcpy(bp->rss_conf.rss_key, vnic->rss_hash_key, HW_HASH_KEY_SIZE);
Expand Down
1 change: 1 addition & 0 deletions drivers/net/bnxt/bnxt_vnic.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ struct bnxt_vnic_info {
uint16_t mru;
uint16_t hash_type;
uint8_t hash_mode;
const struct rte_memzone *rss_mz;
rte_iova_t rss_table_dma_addr;
uint16_t *rss_table;
rte_iova_t rss_hash_key_dma_addr;
Expand Down

0 comments on commit 5b8b248

Please sign in to comment.