get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 93576,
    "url": "http://patches.dpdk.org/api/patches/93576/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20210530085929.29695-29-venkatkumar.duvvuru@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": "<20210530085929.29695-29-venkatkumar.duvvuru@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210530085929.29695-29-venkatkumar.duvvuru@broadcom.com",
    "date": "2021-05-30T08:58:59",
    "name": "[28/58] net/bnxt: add support for mapper flow database opcodes",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "ae91af41580299e20ecc78d4d1dc554035c2fbe3",
    "submitter": {
        "id": 1635,
        "url": "http://patches.dpdk.org/api/people/1635/?format=api",
        "name": "Venkat Duvvuru",
        "email": "venkatkumar.duvvuru@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/20210530085929.29695-29-venkatkumar.duvvuru@broadcom.com/mbox/",
    "series": [
        {
            "id": 17161,
            "url": "http://patches.dpdk.org/api/series/17161/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=17161",
            "date": "2021-05-30T08:58:31",
            "name": "enhancements to host based flow table management",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/17161/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/93576/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/93576/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 mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 0B4FFA0524;\n\tSun, 30 May 2021 11:04:26 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 625D4410F9;\n\tSun, 30 May 2021 11:01:17 +0200 (CEST)",
            "from relay.smtp-ext.broadcom.com (saphodev.broadcom.com\n [192.19.11.229]) by mails.dpdk.org (Postfix) with ESMTP id 3BD4540E01\n for <dev@dpdk.org>; Sun, 30 May 2021 11:01:15 +0200 (CEST)",
            "from S60.dhcp.broadcom.net (unknown [10.123.66.170])\n (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))\n (No client certificate requested)\n by relay.smtp-ext.broadcom.com (Postfix) with ESMTPS id CE94E7DC0;\n Sun, 30 May 2021 02:01:13 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 relay.smtp-ext.broadcom.com CE94E7DC0",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com;\n s=dkimrelay; t=1622365274;\n bh=cPCwC6QrZComzBuVXBBNPIHxDuxFxTn3EUkazHZP2+A=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=ECzxhh8c/6c+La8MMZed9/tAklqXmzGlEF5s1SwVF2tA9MgYcpY5USKXA5xE/j4Y0\n mH9EGFp6yC4GAjqw5zNEMnABti7QvZQsq6ND9HzbvD0Kxx/GQn//kIW+rBnYOcPt5X\n UXcS8F0lpOxtlp5AwgoEShsjF03gMMNPcyp9I9OI=",
        "From": "Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "Kishore Padmanabha <kishore.padmanabha@broadcom.com>,\n Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>",
        "Date": "Sun, 30 May 2021 14:28:59 +0530",
        "Message-Id": "<20210530085929.29695-29-venkatkumar.duvvuru@broadcom.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20210530085929.29695-1-venkatkumar.duvvuru@broadcom.com>",
        "References": "<20210530085929.29695-1-venkatkumar.duvvuru@broadcom.com>",
        "Subject": "[dpdk-dev] [PATCH 28/58] net/bnxt: add support for mapper flow\n database opcodes",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "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: Kishore Padmanabha <kishore.padmanabha@broadcom.com>\n\nAdded support for mapper flow database opcode to enable\nshared resources like mirror action. This allows mapper\nto conditionally populate flow database based on template content.\n\nSigned-off-by: Kishore Padmanabha <kishore.padmanabha@broadcom.com>\nSigned-off-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>\nReviewed-by: Michael Baucom <michael.baucom@broadcom.com>\n---\n drivers/net/bnxt/tf_ulp/ulp_mapper.c          | 119 ++++++++++++------\n .../net/bnxt/tf_ulp/ulp_template_db_enum.h    |   8 ++\n drivers/net/bnxt/tf_ulp/ulp_template_struct.h |   4 +\n 3 files changed, 95 insertions(+), 36 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper.c b/drivers/net/bnxt/tf_ulp/ulp_mapper.c\nindex 2bb8d08699..4e9211a7ab 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_mapper.c\n+++ b/drivers/net/bnxt/tf_ulp/ulp_mapper.c\n@@ -469,6 +469,80 @@ ulp_mapper_child_flow_free(struct bnxt_ulp_context *ulp,\n \treturn 0;\n }\n \n+/*\n+ * Process the flow database opcode action.\n+ * returns 0 on success.\n+ */\n+static int32_t\n+ulp_mapper_fdb_opc_process(struct bnxt_ulp_mapper_parms *parms,\n+\t\t\t   struct bnxt_ulp_mapper_tbl_info *tbl,\n+\t\t\t   struct ulp_flow_db_res_params *fid_parms)\n+{\n+\tuint32_t push_fid, fid = 0;\n+\tuint64_t val64;\n+\tint32_t rc = 0;\n+\n+\tswitch (tbl->fdb_opcode) {\n+\tcase BNXT_ULP_FDB_OPC_PUSH:\n+\t\tpush_fid = parms->fid;\n+\t\tbreak;\n+\tcase BNXT_ULP_FDB_OPC_ALLOC_PUSH_REGFILE:\n+\t\t/* allocate a new fid */\n+\t\trc = ulp_flow_db_fid_alloc(parms->ulp_ctx,\n+\t\t\t\t\t   BNXT_ULP_FDB_TYPE_REGULAR,\n+\t\t\t\t\t   tbl->resource_func, &fid);\n+\t\tif (rc) {\n+\t\t\tBNXT_TF_DBG(ERR,\n+\t\t\t\t    \"Unable to allocate flow table entry\\n\");\n+\t\t\treturn rc;\n+\t\t}\n+\t\t/* Store the allocated fid in regfile*/\n+\t\tval64 = fid;\n+\t\trc = ulp_regfile_write(parms->regfile, tbl->flow_db_operand,\n+\t\t\t\t       val64);\n+\t\tif (!rc) {\n+\t\t\tBNXT_TF_DBG(ERR, \"Write regfile[%d] failed\\n\",\n+\t\t\t\t    tbl->flow_db_operand);\n+\t\t\trc = -EINVAL;\n+\t\t\tgoto error;\n+\t\t}\n+\t\t/* Use the allocated fid to update the flow resource */\n+\t\tpush_fid = fid;\n+\t\tbreak;\n+\tcase BNXT_ULP_FDB_OPC_PUSH_REGFILE:\n+\t\t/* get the fid from the regfile */\n+\t\trc = ulp_regfile_read(parms->regfile, tbl->flow_db_operand,\n+\t\t\t\t      &val64);\n+\t\tif (!rc) {\n+\t\t\tBNXT_TF_DBG(ERR, \"regfile[%d] read oob\\n\",\n+\t\t\t\t    tbl->flow_db_operand);\n+\t\t\treturn -EINVAL;\n+\t\t}\n+\t\t/* Use the extracted fid to update the flow resource */\n+\t\tpush_fid = (uint32_t)val64;\n+\t\tbreak;\n+\tdefault:\n+\t\treturn rc; /* Nothing to be done */\n+\t}\n+\n+\t/* Add the resource to the flow database */\n+\trc = ulp_flow_db_resource_add(parms->ulp_ctx, parms->flow_type,\n+\t\t\t\t      push_fid, fid_parms);\n+\tif (rc) {\n+\t\tBNXT_TF_DBG(ERR, \"Failed to add res to flow %x rc = %d\\n\",\n+\t\t\t    push_fid, rc);\n+\t\tgoto error;\n+\t}\n+\treturn rc;\n+\n+error:\n+\t/* free the allocated fid */\n+\tif (fid)\n+\t\tulp_flow_db_fid_free(parms->ulp_ctx,\n+\t\t\t\t     BNXT_ULP_FDB_TYPE_REGULAR, fid);\n+\treturn rc;\n+}\n+\n /*\n  * Process the identifier instruction and either store it in the flow database\n  * or return it in the val (if not NULL) on success.  If val is NULL, the\n@@ -524,10 +598,7 @@ ulp_mapper_ident_process(struct bnxt_ulp_mapper_parms *parms,\n \t\tfid_parms.resource_hndl\t= iparms.id;\n \t\tfid_parms.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO;\n \n-\t\trc = ulp_flow_db_resource_add(parms->ulp_ctx,\n-\t\t\t\t\t      parms->flow_type,\n-\t\t\t\t\t      parms->fid,\n-\t\t\t\t\t      &fid_parms);\n+\t\trc = ulp_mapper_fdb_opc_process(parms, tbl, &fid_parms);\n \t\tif (rc) {\n \t\t\tBNXT_TF_DBG(ERR, \"Failed to link res to flow rc = %d\\n\",\n \t\t\t\t    rc);\n@@ -618,10 +689,7 @@ ulp_mapper_ident_extract(struct bnxt_ulp_mapper_parms *parms,\n \tfid_parms.resource_type = ident->ident_type;\n \tfid_parms.resource_hndl = sparms.search_id;\n \tfid_parms.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO;\n-\trc = ulp_flow_db_resource_add(parms->ulp_ctx,\n-\t\t\t\t      parms->flow_type,\n-\t\t\t\t      parms->fid,\n-\t\t\t\t      &fid_parms);\n+\trc = ulp_mapper_fdb_opc_process(parms, tbl, &fid_parms);\n \tif (rc) {\n \t\tBNXT_TF_DBG(ERR, \"Failed to link res to flow rc = %d\\n\",\n \t\t\t    rc);\n@@ -1103,10 +1171,7 @@ ulp_mapper_mark_gfid_process(struct bnxt_ulp_mapper_parms *parms,\n \tfid_parms.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO;\n \tfid_parms.resource_type\t= mark_flag;\n \tfid_parms.resource_hndl\t= gfid;\n-\trc = ulp_flow_db_resource_add(parms->ulp_ctx,\n-\t\t\t\t      parms->flow_type,\n-\t\t\t\t      parms->fid,\n-\t\t\t\t      &fid_parms);\n+\trc = ulp_mapper_fdb_opc_process(parms, tbl, &fid_parms);\n \tif (rc)\n \t\tBNXT_TF_DBG(ERR, \"Fail to link res to flow rc = %d\\n\", rc);\n \treturn rc;\n@@ -1152,10 +1217,7 @@ ulp_mapper_mark_act_ptr_process(struct bnxt_ulp_mapper_parms *parms,\n \tfid_parms.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO;\n \tfid_parms.resource_type\t= mark_flag;\n \tfid_parms.resource_hndl\t= act_idx;\n-\trc = ulp_flow_db_resource_add(parms->ulp_ctx,\n-\t\t\t\t      parms->flow_type,\n-\t\t\t\t      parms->fid,\n-\t\t\t\t      &fid_parms);\n+\trc = ulp_mapper_fdb_opc_process(parms, tbl, &fid_parms);\n \tif (rc)\n \t\tBNXT_TF_DBG(ERR, \"Fail to link res to flow rc = %d\\n\", rc);\n \treturn rc;\n@@ -1201,10 +1263,7 @@ ulp_mapper_mark_vfr_idx_process(struct bnxt_ulp_mapper_parms *parms,\n \tfid_parms.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO;\n \tfid_parms.resource_type\t= mark_flag;\n \tfid_parms.resource_hndl\t= act_idx;\n-\trc = ulp_flow_db_resource_add(parms->ulp_ctx,\n-\t\t\t\t      parms->flow_type,\n-\t\t\t\t      parms->fid,\n-\t\t\t\t      &fid_parms);\n+\trc = ulp_mapper_fdb_opc_process(parms, tbl, &fid_parms);\n \tif (rc)\n \t\tBNXT_TF_DBG(ERR, \"Fail to link res to flow rc = %d\\n\", rc);\n \treturn rc;\n@@ -1580,10 +1639,7 @@ ulp_mapper_tcam_tbl_process(struct bnxt_ulp_mapper_parms *parms,\n \t\tfid_parms.resource_type\t= tbl->resource_type;\n \t\tfid_parms.critical_resource = tbl->critical_resource;\n \t\tfid_parms.resource_hndl\t= idx;\n-\t\trc = ulp_flow_db_resource_add(parms->ulp_ctx,\n-\t\t\t\t\t      parms->flow_type,\n-\t\t\t\t\t      parms->fid,\n-\t\t\t\t\t      &fid_parms);\n+\t\trc = ulp_mapper_fdb_opc_process(parms, tbl, &fid_parms);\n \t\tif (rc) {\n \t\t\tBNXT_TF_DBG(ERR,\n \t\t\t\t    \"Failed to link resource to flow rc = %d\\n\",\n@@ -1741,10 +1797,7 @@ ulp_mapper_em_tbl_process(struct bnxt_ulp_mapper_parms *parms,\n \tfid_parms.critical_resource\t= tbl->critical_resource;\n \tfid_parms.resource_hndl\t\t= iparms.flow_handle;\n \n-\trc = ulp_flow_db_resource_add(parms->ulp_ctx,\n-\t\t\t\t      parms->flow_type,\n-\t\t\t\t      parms->fid,\n-\t\t\t\t      &fid_parms);\n+\trc = ulp_mapper_fdb_opc_process(parms, tbl, &fid_parms);\n \tif (rc) {\n \t\tBNXT_TF_DBG(ERR, \"Fail to link res to flow rc = %d\\n\",\n \t\t\t    rc);\n@@ -1968,10 +2021,7 @@ ulp_mapper_index_tbl_process(struct bnxt_ulp_mapper_parms *parms,\n \tfid_parms.resource_hndl\t= index;\n \tfid_parms.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO;\n \n-\trc = ulp_flow_db_resource_add(parms->ulp_ctx,\n-\t\t\t\t      parms->flow_type,\n-\t\t\t\t      parms->fid,\n-\t\t\t\t      &fid_parms);\n+\trc = ulp_mapper_fdb_opc_process(parms, tbl, &fid_parms);\n \tif (rc) {\n \t\tBNXT_TF_DBG(ERR, \"Failed to link resource to flow rc = %d\\n\",\n \t\t\t    rc);\n@@ -2280,10 +2330,7 @@ ulp_mapper_gen_tbl_process(struct bnxt_ulp_mapper_parms *parms,\n \t\tfid_parms.resource_sub_type = tbl->resource_sub_type;\n \t\tfid_parms.resource_hndl\t= ckey;\n \t\tfid_parms.critical_resource = tbl->critical_resource;\n-\t\trc = ulp_flow_db_resource_add(parms->ulp_ctx,\n-\t\t\t\t\t      parms->flow_type,\n-\t\t\t\t\t      parms->fid,\n-\t\t\t\t\t      &fid_parms);\n+\t\trc = ulp_mapper_fdb_opc_process(parms, tbl, &fid_parms);\n \t\tif (rc)\n \t\t\tBNXT_TF_DBG(ERR, \"Fail to add gen ent flowdb %d\\n\", rc);\n \t}\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h b/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h\nindex 2a9a290eea..f16651a821 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_template_db_enum.h\n@@ -179,6 +179,14 @@ enum bnxt_ulp_direction {\n \tBNXT_ULP_DIRECTION_LAST = 2\n };\n \n+enum bnxt_ulp_fdb_opc {\n+\tBNXT_ULP_FDB_OPC_PUSH = 0,\n+\tBNXT_ULP_FDB_OPC_ALLOC_PUSH_REGFILE = 1,\n+\tBNXT_ULP_FDB_OPC_PUSH_REGFILE = 2,\n+\tBNXT_ULP_FDB_OPC_NOP = 3,\n+\tBNXT_ULP_FDB_OPC_LAST = 4\n+};\n+\n enum bnxt_ulp_flow_mem_type {\n \tBNXT_ULP_FLOW_MEM_TYPE_INT = 0,\n \tBNXT_ULP_FLOW_MEM_TYPE_EXT = 1,\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h\nindex 67308f1cf1..167116a2f4 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_template_struct.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_template_struct.h\n@@ -220,6 +220,10 @@ struct bnxt_ulp_mapper_tbl_info {\n \n \t/* Table opcode for table operations */\n \tuint32_t\t\t\ttbl_opcode;\n+\n+\t/* FDB table opcode */\n+\tenum bnxt_ulp_fdb_opc\t\tfdb_opcode;\n+\tuint32_t\t\t\tflow_db_operand;\n };\n \n struct bnxt_ulp_mapper_key_field_info {\n",
    "prefixes": [
        "28/58"
    ]
}