get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 63949,
    "url": "http://patches.dpdk.org/api/patches/63949/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20191217041755.29232-6-somnath.kotur@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": "<20191217041755.29232-6-somnath.kotur@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20191217041755.29232-6-somnath.kotur@broadcom.com",
    "date": "2019-12-17T04:17:54",
    "name": "[5/6] net/bnxt: fix to keep the L2 filter intact so it can be reused",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "bfa6acf5802262c06437bb488e7304e43f50c62c",
    "submitter": {
        "id": 908,
        "url": "http://patches.dpdk.org/api/people/908/?format=api",
        "name": "Somnath Kotur",
        "email": "somnath.kotur@broadcom.com"
    },
    "delegate": {
        "id": 1766,
        "url": "http://patches.dpdk.org/api/users/1766/?format=api",
        "username": "ajitkhaparde",
        "first_name": "Ajit",
        "last_name": "Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20191217041755.29232-6-somnath.kotur@broadcom.com/mbox/",
    "series": [
        {
            "id": 7857,
            "url": "http://patches.dpdk.org/api/series/7857/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=7857",
            "date": "2019-12-17T04:17:49",
            "name": "bnxt patchset",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/7857/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/63949/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/63949/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from dpdk.org (dpdk.org [92.243.14.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 16E6CA04F0;\n\tTue, 17 Dec 2019 05:19:16 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 453151BF75;\n\tTue, 17 Dec 2019 05:18:41 +0100 (CET)",
            "from relay.smtp.broadcom.com (unknown [192.19.232.149])\n by dpdk.org (Postfix) with ESMTP id 167522C52\n for <dev@dpdk.org>; Tue, 17 Dec 2019 05:18:34 +0100 (CET)",
            "from dhcp-10-123-153-55.dhcp.broadcom.net\n (bgccx-dev-host-lnx35.bec.broadcom.net [10.123.153.55])\n by relay.smtp.broadcom.com (Postfix) with ESMTP id C5DA11BE6CA;\n Mon, 16 Dec 2019 20:18:32 -0800 (PST)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.10.3 relay.smtp.broadcom.com C5DA11BE6CA",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com;\n s=dkimrelay; t=1576556313;\n bh=922oDffj0VTmsD5bbKBG3BpkbvTOsTvKTlJ5iHz0g9c=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=uokjdvBnvhh+LW4arRSdD5CjccSM1qvj2Sc2ft5fm1C7ZSO1XvnOiEcbKs+EDivrc\n 4Oh3NfzRjcB4FWMO4p2Hffr9Iv6u/KCVS09152fcKdwLuhZaoHc1LT0/GdVAA+Gpst\n jOsC3be7Cc7nlNVZ7+/Vwpx2/idxhFhYu7VyltRY=",
        "From": "Somnath Kotur <somnath.kotur@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "ferruh.yigit@intel.com",
        "Date": "Tue, 17 Dec 2019 09:47:54 +0530",
        "Message-Id": "<20191217041755.29232-6-somnath.kotur@broadcom.com>",
        "X-Mailer": "git-send-email 2.10.1.613.g2cc2e70",
        "In-Reply-To": "<20191217041755.29232-1-somnath.kotur@broadcom.com>",
        "References": "<20191217041755.29232-1-somnath.kotur@broadcom.com>",
        "Subject": "[dpdk-dev] [PATCH 5/6] net/bnxt: fix to keep the L2 filter intact\n\tso it can be reused",
        "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 <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 <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "The software L2 filter was being released back to the free pool,\nafter it was created in HW and the filter corresponding to an actual\n'flow' would have reference to the HW L2 filter.\nBut if this 'flow were to be deleted, then this HW L2 filter also\nwould be gone.\nFix this by storing the L2 filter created originally either for an\nn-tuple flow or otherwise as part of the vnic's filter list.\nThis would require the filter_info struct to have a backptr to the\nvnic which it came from.\n\nFixes: 0ba82dee (\"net/bnxt: fix to check for L2 filters that doesn't have any references\")\n\nSigned-off-by: Somnath Kotur <somnath.kotur@broadcom.com>\nReviewed-by: Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>\n---\n drivers/net/bnxt/bnxt_filter.h |  4 ++++\n drivers/net/bnxt/bnxt_flow.c   | 20 +++++++++-----------\n drivers/net/bnxt/bnxt_hwrm.c   | 14 +++++++++++++-\n 3 files changed, 26 insertions(+), 12 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt_filter.h b/drivers/net/bnxt/bnxt_filter.h\nindex 8cafa8f..5c96b34 100644\n--- a/drivers/net/bnxt/bnxt_filter.h\n+++ b/drivers/net/bnxt/bnxt_filter.h\n@@ -80,6 +80,10 @@ struct bnxt_filter_info {\n \tuint16_t                ethertype;\n \tuint32_t\t\tpriority;\n \tuint32_t\t\tmark;\n+\t/* Backptr to vnic. As of now, used only by an L2 filter\n+\t * to remember which vnic it was created on\n+\t */\n+\tstruct\t\t\tbnxt_vnic_info *vnic;\n };\n \n struct bnxt_filter_info *bnxt_alloc_filter(struct bnxt *bp);\ndiff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c\nindex f926f9b..660760c 100644\n--- a/drivers/net/bnxt/bnxt_flow.c\n+++ b/drivers/net/bnxt/bnxt_flow.c\n@@ -746,10 +746,9 @@\n {\n \tstruct bnxt_filter_info *mf, *f0;\n \tstruct bnxt_vnic_info *vnic0;\n-\tstruct rte_flow *flow;\n \tint i;\n \n-\tvnic0 = &bp->vnic_info[0];\n+\tvnic0 = BNXT_GET_DEFAULT_VNIC(bp);\n \tf0 = STAILQ_FIRST(&vnic0->filter);\n \n \t/* This flow has same DST MAC as the port/l2 filter. */\n@@ -762,8 +761,7 @@\n \t\tif (vnic->fw_vnic_id == INVALID_VNIC_ID)\n \t\t\tcontinue;\n \n-\t\tSTAILQ_FOREACH(flow, &vnic->flow_list, next) {\n-\t\t\tmf = flow->filter;\n+\t\tSTAILQ_FOREACH(mf, &vnic->filter, next) {\n \n \t\t\tif (mf->matching_l2_fltr_ptr)\n \t\t\t\tcontinue;\n@@ -798,6 +796,8 @@\n \tif (filter1 == NULL)\n \t\treturn NULL;\n \n+\tmemcpy(filter1, nf, sizeof(*filter1));\n+\n \tfilter1->flags = HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_XDP_DISABLE;\n \tfilter1->flags |= HWRM_CFA_L2_FILTER_ALLOC_INPUT_FLAGS_PATH_RX;\n \tif (nf->valid_flags & BNXT_FLOW_L2_SRC_VALID_FLAG ||\n@@ -880,11 +880,14 @@ struct bnxt_filter_info *\n \tl2_filter = bnxt_find_matching_l2_filter(bp, nf);\n \tif (l2_filter) {\n \t\tl2_filter->l2_ref_cnt++;\n-\t\tnf->matching_l2_fltr_ptr = l2_filter;\n \t} else {\n \t\tl2_filter = bnxt_create_l2_filter(bp, nf, vnic);\n-\t\tnf->matching_l2_fltr_ptr = NULL;\n+\t\tif (l2_filter) {\n+\t\t\tSTAILQ_INSERT_TAIL(&vnic->filter, l2_filter, next);\n+\t\t\tl2_filter->vnic = vnic;\n+\t\t}\n \t}\n+\tnf->matching_l2_fltr_ptr = l2_filter;\n \n \treturn l2_filter;\n }\n@@ -1437,11 +1440,6 @@ static int match_vnic_rss_cfg(struct bnxt *bp,\n \t\tgoto ret;\n \t}\n \n-\tif (filter1 && !filter->matching_l2_fltr_ptr) {\n-\t\tbnxt_free_filter(bp, filter1);\n-\t\tfilter1->fw_l2_filter_id = -1;\n-\t}\n-\n done:\n \tact = bnxt_flow_non_void_action(++act);\n \twhile (act->type != RTE_FLOW_ACTION_TYPE_END)\ndiff --git a/drivers/net/bnxt/bnxt_hwrm.c b/drivers/net/bnxt/bnxt_hwrm.c\nindex 694d2d0..1b19fba 100644\n--- a/drivers/net/bnxt/bnxt_hwrm.c\n+++ b/drivers/net/bnxt/bnxt_hwrm.c\n@@ -363,10 +363,11 @@ int bnxt_hwrm_cfa_vlan_antispoof_cfg(struct bnxt *bp, uint16_t fid,\n }\n \n int bnxt_hwrm_clear_l2_filter(struct bnxt *bp,\n-\t\t\t   struct bnxt_filter_info *filter)\n+\t\t\t     struct bnxt_filter_info *filter)\n {\n \tint rc = 0;\n \tstruct bnxt_filter_info *l2_filter = filter;\n+\tstruct bnxt_vnic_info *vnic = NULL;\n \tstruct hwrm_cfa_l2_filter_free_input req = {.req_type = 0 };\n \tstruct hwrm_cfa_l2_filter_free_output *resp = bp->hwrm_cmd_resp_addr;\n \n@@ -379,6 +380,9 @@ int bnxt_hwrm_clear_l2_filter(struct bnxt *bp,\n \tPMD_DRV_LOG(DEBUG, \"filter: %p l2_filter: %p ref_cnt: %d\\n\",\n \t\t    filter, l2_filter, l2_filter->l2_ref_cnt);\n \n+\tif (l2_filter->l2_ref_cnt == 0)\n+\t\treturn 0;\n+\n \tif (l2_filter->l2_ref_cnt > 0)\n \t\tl2_filter->l2_ref_cnt--;\n \n@@ -395,6 +399,14 @@ int bnxt_hwrm_clear_l2_filter(struct bnxt *bp,\n \tHWRM_UNLOCK();\n \n \tfilter->fw_l2_filter_id = UINT64_MAX;\n+\tif (l2_filter->l2_ref_cnt == 0) {\n+\t\tvnic = l2_filter->vnic;\n+\t\tif (vnic) {\n+\t\t\tSTAILQ_REMOVE(&vnic->filter, l2_filter,\n+\t\t\t\t      bnxt_filter_info, next);\n+\t\t\tbnxt_free_filter(bp, l2_filter);\n+\t\t}\n+\t}\n \n \treturn 0;\n }\n",
    "prefixes": [
        "5/6"
    ]
}