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;
}
}
}
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;
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);