get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 58427,
    "url": "http://patches.dpdk.org/api/patches/58427/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20190903021901.25895-9-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": "<20190903021901.25895-9-ajit.khaparde@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20190903021901.25895-9-ajit.khaparde@broadcom.com",
    "date": "2019-09-03T02:18:52",
    "name": "[08/17] net/bnxt: cleanup vnic after flow validate",
    "commit_ref": null,
    "pull_url": null,
    "state": "changes-requested",
    "archived": true,
    "hash": "50953a3f523ea65a67562ee27f0283e470498007",
    "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/20190903021901.25895-9-ajit.khaparde@broadcom.com/mbox/",
    "series": [
        {
            "id": 6209,
            "url": "http://patches.dpdk.org/api/series/6209/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=6209",
            "date": "2019-09-03T02:18:44",
            "name": "bnxt patchset to improve rte flow support",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/6209/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/58427/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/58427/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 7425E1EACE;\n\tTue,  3 Sep 2019 04:19:22 +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 88A851E950\n\tfor <dev@dpdk.org>; Tue,  3 Sep 2019 04:19:08 +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 1571330C1FC;\n\tMon,  2 Sep 2019 19:19:01 -0700 (PDT)",
            "from localhost.localdomain (unknown [10.230.30.225])\n\tby nis-sj1-27.broadcom.com (Postfix) with ESMTP id 75504AC078E;\n\tMon,  2 Sep 2019 19:19:07 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.10.3 rnd-relay.smtp.broadcom.com 1571330C1FC",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com;\n\ts=dkimrelay; t=1567477141;\n\tbh=27g5UYdXlsYM8RQ9evC2UI08xZBzbfPaPWf0yl8ne+c=;\n\th=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n\tb=RONIJaJ7bcR0VXmeADctSIu4J4Wsq0G7zc3vxl6c67VjLJoVC90YZbk0oRY/Glwt9\n\tw/KkPBpS/jb0SFy1FlAGxgAH/5CBlamzg6gXyITl+tLhlXYc2Cb1twQ5hmXkFtgTE+\n\taZ8OevylYUiy8vxcD5Ual3WaBi12rPz3NrrRt3Ss=",
        "From": "Ajit Khaparde <ajit.khaparde@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "ferruh.yigit@intel.com, Rahul Gupta <rahul.gupta@broadcom.com>,\n\tVenkat Duvvuru <venkatkumar.duvvuru@broadcom.com>",
        "Date": "Mon,  2 Sep 2019 19:18:52 -0700",
        "Message-Id": "<20190903021901.25895-9-ajit.khaparde@broadcom.com>",
        "X-Mailer": "git-send-email 2.20.1 (Apple Git-117)",
        "In-Reply-To": "<20190903021901.25895-1-ajit.khaparde@broadcom.com>",
        "References": "<20190903021901.25895-1-ajit.khaparde@broadcom.com>",
        "MIME-Version": "1.0",
        "Content-Transfer-Encoding": "8bit",
        "Subject": "[dpdk-dev] [PATCH 08/17] net/bnxt: cleanup vnic after flow validate",
        "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": "When an application issues flow validate, we free the temporary\nfilter that is created. But the vnic is not freed up. This can\npotentially interfere with subsequent flow creation. So free the vnic.\n\nSigned-off-by: Ajit Khaparde <ajit.khaparde@broadcom.com>\nReviewed-by: Rahul Gupta <rahul.gupta@broadcom.com>\nReviewed-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>\n---\n drivers/net/bnxt/bnxt_flow.c | 76 +++++++++++++++++++++---------------\n drivers/net/bnxt/bnxt_hwrm.c | 41 ++++++++++++-------\n drivers/net/bnxt/bnxt_hwrm.h |  3 +-\n 3 files changed, 73 insertions(+), 47 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c\nindex 496edd7ac..aed822ee3 100644\n--- a/drivers/net/bnxt/bnxt_flow.c\n+++ b/drivers/net/bnxt/bnxt_flow.c\n@@ -1289,6 +1289,25 @@ bnxt_validate_and_parse_flow(struct rte_eth_dev *dev,\n \treturn rc;\n }\n \n+static\n+struct bnxt_vnic_info *find_matching_vnic(struct bnxt *bp,\n+\t\t\t\t\t  struct bnxt_filter_info *filter)\n+{\n+\tstruct bnxt_vnic_info *vnic = NULL;\n+\tunsigned int i;\n+\n+\tfor (i = 0; i < bp->max_vnics; i++) {\n+\t\tvnic = &bp->vnic_info[i];\n+\t\tif (vnic->fw_vnic_id != INVALID_VNIC_ID &&\n+\t\t    filter->dst_id == vnic->fw_vnic_id) {\n+\t\t\tPMD_DRV_LOG(DEBUG, \"Found matching VNIC Id %d\\n\",\n+\t\t\t\t    vnic->ff_pool_idx);\n+\t\t\treturn vnic;\n+\t\t}\n+\t}\n+\treturn NULL;\n+}\n+\n static int\n bnxt_flow_validate(struct rte_eth_dev *dev,\n \t\t   const struct rte_flow_attr *attr,\n@@ -1297,6 +1316,7 @@ bnxt_flow_validate(struct rte_eth_dev *dev,\n \t\t   struct rte_flow_error *error)\n {\n \tstruct bnxt *bp = dev->data->dev_private;\n+\tstruct bnxt_vnic_info *vnic = NULL;\n \tstruct bnxt_filter_info *filter;\n \tint ret = 0;\n \n@@ -1312,6 +1332,26 @@ bnxt_flow_validate(struct rte_eth_dev *dev,\n \n \tret = bnxt_validate_and_parse_flow(dev, pattern, actions, attr,\n \t\t\t\t\t   error, filter);\n+\n+\tvnic = find_matching_vnic(bp, filter);\n+\tif (vnic) {\n+\t\tif (STAILQ_EMPTY(&vnic->filter)) {\n+\t\t\trte_free(vnic->fw_grp_ids);\n+\t\t\tbnxt_hwrm_vnic_ctx_free(bp, vnic);\n+\t\t\tbnxt_hwrm_vnic_free(bp, vnic);\n+\t\t\tvnic->rx_queue_cnt = 0;\n+\t\t\tbp->nr_vnics--;\n+\t\t\tPMD_DRV_LOG(DEBUG, \"Free VNIC\\n\");\n+\t\t}\n+\t}\n+\n+\tif (filter->filter_type == HWRM_CFA_EM_FILTER)\n+\t\tbnxt_hwrm_clear_em_filter(bp, filter);\n+\telse if (filter->filter_type == HWRM_CFA_NTUPLE_FILTER)\n+\t\tbnxt_hwrm_clear_ntuple_filter(bp, filter);\n+\telse\n+\t\tbnxt_hwrm_clear_l2_filter(bp, filter);\n+\n \t/* No need to hold on to this filter if we are just validating flow */\n \tfilter->fw_l2_filter_id = UINT64_MAX;\n \tbnxt_free_filter(bp, filter);\n@@ -1326,7 +1366,7 @@ bnxt_match_filter(struct bnxt *bp, struct bnxt_filter_info *nf)\n \tstruct rte_flow *flow;\n \tint i;\n \n-\tfor (i = bp->max_vnics; i >= 0; i--) {\n+\tfor (i = bp->max_vnics - 1; i >= 0; i--) {\n \t\tstruct bnxt_vnic_info *vnic = &bp->vnic_info[i];\n \n \t\tif (vnic->fw_vnic_id == INVALID_VNIC_ID)\n@@ -1407,7 +1447,6 @@ bnxt_flow_create(struct rte_eth_dev *dev,\n \tstruct bnxt_filter_info *filter;\n \tbool update_flow = false;\n \tstruct rte_flow *flow;\n-\tunsigned int i;\n \tint ret = 0;\n \tuint32_t tun_type;\n \n@@ -1501,15 +1540,7 @@ bnxt_flow_create(struct rte_eth_dev *dev,\n \t\tret = bnxt_hwrm_set_ntuple_filter(bp, filter->dst_id, filter);\n \t}\n \n-\tfor (i = 0; i < bp->max_vnics; i++) {\n-\t\tvnic = &bp->vnic_info[i];\n-\t\tif (vnic->fw_vnic_id != INVALID_VNIC_ID &&\n-\t\t    filter->dst_id == vnic->fw_vnic_id) {\n-\t\t\tPMD_DRV_LOG(ERR, \"Found matching VNIC Id %d\\n\",\n-\t\t\t\t    vnic->ff_pool_idx);\n-\t\t\tbreak;\n-\t\t}\n-\t}\n+\tvnic = find_matching_vnic(bp, filter);\n done:\n \tif (!ret) {\n \t\tflow->filter = filter;\n@@ -1651,26 +1682,9 @@ bnxt_flow_destroy(struct rte_eth_dev *dev,\n \t\t */\n \t\tif (vnic && STAILQ_EMPTY(&vnic->flow_list)) {\n \t\t\trte_free(vnic->fw_grp_ids);\n-\t\t\tif (vnic->rx_queue_cnt > 1) {\n-\t\t\t\tif (BNXT_CHIP_THOR(bp)) {\n-\t\t\t\t\tint j;\n-\n-\t\t\t\t\tfor (j = 0; j < vnic->num_lb_ctxts;\n-\t\t\t\t\t     j++) {\n-\t\t\t\t\t\tbnxt_hwrm_vnic_ctx_free(bp,\n-                                                                        vnic,\n-                                                                        vnic->fw_grp_ids[j]);\n-\t\t\t\t\t\tvnic->fw_grp_ids[j] =\n-\t\t\t\t\t\t\tINVALID_HW_RING_ID;\n-\t\t\t\t\t}\n-\t\t\t\t\tvnic->num_lb_ctxts = 0;\n-\t\t\t\t} else {\n-\t\t\t\t\tbnxt_hwrm_vnic_ctx_free(bp,\n-\t\t\t\t\t\t\t\tvnic,\n-\t\t\t\t\t\t\t\tvnic->rss_rule);\n-\t\t\t\t\tvnic->rss_rule = INVALID_HW_RING_ID;\n-\t\t\t\t}\n-\t\t\t}\n+\t\t\tif (vnic->rx_queue_cnt > 1)\n+\t\t\t\tbnxt_hwrm_vnic_ctx_free(bp, vnic);\n+\n \t\t\tbnxt_hwrm_vnic_free(bp, vnic);\n \t\t\tvnic->rx_queue_cnt = 0;\n \t\t\tbp->nr_vnics--;\ndiff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c\nindex 26559dce1..a033e2d1e 100644\n--- a/drivers/net/bnxt/bnxt_hwrm.c\n+++ b/drivers/net/bnxt/bnxt_hwrm.c\n@@ -1766,8 +1766,9 @@ int bnxt_hwrm_vnic_ctx_alloc(struct bnxt *bp,\n \treturn rc;\n }\n \n-int bnxt_hwrm_vnic_ctx_free(struct bnxt *bp,\n-\t\t\t    struct bnxt_vnic_info *vnic, uint16_t ctx_idx)\n+static\n+int _bnxt_hwrm_vnic_ctx_free(struct bnxt *bp,\n+\t\t\t     struct bnxt_vnic_info *vnic, uint16_t ctx_idx)\n {\n \tint rc = 0;\n \tstruct hwrm_vnic_rss_cos_lb_ctx_free_input req = {.req_type = 0 };\n@@ -1790,6 +1791,28 @@ int bnxt_hwrm_vnic_ctx_free(struct bnxt *bp,\n \treturn rc;\n }\n \n+int bnxt_hwrm_vnic_ctx_free(struct bnxt *bp, struct bnxt_vnic_info *vnic)\n+{\n+\tint rc = 0;\n+\n+\tif (BNXT_CHIP_THOR(bp)) {\n+\t\tint j;\n+\n+\t\tfor (j = 0; j < vnic->num_lb_ctxts; j++) {\n+\t\t\trc = _bnxt_hwrm_vnic_ctx_free(bp,\n+\t\t\t\t\t\t      vnic,\n+\t\t\t\t\t\t      vnic->fw_grp_ids[j]);\n+\t\t\tvnic->fw_grp_ids[j] = INVALID_HW_RING_ID;\n+\t\t}\n+\t\tvnic->num_lb_ctxts = 0;\n+\t} else {\n+\t\trc = _bnxt_hwrm_vnic_ctx_free(bp, vnic, vnic->rss_rule);\n+\t\tvnic->rss_rule = INVALID_HW_RING_ID;\n+\t}\n+\n+\treturn rc;\n+}\n+\n int bnxt_hwrm_vnic_free(struct bnxt *bp, struct bnxt_vnic_info *vnic)\n {\n \tint rc = 0;\n@@ -2401,7 +2424,7 @@ void bnxt_free_tunnel_ports(struct bnxt *bp)\n \n void bnxt_free_all_hwrm_resources(struct bnxt *bp)\n {\n-\tint i, j;\n+\tint i;\n \n \tif (bp->vnic_info == NULL)\n \t\treturn;\n@@ -2421,17 +2444,7 @@ void bnxt_free_all_hwrm_resources(struct bnxt *bp)\n \n \t\tbnxt_clear_hwrm_vnic_filters(bp, vnic);\n \n-\t\tif (BNXT_CHIP_THOR(bp)) {\n-\t\t\tfor (j = 0; j < vnic->num_lb_ctxts; j++) {\n-\t\t\t\tbnxt_hwrm_vnic_ctx_free(bp, vnic,\n-\t\t\t\t\t\t\tvnic->fw_grp_ids[j]);\n-\t\t\t\tvnic->fw_grp_ids[j] = INVALID_HW_RING_ID;\n-\t\t\t}\n-\t\t\tvnic->num_lb_ctxts = 0;\n-\t\t} else {\n-\t\t\tbnxt_hwrm_vnic_ctx_free(bp, vnic, vnic->rss_rule);\n-\t\t\tvnic->rss_rule = INVALID_HW_RING_ID;\n-\t\t}\n+\t\tbnxt_hwrm_vnic_ctx_free(bp, vnic);\n \n \t\tbnxt_hwrm_vnic_tpa_cfg(bp, vnic, false);\n \ndiff --git a/drivers/net/bnxt/bnxt_hwrm.h b/drivers/net/bnxt/bnxt_hwrm.h\nindex 47b1e43ac..9fa52be72 100644\n--- a/drivers/net/bnxt/bnxt_hwrm.h\n+++ b/drivers/net/bnxt/bnxt_hwrm.h\n@@ -113,8 +113,7 @@ int bnxt_hwrm_vnic_qcfg(struct bnxt *bp, struct bnxt_vnic_info *vnic,\n int bnxt_hwrm_vnic_qcaps(struct bnxt *bp);\n int bnxt_hwrm_vnic_ctx_alloc(struct bnxt *bp, struct bnxt_vnic_info *vnic,\n \t\t\t     uint16_t ctx_idx);\n-int bnxt_hwrm_vnic_ctx_free(struct bnxt *bp, struct bnxt_vnic_info *vnic,\n-\t\t\t    uint16_t ctx_idx);\n+int bnxt_hwrm_vnic_ctx_free(struct bnxt *bp, struct bnxt_vnic_info *vnic);\n int bnxt_hwrm_vnic_free(struct bnxt *bp, struct bnxt_vnic_info *vnic);\n int bnxt_hwrm_vnic_rss_cfg(struct bnxt *bp,\n \t\t\t   struct bnxt_vnic_info *vnic);\n",
    "prefixes": [
        "08/17"
    ]
}