From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C83DCC47091 for ; Sun, 30 May 2021 09:03:07 +0000 (UTC) Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by mail.kernel.org (Postfix) with ESMTP id 62985610A6 for ; Sun, 30 May 2021 09:03:07 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 62985610A6 Authentication-Results: mail.kernel.org; dmarc=fail (p=quarantine dis=none) header.from=broadcom.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=dev-bounces@dpdk.org Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 09C084114C; Sun, 30 May 2021 11:00:58 +0200 (CEST) Received: from relay.smtp-ext.broadcom.com (relay.smtp-ext.broadcom.com [192.19.11.229]) by mails.dpdk.org (Postfix) with ESMTP id 9BB7B41173 for ; Sun, 30 May 2021 11:00:55 +0200 (CEST) Received: from S60.dhcp.broadcom.net (unknown [10.123.66.170]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by relay.smtp-ext.broadcom.com (Postfix) with ESMTPS id 071DB7DC2; Sun, 30 May 2021 02:00:53 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 relay.smtp-ext.broadcom.com 071DB7DC2 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1622365255; bh=uA2O/P0U+PSYH8+GGRx1EjFi2LVS9aT5spICAk4FVfs=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=u0Awy55ZD7THGQ7xh3fGSyzWe4Jw4cvWEQAYvQfuDiNrBo7z5MWdqIQFj9oeKniMr 4/igqFBLKSQoWEid9V+i7xWkbYZfmnTm3lJn1teWK8S7bAgx2i7nRGySX2lAoyMlmt ahblXZ847T2V2Gor9qraBy1rdkTZHoBGj3qC68yM= From: Venkat Duvvuru To: dev@dpdk.org Cc: Jay Ding , Randy Schacher , Venkat Duvvuru Date: Sun, 30 May 2021 14:28:48 +0530 Message-Id: <20210530085929.29695-18-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 17/58] net/bnxt: modify resource reservation strategy X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Jay Ding Allow an application to only reserve resources for one direction. Signed-off-by: Jay Ding Signed-off-by: Randy Schacher Signed-off-by: Venkat Duvvuru Reviewed-by: Ajit Kumar Khaparde Reviewed-by: Randy Schacher --- drivers/net/bnxt/tf_core/tf_core.c | 4 -- drivers/net/bnxt/tf_core/tf_em_common.c | 61 +++++++++++------------ drivers/net/bnxt/tf_core/tf_em_internal.c | 13 +++-- drivers/net/bnxt/tf_core/tf_identifier.c | 15 +++--- drivers/net/bnxt/tf_core/tf_tbl.c | 12 +++-- drivers/net/bnxt/tf_core/tf_tcam.c | 14 ++++-- 6 files changed, 65 insertions(+), 54 deletions(-) diff --git a/drivers/net/bnxt/tf_core/tf_core.c b/drivers/net/bnxt/tf_core/tf_core.c index 945e54bfdd..de2a93646f 100644 --- a/drivers/net/bnxt/tf_core/tf_core.c +++ b/drivers/net/bnxt/tf_core/tf_core.c @@ -1636,7 +1636,6 @@ int tf_get_session_info(struct tf *tfp, TFP_DRV_LOG(ERR, "Ident get resc info failed, rc:%s\n", strerror(-rc)); - return rc; } if (dev->ops->tf_dev_get_tbl_resc_info == NULL) { @@ -1652,7 +1651,6 @@ int tf_get_session_info(struct tf *tfp, TFP_DRV_LOG(ERR, "Tbl get resc info failed, rc:%s\n", strerror(-rc)); - return rc; } if (dev->ops->tf_dev_get_tcam_resc_info == NULL) { @@ -1668,7 +1666,6 @@ int tf_get_session_info(struct tf *tfp, TFP_DRV_LOG(ERR, "TCAM get resc info failed, rc:%s\n", strerror(-rc)); - return rc; } if (dev->ops->tf_dev_get_em_resc_info == NULL) { @@ -1684,7 +1681,6 @@ int tf_get_session_info(struct tf *tfp, TFP_DRV_LOG(ERR, "EM get resc info failed, rc:%s\n", strerror(-rc)); - return rc; } return 0; diff --git a/drivers/net/bnxt/tf_core/tf_em_common.c b/drivers/net/bnxt/tf_core/tf_em_common.c index ed8f6db58c..812ccb0d29 100644 --- a/drivers/net/bnxt/tf_core/tf_em_common.c +++ b/drivers/net/bnxt/tf_core/tf_em_common.c @@ -301,6 +301,7 @@ tf_em_page_tbl_pgcnt(uint32_t num_pages, { return roundup(num_pages, MAX_PAGE_PTRS(page_size)) / MAX_PAGE_PTRS(page_size); + return 0; } /** @@ -722,10 +723,6 @@ tf_insert_eem_entry(struct tf_dev_info *dev, if (!mask) return -EINVAL; -#ifdef TF_EEM_DEBUG - dump_raw((uint8_t *)parms->key, TF_P4_HW_EM_KEY_MAX_SIZE + 4, "In Key"); -#endif - if (dev->ops->tf_dev_cfa_key_hash == NULL) return -EINVAL; @@ -737,10 +734,6 @@ tf_insert_eem_entry(struct tf_dev_info *dev, key0_index = key0_hash & mask; key1_index = key1_hash & mask; -#ifdef TF_EEM_DEBUG - TFP_DRV_LOG(DEBUG, "Key0 hash:0x%08x\n", key0_hash); - TFP_DRV_LOG(DEBUG, "Key1 hash:0x%08x\n", key1_hash); -#endif /* * Use the "result" arg to populate all of the key entry then * store the byte swapped "raw" entry in a local copy ready @@ -1010,35 +1003,41 @@ tf_em_ext_common_unbind(struct tf *tfp) } ext_db = (struct em_ext_db *)ext_ptr; - entry = ext_db->tbl_scope_ll.head; - while (entry != NULL) { - tbl_scope_cb = (struct tf_tbl_scope_cb *)entry; - entry = entry->next; - tparms.tbl_scope_id = tbl_scope_cb->tbl_scope_id; - - if (dev->ops->tf_dev_free_tbl_scope) { - dev->ops->tf_dev_free_tbl_scope(tfp, &tparms); - } else { - /* should not reach here */ - ll_delete(&ext_db->tbl_scope_ll, &tbl_scope_cb->ll_entry); - tfp_free(tbl_scope_cb); + if (ext_db != NULL) { + entry = ext_db->tbl_scope_ll.head; + while (entry != NULL) { + tbl_scope_cb = (struct tf_tbl_scope_cb *)entry; + entry = entry->next; + tparms.tbl_scope_id = + tbl_scope_cb->tbl_scope_id; + + if (dev->ops->tf_dev_free_tbl_scope) { + dev->ops->tf_dev_free_tbl_scope(tfp, + &tparms); + } else { + /* should not reach here */ + ll_delete(&ext_db->tbl_scope_ll, + &tbl_scope_cb->ll_entry); + tfp_free(tbl_scope_cb); + } } - } - for (i = 0; i < TF_DIR_MAX; i++) { - if (ext_db->eem_db[i] == NULL) - continue; + for (i = 0; i < TF_DIR_MAX; i++) { + if (ext_db->eem_db[i] == NULL) + continue; - fparms.dir = i; - fparms.rm_db = ext_db->eem_db[i]; - rc = tf_rm_free_db(tfp, &fparms); - if (rc) - return rc; + fparms.dir = i; + fparms.rm_db = ext_db->eem_db[i]; + rc = tf_rm_free_db(tfp, &fparms); + if (rc) + return rc; - ext_db->eem_db[i] = NULL; + ext_db->eem_db[i] = NULL; + } + + tfp_free(ext_db); } - tfp_free(ext_db); tf_session_set_em_ext_db(tfp, NULL); return 0; diff --git a/drivers/net/bnxt/tf_core/tf_em_internal.c b/drivers/net/bnxt/tf_core/tf_em_internal.c index 3b1e4e385d..93de513989 100644 --- a/drivers/net/bnxt/tf_core/tf_em_internal.c +++ b/drivers/net/bnxt/tf_core/tf_em_internal.c @@ -349,6 +349,7 @@ tf_em_int_bind(struct tf *tfp, struct tf_em_cfg_parms *parms) { int rc; + int db_rc[TF_DIR_MAX] = { 0 }; int i; struct tf_rm_create_db_parms db_cfg = { 0 }; struct tf_rm_get_alloc_info_parms iparms; @@ -408,18 +409,22 @@ tf_em_int_bind(struct tf *tfp, db_cfg.rm_db = (void *)&em_db->em_db[i]; if (tf_session_is_shared_session(tfs) && (!tf_session_is_shared_session_creator(tfs))) - rc = tf_rm_create_db_no_reservation(tfp, &db_cfg); + db_rc[i] = tf_rm_create_db_no_reservation(tfp, &db_cfg); else - rc = tf_rm_create_db(tfp, &db_cfg); - if (rc) { + db_rc[i] = tf_rm_create_db(tfp, &db_cfg); + if (db_rc[i]) { TFP_DRV_LOG(ERR, "%s: EM Int DB creation failed\n", tf_dir_2_str(i)); - return rc; } } + /* No db created */ + if (db_rc[TF_DIR_RX] && db_rc[TF_DIR_TX]) + return db_rc[TF_DIR_RX]; + + if (!tf_session_is_shared_session(tfs)) { for (i = 0; i < TF_DIR_MAX; i++) { iparms.rm_db = em_db->em_db[i]; diff --git a/drivers/net/bnxt/tf_core/tf_identifier.c b/drivers/net/bnxt/tf_core/tf_identifier.c index ebb975562d..3cc87de4ef 100644 --- a/drivers/net/bnxt/tf_core/tf_identifier.c +++ b/drivers/net/bnxt/tf_core/tf_identifier.c @@ -30,6 +30,7 @@ tf_ident_bind(struct tf *tfp, struct tf_ident_cfg_parms *parms) { int rc; + int db_rc[TF_DIR_MAX] = { 0 }; int i; struct tf_rm_create_db_parms db_cfg = { 0 }; struct tf_shadow_ident_cfg_parms shadow_cfg = { 0 }; @@ -70,15 +71,13 @@ tf_ident_bind(struct tf *tfp, db_cfg.alloc_cnt = parms->resources->ident_cnt[i].cnt; if (tf_session_is_shared_session(tfs) && (!tf_session_is_shared_session_creator(tfs))) - rc = tf_rm_create_db_no_reservation(tfp, &db_cfg); + db_rc[i] = tf_rm_create_db_no_reservation(tfp, &db_cfg); else - rc = tf_rm_create_db(tfp, &db_cfg); - if (rc) { - TFP_DRV_LOG(ERR, + db_rc[i] = tf_rm_create_db(tfp, &db_cfg); + if (db_rc[i]) { + TFP_DRV_LOG(INFO, "%s: Identifier DB creation failed\n", tf_dir_2_str(i)); - - return rc; } if (parms->shadow_copy) { @@ -99,6 +98,10 @@ tf_ident_bind(struct tf *tfp, } } + /* No db created */ + if (db_rc[TF_DIR_RX] && db_rc[TF_DIR_TX]) + return db_rc[TF_DIR_RX]; + TFP_DRV_LOG(INFO, "Identifier - initialized\n"); diff --git a/drivers/net/bnxt/tf_core/tf_tbl.c b/drivers/net/bnxt/tf_core/tf_tbl.c index ca1aef8ebf..192115183b 100644 --- a/drivers/net/bnxt/tf_core/tf_tbl.c +++ b/drivers/net/bnxt/tf_core/tf_tbl.c @@ -41,6 +41,7 @@ tf_tbl_bind(struct tf *tfp, struct tf_tbl_cfg_parms *parms) { int rc, d, i; + int db_rc[TF_DIR_MAX] = { 0 }; struct tf_rm_create_db_parms db_cfg = { 0 }; struct tbl_rm_db *tbl_db; struct tfp_calloc_parms cparms; @@ -79,18 +80,21 @@ tf_tbl_bind(struct tf *tfp, db_cfg.rm_db = (void *)&tbl_db->tbl_db[d]; if (tf_session_is_shared_session(tfs) && (!tf_session_is_shared_session_creator(tfs))) - rc = tf_rm_create_db_no_reservation(tfp, &db_cfg); + db_rc[d] = tf_rm_create_db_no_reservation(tfp, &db_cfg); else - rc = tf_rm_create_db(tfp, &db_cfg); - if (rc) { + db_rc[d] = tf_rm_create_db(tfp, &db_cfg); + if (db_rc[d]) { TFP_DRV_LOG(ERR, "%s: Table DB creation failed\n", tf_dir_2_str(d)); - return rc; } } + /* No db created */ + if (db_rc[TF_DIR_RX] && db_rc[TF_DIR_TX]) + return db_rc[TF_DIR_RX]; + TFP_DRV_LOG(INFO, "Table Type - initialized\n"); diff --git a/drivers/net/bnxt/tf_core/tf_tcam.c b/drivers/net/bnxt/tf_core/tf_tcam.c index 0f05af87f1..ce959e3923 100644 --- a/drivers/net/bnxt/tf_core/tf_tcam.c +++ b/drivers/net/bnxt/tf_core/tf_tcam.c @@ -33,6 +33,7 @@ tf_tcam_bind(struct tf *tfp, struct tf_tcam_cfg_parms *parms) { int rc; + int db_rc[TF_DIR_MAX] = { 0 }; int i, d; struct tf_rm_alloc_info info; struct tf_rm_free_db_parms fparms; @@ -109,17 +110,20 @@ tf_tcam_bind(struct tf *tfp, db_cfg.rm_db = (void *)&tcam_db->tcam_db[d]; if (tf_session_is_shared_session(tfs) && (!tf_session_is_shared_session_creator(tfs))) - rc = tf_rm_create_db_no_reservation(tfp, &db_cfg); + db_rc[d] = tf_rm_create_db_no_reservation(tfp, &db_cfg); else - rc = tf_rm_create_db(tfp, &db_cfg); - if (rc) { - TFP_DRV_LOG(ERR, + db_rc[d] = tf_rm_create_db(tfp, &db_cfg); + if (db_rc[d]) { + TFP_DRV_LOG(INFO, "%s: TCAM DB creation failed\n", tf_dir_2_str(d)); - return rc; } } + /* No db created */ + if (db_rc[TF_DIR_RX] && db_rc[TF_DIR_TX]) + return db_rc[TF_DIR_RX]; + /* check if reserved resource for WC is multiple of num_slices */ for (d = 0; d < TF_DIR_MAX; d++) { memset(&info, 0, sizeof(info)); -- 2.17.1