Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/93571/?format=api
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" ] }{ "id": 93571, "url": "