get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 65188,
    "url": "http://patches.dpdk.org/api/patches/65188/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20200128062357.9316-9-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": "<20200128062357.9316-9-somnath.kotur@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20200128062357.9316-9-somnath.kotur@broadcom.com",
    "date": "2020-01-28T06:23:57",
    "name": "[8/8] net/bnxt: fix to support zero mark id along with RSS action",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "d990df73f66fc396ab716e8d1d576148f349ffa0",
    "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/20200128062357.9316-9-somnath.kotur@broadcom.com/mbox/",
    "series": [
        {
            "id": 8313,
            "url": "http://patches.dpdk.org/api/series/8313/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=8313",
            "date": "2020-01-28T06:23:50",
            "name": "bnxt patch set",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/8313/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/65188/comments/",
    "check": "fail",
    "checks": "http://patches.dpdk.org/api/patches/65188/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 4BF5BA04B3;\n\tTue, 28 Jan 2020 07:26:36 +0100 (CET)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id EEE531C122;\n\tTue, 28 Jan 2020 07:25:34 +0100 (CET)",
            "from relay.smtp.broadcom.com (relay.smtp.broadcom.com\n [192.19.211.62]) by dpdk.org (Postfix) with ESMTP id 365F61BFB6\n for <dev@dpdk.org>; Tue, 28 Jan 2020 07:25:23 +0100 (CET)",
            "from dhcp-10-123-153-55.dhcp.broadcom.net\n (dhcp-10-123-153-55.dhcp.broadcom.net [10.123.153.55])\n by relay.smtp.broadcom.com (Postfix) with ESMTP id CBDBF2904F7;\n Mon, 27 Jan 2020 22:25:22 -0800 (PST)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.10.3 relay.smtp.broadcom.com CBDBF2904F7",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com;\n s=dkimrelay; t=1580192723;\n bh=fsw7i0O4ump2FBT1XWNfn8eu/iRGEScstp2xyVOOmJ8=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=VLofQ79q5/kmF0M6zECwxWOaxLMdJZtKhQSo00MVXWQldPVKts/RLo2VmuFy262i7\n D7GmM/nXaeSTLOTrRzsEyyFRsMGQkog+Oa8Gazi5NiG5DAwJjNymPQ5qjij1kSqLBy\n mwQJe3Te2KxnIgvVWNSPExI87/zUKBjWm6aBo0ok=",
        "From": "Somnath Kotur <somnath.kotur@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "ferruh.yigit@intel.com",
        "Date": "Tue, 28 Jan 2020 11:53:57 +0530",
        "Message-Id": "<20200128062357.9316-9-somnath.kotur@broadcom.com>",
        "X-Mailer": "git-send-email 2.10.1.613.g2cc2e70",
        "In-Reply-To": "<20200128062357.9316-1-somnath.kotur@broadcom.com>",
        "References": "<20200128062357.9316-1-somnath.kotur@broadcom.com>",
        "Subject": "[dpdk-dev] [PATCH 8/8] net/bnxt: fix to support zero mark id along\n\twith RSS action",
        "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": "Certain applications(Ex: OVS-DPDK) can issue rte_flow_create with mark id\nset to 0. The mark table entry creation in the driver was assuming\nnon-zero mark ids. Fix it to have a valid flag for each entry.\nAlso, it is possible that both RSS flags and cfa_code/ mark id are\nset as part of the Rx packet completion descriptor if the 'action'\nfor a flow is MARK + RSS.\nFix Rx completion processing to look for both fields as opposed to\nonly either.\n\nFixes: 94eb699bc82e (\"net/bnxt: support flow mark action\")\n\nSigned-off-by: Somnath Kotur <somnath.kotur@broadcom.com>\n---\n drivers/net/bnxt/bnxt.h      |  9 +++++++--\n drivers/net/bnxt/bnxt_flow.c | 20 +++++++++++++++-----\n drivers/net/bnxt/bnxt_rxr.c  | 25 +++++++++++++++----------\n drivers/net/bnxt/bnxt_rxr.h  |  6 ++++--\n 4 files changed, 41 insertions(+), 19 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/bnxt.h b/drivers/net/bnxt/bnxt.h\nindex 1a5d542..68786a8 100644\n--- a/drivers/net/bnxt/bnxt.h\n+++ b/drivers/net/bnxt/bnxt.h\n@@ -470,6 +470,11 @@ struct bnxt_error_recovery_info {\n \tuint32_t        last_reset_counter;\n };\n \n+struct bnxt_mark_info {\n+\tuint32_t\tmark_id;\n+\tbool\t\tvalid;\n+};\n+\n /* address space location of register */\n #define BNXT_FW_STATUS_REG_TYPE_MASK\t3\n /* register is located in PCIe config space */\n@@ -668,10 +673,10 @@ struct bnxt {\n \n \t/* Struct to hold adapter error recovery related info */\n \tstruct bnxt_error_recovery_info *recovery_info;\n-#define BNXT_MARK_TABLE_SZ\t(sizeof(uint32_t)  * 64 * 1024)\n+#define BNXT_MARK_TABLE_SZ\t(sizeof(struct bnxt_mark_info)  * 64 * 1024)\n /* TCAM and EM should be 16-bit only. Other modes not supported. */\n #define BNXT_FLOW_ID_MASK\t0x0000ffff\n-\tuint32_t\t\t*mark_table;\n+\tstruct bnxt_mark_info\t*mark_table;\n };\n \n int bnxt_mtu_set_op(struct rte_eth_dev *eth_dev, uint16_t new_mtu);\ndiff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c\nindex bd6c726..9fb6dbd 100644\n--- a/drivers/net/bnxt/bnxt_flow.c\n+++ b/drivers/net/bnxt/bnxt_flow.c\n@@ -1263,7 +1263,6 @@ static int match_vnic_rss_cfg(struct bnxt *bp,\n \t\tvnic_id = attr->group;\n \n \t\tBNXT_VALID_VNIC_OR_RET(bp, vnic_id);\n-\n \t\tvnic = &bp->vnic_info[vnic_id];\n \n \t\t/* Check if requested RSS config matches RSS config of VNIC\n@@ -1641,7 +1640,7 @@ struct bnxt_vnic_info *find_matching_vnic(struct bnxt *bp,\n \tbool update_flow = false;\n \tstruct rte_flow *flow;\n \tint ret = 0;\n-\tuint32_t tun_type;\n+\tuint32_t tun_type, flow_id;\n \n \tif (BNXT_VF(bp) && !BNXT_VF_IS_TRUSTED(bp)) {\n \t\trte_flow_error_set(error, EINVAL,\n@@ -1773,8 +1772,16 @@ struct bnxt_vnic_info *find_matching_vnic(struct bnxt *bp,\n \t\t\t/* TCAM and EM should be 16-bit only.\n \t\t\t * Other modes not supported.\n \t\t\t */\n-\t\t\tbp->mark_table[filter->flow_id & BNXT_FLOW_ID_MASK] =\n-\t\t\t\tfilter->mark;\n+\t\t\tflow_id = filter->flow_id & BNXT_FLOW_ID_MASK;\n+\t\t\tif (bp->mark_table[flow_id].valid) {\n+\t\t\t\tPMD_DRV_LOG(ERR,\n+\t\t\t\t\t    \"Entry for Mark id 0x%x occupied\"\n+\t\t\t\t\t    \" flow id 0x%x\\n\",\n+\t\t\t\t\t    filter->mark, filter->flow_id);\n+\t\t\t\tgoto free_filter;\n+\t\t\t}\n+\t\t\tbp->mark_table[flow_id].valid = true;\n+\t\t\tbp->mark_table[flow_id].mark_id = filter->mark;\n \t\t}\n \t\tbnxt_release_flow_lock(bp);\n \t\treturn flow;\n@@ -1850,6 +1857,7 @@ static int bnxt_handle_tunnel_redirect_destroy(struct bnxt *bp,\n \tstruct bnxt_filter_info *filter;\n \tstruct bnxt_vnic_info *vnic;\n \tint ret = 0;\n+\tuint32_t flow_id;\n \n \tfilter = flow->filter;\n \tvnic = flow->vnic;\n@@ -1868,7 +1876,9 @@ static int bnxt_handle_tunnel_redirect_destroy(struct bnxt *bp,\n \t\tPMD_DRV_LOG(ERR, \"Could not find matching flow\\n\");\n \n \tif (filter->valid_flags & BNXT_FLOW_MARK_FLAG) {\n-\t\tbp->mark_table[filter->flow_id & BNXT_FLOW_ID_MASK] = 0;\n+\t\tflow_id = filter->flow_id & BNXT_FLOW_ID_MASK;\n+\t\tmemset(&bp->mark_table[flow_id], 0,\n+\t\t       sizeof(bp->mark_table[flow_id]));\n \t\tfilter->flow_id = 0;\n \t}\n \ndiff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c\nindex 1ae0c3c..1960b05 100644\n--- a/drivers/net/bnxt/bnxt_rxr.c\n+++ b/drivers/net/bnxt/bnxt_rxr.c\n@@ -488,11 +488,10 @@ static int bnxt_rx_pkt(struct rte_mbuf **rx_pkt,\n \tif (flags_type & RX_PKT_CMPL_FLAGS_RSS_VALID) {\n \t\tmbuf->hash.rss = rxcmp->rss_hash;\n \t\tmbuf->ol_flags |= PKT_RX_RSS_HASH;\n-\t} else {\n-\t\tmbuf->hash.fdir.id = bnxt_get_cfa_code_or_mark_id(rxq->bp,\n-\t\t\t\t\t\t\t\t  rxcmp1);\n-\t\tmbuf->ol_flags |= PKT_RX_FDIR | PKT_RX_FDIR_ID;\n \t}\n+\n+\tbnxt_set_mark_in_mbuf(rxq->bp, rxcmp1, mbuf);\n+\n #ifdef RTE_LIBRTE_IEEE1588\n \tif (unlikely((flags_type & RX_PKT_CMPL_FLAGS_MASK) ==\n \t\t     RX_PKT_CMPL_FLAGS_ITYPE_PTP_W_TIMESTAMP)) {\n@@ -897,8 +896,9 @@ int bnxt_init_one_rx_ring(struct bnxt_rx_queue *rxq)\n \treturn 0;\n }\n \n-uint32_t bnxt_get_cfa_code_or_mark_id(struct bnxt *bp,\n-\t\t\t\t      struct rx_pkt_cmpl_hi *rxcmp1)\n+void bnxt_set_mark_in_mbuf(struct bnxt *bp,\n+\t\t\t   struct rx_pkt_cmpl_hi *rxcmp1,\n+\t\t\t   struct rte_mbuf *mbuf)\n {\n \tuint32_t cfa_code = 0;\n \tuint8_t meta_fmt =  0;\n@@ -907,10 +907,13 @@ uint32_t bnxt_get_cfa_code_or_mark_id(struct bnxt *bp,\n \n \tcfa_code = rte_le_to_cpu_16(rxcmp1->cfa_code);\n \tif (!cfa_code)\n-\t\treturn 0;\n+\t\treturn;\n \n-\tif (cfa_code && !bp->mark_table[cfa_code])\n-\t\treturn cfa_code;\n+\tif (cfa_code && !bp->mark_table[cfa_code].valid) {\n+\t\tPMD_DRV_LOG(WARNING, \"Invalid mark_tbl entry! cfa_code: 0x%x\\n\",\n+\t\t\t    cfa_code);\n+\t\treturn;\n+\t}\n \n \tflags2 = rte_le_to_cpu_16(rxcmp1->flags2);\n \tmeta = rte_le_to_cpu_32(rxcmp1->metadata);\n@@ -932,5 +935,7 @@ uint32_t bnxt_get_cfa_code_or_mark_id(struct bnxt *bp,\n \t\t */\n \t\tmeta_fmt >>= BNXT_CFA_META_FMT_EM_EEM_SHFT;\n \t}\n-\treturn bp->mark_table[cfa_code];\n+\n+\tmbuf->hash.fdir.hi = bp->mark_table[cfa_code].mark_id;\n+\tmbuf->ol_flags |= PKT_RX_FDIR | PKT_RX_FDIR_ID;\n }\ndiff --git a/drivers/net/bnxt/bnxt_rxr.h b/drivers/net/bnxt/bnxt_rxr.h\nindex bf86002..d10dae2 100644\n--- a/drivers/net/bnxt/bnxt_rxr.h\n+++ b/drivers/net/bnxt/bnxt_rxr.h\n@@ -226,8 +226,10 @@ uint16_t bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,\n int bnxt_rxq_vec_setup(struct bnxt_rx_queue *rxq);\n #endif\n \n-uint32_t bnxt_get_cfa_code_or_mark_id(struct bnxt *bp,\n-\t\t\t\t      struct rx_pkt_cmpl_hi *rxcmp1);\n+void bnxt_set_mark_in_mbuf(struct bnxt *bp,\n+\t\t\t   struct rx_pkt_cmpl_hi *rxcmp1,\n+\t\t\t   struct rte_mbuf *mbuf);\n+\n #define BNXT_RX_META_CFA_CODE_SHIFT\t\t19\n #define BNXT_CFA_CODE_META_SHIFT\t\t16\n #define BNXT_RX_META_CFA_CODE_INT_ACT_REC_BIT\t0x8000000\n",
    "prefixes": [
        "8/8"
    ]
}