get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 93571,
    "url": "http://patches.dpdk.org/api/patches/93571/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20210530085929.29695-23-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-23-venkatkumar.duvvuru@broadcom.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210530085929.29695-23-venkatkumar.duvvuru@broadcom.com",
    "date": "2021-05-30T08:58:53",
    "name": "[22/58] net/bnxt: modify host session failure cleanup",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "85e0b3a76199bd4e1c8e63530049dc3655779da5",
    "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-23-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/93571/comments/",
    "check": "success",
    "checks": "http://patches.dpdk.org/api/patches/93571/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 903FFA0524;\n\tSun, 30 May 2021 11:03:48 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id A3C5A41196;\n\tSun, 30 May 2021 11:01:07 +0200 (CEST)",
            "from relay.smtp-ext.broadcom.com (relay.smtp-ext.broadcom.com\n [192.19.11.229]) by mails.dpdk.org (Postfix) with ESMTP id D08F341158\n for <dev@dpdk.org>; Sun, 30 May 2021 11:01:04 +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 08B397DAF;\n Sun, 30 May 2021 02:01:02 -0700 (PDT)"
        ],
        "DKIM-Filter": "OpenDKIM Filter v2.11.0 relay.smtp-ext.broadcom.com 08B397DAF",
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com;\n s=dkimrelay; t=1622365264;\n bh=Ys7x9aSzmDrCibh3+lAEEt4Icmwtv1Kdhlmz/OIwrFk=;\n h=From:To:Cc:Subject:Date:In-Reply-To:References:From;\n b=uaZJMryZpLw8WuTIQBS6Q3gLAtfiDcyX/YTknXnhWOLbQbwAnj0nXmvqCCXoVvWl7\n qgATAP9Qbf6Loxq6jfCKAqDx+Cj1GJ4M96hdoX5HcMFIVY/tl/YQ0GvB9ac337rQ+C\n V6PchrzDEXbBfx5xqu2femHtHkRkz3ziNNqGmfQU=",
        "From": "Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>",
        "To": "dev@dpdk.org",
        "Cc": "Jay Ding <jay.ding@broadcom.com>, Farah Smith <farah.smith@broadcom.com>,\n Randy Schacher <stuart.schacher@broadcom.com>,\n Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>",
        "Date": "Sun, 30 May 2021 14:28:53 +0530",
        "Message-Id": "<20210530085929.29695-23-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 22/58] net/bnxt: modify host session failure\n cleanup",
        "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: Jay Ding <jay.ding@broadcom.com>\n\n- Close fw session if session open fails after fw session open.\n- Additional WC TCAM debug info to help in future debug\n- Reduce key/mask buffer sizes for performance\n- When a 64b counter is freed, clear the entry\n\nSigned-off-by: Jay Ding <jay.ding@broadcom.com>\nSigned-off-by: Farah Smith <farah.smith@broadcom.com>\nSigned-off-by: Randy Schacher <stuart.schacher@broadcom.com>\nSigned-off-by: Venkat Duvvuru <venkatkumar.duvvuru@broadcom.com>\nReviewed-by: Randy Schacher <stuart.schacher@broadcom.com>\n---\n drivers/net/bnxt/tf_core/tf_em_internal.c | 15 +++---\n drivers/net/bnxt/tf_core/tf_identifier.c  | 14 ++++--\n drivers/net/bnxt/tf_core/tf_msg.c         | 24 ++-------\n drivers/net/bnxt/tf_core/tf_msg.h         |  9 +++-\n drivers/net/bnxt/tf_core/tf_rm.c          | 59 +++--------------------\n drivers/net/bnxt/tf_core/tf_session.c     | 32 ++++++++++--\n drivers/net/bnxt/tf_core/tf_tbl.c         | 51 ++++++++++++++++++--\n drivers/net/bnxt/tf_core/tf_tcam.c        | 14 ++++--\n drivers/net/bnxt/tf_core/tf_tcam_shared.c | 41 ++++++++--------\n 9 files changed, 138 insertions(+), 121 deletions(-)",
    "diff": "diff --git a/drivers/net/bnxt/tf_core/tf_em_internal.c b/drivers/net/bnxt/tf_core/tf_em_internal.c\nindex 28ffbd5876..0720bb905d 100644\n--- a/drivers/net/bnxt/tf_core/tf_em_internal.c\n+++ b/drivers/net/bnxt/tf_core/tf_em_internal.c\n@@ -543,18 +543,21 @@ tf_em_get_resc_info(struct tf *tfp,\n \tTF_CHECK_PARMS2(tfp, em);\n \n \trc = tf_session_get_db(tfp, TF_MODULE_TYPE_EM, &em_db_ptr);\n-\tif (rc) {\n-\t\tTFP_DRV_LOG(INFO,\n-\t\t\t    \"No resource allocated for em from session\\n\");\n-\t\treturn 0;\n-\t}\n+\tif (rc == -ENOMEM)\n+\t\treturn 0;  /* db does not exist */\n+\telse if (rc)\n+\t\treturn rc; /* db error */\n+\n \tem_db = (struct em_rm_db *)em_db_ptr;\n \n-\t/* check if reserved resource for WC is multiple of num_slices */\n+\t/* check if reserved resource for EM is multiple of num_slices */\n \tfor (d = 0; d < TF_DIR_MAX; d++) {\n \t\tainfo.rm_db = em_db->em_db[d];\n \t\tdinfo = em[d].info;\n \n+\t\tif (!ainfo.rm_db)\n+\t\t\tcontinue;\n+\n \t\tainfo.info = (struct tf_rm_alloc_info *)dinfo;\n \t\tainfo.subtype = 0;\n \t\trc = tf_rm_get_all_info(&ainfo, TF_EM_TBL_TYPE_MAX);\ndiff --git a/drivers/net/bnxt/tf_core/tf_identifier.c b/drivers/net/bnxt/tf_core/tf_identifier.c\nindex 9f27a41fcf..c491f77a2b 100644\n--- a/drivers/net/bnxt/tf_core/tf_identifier.c\n+++ b/drivers/net/bnxt/tf_core/tf_identifier.c\n@@ -369,16 +369,20 @@ tf_ident_get_resc_info(struct tf *tfp,\n \tTF_CHECK_PARMS2(tfp, ident);\n \n \trc = tf_session_get_db(tfp, TF_MODULE_TYPE_IDENTIFIER, &ident_db_ptr);\n-\tif (rc) {\n-\t\tTFP_DRV_LOG(INFO,\n-\t\t\t    \"No resource allocated for ident from session\\n\");\n-\t\treturn 0;\n-\t}\n+\tif (rc == -ENOMEM)\n+\t\treturn 0; /* db doesn't exist */\n+\telse if (rc)\n+\t\treturn rc; /* error getting db */\n+\n \tident_db = (struct ident_rm_db *)ident_db_ptr;\n \n \t/* check if reserved resource for WC is multiple of num_slices */\n \tfor (d = 0; d < TF_DIR_MAX; d++) {\n \t\tainfo.rm_db = ident_db->ident_db[d];\n+\n+\t\tif (!ainfo.rm_db)\n+\t\t\tcontinue;\n+\n \t\tdinfo = ident[d].info;\n \n \t\tainfo.info = (struct tf_rm_alloc_info *)dinfo;\ndiff --git a/drivers/net/bnxt/tf_core/tf_msg.c b/drivers/net/bnxt/tf_core/tf_msg.c\nindex 18eea8338a..fbd4b1d910 100644\n--- a/drivers/net/bnxt/tf_core/tf_msg.c\n+++ b/drivers/net/bnxt/tf_core/tf_msg.c\n@@ -267,31 +267,13 @@ tf_msg_session_client_unregister(struct tf *tfp,\n \n int\n tf_msg_session_close(struct tf *tfp,\n-\t\t     struct tf_session *tfs)\n+\t\t     uint8_t fw_session_id,\n+\t\t     int mailbox)\n {\n \tint rc;\n \tstruct hwrm_tf_session_close_input req = { 0 };\n \tstruct hwrm_tf_session_close_output resp = { 0 };\n \tstruct tfp_send_msg_parms parms = { 0 };\n-\tuint8_t fw_session_id;\n-\tstruct tf_dev_info *dev;\n-\n-\t/* Retrieve the device information */\n-\trc = tf_session_get_device(tfs, &dev);\n-\tif (rc) {\n-\t\tTFP_DRV_LOG(ERR,\n-\t\t\t    \"Failed to lookup device, rc:%s\\n\",\n-\t\t\t    strerror(-rc));\n-\t\treturn rc;\n-\t}\n-\n-\trc = tf_session_get_fw_session_id(tfp, &fw_session_id);\n-\tif (rc) {\n-\t\tTFP_DRV_LOG(ERR,\n-\t\t\t    \"Unable to lookup FW id, rc:%s\\n\",\n-\t\t\t    strerror(-rc));\n-\t\treturn rc;\n-\t}\n \n \t/* Populate the request */\n \treq.fw_session_id = tfp_cpu_to_le_32(fw_session_id);\n@@ -301,7 +283,7 @@ tf_msg_session_close(struct tf *tfp,\n \tparms.req_size = sizeof(req);\n \tparms.resp_data = (uint32_t *)&resp;\n \tparms.resp_size = sizeof(resp);\n-\tparms.mailbox = dev->ops->tf_dev_get_mailbox();\n+\tparms.mailbox = mailbox;\n \n \trc = tfp_send_msg_direct(tf_session_get_bp(tfp),\n \t\t\t\t &parms);\ndiff --git a/drivers/net/bnxt/tf_core/tf_msg.h b/drivers/net/bnxt/tf_core/tf_msg.h\nindex e8662fef0e..b26b15bfa3 100644\n--- a/drivers/net/bnxt/tf_core/tf_msg.h\n+++ b/drivers/net/bnxt/tf_core/tf_msg.h\n@@ -115,11 +115,18 @@ int tf_msg_session_client_unregister(struct tf *tfp,\n  * [in] session\n  *   Pointer to session handle\n  *\n+ * [in] fw_session_id\n+ *   fw session id\n+ *\n+ * [in] mailbox\n+ *   mailbox\n+ *\n  * Returns:\n  *   0 on Success else internal Truflow error\n  */\n int tf_msg_session_close(struct tf *tfp,\n-\t\t\t struct tf_session *tfs);\n+\t\t\t uint8_t fw_session_id,\n+\t\t\t int mailbox);\n \n /**\n  * Sends session query config request to TF Firmware\ndiff --git a/drivers/net/bnxt/tf_core/tf_rm.c b/drivers/net/bnxt/tf_core/tf_rm.c\nindex 761d18413b..b57f200edf 100644\n--- a/drivers/net/bnxt/tf_core/tf_rm.c\n+++ b/drivers/net/bnxt/tf_core/tf_rm.c\n@@ -18,9 +18,6 @@\n #include \"tfp.h\"\n #include \"tf_msg.h\"\n \n-/* Logging defines */\n-#define TF_RM_DEBUG  0\n-\n /**\n  * Generic RM Element data type that an RM DB is build upon.\n  */\n@@ -204,44 +201,6 @@ tf_rm_adjust_index(struct tf_rm_element *db,\n \treturn rc;\n }\n \n-/**\n- * Logs an array of found residual entries to the console.\n- *\n- * [in] dir\n- *   Receive or transmit direction\n- *\n- * [in] module\n- *   Type of Device Module\n- *\n- * [in] count\n- *   Number of entries in the residual array\n- *\n- * [in] residuals\n- *   Pointer to an array of residual entries. Array is index same as\n- *   the DB in which this function is used. Each entry holds residual\n- *   value for that entry.\n- */\n-static void\n-tf_rm_log_residuals(enum tf_dir dir,\n-\t\t    enum tf_module_type module,\n-\t\t    uint16_t count,\n-\t\t    uint16_t *residuals)\n-{\n-\tint i;\n-\n-\t/* Walk the residual array and log the types that wasn't\n-\t * cleaned up to the console.\n-\t */\n-\tfor (i = 0; i < count; i++) {\n-\t\tif (residuals[i] != 0)\n-\t\t\tTFP_DRV_LOG(ERR,\n-\t\t\t\t\"%s, %s was not cleaned up, %d outstanding\\n\",\n-\t\t\t\ttf_dir_2_str(dir),\n-\t\t\t\ttf_module_subtype_2_str(module, i),\n-\t\t\t\tresiduals[i]);\n-\t}\n-}\n-\n /**\n  * Performs a check of the passed in DB for any lingering elements. If\n  * a resource type was found to not have been cleaned up by the caller\n@@ -357,11 +316,6 @@ tf_rm_check_residuals(struct tf_rm_new_db *rm_db,\n \t\t*resv_size = found;\n \t}\n \n-\ttf_rm_log_residuals(rm_db->dir,\n-\t\t\t    rm_db->module,\n-\t\t\t    rm_db->num_entries,\n-\t\t\t    residuals);\n-\n \ttfp_free((void *)residuals);\n \t*resv = local_resv;\n \n@@ -544,11 +498,6 @@ tf_rm_create_db(struct tf *tfp,\n \t\t\t\t       &hcapi_items);\n \n \tif (hcapi_items == 0) {\n-\t\tTFP_DRV_LOG(ERR,\n-\t\t\t    \"%s: module:%s Empty RM DB create request\\n\",\n-\t\t\t    tf_dir_2_str(parms->dir),\n-\t\t\t    tf_module_2_str(parms->module));\n-\n \t\tparms->rm_db = NULL;\n \t\treturn -ENOMEM;\n \t}\n@@ -1296,7 +1245,13 @@ tf_rm_get_all_info(struct tf_rm_get_alloc_info_parms *parms, int size)\n \tstruct tf_rm_alloc_info *info = parms->info;\n \tint i;\n \n-\tTF_CHECK_PARMS2(parms, parms->rm_db);\n+\tTF_CHECK_PARMS1(parms);\n+\n+\t/* No rm info available for this module type\n+\t */\n+\tif (!parms->rm_db)\n+\t\treturn -ENOMEM;\n+\n \trm_db = (struct tf_rm_new_db *)parms->rm_db;\n \tTF_CHECK_PARMS1(rm_db->db);\n \ndiff --git a/drivers/net/bnxt/tf_core/tf_session.c b/drivers/net/bnxt/tf_core/tf_session.c\nindex 70844edb50..71ccb2e3e7 100644\n--- a/drivers/net/bnxt/tf_core/tf_session.c\n+++ b/drivers/net/bnxt/tf_core/tf_session.c\n@@ -215,6 +215,16 @@ tf_session_create(struct tf *tfp,\n \treturn 0;\n \n  cleanup:\n+\trc = tf_msg_session_close(tfp,\n+\t\t\tfw_session_id,\n+\t\t\tdev.ops->tf_dev_get_mailbox());\n+\tif (rc) {\n+\t\t/* Log error */\n+\t\tTFP_DRV_LOG(ERR,\n+\t\t\t    \"FW Session close failed, rc:%s\\n\",\n+\t\t\t    strerror(-rc));\n+\t}\n+\n \ttfp_free(tfp->session->core_data);\n \ttfp_free(tfp->session);\n \ttfp->session = NULL;\n@@ -479,6 +489,8 @@ tf_session_close_session(struct tf *tfp,\n \tstruct tf_dev_info *tfd = NULL;\n \tstruct tf_session_client_destroy_parms scdparms;\n \tuint16_t fid;\n+\tuint8_t fw_session_id = 1;\n+\tint mailbox = 0;\n \n \tTF_CHECK_PARMS2(tfp, parms);\n \n@@ -563,6 +575,16 @@ tf_session_close_session(struct tf *tfp,\n \t\treturn rc;\n \t}\n \n+\tmailbox = tfd->ops->tf_dev_get_mailbox();\n+\n+\trc = tf_session_get_fw_session_id(tfp, &fw_session_id);\n+\tif (rc) {\n+\t\tTFP_DRV_LOG(ERR,\n+\t\t\t    \"Unable to lookup FW id, rc:%s\\n\",\n+\t\t\t    strerror(-rc));\n+\t\treturn rc;\n+\t}\n+\n \t/* Unbind the device */\n \trc = tf_dev_unbind(tfp, tfd);\n \tif (rc) {\n@@ -572,7 +594,7 @@ tf_session_close_session(struct tf *tfp,\n \t\t\t    strerror(-rc));\n \t}\n \n-\trc = tf_msg_session_close(tfp, tfs);\n+\trc = tf_msg_session_close(tfp, fw_session_id, mailbox);\n \tif (rc) {\n \t\t/* Log error */\n \t\tTFP_DRV_LOG(ERR,\n@@ -881,26 +903,26 @@ tf_session_get_db(struct tf *tfp,\n \t\tif (tfs->id_db_handle)\n \t\t\t*db_handle = tfs->id_db_handle;\n \t\telse\n-\t\t\trc = -EINVAL;\n+\t\t\trc = -ENOMEM;\n \t\tbreak;\n \tcase TF_MODULE_TYPE_TABLE:\n \t\tif (tfs->tbl_db_handle)\n \t\t\t*db_handle = tfs->tbl_db_handle;\n \t\telse\n-\t\t\trc = -EINVAL;\n+\t\t\trc = -ENOMEM;\n \n \t\tbreak;\n \tcase TF_MODULE_TYPE_TCAM:\n \t\tif (tfs->tcam_db_handle)\n \t\t\t*db_handle = tfs->tcam_db_handle;\n \t\telse\n-\t\t\trc = -EINVAL;\n+\t\t\trc = -ENOMEM;\n \t\tbreak;\n \tcase TF_MODULE_TYPE_EM:\n \t\tif (tfs->em_db_handle)\n \t\t\t*db_handle = tfs->em_db_handle;\n \t\telse\n-\t\t\trc = -EINVAL;\n+\t\t\trc = -ENOMEM;\n \t\tbreak;\n \tdefault:\n \t\trc = -EINVAL;\ndiff --git a/drivers/net/bnxt/tf_core/tf_tbl.c b/drivers/net/bnxt/tf_core/tf_tbl.c\nindex 6842291adf..ced59130b2 100644\n--- a/drivers/net/bnxt/tf_core/tf_tbl.c\n+++ b/drivers/net/bnxt/tf_core/tf_tbl.c\n@@ -270,6 +270,44 @@ tf_tbl_free(struct tf *tfp __rte_unused,\n \t\t\t    parms->idx);\n \t\treturn -EINVAL;\n \t}\n+\n+\t/* If this is counter table, clear the entry on free */\n+\tif (parms->type == TF_TBL_TYPE_ACT_STATS_64) {\n+\t\tuint8_t data[8] = { 0 };\n+\t\tuint16_t hcapi_type = 0;\n+\t\tstruct tf_rm_get_hcapi_parms hparms = { 0 };\n+\n+\t\t/* Get the hcapi type */\n+\t\thparms.rm_db = tbl_db->tbl_db[parms->dir];\n+\t\thparms.subtype = parms->type;\n+\t\thparms.hcapi_type = &hcapi_type;\n+\t\trc = tf_rm_get_hcapi_type(&hparms);\n+\t\tif (rc) {\n+\t\t\tTFP_DRV_LOG(ERR,\n+\t\t\t\t    \"%s, Failed type lookup, type:%d, rc:%s\\n\",\n+\t\t\t\t    tf_dir_2_str(parms->dir),\n+\t\t\t\t    parms->type,\n+\t\t\t\t    strerror(-rc));\n+\t\t\treturn rc;\n+\t\t}\n+\t\t/* Clear the counter\n+\t\t */\n+\t\trc = tf_msg_set_tbl_entry(tfp,\n+\t\t\t\t\t  parms->dir,\n+\t\t\t\t\t  hcapi_type,\n+\t\t\t\t\t  sizeof(data),\n+\t\t\t\t\t  data,\n+\t\t\t\t\t  parms->idx);\n+\t\tif (rc) {\n+\t\t\tTFP_DRV_LOG(ERR,\n+\t\t\t\t    \"%s, Set failed, type:%d, rc:%s\\n\",\n+\t\t\t\t    tf_dir_2_str(parms->dir),\n+\t\t\t\t    parms->type,\n+\t\t\t\t    strerror(-rc));\n+\t\t\treturn rc;\n+\t\t}\n+\t}\n+\n \t/* Free requested element */\n \tfparms.rm_db = tbl_db->tbl_db[parms->dir];\n \tfparms.subtype = parms->type;\n@@ -643,11 +681,11 @@ tf_tbl_get_resc_info(struct tf *tfp,\n \t\treturn rc;\n \n \trc = tf_session_get_db(tfp, TF_MODULE_TYPE_TABLE, &tbl_db_ptr);\n-\tif (rc) {\n-\t\tTFP_DRV_LOG(INFO,\n-\t\t\t    \"No resource allocated for table from session\\n\");\n-\t\treturn 0;\n-\t}\n+\tif (rc == -ENOMEM)\n+\t\treturn 0; /* db doesn't exist */\n+\telse if (rc)\n+\t\treturn rc; /* error getting db */\n+\n \ttbl_db = (struct tbl_rm_db *)tbl_db_ptr;\n \n \t/* check if reserved resource for WC is multiple of num_slices */\n@@ -655,6 +693,9 @@ tf_tbl_get_resc_info(struct tf *tfp,\n \t\tainfo.rm_db = tbl_db->tbl_db[d];\n \t\tdinfo = tbl[d].info;\n \n+\t\tif (!ainfo.rm_db)\n+\t\t\tcontinue;\n+\n \t\tainfo.info = (struct tf_rm_alloc_info *)dinfo;\n \t\tainfo.subtype = 0;\n \t\trc = tf_rm_get_all_info(&ainfo, TF_TBL_TYPE_MAX);\ndiff --git a/drivers/net/bnxt/tf_core/tf_tcam.c b/drivers/net/bnxt/tf_core/tf_tcam.c\nindex d7e12e00ef..45206c5992 100644\n--- a/drivers/net/bnxt/tf_core/tf_tcam.c\n+++ b/drivers/net/bnxt/tf_core/tf_tcam.c\n@@ -818,16 +818,20 @@ tf_tcam_get_resc_info(struct tf *tfp,\n \tTF_CHECK_PARMS2(tfp, tcam);\n \n \trc = tf_session_get_db(tfp, TF_MODULE_TYPE_TCAM, &tcam_db_ptr);\n-\tif (rc) {\n-\t\tTFP_DRV_LOG(INFO,\n-\t\t\t    \"No resource allocated for tcam from session\\n\");\n-\t\treturn 0;\n-\t}\n+\tif (rc == -ENOMEM)\n+\t\treturn 0;  /* db doesn't exist */\n+\telse if (rc)\n+\t\treturn rc; /* error getting db */\n+\n \ttcam_db = (struct tcam_rm_db *)tcam_db_ptr;\n \n \t/* check if reserved resource for WC is multiple of num_slices */\n \tfor (d = 0; d < TF_DIR_MAX; d++) {\n \t\tainfo.rm_db = tcam_db->tcam_db[d];\n+\n+\t\tif (!ainfo.rm_db)\n+\t\t\tcontinue;\n+\n \t\tdinfo = tcam[d].info;\n \n \t\tainfo.info = (struct tf_rm_alloc_info *)dinfo;\ndiff --git a/drivers/net/bnxt/tf_core/tf_tcam_shared.c b/drivers/net/bnxt/tf_core/tf_tcam_shared.c\nindex f0727cea80..5139b28537 100644\n--- a/drivers/net/bnxt/tf_core/tf_tcam_shared.c\n+++ b/drivers/net/bnxt/tf_core/tf_tcam_shared.c\n@@ -842,20 +842,28 @@ tf_tcam_shared_get(struct tf *tfp __rte_unused,\n \treturn 0;\n }\n \n-/* Temporary builder defines pulled in here and renamed\n+/* Normally, device specific code wouldn't reside here, it belongs\n+ * in a separate device specific function in tf_device_pxx.c.\n+ * But this code is placed here as it is not a long term solution\n+ * and we would like to have this code centrally located for easy\n+ * removal\n  */\n-#define TF_TMP_MAX_FIELD_BITLEN 512\n+#define TF_TCAM_SHARED_KEY_SLICE_SZ_BYTES_P4 12\n+#define TF_TCAM_SHARED_REMAP_SZ_BYTES_P4 4\n+#define TF_TCAM_SHARED_KEY_SLICE_SZ_BYTES_P58 24\n+#define TF_TCAM_SHARED_REMAP_SZ_BYTES_P58 8\n \n+/* Temporary builder defines pulled in here and adjusted\n+ * for max WC TCAM values\n+ */\n union tf_tmp_field_obj {\n-\tuint8_t bytes[(TF_TMP_MAX_FIELD_BITLEN + 7) / 8];\n+\tuint32_t words[(TF_TCAM_SHARED_REMAP_SZ_BYTES_P58 + 3) / 4];\n+\tuint8_t bytes[TF_TCAM_SHARED_REMAP_SZ_BYTES_P58];\n };\n \n-#define TF_TMP_MAX_KEY_BITLEN 768\n-#define TF_TMP_MAX_KEY_WORDLEN ((TF_TMP_MAX_KEY_BITLEN + 63) / 64)\n-\n union tf_tmp_key {\n-\tuint32_t words[(TF_TMP_MAX_KEY_BITLEN + 31) / 32];\n-\tuint8_t bytes[(TF_TMP_MAX_KEY_BITLEN + 7) / 8];\n+\tuint32_t words[(TF_TCAM_SHARED_KEY_SLICE_SZ_BYTES_P58 + 3) / 4];\n+\tuint8_t bytes[TF_TCAM_SHARED_KEY_SLICE_SZ_BYTES_P58];\n };\n \n /** p58 has an enable bit, p4 does not\n@@ -934,9 +942,10 @@ tf_tcam_shared_move_entry(struct tf *tfp,\n \tif (rc) {\n \t\t/* Log error */\n \t\tTFP_DRV_LOG(ERR,\n-\t\t\t    \"%s: WC_TCAM_LOW phyid(%d) set failed, rc:%s\",\n+\t\t\t    \"%s: WC_TCAM_LOW phyid(%d/0x%x) set failed, rc:%s\",\n \t\t\t    tf_dir_2_str(dir),\n \t\t\t    sparms.idx,\n+\t\t\t    sparms.idx,\n \t\t\t    strerror(-rc));\n \t\treturn rc;\n \t}\n@@ -951,10 +960,11 @@ tf_tcam_shared_move_entry(struct tf *tfp,\n \tif (rc) {\n \t\t/* Log error */\n \t\tTFP_DRV_LOG(ERR,\n-\t\t\t    \"%s: %s: phyid(%d) free failed, rc:%s\\n\",\n+\t\t\t    \"%s: %s: phyid(%d/0x%x) free failed, rc:%s\\n\",\n \t\t\t    tf_dir_2_str(dir),\n \t\t\t    tf_tcam_tbl_2_str(fparms.type),\n \t\t\t    sphy_idx,\n+\t\t\t    sphy_idx,\n \t\t\t    strerror(-rc));\n \t\treturn rc;\n \t}\n@@ -1119,15 +1129,6 @@ int tf_tcam_shared_move(struct tf *tfp,\n \treturn rc;\n }\n \n-/* Normally, device specific code wouldn't reside here, it belongs\n- * in a separate device specific function in tf_device_pxx.c.\n- * But this code is placed here as it is not a long term solution\n- * and we would like to have this code centrally located for easy\n- * removal\n- */\n-#define TF_TCAM_SHARED_KEY_SLICE_SZ_BYTES_P4 12\n-#define TF_TCAM_SHARED_REMAP_SZ_BYTES_P4 4\n-\n int tf_tcam_shared_move_p4(struct tf *tfp,\n \t\t\t   struct tf_move_tcam_shared_entries_parms *parms)\n {\n@@ -1140,8 +1141,6 @@ int tf_tcam_shared_move_p4(struct tf *tfp,\n \treturn rc;\n }\n \n-#define TF_TCAM_SHARED_KEY_SLICE_SZ_BYTES_P58 24\n-#define TF_TCAM_SHARED_REMAP_SZ_BYTES_P58 8\n \n int tf_tcam_shared_move_p58(struct tf *tfp,\n \t\t\t    struct tf_move_tcam_shared_entries_parms *parms)\n",
    "prefixes": [
        "22/58"
    ]
}