get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 81194,
    "url": "http://patches.dpdk.org/api/patches/81194/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1602916089-18576-13-git-send-email-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": "<1602916089-18576-13-git-send-email-venkatkumar.duvvuru@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1602916089-18576-13-git-send-email-venkatkumar.duvvuru@broadcom.com",
    "date": "2020-10-17T06:28:07",
    "name": "[12/14] net/bnxt: refactor flow id allocation",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "7837ccfb16abcfaf7e200e5ad9511f631722fd95",
    "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/1602916089-18576-13-git-send-email-venkatkumar.duvvuru@broadcom.com/mbox/",
    "series": [
        {
            "id": 13073,
            "url": "http://patches.dpdk.org/api/series/13073/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=13073",
            "date": "2020-10-17T06:27:55",
            "name": "bnxt patches",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/13073/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/81194/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/81194/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 4178EA04DB;\n\tSat, 17 Oct 2020 08:32:44 +0200 (CEST)",
            "from [92.243.14.124] (localhost [127.0.0.1])\n\tby dpdk.org (Postfix) with ESMTP id 64DD8FC4B;\n\tSat, 17 Oct 2020 08:28:36 +0200 (CEST)",
            "from relay.smtp-ext.broadcom.com (unknown [192.19.221.30])\n by dpdk.org (Postfix) with ESMTP id 235D7E2D2\n for <dev@dpdk.org>; Sat, 17 Oct 2020 08:28:16 +0200 (CEST)",
            "from S60.dhcp.broadcom.net (unknown [10.123.66.170])\n (using TLSv1.2 with cipher ECDHE-RSA-AES128-SHA256 (128/128 bits))\n (No client certificate requested)\n by relay.smtp-ext.broadcom.com (Postfix) with ESMTPS id EC63282CE9;\n Fri, 16 Oct 2020 23:28:14 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 relay.smtp-ext.broadcom.com EC63282CE9",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com;\n s=dkimrelay; t=1602916095;\n bh=5ED7q2CNLmNo1iAvkEdrvEe0vIM33oS8UlHY2qLWj7w=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=dh420ChbkpkJtXkFJ3cc+a9Fn6o1vaxFJOPQOTW0L12SsN9OvjI3Qu4E0b2xtxFmr\n 2zO+TsZCuz2+8ZeVtNRMwgxy88LR0Ev6BEWWPsEGradLO44YW/g354O9zj2TEtp4pw\n K1wM7eqoAlzNUbukiQPQyq4QTD1suGiMuivgeZiM=",
        "From": "Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>",
        "Date": "Sat, 17 Oct 2020 11:58:07 +0530",
        "Message-Id": "\n <1602916089-18576-13-git-send-email-venkatkumar.duvvuru@broadcom.com>",
        "X-Mailer": "git-send-email 2.7.4",
        "In-Reply-To": "\n <1602916089-18576-1-git-send-email-venkatkumar.duvvuru@broadcom.com>",
        "References": "\n <1602916089-18576-1-git-send-email-venkatkumar.duvvuru@broadcom.com>",
        "Subject": "[dpdk-dev] [PATCH 12/14] net/bnxt: refactor flow id allocation",
        "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": "Currently, the flow id is allocated inside ulp_mapper_flow_create.\nHowever with vxlan decap feature if F2 flow comes before F1 flow\nthen F2 is cached and not really installed in the hardware which\nmeans the code will return without calling ulp_mapper_flow_create.\nBut, ULP has to still return valid flow id to the stack.\nHence, move the flow id allocation outside ulp_mapper_flow_create.\n\nSigned-off-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>\nReviewed-by: Somnath Kotur <somnath.kotur@broadcom.com>\n---\n drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c  | 109 ++++++++++++++++++++++---------\n drivers/net/bnxt/tf_ulp/ulp_def_rules.c  |  48 ++++++++++++--\n drivers/net/bnxt/tf_ulp/ulp_mapper.c     |  35 +---------\n drivers/net/bnxt/tf_ulp/ulp_mapper.h     |   4 +-\n drivers/net/bnxt/tf_ulp/ulp_rte_parser.h |   9 +++\n 5 files changed, 132 insertions(+), 73 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 c7b2982..47fbaba 100644\n--- a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c\n+++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c\n@@ -74,6 +74,29 @@ bnxt_ulp_set_dir_attributes(struct ulp_rte_parser_params *params,\n \t\tparams->dir_attr |= BNXT_ULP_FLOW_ATTR_TRANSFER;\n }\n \n+void\n+bnxt_ulp_init_mapper_params(struct bnxt_ulp_mapper_create_parms *mapper_cparms,\n+\t\t\t    struct ulp_rte_parser_params *params,\n+\t\t\t    uint32_t priority, uint32_t class_id,\n+\t\t\t    uint32_t act_tmpl, uint16_t func_id,\n+\t\t\t    uint32_t fid,\n+\t\t\t    enum bnxt_ulp_fdb_type flow_type)\n+{\n+\tmapper_cparms->app_priority = priority;\n+\tmapper_cparms->dir_attr = params->dir_attr;\n+\n+\tmapper_cparms->class_tid = class_id;\n+\tmapper_cparms->act_tid = act_tmpl;\n+\tmapper_cparms->func_id = func_id;\n+\tmapper_cparms->hdr_bitmap = &params->hdr_bitmap;\n+\tmapper_cparms->hdr_field = params->hdr_field;\n+\tmapper_cparms->comp_fld = params->comp_fld;\n+\tmapper_cparms->act = &params->act_bitmap;\n+\tmapper_cparms->act_prop = &params->act_prop;\n+\tmapper_cparms->flow_type = flow_type;\n+\tmapper_cparms->flow_id = fid;\n+}\n+\n /* Function to create the rte flow. */\n static struct rte_flow *\n bnxt_ulp_flow_create(struct rte_eth_dev *dev,\n@@ -85,22 +108,23 @@ bnxt_ulp_flow_create(struct rte_eth_dev *dev,\n \tstruct bnxt_ulp_mapper_create_parms mapper_cparms = { 0 };\n \tstruct ulp_rte_parser_params params;\n \tstruct bnxt_ulp_context *ulp_ctx;\n+\tint rc, ret = BNXT_TF_RC_ERROR;\n \tuint32_t class_id, act_tmpl;\n \tstruct rte_flow *flow_id;\n+\tuint16_t func_id;\n \tuint32_t fid;\n-\tint ret = BNXT_TF_RC_ERROR;\n \n \tif (bnxt_ulp_flow_validate_args(attr,\n \t\t\t\t\tpattern, actions,\n \t\t\t\t\terror) == BNXT_TF_RC_ERROR) {\n \t\tBNXT_TF_DBG(ERR, \"Invalid arguments being passed\\n\");\n-\t\tgoto parse_error;\n+\t\tgoto parse_err1;\n \t}\n \n \tulp_ctx = bnxt_ulp_eth_dev_ptr2_cntxt_get(dev);\n \tif (!ulp_ctx) {\n \t\tBNXT_TF_DBG(ERR, \"ULP context is not initialized\\n\");\n-\t\tgoto parse_error;\n+\t\tgoto parse_err1;\n \t}\n \n \t/* Initialize the parser params */\n@@ -116,56 +140,72 @@ bnxt_ulp_flow_create(struct rte_eth_dev *dev,\n \tULP_COMP_FLD_IDX_WR(&params, BNXT_ULP_CF_IDX_SVIF_FLAG,\n \t\t\t    BNXT_ULP_INVALID_SVIF_VAL);\n \n+\t/* Get the function id */\n+\tif (ulp_port_db_port_func_id_get(ulp_ctx,\n+\t\t\t\t\t dev->data->port_id,\n+\t\t\t\t\t &func_id)) {\n+\t\tBNXT_TF_DBG(ERR, \"conversion of port to func id failed\\n\");\n+\t\tgoto parse_err1;\n+\t}\n+\n+\t/* Protect flow creation */\n+\tif (bnxt_ulp_cntxt_acquire_fdb_lock(ulp_ctx)) {\n+\t\tBNXT_TF_DBG(ERR, \"Flow db lock acquire failed\\n\");\n+\t\tgoto parse_err1;\n+\t}\n+\n+\t/* Allocate a Flow ID for attaching all resources for the flow to.\n+\t * Once allocated, all errors have to walk the list of resources and\n+\t * free each of them.\n+\t */\n+\trc = ulp_flow_db_fid_alloc(ulp_ctx, BNXT_ULP_FDB_TYPE_REGULAR,\n+\t\t\t\t   func_id, &fid);\n+\tif (rc) {\n+\t\tBNXT_TF_DBG(ERR, \"Unable to allocate flow table entry\\n\");\n+\t\tgoto parse_err2;\n+\t}\n+\n \t/* Parse the rte flow pattern */\n \tret = bnxt_ulp_rte_parser_hdr_parse(pattern, &params);\n \tif (ret != BNXT_TF_RC_SUCCESS)\n-\t\tgoto parse_error;\n+\t\tgoto parse_err3;\n \n \t/* Parse the rte flow action */\n \tret = bnxt_ulp_rte_parser_act_parse(actions, &params);\n \tif (ret != BNXT_TF_RC_SUCCESS)\n-\t\tgoto parse_error;\n+\t\tgoto parse_err3;\n \n \t/* Perform the rte flow post process */\n \tret = bnxt_ulp_rte_parser_post_process(&params);\n \tif (ret != BNXT_TF_RC_SUCCESS)\n-\t\tgoto parse_error;\n+\t\tgoto parse_err3;\n \n \tret = ulp_matcher_pattern_match(&params, &class_id);\n \tif (ret != BNXT_TF_RC_SUCCESS)\n-\t\tgoto parse_error;\n+\t\tgoto parse_err3;\n \n \tret = ulp_matcher_action_match(&params, &act_tmpl);\n \tif (ret != BNXT_TF_RC_SUCCESS)\n-\t\tgoto parse_error;\n+\t\tgoto parse_err3;\n \n-\tmapper_cparms.app_priority = attr->priority;\n-\tmapper_cparms.hdr_bitmap = &params.hdr_bitmap;\n-\tmapper_cparms.hdr_field = params.hdr_field;\n-\tmapper_cparms.comp_fld = params.comp_fld;\n-\tmapper_cparms.act = &params.act_bitmap;\n-\tmapper_cparms.act_prop = &params.act_prop;\n-\tmapper_cparms.class_tid = class_id;\n-\tmapper_cparms.act_tid = act_tmpl;\n-\tmapper_cparms.flow_type = BNXT_ULP_FDB_TYPE_REGULAR;\n+\tbnxt_ulp_init_mapper_params(&mapper_cparms, &params, attr->priority,\n+\t\t\t\t    class_id, act_tmpl, func_id, fid,\n+\t\t\t\t    BNXT_ULP_FDB_TYPE_REGULAR);\n+\t/* Call the ulp mapper to create the flow in the hardware. */\n+\tret = ulp_mapper_flow_create(ulp_ctx, &mapper_cparms);\n+\tif (ret)\n+\t\tgoto parse_err3;\n \n-\t/* Get the function id */\n-\tif (ulp_port_db_port_func_id_get(ulp_ctx,\n-\t\t\t\t\t dev->data->port_id,\n-\t\t\t\t\t &mapper_cparms.func_id)) {\n-\t\tBNXT_TF_DBG(ERR, \"conversion of port to func id failed\\n\");\n-\t\tgoto parse_error;\n-\t}\n-\tmapper_cparms.dir_attr = params.dir_attr;\n+\tbnxt_ulp_cntxt_release_fdb_lock(ulp_ctx);\n \n-\t/* Call the ulp mapper to create the flow in the hardware. */\n-\tret = ulp_mapper_flow_create(ulp_ctx, &mapper_cparms, &fid);\n-\tif (!ret) {\n-\t\tflow_id = (struct rte_flow *)((uintptr_t)fid);\n-\t\treturn flow_id;\n-\t}\n+\tflow_id = (struct rte_flow *)((uintptr_t)fid);\n+\treturn flow_id;\n \n-parse_error:\n+parse_err3:\n+\tulp_flow_db_fid_free(ulp_ctx, BNXT_ULP_FDB_TYPE_REGULAR, fid);\n+parse_err2:\n+\tbnxt_ulp_cntxt_release_fdb_lock(ulp_ctx);\n+parse_err1:\n \trte_flow_error_set(error, ret, RTE_FLOW_ERROR_TYPE_HANDLE, NULL,\n \t\t\t   \"Failed to create flow.\");\n \treturn NULL;\n@@ -281,6 +321,10 @@ bnxt_ulp_flow_destroy(struct rte_eth_dev *dev,\n \t\treturn -EINVAL;\n \t}\n \n+\tif (bnxt_ulp_cntxt_acquire_fdb_lock(ulp_ctx)) {\n+\t\tBNXT_TF_DBG(ERR, \"Flow db lock acquire failed\\n\");\n+\t\treturn -EINVAL;\n+\t}\n \tret = ulp_mapper_flow_destroy(ulp_ctx, BNXT_ULP_FDB_TYPE_REGULAR,\n \t\t\t\t      flow_id);\n \tif (ret) {\n@@ -290,6 +334,7 @@ bnxt_ulp_flow_destroy(struct rte_eth_dev *dev,\n \t\t\t\t\t   RTE_FLOW_ERROR_TYPE_HANDLE, NULL,\n \t\t\t\t\t   \"Failed to destroy flow.\");\n \t}\n+\tbnxt_ulp_cntxt_release_fdb_lock(ulp_ctx);\n \n \treturn ret;\n }\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_def_rules.c b/drivers/net/bnxt/tf_ulp/ulp_def_rules.c\nindex c36d4d4..ec504fc 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_def_rules.c\n+++ b/drivers/net/bnxt/tf_ulp/ulp_def_rules.c\n@@ -304,8 +304,8 @@ ulp_default_flow_create(struct rte_eth_dev *eth_dev,\n \tstruct ulp_rte_act_prop\t\tact_prop;\n \tstruct ulp_rte_act_bitmap\tact = { 0 };\n \tstruct bnxt_ulp_context\t\t*ulp_ctx;\n-\tuint32_t type, ulp_flags = 0;\n-\tint rc;\n+\tuint32_t type, ulp_flags = 0, fid;\n+\tint rc = 0;\n \n \tmemset(&mapper_params, 0, sizeof(mapper_params));\n \tmemset(hdr_field, 0, sizeof(hdr_field));\n@@ -316,6 +316,8 @@ ulp_default_flow_create(struct rte_eth_dev *eth_dev,\n \tmapper_params.act = &act;\n \tmapper_params.act_prop = &act_prop;\n \tmapper_params.comp_fld = comp_fld;\n+\tmapper_params.class_tid = ulp_class_tid;\n+\tmapper_params.flow_type = BNXT_ULP_FDB_TYPE_DEFAULT;\n \n \tulp_ctx = bnxt_ulp_eth_dev_ptr2_cntxt_get(eth_dev);\n \tif (!ulp_ctx) {\n@@ -350,16 +352,43 @@ ulp_default_flow_create(struct rte_eth_dev *eth_dev,\n \t\ttype = param_list->type;\n \t}\n \n-\tmapper_params.class_tid = ulp_class_tid;\n-\tmapper_params.flow_type = BNXT_ULP_FDB_TYPE_DEFAULT;\n+\t/* Get the function id */\n+\tif (ulp_port_db_port_func_id_get(ulp_ctx,\n+\t\t\t\t\t eth_dev->data->port_id,\n+\t\t\t\t\t &mapper_params.func_id)) {\n+\t\tBNXT_TF_DBG(ERR, \"conversion of port to func id failed\\n\");\n+\t\tgoto err1;\n+\t}\n+\n+\t/* Protect flow creation */\n+\tif (bnxt_ulp_cntxt_acquire_fdb_lock(ulp_ctx)) {\n+\t\tBNXT_TF_DBG(ERR, \"Flow db lock acquire failed\\n\");\n+\t\tgoto err1;\n+\t}\n \n-\trc = ulp_mapper_flow_create(ulp_ctx, &mapper_params, flow_id);\n+\trc = ulp_flow_db_fid_alloc(ulp_ctx, BNXT_ULP_FDB_TYPE_DEFAULT,\n+\t\t\t\t   mapper_params.func_id, &fid);\n \tif (rc) {\n-\t\tBNXT_TF_DBG(ERR, \"Failed to create default flow.\\n\");\n-\t\treturn rc;\n+\t\tBNXT_TF_DBG(ERR, \"Unable to allocate flow table entry\\n\");\n+\t\tgoto err2;\n \t}\n \n+\tmapper_params.flow_id = fid;\n+\trc = ulp_mapper_flow_create(ulp_ctx, &mapper_params);\n+\tif (rc)\n+\t\tgoto err3;\n+\n+\tbnxt_ulp_cntxt_release_fdb_lock(ulp_ctx);\n+\t*flow_id = fid;\n \treturn 0;\n+\n+err3:\n+\tulp_flow_db_fid_free(ulp_ctx, BNXT_ULP_FDB_TYPE_DEFAULT, fid);\n+err2:\n+\tbnxt_ulp_cntxt_release_fdb_lock(ulp_ctx);\n+err1:\n+\tBNXT_TF_DBG(ERR, \"Failed to create default flow.\\n\");\n+\treturn rc;\n }\n \n /*\n@@ -391,10 +420,15 @@ ulp_default_flow_destroy(struct rte_eth_dev *eth_dev, uint32_t flow_id)\n \t\treturn rc;\n \t}\n \n+\tif (bnxt_ulp_cntxt_acquire_fdb_lock(ulp_ctx)) {\n+\t\tBNXT_TF_DBG(ERR, \"Flow db lock acquire failed\\n\");\n+\t\treturn -EINVAL;\n+\t}\n \trc = ulp_mapper_flow_destroy(ulp_ctx, BNXT_ULP_FDB_TYPE_DEFAULT,\n \t\t\t\t     flow_id);\n \tif (rc)\n \t\tBNXT_TF_DBG(ERR, \"Failed to destroy flow.\\n\");\n+\tbnxt_ulp_cntxt_release_fdb_lock(ulp_ctx);\n \n \treturn rc;\n }\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper.c b/drivers/net/bnxt/tf_ulp/ulp_mapper.c\nindex 27b4780..d5c129b 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_mapper.c\n+++ b/drivers/net/bnxt/tf_ulp/ulp_mapper.c\n@@ -2723,15 +2723,9 @@ ulp_mapper_flow_destroy(struct bnxt_ulp_context *ulp_ctx,\n \t\tBNXT_TF_DBG(ERR, \"Invalid parms, unable to free flow\\n\");\n \t\treturn -EINVAL;\n \t}\n-\tif (bnxt_ulp_cntxt_acquire_fdb_lock(ulp_ctx)) {\n-\t\tBNXT_TF_DBG(ERR, \"Flow db lock acquire failed\\n\");\n-\t\treturn -EINVAL;\n-\t}\n \n \trc = ulp_mapper_resources_free(ulp_ctx, flow_type, fid);\n-\tbnxt_ulp_cntxt_release_fdb_lock(ulp_ctx);\n \treturn rc;\n-\n }\n \n /* Function to handle the default global templates that are allocated during\n@@ -2795,8 +2789,7 @@ ulp_mapper_glb_template_table_init(struct bnxt_ulp_context *ulp_ctx)\n  */\n int32_t\n ulp_mapper_flow_create(struct bnxt_ulp_context *ulp_ctx,\n-\t\t       struct bnxt_ulp_mapper_create_parms *cparms,\n-\t\t       uint32_t *flowid)\n+\t\t       struct bnxt_ulp_mapper_create_parms *cparms)\n {\n \tstruct bnxt_ulp_mapper_parms parms;\n \tstruct ulp_regfile regfile;\n@@ -2821,6 +2814,7 @@ ulp_mapper_flow_create(struct bnxt_ulp_context *ulp_ctx,\n \tparms.flow_type = cparms->flow_type;\n \tparms.parent_flow = cparms->parent_flow;\n \tparms.parent_fid = cparms->parent_fid;\n+\tparms.fid = cparms->flow_id;\n \n \t/* Get the device id from the ulp context */\n \tif (bnxt_ulp_cntxt_dev_id_get(ulp_ctx, &parms.dev_id)) {\n@@ -2861,26 +2855,7 @@ ulp_mapper_flow_create(struct bnxt_ulp_context *ulp_ctx,\n \t\treturn -EINVAL;\n \t}\n \n-\t/* Protect flow creation */\n-\tif (bnxt_ulp_cntxt_acquire_fdb_lock(ulp_ctx)) {\n-\t\tBNXT_TF_DBG(ERR, \"Flow db lock acquire failed\\n\");\n-\t\treturn -EINVAL;\n-\t}\n-\n-\t/* Allocate a Flow ID for attaching all resources for the flow to.\n-\t * Once allocated, all errors have to walk the list of resources and\n-\t * free each of them.\n-\t */\n-\trc = ulp_flow_db_fid_alloc(ulp_ctx,\n-\t\t\t\t   parms.flow_type,\n-\t\t\t\t   cparms->func_id,\n-\t\t\t\t   &parms.fid);\n-\tif (rc) {\n-\t\tBNXT_TF_DBG(ERR, \"Unable to allocate flow table entry\\n\");\n-\t\tbnxt_ulp_cntxt_release_fdb_lock(ulp_ctx);\n-\t\treturn rc;\n-\t}\n-\n+\t/* Process the action template list from the selected action table*/\n \tif (parms.act_tid) {\n \t\tparms.tmpl_type = BNXT_ULP_TEMPLATE_TYPE_ACTION;\n \t\t/* Process the action template tables */\n@@ -2911,13 +2886,9 @@ ulp_mapper_flow_create(struct bnxt_ulp_context *ulp_ctx,\n \t\t\tgoto flow_error;\n \t}\n \n-\t*flowid = parms.fid;\n-\tbnxt_ulp_cntxt_release_fdb_lock(ulp_ctx);\n-\n \treturn rc;\n \n flow_error:\n-\tbnxt_ulp_cntxt_release_fdb_lock(ulp_ctx);\n \t/* Free all resources that were allocated during flow creation */\n \ttrc = ulp_mapper_flow_destroy(ulp_ctx, BNXT_ULP_FDB_TYPE_REGULAR,\n \t\t\t\t      parms.fid);\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper.h b/drivers/net/bnxt/tf_ulp/ulp_mapper.h\nindex 542e41e..0595d15 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_mapper.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_mapper.h\n@@ -93,6 +93,7 @@ struct bnxt_ulp_mapper_create_parms {\n \tuint32_t\t\t\tdir_attr;\n \tenum bnxt_ulp_fdb_type\t\tflow_type;\n \n+\tuint32_t\t\t\tflow_id;\n \t/* if set then create it as a child flow with parent as parent_fid */\n \tuint32_t\t\t\tparent_fid;\n \t/* if set then create a parent flow */\n@@ -113,8 +114,7 @@ ulp_mapper_deinit(struct bnxt_ulp_context *ulp_ctx);\n  */\n int32_t\n ulp_mapper_flow_create(struct bnxt_ulp_context\t*ulp_ctx,\n-\t\t       struct bnxt_ulp_mapper_create_parms *parms,\n-\t\t       uint32_t *flowid);\n+\t\t       struct bnxt_ulp_mapper_create_parms *parms);\n \n /* Function that frees all resources associated with the flow. */\n int32_t\ndiff --git a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h\nindex 41f3df9..bb5a8a4 100644\n--- a/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h\n+++ b/drivers/net/bnxt/tf_ulp/ulp_rte_parser.h\n@@ -11,6 +11,7 @@\n #include <rte_flow_driver.h>\n #include \"ulp_template_db_enum.h\"\n #include \"ulp_template_struct.h\"\n+#include \"ulp_mapper.h\"\n \n /* defines to be used in the tunnel header parsing */\n #define BNXT_ULP_ENCAP_IPV4_VER_HLEN_TOS\t2\n@@ -34,6 +35,14 @@\n #define\tBNXT_ULP_PARSER_IPV6_TC\t\t\t0x0ff00000\n #define\tBNXT_ULP_PARSER_IPV6_FLOW_LABEL\t\t0x000fffff\n \n+void\n+bnxt_ulp_init_mapper_params(struct bnxt_ulp_mapper_create_parms *mapper_cparms,\n+\t\t\t    struct ulp_rte_parser_params *params,\n+\t\t\t    uint32_t priority, uint32_t class_id,\n+\t\t\t    uint32_t act_tmpl, uint16_t func_id,\n+\t\t\t    uint32_t flow_id,\n+\t\t\t    enum bnxt_ulp_fdb_type flow_type);\n+\n /* Function to handle the parsing of the RTE port id. */\n int32_t\n ulp_rte_parser_implicit_match_port_process(struct ulp_rte_parser_params *param);\n",
    "prefixes": [
        "12/14"
    ]
}