From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id D236EA0540; Mon, 13 Jul 2020 11:47:34 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 3F5131D57A; Mon, 13 Jul 2020 11:47:29 +0200 (CEST) Received: from relay.smtp.broadcom.com (unknown [192.19.232.149]) by dpdk.org (Postfix) with ESMTP id 701281D56D for ; Mon, 13 Jul 2020 11:47:26 +0200 (CEST) Received: from dhcp-10-123-153-55.dhcp.broadcom.net (dhcp-10-123-153-55.dhcp.broadcom.net [10.123.153.55]) by relay.smtp.broadcom.com (Postfix) with ESMTP id 613DE1BBA53; Mon, 13 Jul 2020 02:47:25 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 relay.smtp.broadcom.com 613DE1BBA53 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1594633646; bh=OOfg8U3yjbnu5M9LV4C+tPUPcaVOxmx8v3DRB5/CDRM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=SDU4k/4KTxh7Gs1CCQ06uuF3K41W73mL7Q9Nt3OhIIGVfhizPUu6cRRN9W6xTVzTf ZMvwj9oUD/pKLXR1CeNWNcd8AIEhGAmOgUzgS9sl532j9+TVpB6+QlrPXcsfneQXgH 2TW3MbEcyXE3H2Jk8KdilS0oXHtPtwaSiM5Kh6n0= From: Somnath Kotur To: dev@dpdk.org Cc: ferruh.yigit@intel.com Date: Mon, 13 Jul 2020 15:12:04 +0530 Message-Id: <20200713094213.21410-2-somnath.kotur@broadcom.com> X-Mailer: git-send-email 2.10.1.613.g2cc2e70 In-Reply-To: <20200713094213.21410-1-somnath.kotur@broadcom.com> References: <20200713061600.19456-1-somnath.kotur@broadcom.com> <20200713094213.21410-1-somnath.kotur@broadcom.com> Subject: [dpdk-dev] [PATCH 01/10] net/bnxt: add option to delay EEM sysmem mapping X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 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: Peter Spreadborough - The mapping of kernel pages for EEM sysmem operation takes a significant amount of time. This change give the build option to delay the sysmem mapping until the first write to EEM Signed-off-by: Peter Spreadborough Reviewed-by: Randy Schacher Signed-off-by: Somnath Kotur --- drivers/net/bnxt/tf_core/tf_core.c | 17 +++++++++++-- drivers/net/bnxt/tf_core/tf_em.h | 11 +++++++++ drivers/net/bnxt/tf_core/tf_em_common.c | 41 +++++++++++++++++++++++++++++++ drivers/net/bnxt/tf_core/tf_em_internal.c | 2 +- drivers/net/bnxt/tf_core/tf_em_system.c | 6 +++-- 5 files changed, 72 insertions(+), 5 deletions(-) diff --git a/drivers/net/bnxt/tf_core/tf_core.c b/drivers/net/bnxt/tf_core/tf_core.c index 00b2775..a404cb8 100644 --- a/drivers/net/bnxt/tf_core/tf_core.c +++ b/drivers/net/bnxt/tf_core/tf_core.c @@ -49,9 +49,22 @@ tf_open_session(struct tf *tfp, &slot, &device); if (rc != 4) { - TFP_DRV_LOG(ERR, + /* PCI Domain not provided (optional in DPDK), thus we + * force domain to 0 and recheck. + */ + domain = 0; + + /* Check parsing of bus/slot/device */ + rc = sscanf(parms->ctrl_chan_name, + "%x:%x.%d", + &bus, + &slot, + &device); + if (rc != 3) { + TFP_DRV_LOG(ERR, "Failed to scan device ctrl_chan_name\n"); - return -EINVAL; + return -EINVAL; + } } parms->session_id.internal.domain = domain; diff --git a/drivers/net/bnxt/tf_core/tf_em.h b/drivers/net/bnxt/tf_core/tf_em.h index 0890261..ae2e64d 100644 --- a/drivers/net/bnxt/tf_core/tf_em.h +++ b/drivers/net/bnxt/tf_core/tf_em.h @@ -9,6 +9,16 @@ #include "tf_core.h" #include "tf_session.h" +#ifdef TF_USE_SYSTEM_MEM +/** + * Select EEM sysmem mmap export to be done at init + * or on the first write to EEM. + */ +#define TF_EM_SYSMEM_DELAY_EXPORT 1 +#else +#define TF_EM_SYSMEM_DELAY_EXPORT 0 +#endif + #define SUPPORT_CFA_HW_P4 1 #define SUPPORT_CFA_HW_P58 0 #define SUPPORT_CFA_HW_P59 0 @@ -482,4 +492,5 @@ int tf_em_ext_system_bind(struct tf *tfp, struct tf_em_cfg_parms *parms); +int offload_system_mmap(struct tf_tbl_scope_cb *tbl_scope_cb); #endif /* _TF_EM_H_ */ diff --git a/drivers/net/bnxt/tf_core/tf_em_common.c b/drivers/net/bnxt/tf_core/tf_em_common.c index 8b02b8b..65b9abf 100644 --- a/drivers/net/bnxt/tf_core/tf_em_common.c +++ b/drivers/net/bnxt/tf_core/tf_em_common.c @@ -700,6 +700,26 @@ tf_insert_eem_entry(struct tf_tbl_scope_cb *tbl_scope_cb, uint64_t big_hash; int rc; +#if (TF_EM_SYSMEM_DELAY_EXPORT == 1) + if (!tbl_scope_cb->valid) { + rc = offload_system_mmap(tbl_scope_cb); + + if (rc) { + struct tf_rm_free_parms fparms = { 0 }; + + TFP_DRV_LOG(ERR, + "System alloc mmap failed\n"); + /* Free Table control block */ + fparms.rm_db = eem_db[TF_DIR_RX]; + fparms.db_index = TF_EM_TBL_TYPE_TBL_SCOPE; + fparms.index = parms->tbl_scope_id; + tf_rm_free(&fparms); + return -EINVAL; + } + + tbl_scope_cb->valid = true; + } +#endif /* Get mask to use on hash */ mask = tf_em_get_key_mask(tbl_scope_cb->em_ctx_info[parms->dir].em_tables[TF_KEY0_TABLE].num_entries); @@ -1017,6 +1037,27 @@ int tf_tbl_ext_common_set(struct tf *tfp, return -EINVAL; } +#if (TF_EM_SYSMEM_DELAY_EXPORT == 1) + if (!tbl_scope_cb->valid) { + rc = offload_system_mmap(tbl_scope_cb); + + if (rc) { + struct tf_rm_free_parms fparms = { 0 }; + + TFP_DRV_LOG(ERR, + "System alloc mmap failed\n"); + /* Free Table control block */ + fparms.rm_db = eem_db[TF_DIR_RX]; + fparms.db_index = TF_EM_TBL_TYPE_TBL_SCOPE; + fparms.index = parms->tbl_scope_id; + tf_rm_free(&fparms); + return -EINVAL; + } + + tbl_scope_cb->valid = true; + } +#endif + op.opcode = HCAPI_CFA_HWOPS_PUT; key_tbl.base0 = (uint8_t *)&tbl_scope_cb->em_ctx_info[parms->dir].em_tables[TF_RECORD_TABLE]; diff --git a/drivers/net/bnxt/tf_core/tf_em_internal.c b/drivers/net/bnxt/tf_core/tf_em_internal.c index 3129fbe..462d0fa 100644 --- a/drivers/net/bnxt/tf_core/tf_em_internal.c +++ b/drivers/net/bnxt/tf_core/tf_em_internal.c @@ -179,7 +179,7 @@ tf_em_insert_int_entry(struct tf *tfp, return -1; PMD_DRV_LOG - (ERR, + (DEBUG, "%s, Internal entry @ Index:%d rptr_index:0x%x rptr_entry:0x%x num_of_entries:%d\n", tf_dir_2_str(parms->dir), index, diff --git a/drivers/net/bnxt/tf_core/tf_em_system.c b/drivers/net/bnxt/tf_core/tf_em_system.c index 339392c..1c3c702 100644 --- a/drivers/net/bnxt/tf_core/tf_em_system.c +++ b/drivers/net/bnxt/tf_core/tf_em_system.c @@ -272,8 +272,7 @@ tf_prepare_dmabuf_bnxt_lfc_device(struct tf_tbl_scope_cb *tbl_scope_cb) return 0; } -static int -offload_system_mmap(struct tf_tbl_scope_cb *tbl_scope_cb) +int offload_system_mmap(struct tf_tbl_scope_cb *tbl_scope_cb) { int rc; int dmabuf_fd; @@ -455,6 +454,7 @@ tf_em_ext_alloc(struct tf *tfp, } } +#if (TF_EM_SYSMEM_DELAY_EXPORT == 0) rc = offload_system_mmap(tbl_scope_cb); if (rc) { @@ -462,6 +462,7 @@ tf_em_ext_alloc(struct tf *tfp, "System alloc mmap failed\n"); goto cleanup_full; } +#endif return rc; @@ -527,6 +528,7 @@ tf_em_ext_free(struct tf *tfp, } tf_dmabuf_free(tfp, tbl_scope_cb); + tbl_scope_cb->valid = false; return rc; } -- 2.7.4