get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/44153/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 44153,
    "url": "http://patches.dpdk.org/api/patches/44153/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20180901043254.51000-2-ajit.khaparde@broadcom.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20180901043254.51000-2-ajit.khaparde@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20180901043254.51000-2-ajit.khaparde@broadcom.com",
    "date": "2018-09-01T04:32:48",
    "name": "[1/7] net/bnxt: get rid of ff pools array and use the vnic info array",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "30c839f5baa4994dec591439cf5f887fa47af34a",
    "submitter": {
        "id": 501,
        "url": "http://patches.dpdk.org/api/people/501/?format=api",
        "name": "Ajit Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "delegate": {
        "id": 319,
        "url": "http://patches.dpdk.org/api/users/319/?format=api",
        "username": "fyigit",
        "first_name": "Ferruh",
        "last_name": "Yigit",
        "email": "ferruh.yigit@amd.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20180901043254.51000-2-ajit.khaparde@broadcom.com/mbox/",
    "series": [
        {
            "id": 1150,
            "url": "http://patches.dpdk.org/api/series/1150/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=1150",
            "date": "2018-09-01T04:32:47",
            "name": "bnxt patchset",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/1150/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/44153/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/44153/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 036275B34;\n\tSat,  1 Sep 2018 06:33:09 +0200 (CEST)",
            "from rnd-relay.smtp.broadcom.com (rnd-relay.smtp.broadcom.com\n\t[192.19.229.170]) by dpdk.org (Postfix) with ESMTP id C257F5323;\n\tSat,  1 Sep 2018 06:33:03 +0200 (CEST)",
            "from nis-sj1-27.broadcom.com (nis-sj1-27.lvn.broadcom.net\n\t[10.75.144.136])\n\tby rnd-relay.smtp.broadcom.com (Postfix) with ESMTP id 26B1930C037;\n\tFri, 31 Aug 2018 21:32:59 -0700 (PDT)",
            "from C02VPB22HTD6.vpn.broadcom.net (unknown [10.10.117.252])\n\tby nis-sj1-27.broadcom.com (Postfix) with ESMTP id 142E7AC0766;\n\tFri, 31 Aug 2018 21:32:58 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.10.3 rnd-relay.smtp.broadcom.com 26B1930C037",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com;\n\ts=dkimrelay; t=1535776379;\n\tbh=3tuxnhe/I/36YqD+jo8T7yhy0CvRRcjd8pEBvMAdQnQ=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=b1sT0eNYIzRMHTPo3iVjIOf+GPyiVYfDPymPnPBgQYesvxjxSPFcRBznyyJCua0tn\n\tYXj1EtITAORamFVBo8iSMsl7yltRYMJuf3r64kFoktQtqUHS0v23b3sv7IAva11ra0\n\tAACfHWIAyhsAM451uRz+oVJVliKg8K0TkiWWfBc4=",
        "From": "Ajit Khaparde <ajit.khaparde@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "ferruh.yigit@intel.com, Somnath Kotur <somnath.kotur@broadcom.com>,\n\tstable@dpdk.org",
        "Date": "Fri, 31 Aug 2018 21:32:48 -0700",
        "Message-Id": "<20180901043254.51000-2-ajit.khaparde@broadcom.com>",
        "X-Mailer": "git-send-email 2.15.2 (Apple Git-101.1)",
        "In-Reply-To": "<20180901043254.51000-1-ajit.khaparde@broadcom.com>",
        "References": "<20180901043254.51000-1-ajit.khaparde@broadcom.com>",
        "Subject": "[dpdk-dev] [PATCH 1/7] net/bnxt: get rid of ff pools array and use\n\tthe vnic info array",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "From: Somnath Kotur <somnath.kotur@broadcom.com>\n\nThere was no direct association between the rxq's vnic and the vnic_info[].\nExplicitly associate the two in bnxt_mq_rx_configure().\n\nFixes: f7c3d72afff7 (\"net/bnxt: fix Rx ring count limitation\")\nCc: stable@dpdk.org\n\nSigned-off-by: Somnath Kotur <somnath.kotur@broadcom.com>\nSigned-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\n---\n drivers/net/bnxt/bnxt.h        |   4 -\n drivers/net/bnxt/bnxt_ethdev.c | 275 ++++++++++++++++++++---------------------\n drivers/net/bnxt/bnxt_filter.c |  28 ++---\n drivers/net/bnxt/bnxt_flow.c   |  12 +-\n drivers/net/bnxt/bnxt_rxq.c    |  20 +--\n drivers/net/bnxt/bnxt_vnic.c   |  42 ++-----\n 6 files changed, 173 insertions(+), 208 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h\nindex db5c4eb0d..8aae0426a 100644\n--- a/drivers/net/bnxt/bnxt.h\n+++ b/drivers/net/bnxt/bnxt.h\n@@ -285,10 +285,6 @@ struct bnxt {\n \tstruct bnxt_filter_info\t*filter_info;\n \tSTAILQ_HEAD(, bnxt_filter_info)\tfree_filter_list;\n \n-\t/* VNIC pointer for flow filter (VMDq) pools */\n-#define MAX_FF_POOLS\t256\n-\tSTAILQ_HEAD(, bnxt_vnic_info)\tff_pool[MAX_FF_POOLS];\n-\n \tstruct bnxt_irq         *irq_tbl;\n \n #define MAX_NUM_MAC_ADDR\t32\ndiff --git a/drivers/net/bnxt/bnxt_ethdev.c b/drivers/net/bnxt/bnxt_ethdev.c\nindex cc7e4391c..70132c705 100644\n--- a/drivers/net/bnxt/bnxt_ethdev.c\n+++ b/drivers/net/bnxt/bnxt_ethdev.c\n@@ -263,6 +263,10 @@ static int bnxt_init_chip(struct bnxt *bp)\n \t\t}\n \t\tmemset(vnic->fw_grp_ids, -1, size);\n \n+\t\tPMD_DRV_LOG(DEBUG,\n+\t\t\t    \"vnic[%d] = %p vnic->fw_grp_ids = %p\\n\",\n+\t\t\t    i, vnic, vnic->fw_grp_ids);\n+\n \t\trc = bnxt_hwrm_vnic_alloc(bp, vnic);\n \t\tif (rc) {\n \t\t\tPMD_DRV_LOG(ERR, \"HWRM vnic %d alloc failure rc: %x\\n\",\n@@ -299,6 +303,10 @@ static int bnxt_init_chip(struct bnxt *bp)\n \t\tfor (j = 0; j < bp->rx_nr_rings; j++) {\n \t\t\trxq = bp->eth_dev->data->rx_queues[j];\n \n+\t\t\tPMD_DRV_LOG(DEBUG,\n+\t\t\t\t    \"rxq[%d]->vnic=%p vnic->fw_grp_ids=%p\\n\",\n+\t\t\t\t    j, rxq->vnic, rxq->vnic->fw_grp_ids);\n+\n \t\t\tif (rxq->rx_deferred_start)\n \t\t\t\trxq->vnic->fw_grp_ids[j] = INVALID_HW_RING_ID;\n \t\t}\n@@ -694,7 +702,6 @@ static void bnxt_dev_close_op(struct rte_eth_dev *eth_dev)\n \tif (bp->dev_stopped == 0)\n \t\tbnxt_dev_stop_op(eth_dev);\n \n-\tbnxt_free_mem(bp);\n \tif (eth_dev->data->mac_addrs != NULL) {\n \t\trte_free(eth_dev->data->mac_addrs);\n \t\teth_dev->data->mac_addrs = NULL;\n@@ -714,34 +721,30 @@ static void bnxt_mac_addr_remove_op(struct rte_eth_dev *eth_dev,\n \tuint64_t pool_mask = eth_dev->data->mac_pool_sel[index];\n \tstruct bnxt_vnic_info *vnic;\n \tstruct bnxt_filter_info *filter, *temp_filter;\n-\tuint32_t pool = RTE_MIN(MAX_FF_POOLS, ETH_64_POOLS);\n \tuint32_t i;\n \n \t/*\n \t * Loop through all VNICs from the specified filter flow pools to\n \t * remove the corresponding MAC addr filter\n \t */\n-\tfor (i = 0; i < pool; i++) {\n+\tfor (i = 0; i < bp->nr_vnics; i++) {\n \t\tif (!(pool_mask & (1ULL << i)))\n \t\t\tcontinue;\n \n-\t\tSTAILQ_FOREACH(vnic, &bp->ff_pool[i], next) {\n-\t\t\tfilter = STAILQ_FIRST(&vnic->filter);\n-\t\t\twhile (filter) {\n-\t\t\t\ttemp_filter = STAILQ_NEXT(filter, next);\n-\t\t\t\tif (filter->mac_index == index) {\n-\t\t\t\t\tSTAILQ_REMOVE(&vnic->filter, filter,\n-\t\t\t\t\t\t      bnxt_filter_info, next);\n-\t\t\t\t\tbnxt_hwrm_clear_l2_filter(bp, filter);\n-\t\t\t\t\tfilter->mac_index = INVALID_MAC_INDEX;\n-\t\t\t\t\tmemset(&filter->l2_addr, 0,\n-\t\t\t\t\t       ETHER_ADDR_LEN);\n-\t\t\t\t\tSTAILQ_INSERT_TAIL(\n-\t\t\t\t\t\t\t&bp->free_filter_list,\n-\t\t\t\t\t\t\tfilter, next);\n-\t\t\t\t}\n-\t\t\t\tfilter = temp_filter;\n+\t\tvnic = &bp->vnic_info[i];\n+\t\tfilter = STAILQ_FIRST(&vnic->filter);\n+\t\twhile (filter) {\n+\t\t\ttemp_filter = STAILQ_NEXT(filter, next);\n+\t\t\tif (filter->mac_index == index) {\n+\t\t\t\tSTAILQ_REMOVE(&vnic->filter, filter,\n+\t\t\t\t\t\tbnxt_filter_info, next);\n+\t\t\t\tbnxt_hwrm_clear_l2_filter(bp, filter);\n+\t\t\t\tfilter->mac_index = INVALID_MAC_INDEX;\n+\t\t\t\tmemset(&filter->l2_addr, 0, ETHER_ADDR_LEN);\n+\t\t\t\tSTAILQ_INSERT_TAIL(&bp->free_filter_list,\n+\t\t\t\t\t\t   filter, next);\n \t\t\t}\n+\t\t\tfilter = temp_filter;\n \t\t}\n \t}\n }\n@@ -751,7 +754,7 @@ static int bnxt_mac_addr_add_op(struct rte_eth_dev *eth_dev,\n \t\t\t\tuint32_t index, uint32_t pool)\n {\n \tstruct bnxt *bp = (struct bnxt *)eth_dev->data->dev_private;\n-\tstruct bnxt_vnic_info *vnic = STAILQ_FIRST(&bp->ff_pool[pool]);\n+\tstruct bnxt_vnic_info *vnic = &bp->vnic_info[pool];\n \tstruct bnxt_filter_info *filter;\n \n \tif (BNXT_VF(bp)) {\n@@ -898,12 +901,10 @@ static int bnxt_reta_update_op(struct rte_eth_dev *eth_dev,\n \t\treturn -EINVAL;\n \t}\n \t/* Update the RSS VNIC(s) */\n-\tfor (i = 0; i < MAX_FF_POOLS; i++) {\n-\t\tSTAILQ_FOREACH(vnic, &bp->ff_pool[i], next) {\n-\t\t\tmemcpy(vnic->rss_table, reta_conf, reta_size);\n-\n-\t\t\tbnxt_hwrm_vnic_rss_cfg(bp, vnic);\n-\t\t}\n+\tfor (i = 0; i < bp->max_vnics; i++) {\n+\t\tvnic = &bp->vnic_info[i];\n+\t\tmemcpy(vnic->rss_table, reta_conf, reta_size);\n+\t\tbnxt_hwrm_vnic_rss_cfg(bp, vnic);\n \t}\n \treturn 0;\n }\n@@ -947,7 +948,7 @@ static int bnxt_rss_hash_update_op(struct rte_eth_dev *eth_dev,\n \tstruct rte_eth_conf *dev_conf = &bp->eth_dev->data->dev_conf;\n \tstruct bnxt_vnic_info *vnic;\n \tuint16_t hash_type = 0;\n-\tint i;\n+\tunsigned int i;\n \n \t/*\n \t * If RSS enablement were different than dev_configure,\n@@ -978,21 +979,20 @@ static int bnxt_rss_hash_update_op(struct rte_eth_dev *eth_dev,\n \t\thash_type |= HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_UDP_IPV6;\n \n \t/* Update the RSS VNIC(s) */\n-\tfor (i = 0; i < MAX_FF_POOLS; i++) {\n-\t\tSTAILQ_FOREACH(vnic, &bp->ff_pool[i], next) {\n-\t\t\tvnic->hash_type = hash_type;\n-\n-\t\t\t/*\n-\t\t\t * Use the supplied key if the key length is\n-\t\t\t * acceptable and the rss_key is not NULL\n-\t\t\t */\n-\t\t\tif (rss_conf->rss_key &&\n-\t\t\t    rss_conf->rss_key_len <= HW_HASH_KEY_SIZE)\n-\t\t\t\tmemcpy(vnic->rss_hash_key, rss_conf->rss_key,\n-\t\t\t\t       rss_conf->rss_key_len);\n-\n-\t\t\tbnxt_hwrm_vnic_rss_cfg(bp, vnic);\n-\t\t}\n+\tfor (i = 0; i < bp->nr_vnics; i++) {\n+\t\tvnic = &bp->vnic_info[i];\n+\t\tvnic->hash_type = hash_type;\n+\n+\t\t/*\n+\t\t * Use the supplied key if the key length is\n+\t\t * acceptable and the rss_key is not NULL\n+\t\t */\n+\t\tif (rss_conf->rss_key &&\n+\t\t    rss_conf->rss_key_len <= HW_HASH_KEY_SIZE)\n+\t\t\tmemcpy(vnic->rss_hash_key, rss_conf->rss_key,\n+\t\t\t       rss_conf->rss_key_len);\n+\n+\t\tbnxt_hwrm_vnic_rss_cfg(bp, vnic);\n \t}\n \treturn 0;\n }\n@@ -1269,53 +1269,51 @@ static int bnxt_del_vlan_filter(struct bnxt *bp, uint16_t vlan_id)\n \t\t * else\n \t\t *      VLAN filter doesn't exist, just skip and continue\n \t\t */\n-\t\tSTAILQ_FOREACH(vnic, &bp->ff_pool[i], next) {\n-\t\t\tfilter = STAILQ_FIRST(&vnic->filter);\n-\t\t\twhile (filter) {\n-\t\t\t\ttemp_filter = STAILQ_NEXT(filter, next);\n-\n-\t\t\t\tif (filter->enables & chk &&\n-\t\t\t\t    filter->l2_ovlan == vlan_id) {\n-\t\t\t\t\t/* Must delete the filter */\n-\t\t\t\t\tSTAILQ_REMOVE(&vnic->filter, filter,\n-\t\t\t\t\t\t      bnxt_filter_info, next);\n-\t\t\t\t\tbnxt_hwrm_clear_l2_filter(bp, filter);\n-\t\t\t\t\tSTAILQ_INSERT_TAIL(\n-\t\t\t\t\t\t\t&bp->free_filter_list,\n-\t\t\t\t\t\t\tfilter, next);\n-\n-\t\t\t\t\t/*\n-\t\t\t\t\t * Need to examine to see if the MAC\n-\t\t\t\t\t * filter already existed or not before\n-\t\t\t\t\t * allocating a new one\n-\t\t\t\t\t */\n-\n-\t\t\t\t\tnew_filter = bnxt_alloc_filter(bp);\n-\t\t\t\t\tif (!new_filter) {\n-\t\t\t\t\t\tPMD_DRV_LOG(ERR,\n+\t\tvnic = &bp->vnic_info[i];\n+\t\tfilter = STAILQ_FIRST(&vnic->filter);\n+\t\twhile (filter) {\n+\t\t\ttemp_filter = STAILQ_NEXT(filter, next);\n+\n+\t\t\tif (filter->enables & chk &&\n+\t\t\t    filter->l2_ovlan == vlan_id) {\n+\t\t\t\t/* Must delete the filter */\n+\t\t\t\tSTAILQ_REMOVE(&vnic->filter, filter,\n+\t\t\t\t\t      bnxt_filter_info, next);\n+\t\t\t\tbnxt_hwrm_clear_l2_filter(bp, filter);\n+\t\t\t\tSTAILQ_INSERT_TAIL(&bp->free_filter_list,\n+\t\t\t\t\t\t   filter, next);\n+\n+\t\t\t\t/*\n+\t\t\t\t * Need to examine to see if the MAC\n+\t\t\t\t * filter already existed or not before\n+\t\t\t\t * allocating a new one\n+\t\t\t\t */\n+\n+\t\t\t\tnew_filter = bnxt_alloc_filter(bp);\n+\t\t\t\tif (!new_filter) {\n+\t\t\t\t\tPMD_DRV_LOG(ERR,\n \t\t\t\t\t\t\t\"MAC/VLAN filter alloc failed\\n\");\n-\t\t\t\t\t\trc = -ENOMEM;\n-\t\t\t\t\t\tgoto exit;\n-\t\t\t\t\t}\n-\t\t\t\t\tSTAILQ_INSERT_TAIL(&vnic->filter,\n-\t\t\t\t\t\t\t   new_filter, next);\n-\t\t\t\t\t/* Inherit MAC from previous filter */\n-\t\t\t\t\tnew_filter->mac_index =\n-\t\t\t\t\t\t\tfilter->mac_index;\n-\t\t\t\t\tmemcpy(new_filter->l2_addr,\n-\t\t\t\t\t       filter->l2_addr, ETHER_ADDR_LEN);\n-\t\t\t\t\t/* MAC only filter */\n-\t\t\t\t\trc = bnxt_hwrm_set_l2_filter(bp,\n-\t\t\t\t\t\t\tvnic->fw_vnic_id,\n-\t\t\t\t\t\t\tnew_filter);\n-\t\t\t\t\tif (rc)\n-\t\t\t\t\t\tgoto exit;\n-\t\t\t\t\tPMD_DRV_LOG(INFO,\n-\t\t\t\t\t\t\"Del Vlan filter for %d\\n\",\n-\t\t\t\t\t\tvlan_id);\n+\t\t\t\t\trc = -ENOMEM;\n+\t\t\t\t\tgoto exit;\n \t\t\t\t}\n-\t\t\t\tfilter = temp_filter;\n+\t\t\t\tSTAILQ_INSERT_TAIL(&vnic->filter,\n+\t\t\t\t\t\tnew_filter, next);\n+\t\t\t\t/* Inherit MAC from previous filter */\n+\t\t\t\tnew_filter->mac_index =\n+\t\t\t\t\tfilter->mac_index;\n+\t\t\t\tmemcpy(new_filter->l2_addr, filter->l2_addr,\n+\t\t\t\t       ETHER_ADDR_LEN);\n+\t\t\t\t/* MAC only filter */\n+\t\t\t\trc = bnxt_hwrm_set_l2_filter(bp,\n+\t\t\t\t\t\t\t     vnic->fw_vnic_id,\n+\t\t\t\t\t\t\t     new_filter);\n+\t\t\t\tif (rc)\n+\t\t\t\t\tgoto exit;\n+\t\t\t\tPMD_DRV_LOG(INFO,\n+\t\t\t\t\t    \"Del Vlan filter for %d\\n\",\n+\t\t\t\t\t    vlan_id);\n \t\t\t}\n+\t\t\tfilter = temp_filter;\n \t\t}\n \t}\n exit:\n@@ -1345,51 +1343,48 @@ static int bnxt_add_vlan_filter(struct bnxt *bp, uint16_t vlan_id)\n \t\t *   Remove the old MAC only filter\n \t\t *    Add a new MAC+VLAN filter\n \t\t */\n-\t\tSTAILQ_FOREACH(vnic, &bp->ff_pool[i], next) {\n-\t\t\tfilter = STAILQ_FIRST(&vnic->filter);\n-\t\t\twhile (filter) {\n-\t\t\t\ttemp_filter = STAILQ_NEXT(filter, next);\n-\n-\t\t\t\tif (filter->enables & chk) {\n-\t\t\t\t\tif (filter->l2_ovlan == vlan_id)\n-\t\t\t\t\t\tgoto cont;\n-\t\t\t\t} else {\n-\t\t\t\t\t/* Must delete the MAC filter */\n-\t\t\t\t\tSTAILQ_REMOVE(&vnic->filter, filter,\n-\t\t\t\t\t\t      bnxt_filter_info, next);\n-\t\t\t\t\tbnxt_hwrm_clear_l2_filter(bp, filter);\n-\t\t\t\t\tfilter->l2_ovlan = 0;\n-\t\t\t\t\tSTAILQ_INSERT_TAIL(\n-\t\t\t\t\t\t\t&bp->free_filter_list,\n-\t\t\t\t\t\t\tfilter, next);\n-\t\t\t\t}\n-\t\t\t\tnew_filter = bnxt_alloc_filter(bp);\n-\t\t\t\tif (!new_filter) {\n-\t\t\t\t\tPMD_DRV_LOG(ERR,\n+\t\tvnic = &bp->vnic_info[i];\n+\t\tfilter = STAILQ_FIRST(&vnic->filter);\n+\t\twhile (filter) {\n+\t\t\ttemp_filter = STAILQ_NEXT(filter, next);\n+\n+\t\t\tif (filter->enables & chk) {\n+\t\t\t\tif (filter->l2_ivlan == vlan_id)\n+\t\t\t\t\tgoto cont;\n+\t\t\t} else {\n+\t\t\t\t/* Must delete the MAC filter */\n+\t\t\t\tSTAILQ_REMOVE(&vnic->filter, filter,\n+\t\t\t\t\t\tbnxt_filter_info, next);\n+\t\t\t\tbnxt_hwrm_clear_l2_filter(bp, filter);\n+\t\t\t\tfilter->l2_ovlan = 0;\n+\t\t\t\tSTAILQ_INSERT_TAIL(&bp->free_filter_list,\n+\t\t\t\t\t\t   filter, next);\n+\t\t\t}\n+\t\t\tnew_filter = bnxt_alloc_filter(bp);\n+\t\t\tif (!new_filter) {\n+\t\t\t\tPMD_DRV_LOG(ERR,\n \t\t\t\t\t\t\"MAC/VLAN filter alloc failed\\n\");\n-\t\t\t\t\trc = -ENOMEM;\n-\t\t\t\t\tgoto exit;\n-\t\t\t\t}\n-\t\t\t\tSTAILQ_INSERT_TAIL(&vnic->filter, new_filter,\n-\t\t\t\t\t\t   next);\n-\t\t\t\t/* Inherit MAC from the previous filter */\n-\t\t\t\tnew_filter->mac_index = filter->mac_index;\n-\t\t\t\tmemcpy(new_filter->l2_addr, filter->l2_addr,\n-\t\t\t\t       ETHER_ADDR_LEN);\n-\t\t\t\t/* MAC + VLAN ID filter */\n-\t\t\t\tnew_filter->l2_ivlan = vlan_id;\n-\t\t\t\tnew_filter->l2_ivlan_mask = 0xF000;\n-\t\t\t\tnew_filter->enables |= en;\n-\t\t\t\trc = bnxt_hwrm_set_l2_filter(bp,\n-\t\t\t\t\t\t\t     vnic->fw_vnic_id,\n-\t\t\t\t\t\t\t     new_filter);\n-\t\t\t\tif (rc)\n-\t\t\t\t\tgoto exit;\n-\t\t\t\tPMD_DRV_LOG(INFO,\n-\t\t\t\t\t\"Added Vlan filter for %d\\n\", vlan_id);\n-cont:\n-\t\t\t\tfilter = temp_filter;\n+\t\t\t\trc = -ENOMEM;\n+\t\t\t\tgoto exit;\n \t\t\t}\n+\t\t\tSTAILQ_INSERT_TAIL(&vnic->filter, new_filter, next);\n+\t\t\t/* Inherit MAC from the previous filter */\n+\t\t\tnew_filter->mac_index = filter->mac_index;\n+\t\t\tmemcpy(new_filter->l2_addr, filter->l2_addr,\n+\t\t\t       ETHER_ADDR_LEN);\n+\t\t\t/* MAC + VLAN ID filter */\n+\t\t\tnew_filter->l2_ivlan = vlan_id;\n+\t\t\tnew_filter->l2_ivlan_mask = 0xF000;\n+\t\t\tnew_filter->enables |= en;\n+\t\t\trc = bnxt_hwrm_set_l2_filter(bp,\n+\t\t\t\t\tvnic->fw_vnic_id,\n+\t\t\t\t\tnew_filter);\n+\t\t\tif (rc)\n+\t\t\t\tgoto exit;\n+\t\t\tPMD_DRV_LOG(INFO,\n+\t\t\t\t    \"Added Vlan filter for %d\\n\", vlan_id);\n+cont:\n+\t\t\tfilter = temp_filter;\n \t\t}\n \t}\n exit:\n@@ -1397,7 +1392,7 @@ static int bnxt_add_vlan_filter(struct bnxt *bp, uint16_t vlan_id)\n }\n \n static int bnxt_vlan_filter_set_op(struct rte_eth_dev *eth_dev,\n-\t\t\t\t   uint16_t vlan_id, int on)\n+\t\tuint16_t vlan_id, int on)\n {\n \tstruct bnxt *bp = (struct bnxt *)eth_dev->data->dev_private;\n \n@@ -1805,8 +1800,8 @@ bnxt_match_and_validate_ether_filter(struct bnxt *bp,\n \t\tgoto exit;\n \t}\n \n-\tvnic0 = STAILQ_FIRST(&bp->ff_pool[0]);\n-\tvnic = STAILQ_FIRST(&bp->ff_pool[efilter->queue]);\n+\tvnic0 = &bp->vnic_info[0];\n+\tvnic = &bp->vnic_info[efilter->queue];\n \tif (vnic == NULL) {\n \t\tPMD_DRV_LOG(ERR, \"Invalid queue %d\\n\", efilter->queue);\n \t\t*ret = -EINVAL;\n@@ -1864,8 +1859,8 @@ bnxt_ethertype_filter(struct rte_eth_dev *dev,\n \t\treturn -EINVAL;\n \t}\n \n-\tvnic0 = STAILQ_FIRST(&bp->ff_pool[0]);\n-\tvnic = STAILQ_FIRST(&bp->ff_pool[efilter->queue]);\n+\tvnic0 = &bp->vnic_info[0];\n+\tvnic = &bp->vnic_info[efilter->queue];\n \n \tswitch (filter_op) {\n \tcase RTE_ETH_FILTER_ADD:\n@@ -2081,8 +2076,8 @@ bnxt_cfg_ntuple_filter(struct bnxt *bp,\n \tif (ret < 0)\n \t\tgoto free_filter;\n \n-\tvnic = STAILQ_FIRST(&bp->ff_pool[nfilter->queue]);\n-\tvnic0 = STAILQ_FIRST(&bp->ff_pool[0]);\n+\tvnic = &bp->vnic_info[nfilter->queue];\n+\tvnic0 = &bp->vnic_info[0];\n \tfilter1 = STAILQ_FIRST(&vnic0->filter);\n \tif (filter1 == NULL) {\n \t\tret = -1;\n@@ -2375,8 +2370,8 @@ bnxt_parse_fdir_filter(struct bnxt *bp,\n \t\treturn -EINVAL;\n \t}\n \n-\tvnic0 = STAILQ_FIRST(&bp->ff_pool[0]);\n-\tvnic = STAILQ_FIRST(&bp->ff_pool[fdir->action.rx_queue]);\n+\tvnic0 = &bp->vnic_info[0];\n+\tvnic = &bp->vnic_info[fdir->action.rx_queue];\n \tif (vnic == NULL) {\n \t\tPMD_DRV_LOG(ERR, \"Invalid queue %d\\n\", fdir->action.rx_queue);\n \t\treturn -EINVAL;\n@@ -2497,9 +2492,9 @@ bnxt_fdir_filter(struct rte_eth_dev *dev,\n \t\tfilter->filter_type = HWRM_CFA_NTUPLE_FILTER;\n \n \t\tif (fdir->action.behavior == RTE_ETH_FDIR_REJECT)\n-\t\t\tvnic = STAILQ_FIRST(&bp->ff_pool[0]);\n+\t\t\tvnic = &bp->vnic_info[0];\n \t\telse\n-\t\t\tvnic = STAILQ_FIRST(&bp->ff_pool[fdir->action.rx_queue]);\n+\t\t\tvnic = &bp->vnic_info[fdir->action.rx_queue];\n \n \t\tmatch = bnxt_match_fdir(bp, filter, &mvnic);\n \t\tif (match != NULL && filter_op == RTE_ETH_FILTER_ADD) {\ndiff --git a/drivers/net/bnxt/bnxt_filter.c b/drivers/net/bnxt/bnxt_filter.c\nindex 1038941e8..f43fe0db0 100644\n--- a/drivers/net/bnxt/bnxt_filter.c\n+++ b/drivers/net/bnxt/bnxt_filter.c\n@@ -80,21 +80,21 @@ void bnxt_free_all_filters(struct bnxt *bp)\n {\n \tstruct bnxt_vnic_info *vnic;\n \tstruct bnxt_filter_info *filter, *temp_filter;\n-\tint i;\n-\n-\tfor (i = 0; i < MAX_FF_POOLS; i++) {\n-\t\tSTAILQ_FOREACH(vnic, &bp->ff_pool[i], next) {\n-\t\t\tfilter = STAILQ_FIRST(&vnic->filter);\n-\t\t\twhile (filter) {\n-\t\t\t\ttemp_filter = STAILQ_NEXT(filter, next);\n-\t\t\t\tSTAILQ_REMOVE(&vnic->filter, filter,\n-\t\t\t\t\t      bnxt_filter_info, next);\n-\t\t\t\tSTAILQ_INSERT_TAIL(&bp->free_filter_list,\n-\t\t\t\t\t\t   filter, next);\n-\t\t\t\tfilter = temp_filter;\n-\t\t\t}\n-\t\t\tSTAILQ_INIT(&vnic->filter);\n+\tunsigned int i;\n+\n+//\tfor (i = 0; i < MAX_FF_POOLS; i++) {\n+\tfor (i = 0; i < bp->nr_vnics; i++) {\n+\t\tvnic = &bp->vnic_info[i];\n+\t\tfilter = STAILQ_FIRST(&vnic->filter);\n+\t\twhile (filter) {\n+\t\t\ttemp_filter = STAILQ_NEXT(filter, next);\n+\t\t\tSTAILQ_REMOVE(&vnic->filter, filter,\n+\t\t\t\t\tbnxt_filter_info, next);\n+\t\t\tSTAILQ_INSERT_TAIL(&bp->free_filter_list,\n+\t\t\t\t\tfilter, next);\n+\t\t\tfilter = temp_filter;\n \t\t}\n+\t\tSTAILQ_INIT(&vnic->filter);\n \t}\n \n \tfor (i = 0; i < bp->pf.max_vfs; i++) {\ndiff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c\nindex ac7656741..1afe67407 100644\n--- a/drivers/net/bnxt/bnxt_flow.c\n+++ b/drivers/net/bnxt/bnxt_flow.c\n@@ -678,7 +678,7 @@ bnxt_get_l2_filter(struct bnxt *bp, struct bnxt_filter_info *nf,\n \tstruct bnxt_vnic_info *vnic0;\n \tint rc;\n \n-\tvnic0 = STAILQ_FIRST(&bp->ff_pool[0]);\n+\tvnic0 = &bp->vnic_info[0];\n \tf0 = STAILQ_FIRST(&vnic0->filter);\n \n \t/* This flow has same DST MAC as the port/l2 filter. */\n@@ -763,8 +763,8 @@ bnxt_validate_and_parse_flow(struct rte_eth_dev *dev,\n \t\t}\n \t\tPMD_DRV_LOG(DEBUG, \"Queue index %d\\n\", act_q->index);\n \n-\t\tvnic0 = STAILQ_FIRST(&bp->ff_pool[0]);\n-\t\tvnic = STAILQ_FIRST(&bp->ff_pool[act_q->index]);\n+\t\tvnic0 = &bp->vnic_info[0];\n+\t\tvnic =  &bp->vnic_info[act_q->index];\n \t\tif (vnic == NULL) {\n \t\t\trte_flow_error_set(error,\n \t\t\t\t\t   EINVAL,\n@@ -786,7 +786,7 @@ bnxt_validate_and_parse_flow(struct rte_eth_dev *dev,\n \t\tPMD_DRV_LOG(DEBUG, \"VNIC found\\n\");\n \t\tbreak;\n \tcase RTE_FLOW_ACTION_TYPE_DROP:\n-\t\tvnic0 = STAILQ_FIRST(&bp->ff_pool[0]);\n+\t\tvnic0 = &bp->vnic_info[0];\n \t\tfilter1 = bnxt_get_l2_filter(bp, filter, vnic0);\n \t\tif (filter1 == NULL) {\n \t\t\trc = -ENOSPC;\n@@ -802,7 +802,7 @@ bnxt_validate_and_parse_flow(struct rte_eth_dev *dev,\n \t\t\t\tHWRM_CFA_NTUPLE_FILTER_ALLOC_INPUT_FLAGS_DROP;\n \t\tbreak;\n \tcase RTE_FLOW_ACTION_TYPE_COUNT:\n-\t\tvnic0 = STAILQ_FIRST(&bp->ff_pool[0]);\n+\t\tvnic0 = &bp->vnic_info[0];\n \t\tfilter1 = bnxt_get_l2_filter(bp, filter, vnic0);\n \t\tif (filter1 == NULL) {\n \t\t\trc = -ENOSPC;\n@@ -854,7 +854,7 @@ bnxt_validate_and_parse_flow(struct rte_eth_dev *dev,\n \t\tfilter->mirror_vnic_id = dflt_vnic;\n \t\tfilter->enables |= NTUPLE_FLTR_ALLOC_INPUT_EN_MIRROR_VNIC_ID;\n \n-\t\tvnic0 = STAILQ_FIRST(&bp->ff_pool[0]);\n+\t\tvnic0 = &bp->vnic_info[0];\n \t\tfilter1 = bnxt_get_l2_filter(bp, filter, vnic0);\n \t\tif (filter1 == NULL) {\n \t\t\trc = -ENOSPC;\ndiff --git a/drivers/net/bnxt/bnxt_rxq.c b/drivers/net/bnxt/bnxt_rxq.c\nindex 832fc9ecc..d06e5532b 100644\n--- a/drivers/net/bnxt/bnxt_rxq.c\n+++ b/drivers/net/bnxt/bnxt_rxq.c\n@@ -43,21 +43,19 @@ int bnxt_mq_rx_configure(struct bnxt *bp)\n \n \t/* Single queue mode */\n \tif (bp->rx_cp_nr_rings < 2) {\n-\t\tvnic = bnxt_alloc_vnic(bp);\n+\t\tvnic = &bp->vnic_info[0];\n \t\tif (!vnic) {\n \t\t\tPMD_DRV_LOG(ERR, \"VNIC alloc failed\\n\");\n \t\t\trc = -ENOMEM;\n \t\t\tgoto err_out;\n \t\t}\n \t\tvnic->flags |= BNXT_VNIC_INFO_BCAST;\n-\t\tSTAILQ_INSERT_TAIL(&bp->ff_pool[0], vnic, next);\n \t\tbp->nr_vnics++;\n \n \t\trxq = bp->eth_dev->data->rx_queues[0];\n \t\trxq->vnic = vnic;\n \n \t\tvnic->func_default = true;\n-\t\tvnic->ff_pool_idx = 0;\n \t\tvnic->start_grp_id = 0;\n \t\tvnic->end_grp_id = vnic->start_grp_id;\n \t\tfilter = bnxt_alloc_filter(bp);\n@@ -85,6 +83,9 @@ int bnxt_mq_rx_configure(struct bnxt *bp)\n \t\t\t\t\t    RTE_MIN(bp->max_l2_ctx,\n \t\t\t\t\t    RTE_MIN(bp->max_rsscos_ctx,\n \t\t\t\t\t\t    ETH_64_POOLS)));\n+\t\t\tPMD_DRV_LOG(ERR,\n+\t\t\t\t    \"pools = %u max_pools = %u\\n\",\n+\t\t\t\t    pools, max_pools);\n \t\t\tif (pools > max_pools)\n \t\t\t\tpools = max_pools;\n \t\t\tbreak;\n@@ -98,25 +99,28 @@ int bnxt_mq_rx_configure(struct bnxt *bp)\n \t\t\tgoto err_out;\n \t\t}\n \t}\n-\n \tnb_q_per_grp = bp->rx_cp_nr_rings / pools;\n+\tPMD_DRV_LOG(DEBUG,\n+\t\t    \"pools = %u nb_q_per_grp = %u\\n\", pools, nb_q_per_grp);\n \tstart_grp_id = 0;\n \tend_grp_id = nb_q_per_grp;\n \n \tfor (i = 0; i < pools; i++) {\n-\t\tvnic = bnxt_alloc_vnic(bp);\n+\t\tvnic = &bp->vnic_info[i];\n \t\tif (!vnic) {\n \t\t\tPMD_DRV_LOG(ERR, \"VNIC alloc failed\\n\");\n \t\t\trc = -ENOMEM;\n \t\t\tgoto err_out;\n \t\t}\n \t\tvnic->flags |= BNXT_VNIC_INFO_BCAST;\n-\t\tSTAILQ_INSERT_TAIL(&bp->ff_pool[i], vnic, next);\n \t\tbp->nr_vnics++;\n \n \t\tfor (j = 0; j < nb_q_per_grp; j++, ring_idx++) {\n \t\t\trxq = bp->eth_dev->data->rx_queues[ring_idx];\n \t\t\trxq->vnic = vnic;\n+\t\t\tPMD_DRV_LOG(DEBUG,\n+\t\t\t\t    \"rxq[%d] = %p vnic[%d] = %p\\n\",\n+\t\t\t\t    ring_idx, rxq, i, vnic);\n \t\t}\n \t\tif (i == 0) {\n \t\t\tif (dev_conf->rxmode.mq_mode & ETH_MQ_RX_VMDQ_DCB) {\n@@ -125,7 +129,6 @@ int bnxt_mq_rx_configure(struct bnxt *bp)\n \t\t\t}\n \t\t\tvnic->func_default = true;\n \t\t}\n-\t\tvnic->ff_pool_idx = i;\n \t\tvnic->start_grp_id = start_grp_id;\n \t\tvnic->end_grp_id = end_grp_id;\n \n@@ -176,7 +179,7 @@ int bnxt_mq_rx_configure(struct bnxt *bp)\n \t\t\thash_type |= HWRM_VNIC_RSS_CFG_INPUT_HASH_TYPE_UDP_IPV6;\n \n \t\tfor (i = 0; i < bp->nr_vnics; i++) {\n-\t\t\tSTAILQ_FOREACH(vnic, &bp->ff_pool[i], next) {\n+\t\t\tvnic = &bp->vnic_info[i];\n \t\t\tvnic->hash_type = hash_type;\n \n \t\t\t/*\n@@ -187,7 +190,6 @@ int bnxt_mq_rx_configure(struct bnxt *bp)\n \t\t\t    rss->rss_key_len <= HW_HASH_KEY_SIZE)\n \t\t\t\tmemcpy(vnic->rss_hash_key,\n \t\t\t\t       rss->rss_key, rss->rss_key_len);\n-\t\t\t}\n \t\t}\n \t}\n \ndiff --git a/drivers/net/bnxt/bnxt_vnic.c b/drivers/net/bnxt/bnxt_vnic.c\nindex c0577cd76..e6a167673 100644\n--- a/drivers/net/bnxt/bnxt_vnic.c\n+++ b/drivers/net/bnxt/bnxt_vnic.c\n@@ -57,29 +57,6 @@ void bnxt_init_vnics(struct bnxt *bp)\n \t\tSTAILQ_INIT(&vnic->flow_list);\n \t\tSTAILQ_INSERT_TAIL(&bp->free_vnic_list, vnic, next);\n \t}\n-\tfor (i = 0; i < MAX_FF_POOLS; i++)\n-\t\tSTAILQ_INIT(&bp->ff_pool[i]);\n-}\n-\n-int bnxt_free_vnic(struct bnxt *bp, struct bnxt_vnic_info *vnic,\n-\t\t\t  int pool)\n-{\n-\tstruct bnxt_vnic_info *temp;\n-\n-\ttemp = STAILQ_FIRST(&bp->ff_pool[pool]);\n-\twhile (temp) {\n-\t\tif (temp == vnic) {\n-\t\t\tSTAILQ_REMOVE(&bp->ff_pool[pool], vnic,\n-\t\t\t\t      bnxt_vnic_info, next);\n-\t\t\tvnic->fw_vnic_id = (uint16_t)HWRM_NA_SIGNATURE;\n-\t\t\tSTAILQ_INSERT_TAIL(&bp->free_vnic_list, vnic,\n-\t\t\t\t\t   next);\n-\t\t\treturn 0;\n-\t\t}\n-\t\ttemp = STAILQ_NEXT(temp, next);\n-\t}\n-\tPMD_DRV_LOG(ERR, \"VNIC %p is not found in pool[%d]\\n\", vnic, pool);\n-\treturn -EINVAL;\n }\n \n struct bnxt_vnic_info *bnxt_alloc_vnic(struct bnxt *bp)\n@@ -98,26 +75,21 @@ struct bnxt_vnic_info *bnxt_alloc_vnic(struct bnxt *bp)\n \n void bnxt_free_all_vnics(struct bnxt *bp)\n {\n-\tstruct bnxt_vnic_info *temp, *next;\n-\tint i;\n+\tstruct bnxt_vnic_info *temp;\n+\tunsigned int i;\n \n-\tfor (i = 0; i < MAX_FF_POOLS; i++) {\n-\t\ttemp = STAILQ_FIRST(&bp->ff_pool[i]);\n-\t\twhile (temp) {\n-\t\t\tnext = STAILQ_NEXT(temp, next);\n-\t\t\tSTAILQ_REMOVE(&bp->ff_pool[i], temp, bnxt_vnic_info,\n-\t\t\t\t      next);\n-\t\t\tSTAILQ_INSERT_TAIL(&bp->free_vnic_list, temp, next);\n-\t\t\ttemp = next;\n-\t\t}\n+\tfor (i = 0; i < bp->nr_vnics; i++) {\n+\t\ttemp = &bp->vnic_info[i];\n+\t\tSTAILQ_INSERT_TAIL(&bp->free_vnic_list, temp, next);\n \t}\n }\n \n void bnxt_free_vnic_attributes(struct bnxt *bp)\n {\n \tstruct bnxt_vnic_info *vnic;\n+\tunsigned int i;\n \n-\tSTAILQ_FOREACH(vnic, &bp->free_vnic_list, next) {\n+\tfor (i = 0; i < bp->nr_vnics; i++) {\n \t\tif (vnic->rss_table) {\n \t\t\t/* 'Unreserve' the rss_table */\n \t\t\t/* N/A */\n",
    "prefixes": [
        "1/7"
    ]
}