get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 68558,
    "url": "https://patches.dpdk.org/api/patches/68558/?format=api",
    "web_url": "https://patches.dpdk.org/project/dpdk/patch/1586962156-11179-2-git-send-email-venkatkumar.duvvuru@broadcom.com/",
    "project": {
        "id": 1,
        "url": "https://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": "<1586962156-11179-2-git-send-email-venkatkumar.duvvuru@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1586962156-11179-2-git-send-email-venkatkumar.duvvuru@broadcom.com",
    "date": "2020-04-15T14:49:06",
    "name": "[01/11] net/bnxt: SVIF changes for dpdk port id",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "db319236dde8bc0c7e93240c835212e1016969b7",
    "submitter": {
        "id": 1635,
        "url": "https://patches.dpdk.org/api/people/1635/?format=api",
        "name": "Venkat Duvvuru",
        "email": "venkatkumar.duvvuru@broadcom.com"
    },
    "delegate": {
        "id": 1766,
        "url": "https://patches.dpdk.org/api/users/1766/?format=api",
        "username": "ajitkhaparde",
        "first_name": "Ajit",
        "last_name": "Khaparde",
        "email": "ajit.khaparde@broadcom.com"
    },
    "mbox": "https://patches.dpdk.org/project/dpdk/patch/1586962156-11179-2-git-send-email-venkatkumar.duvvuru@broadcom.com/mbox/",
    "series": [
        {
            "id": 9397,
            "url": "https://patches.dpdk.org/api/series/9397/?format=api",
            "web_url": "https://patches.dpdk.org/project/dpdk/list/?series=9397",
            "date": "2020-04-15T14:49:05",
            "name": "enhancements to host based flow table management",
            "version": 1,
            "mbox": "https://patches.dpdk.org/series/9397/mbox/"
        }
    ],
    "comments": "https://patches.dpdk.org/api/patches/68558/comments/",
    "check": "fail",
    "checks": "https://patches.dpdk.org/api/patches/68558/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 AE1D5A0563;\n\tWed, 15 Apr 2020 16:50:32 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id DBB221D8EC;\n\tWed, 15 Apr 2020 16:50:27 +0200 (CEST)",
            "from mail-pl1-f195.google.com (mail-pl1-f195.google.com\n [209.85.214.195]) by dpdk.org (Postfix) with ESMTP id 0EAD91D8EB\n for <dev@dpdk.org>; Wed, 15 Apr 2020 16:50:26 +0200 (CEST)",
            "by mail-pl1-f195.google.com with SMTP id v2so70392plp.9\n for <dev@dpdk.org>; Wed, 15 Apr 2020 07:50:25 -0700 (PDT)",
            "from S60.dhcp.broadcom.net ([192.19.234.250])\n by smtp.gmail.com with ESMTPSA id 11sm13767969pfz.91.2020.04.15.07.50.22\n (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128);\n Wed, 15 Apr 2020 07:50:23 -0700 (PDT)"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com;\n s=google;\n h=from:to:cc:subject:date:message-id:in-reply-to:references;\n bh=5V96XQmrouWA8ElhdNxRnmhTXmThib52RNjCs9AsV/M=;\n b=P+XoVr5bW8c1hTJM2KjxO4TafYEoittTpFz7ec9hvqac0jb0zW6c3BNFXKuPdTPwKD\n UgDMWIKAVWepscgIeXYHq5nJAy2dW5ZmhPC8WwxoYuLHwDX2vEsjQ/lV/DVO6CKuO/Fg\n o0c/DTrHMvbyjcEmZn7LUbxfoHXlfVG2nSYQk=",
        "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20161025;\n h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to\n :references;\n bh=5V96XQmrouWA8ElhdNxRnmhTXmThib52RNjCs9AsV/M=;\n b=IClrPybDAd+D//4VrlLRJ17W7h2rOya0vTeyQF53JN7IFnXOYlPBBxyqAYJntyA2+N\n DrwEf5qF17S8xtR140fRlml+LHSAf2TieWQAE8fjoJWIrEcoaCnMwjUkzCldCjEC7Xu5\n sS7vq+G3Og2eoFXR9m2glSu2cgAIJ2cPX1ESf+RYNvBlg4boNYmwBiWD3hxF2XUV3LkS\n ZDVGt1QaS9Ej99D5HHNb90Hl6RJ1bmKJcGTnTQzXW2XqTKRYDEAWwBr4nsxEnS2mF5pj\n gcQAm8B6wjrBLOL/Gv2CnguLlA9JlX/zxmhmNJu1POoQ9zJHioVQDSstDGoF2DkxWUdU\n Wt1w==",
        "X-Gm-Message-State": "AGi0Pub6Zw6Yninxj+oFIj2QBUTnr54Br4Pfrs6HTBGsnici+tzZllBr\n 0ND5fh+e/5Ggx3ZVAPO/KrSU8EAz+dP0GcXqvBSPVcHXoogH/r2V73G33uOTPndHvO1TZDlxEqx\n oWaB8FwSeVMkKQ3jGxdPIfAJsSDu4kZFc5cJipb9cBxPipXy8TuoFFuXjONRwFjFODNcx",
        "X-Google-Smtp-Source": "\n APiQypJ6rSIvAb/iqhugAjMS6hnaFCmbdqlSeOw5qe1dysw/KIo2WujYl/DJoIgymdcw0Hl9hjsqqw==",
        "X-Received": "by 2002:a17:902:9a03:: with SMTP id\n v3mr5055788plp.272.1586962224546;\n Wed, 15 Apr 2020 07:50:24 -0700 (PDT)",
        "From": "Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "Mike Baucom <michael.baucom@broadcom.com>,\n Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>",
        "Date": "Wed, 15 Apr 2020 20:19:06 +0530",
        "Message-Id": "\n <1586962156-11179-2-git-send-email-venkatkumar.duvvuru@broadcom.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "\n <1586962156-11179-1-git-send-email-venkatkumar.duvvuru@broadcom.com>",
        "References": "\n <1586962156-11179-1-git-send-email-venkatkumar.duvvuru@broadcom.com>",
        "Subject": "[dpdk-dev] [PATCH 01/11] net/bnxt: SVIF changes for dpdk port id",
        "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": "From: Mike Baucom <michael.baucom@broadcom.com>\n\nModification of the parser to get the SVIF from the driver for matches\non port_id, pf, and phy_port.\n\nReviewed-by: Kishore Padmanabha <kishore.padmanabha@broadcom.com>\nSigned-off-by: Mike Baucom <michael.baucom@broadcom.com>\nSigned-off-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>\n---\n drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c  | 31 +++++------\n drivers/net/bnxt/tf_ulp/ulp_rte_parser.c | 92 +++++++++++++++++++++++++-------\n drivers/net/bnxt/tf_ulp/ulp_rte_parser.h |  5 ++\n 3 files changed, 90 insertions(+), 38 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c\nindex 4958895..6203a49 100644\n--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c\n+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c\n@@ -72,14 +72,14 @@ bnxt_ulp_flow_create(struct rte_eth_dev\t\t\t*dev,\n \tstruct ulp_rte_act_bitmap act_bitmap;\n \tstruct ulp_rte_act_prop act_prop;\n \tenum ulp_direction_type dir = ULP_DIR_INGRESS;\n-\tuint32_t class_id, act_tmpl;\n-\tuint32_t app_priority;\n-\tint ret;\n \tstruct bnxt_ulp_context *ulp_ctx = NULL;\n-\tuint32_t vnic;\n-\tuint8_t svif;\n+\tuint32_t class_id, act_tmpl;\n \tstruct rte_flow *flow_id;\n+\tuint32_t app_priority;\n \tuint32_t fid;\n+\tuint8_t\t*buffer;\n+\tuint32_t vnic;\n+\tint ret;\n \n \tif (bnxt_ulp_flow_validate_args(attr,\n \t\t\t\t\tpattern, actions,\n@@ -100,19 +100,15 @@ bnxt_ulp_flow_create(struct rte_eth_dev\t\t\t*dev,\n \tmemset(&act_bitmap, 0, sizeof(act_bitmap));\n \tmemset(&act_prop, 0, sizeof(act_prop));\n \n-\tsvif = bnxt_get_svif(dev->data->port_id, false);\n-\tBNXT_TF_DBG(ERR, \"SVIF for port[%d][port]=0x%08x\\n\",\n-\t\t    dev->data->port_id, svif);\n+\tif (attr->egress)\n+\t\tdir = ULP_DIR_EGRESS;\n \n-\thdr_field[BNXT_ULP_HDR_FIELD_SVIF_INDEX].size = sizeof(svif);\n-\thdr_field[BNXT_ULP_HDR_FIELD_SVIF_INDEX].spec[0] = svif;\n-\thdr_field[BNXT_ULP_HDR_FIELD_SVIF_INDEX].mask[0] = -1;\n-\tULP_BITMAP_SET(hdr_bitmap.bits, BNXT_ULP_HDR_BIT_SVIF);\n+\t/* copy the device port id and direction in svif for further process */\n+\tbuffer = hdr_field[BNXT_ULP_HDR_FIELD_SVIF_INDEX].spec;\n+\trte_memcpy(buffer, &dev->data->port_id, sizeof(uint16_t));\n+\trte_memcpy(buffer + sizeof(uint16_t), &dir, sizeof(uint32_t));\n \n-\t/*\n-\t * VNIC is being pushed as 32bit and the pop will take care of\n-\t * proper size\n-\t */\n+\t/* Set the implicit vnic in the action property */\n \tvnic = (uint32_t)bnxt_get_vnic_id(dev->data->port_id);\n \tvnic = htonl(vnic);\n \trte_memcpy(&act_prop.act_details[BNXT_ULP_ACT_PROP_IDX_VNIC],\n@@ -132,9 +128,6 @@ bnxt_ulp_flow_create(struct rte_eth_dev\t\t\t*dev,\n \tif (ret != BNXT_TF_RC_SUCCESS)\n \t\tgoto parse_error;\n \n-\tif (attr->egress)\n-\t\tdir = ULP_DIR_EGRESS;\n-\n \tret = ulp_matcher_pattern_match(dir, &hdr_bitmap, hdr_field,\n \t\t\t\t\t&act_bitmap, &class_id);\n \ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c\nindex 7a31b43..4339032 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c\n+++ b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.c\n@@ -85,6 +85,8 @@ bnxt_ulp_rte_parser_hdr_parse(const struct rte_flow_item pattern[],\n \t\t}\n \t\titem++;\n \t}\n+\t/* update the implied SVIF */\n+\t(void)ulp_rte_parser_svif_process(hdr_bitmap, hdr_field);\n \treturn BNXT_TF_RC_SUCCESS;\n }\n \n@@ -132,9 +134,12 @@ static int32_t\n ulp_rte_parser_svif_set(struct ulp_rte_hdr_bitmap *hdr_bitmap,\n \t\t\tstruct ulp_rte_hdr_field *hdr_field,\n \t\t\tenum rte_flow_item_type proto,\n-\t\t\tuint32_t svif,\n-\t\t\tuint32_t mask)\n+\t\t\tuint32_t dir,\n+\t\t\tuint16_t svif,\n+\t\t\tuint16_t mask)\n {\n+\tuint16_t port_id = svif;\n+\n \tif (ULP_BITMAP_ISSET(hdr_bitmap->bits, BNXT_ULP_HDR_BIT_SVIF)) {\n \t\tBNXT_TF_DBG(ERR,\n \t\t\t    \"SVIF already set,\"\n@@ -142,21 +147,51 @@ ulp_rte_parser_svif_set(struct ulp_rte_hdr_bitmap *hdr_bitmap,\n \t\treturn BNXT_TF_RC_ERROR;\n \t}\n \n-\t/* TBD: Check for any mapping errors for svif */\n \t/* Update the hdr_bitmap with BNXT_ULP_HDR_PROTO_SVIF. */\n \tULP_BITMAP_SET(hdr_bitmap->bits, BNXT_ULP_HDR_BIT_SVIF);\n \n-\tif (proto != RTE_FLOW_ITEM_TYPE_PF) {\n-\t\tmemcpy(hdr_field[BNXT_ULP_HDR_FIELD_SVIF_INDEX].spec,\n-\t\t       &svif, sizeof(svif));\n-\t\tmemcpy(hdr_field[BNXT_ULP_HDR_FIELD_SVIF_INDEX].mask,\n-\t\t       &mask, sizeof(mask));\n-\t\thdr_field[BNXT_ULP_HDR_FIELD_SVIF_INDEX].size = sizeof(svif);\n+\tif (proto == RTE_FLOW_ITEM_TYPE_PORT_ID) {\n+\t\t/* perform the conversion from dpdk port to svif */\n+\t\tif (dir == ULP_DIR_EGRESS)\n+\t\t\tsvif = bnxt_get_svif(port_id, true);\n+\t\telse\n+\t\t\tsvif = bnxt_get_svif(port_id, false);\n \t}\n \n+\tmemcpy(hdr_field[BNXT_ULP_HDR_FIELD_SVIF_INDEX].spec,\n+\t       &svif, sizeof(svif));\n+\tmemcpy(hdr_field[BNXT_ULP_HDR_FIELD_SVIF_INDEX].mask,\n+\t       &mask, sizeof(mask));\n+\thdr_field[BNXT_ULP_HDR_FIELD_SVIF_INDEX].size = sizeof(svif);\n \treturn BNXT_TF_RC_SUCCESS;\n }\n \n+/* Function to handle the parsing of the RTE port id\n+ */\n+int32_t\n+ulp_rte_parser_svif_process(struct ulp_rte_hdr_bitmap\t*hdr_bitmap,\n+\t\t\t    struct ulp_rte_hdr_field\t*hdr_field)\n+{\n+\tuint16_t port_id = 0;\n+\tuint32_t dir = 0;\n+\tuint8_t\t*buffer;\n+\tuint16_t svif_mask = 0xFFFF;\n+\n+\tif (ULP_BITMAP_ISSET(hdr_bitmap->bits, BNXT_ULP_HDR_BIT_SVIF))\n+\t\treturn BNXT_TF_RC_SUCCESS;\n+\n+\t/* SVIF not set. So get the port id and direction */\n+\tbuffer = hdr_field[BNXT_ULP_HDR_FIELD_SVIF_INDEX].spec;\n+\tmemcpy(&port_id, buffer, sizeof(port_id));\n+\tmemcpy(&dir, buffer + sizeof(port_id), sizeof(dir));\n+\tmemset(hdr_field[BNXT_ULP_HDR_FIELD_SVIF_INDEX].spec, 0,\n+\t       RTE_PARSER_FLOW_HDR_FIELD_SIZE);\n+\n+\treturn ulp_rte_parser_svif_set(hdr_bitmap, hdr_field,\n+\t\t\t\t       RTE_FLOW_ITEM_TYPE_PORT_ID,\n+\t\t\t\t       dir, port_id, svif_mask);\n+}\n+\n /* Function to handle the parsing of RTE Flow item PF Header. */\n int32_t\n ulp_rte_pf_hdr_handler(const struct rte_flow_item *item,\n@@ -165,8 +200,20 @@ ulp_rte_pf_hdr_handler(const struct rte_flow_item *item,\n \t\t       uint32_t *field_idx __rte_unused,\n \t\t       uint32_t *vlan_idx __rte_unused)\n {\n+\tuint16_t port_id = 0;\n+\tuint32_t dir = 0;\n+\tuint8_t\t*buffer;\n+\tuint16_t svif_mask = 0xFFFF;\n+\n+\tbuffer = hdr_field[BNXT_ULP_HDR_FIELD_SVIF_INDEX].spec;\n+\tmemcpy(&port_id, buffer, sizeof(port_id));\n+\tmemcpy(&dir, buffer + sizeof(port_id), sizeof(dir));\n+\tmemset(hdr_field[BNXT_ULP_HDR_FIELD_SVIF_INDEX].spec, 0,\n+\t       RTE_PARSER_FLOW_HDR_FIELD_SIZE);\n+\n \treturn ulp_rte_parser_svif_set(hdr_bitmap, hdr_field,\n-\t\t\t\t       item->type, 0, 0);\n+\t\t\t\t       item->type,\n+\t\t\t\t       dir, port_id, svif_mask);\n }\n \n /* Function to handle the parsing of RTE Flow item VF Header. */\n@@ -178,7 +225,7 @@ ulp_rte_vf_hdr_handler(const struct rte_flow_item *item,\n \t\t       uint32_t *vlan_idx __rte_unused)\n {\n \tconst struct rte_flow_item_vf *vf_spec, *vf_mask;\n-\tuint32_t svif = 0, mask = 0;\n+\tuint16_t svif = 0, mask = 0;\n \n \tvf_spec = item->spec;\n \tvf_mask = item->mask;\n@@ -188,12 +235,12 @@ ulp_rte_vf_hdr_handler(const struct rte_flow_item *item,\n \t * header fields.\n \t */\n \tif (vf_spec)\n-\t\tsvif = vf_spec->id;\n+\t\tsvif = (uint16_t)vf_spec->id;\n \tif (vf_mask)\n-\t\tmask = vf_mask->id;\n+\t\tmask = (uint16_t)vf_mask->id;\n \n \treturn ulp_rte_parser_svif_set(hdr_bitmap, hdr_field,\n-\t\t\t\t       item->type, svif, mask);\n+\t\t\t\t       item->type, 0, svif, mask);\n }\n \n /* Function to handle the parsing of RTE Flow item port id  Header. */\n@@ -205,7 +252,9 @@ ulp_rte_port_id_hdr_handler(const struct rte_flow_item *item,\n \t\t\t    uint32_t *vlan_idx __rte_unused)\n {\n \tconst struct rte_flow_item_port_id *port_spec, *port_mask;\n-\tuint32_t svif = 0, mask = 0;\n+\tuint16_t svif = 0, mask = 0;\n+\tuint32_t dir;\n+\tuint8_t\t*buffer;\n \n \tport_spec = item->spec;\n \tport_mask = item->mask;\n@@ -215,12 +264,15 @@ ulp_rte_port_id_hdr_handler(const struct rte_flow_item *item,\n \t * header fields.\n \t */\n \tif (port_spec)\n-\t\tsvif = port_spec->id;\n+\t\tsvif = (uint16_t)port_spec->id;\n \tif (port_mask)\n-\t\tmask = port_mask->id;\n+\t\tmask = (uint16_t)port_mask->id;\n+\n+\tbuffer = hdr_field[BNXT_ULP_HDR_FIELD_SVIF_INDEX].spec;\n+\tmemcpy(&dir, buffer + sizeof(uint16_t), sizeof(uint16_t));\n \n \treturn ulp_rte_parser_svif_set(hdr_bitmap, hdr_field,\n-\t\t\t\t       item->type, svif, mask);\n+\t\t\t\t       item->type, dir, svif, mask);\n }\n \n /* Function to handle the parsing of RTE Flow item phy port Header. */\n@@ -244,7 +296,7 @@ ulp_rte_phy_port_hdr_handler(const struct rte_flow_item *item,\n \t\tmask = port_mask->index;\n \n \treturn ulp_rte_parser_svif_set(hdr_bitmap, hdr_field,\n-\t\t\t\t       item->type, svif, mask);\n+\t\t\t\t       item->type, 0, svif, mask);\n }\n \n /* Function to handle the parsing of RTE Flow item Ethernet Header. */\n@@ -1124,6 +1176,8 @@ ulp_rte_pf_act_handler(const struct rte_flow_action *action_item __rte_unused,\n \t/* copy the PF of the current device into VNIC Property */\n \tsvif_buf = &act_prop->act_details[BNXT_ULP_ACT_PROP_IDX_VNIC];\n \tulp_util_field_int_read(svif_buf, &svif);\n+\tsvif = (uint32_t)bnxt_get_vnic_id(svif);\n+\tsvif = htonl(svif);\n \tvnic_buffer = &act_prop->act_details[BNXT_ULP_ACT_PROP_IDX_VNIC];\n \tulp_util_field_int_write(vnic_buffer, svif);\n \ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h\nindex 0ab43d2..0d571bb 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h\n@@ -20,6 +20,11 @@\n #define BNXT_ULP_ENCAP_IPV6_SIZE\t\t8\n #define BNXT_ULP_ENCAP_UDP_SIZE\t\t\t4\n \n+/* Function to handle the parsing of the RTE port id. */\n+int32_t\n+ulp_rte_parser_svif_process(struct ulp_rte_hdr_bitmap\t*hdr_bitmap,\n+\t\t\t    struct ulp_rte_hdr_field\t*hdr_field);\n+\n /*\n  * Function to handle the parsing of RTE Flows and placing\n  * the RTE flow items into the ulp structures.\n",
    "prefixes": [
        "01/11"
    ]
}