From patchwork Fri Oct 9 11:11:23 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Somnath Kotur X-Patchwork-Id: 80137 X-Patchwork-Delegate: ajit.khaparde@broadcom.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 90D96A04BC; Fri, 9 Oct 2020 13:20:58 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 5E3F31D50C; Fri, 9 Oct 2020 13:19:02 +0200 (CEST) Received: from relay.smtp-ext.broadcom.com (saphodev.broadcom.com [192.19.232.172]) by dpdk.org (Postfix) with ESMTP id 4001D1D452 for ; Fri, 9 Oct 2020 13:18:58 +0200 (CEST) Received: from dhcp-10-123-153-55.dhcp.broadcom.net (bgccx-dev-host-lnx35.bec.broadcom.net [10.123.153.55]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by relay.smtp-ext.broadcom.com (Postfix) with ESMTPS id 6872F829A; Fri, 9 Oct 2020 04:18:56 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.11.0 relay.smtp-ext.broadcom.com 6872F829A DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1602242337; bh=46oesAKnmasub6tq+v6mcbUVWuISrIQDvnrcH0Qk060=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=uhDRCg7xnsBhloLnBUhgiMc+feHUveYIBeAVneiYE89oBE4pzElkb2k0yzS7x+sAi 4fu/QjoUmM4T0KU2Ts0GPhtI16BOMMQQkgllYFttt01Wv86LMq3PNnf1dCZyKEG4Z0 xtdr/rowkDR2EJEwPHoFXlmhHIOQ6rJyRi9xzfeM= From: Somnath Kotur To: dev@dpdk.org Cc: ferruh.yigit@intel.com, Kishore Padmanabha , Michael Baucom , Ajit Kumar Khaparde Date: Fri, 9 Oct 2020 16:41:23 +0530 Message-Id: <20201009111130.10422-7-somnath.kotur@broadcom.com> X-Mailer: git-send-email 2.28.0.450.g3a238e5 In-Reply-To: <20201009111130.10422-1-somnath.kotur@broadcom.com> References: <20201009111130.10422-1-somnath.kotur@broadcom.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 06/13] net/bnxt: combine default and regular flows in flow database 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: Kishore Padmanabha The default and regular flows are stored in the same flow table instead of different flow tables. Signed-off-by: Kishore Padmanabha Reviewed-by: Michael Baucom Reviewed-by: Ajit Kumar Khaparde --- drivers/net/bnxt/tf_ulp/bnxt_ulp.c | 2 +- drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c | 4 +- drivers/net/bnxt/tf_ulp/ulp_def_rules.c | 4 +- drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c | 2 +- drivers/net/bnxt/tf_ulp/ulp_flow_db.c | 423 +++++++++++++++----------------- drivers/net/bnxt/tf_ulp/ulp_flow_db.h | 75 +++--- drivers/net/bnxt/tf_ulp/ulp_mapper.c | 33 +-- drivers/net/bnxt/tf_ulp/ulp_mapper.h | 11 +- 8 files changed, 259 insertions(+), 295 deletions(-) diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c index eeda2d0..9ed92a8 100644 --- a/drivers/net/bnxt/tf_ulp/bnxt_ulp.c +++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp.c @@ -853,7 +853,7 @@ bnxt_ulp_deinit(struct bnxt *bp, bnxt_ulp_destroy_vfr_default_rules(bp, true); /* clean up regular flows */ - ulp_flow_db_flush_flows(bp->ulp_ctx, BNXT_ULP_REGULAR_FLOW_TABLE); + ulp_flow_db_flush_flows(bp->ulp_ctx, BNXT_ULP_FDB_TYPE_REGULAR); /* cleanup the eem table scope */ ulp_eem_tbl_scope_deinit(bp, bp->ulp_ctx); diff --git a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c index eea39f6..c7b2982 100644 --- a/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c +++ b/drivers/net/bnxt/tf_ulp/bnxt_ulp_flow.c @@ -281,8 +281,8 @@ bnxt_ulp_flow_destroy(struct rte_eth_dev *dev, return -EINVAL; } - ret = ulp_mapper_flow_destroy(ulp_ctx, flow_id, - BNXT_ULP_REGULAR_FLOW_TABLE); + ret = ulp_mapper_flow_destroy(ulp_ctx, BNXT_ULP_FDB_TYPE_REGULAR, + flow_id); if (ret) { BNXT_TF_DBG(ERR, "Failed to destroy flow.\n"); if (error) diff --git a/drivers/net/bnxt/tf_ulp/ulp_def_rules.c b/drivers/net/bnxt/tf_ulp/ulp_def_rules.c index 01f4fd0..c36d4d4 100644 --- a/drivers/net/bnxt/tf_ulp/ulp_def_rules.c +++ b/drivers/net/bnxt/tf_ulp/ulp_def_rules.c @@ -391,8 +391,8 @@ ulp_default_flow_destroy(struct rte_eth_dev *eth_dev, uint32_t flow_id) return rc; } - rc = ulp_mapper_flow_destroy(ulp_ctx, flow_id, - BNXT_ULP_DEFAULT_FLOW_TABLE); + rc = ulp_mapper_flow_destroy(ulp_ctx, BNXT_ULP_FDB_TYPE_DEFAULT, + flow_id); if (rc) BNXT_TF_DBG(ERR, "Failed to destroy flow.\n"); diff --git a/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c b/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c index 5a0bf60..051ebac 100644 --- a/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c +++ b/drivers/net/bnxt/tf_ulp/ulp_fc_mgr.c @@ -561,7 +561,7 @@ int ulp_fc_mgr_query_count_get(struct bnxt_ulp_context *ctxt, do { rc = ulp_flow_db_resource_get(ctxt, - BNXT_ULP_REGULAR_FLOW_TABLE, + BNXT_ULP_FDB_TYPE_REGULAR, flow_id, &nxt_resource_index, ¶ms); diff --git a/drivers/net/bnxt/tf_ulp/ulp_flow_db.c b/drivers/net/bnxt/tf_ulp/ulp_flow_db.c index 9a2d375..0a3fb01 100644 --- a/drivers/net/bnxt/tf_ulp/ulp_flow_db.c +++ b/drivers/net/bnxt/tf_ulp/ulp_flow_db.c @@ -27,49 +27,66 @@ #define ULP_FLOW_DB_RES_NXT_RESET(dst) ((dst) &= ~(ULP_FLOW_DB_RES_NXT_MASK)) /* - * Helper function to set the bit in the active flow table + * Helper function to set the bit in the active flows * No validation is done in this function. * - * flow_tbl [in] Ptr to flow table + * flow_db [in] Ptr to flow database + * flow_type [in] - specify default or regular * idx [in] The index to bit to be set or reset. * flag [in] 1 to set and 0 to reset. * * returns none */ static void -ulp_flow_db_active_flow_set(struct bnxt_ulp_flow_tbl *flow_tbl, - uint32_t idx, - uint32_t flag) +ulp_flow_db_active_flows_bit_set(struct bnxt_ulp_flow_db *flow_db, + enum bnxt_ulp_fdb_type flow_type, + uint32_t idx, + uint32_t flag) { - uint32_t active_index; - - active_index = idx / ULP_INDEX_BITMAP_SIZE; - if (flag) - ULP_INDEX_BITMAP_SET(flow_tbl->active_flow_tbl[active_index], - idx); - else - ULP_INDEX_BITMAP_RESET(flow_tbl->active_flow_tbl[active_index], - idx); + struct bnxt_ulp_flow_tbl *f_tbl = &flow_db->flow_tbl; + uint32_t a_idx = idx / ULP_INDEX_BITMAP_SIZE; + + if (flag) { + if (flow_type == BNXT_ULP_FDB_TYPE_REGULAR) + ULP_INDEX_BITMAP_SET(f_tbl->active_reg_flows[a_idx], + idx); + else + ULP_INDEX_BITMAP_SET(f_tbl->active_dflt_flows[a_idx], + idx); + } else { + if (flow_type == BNXT_ULP_FDB_TYPE_REGULAR) + ULP_INDEX_BITMAP_RESET(f_tbl->active_reg_flows[a_idx], + idx); + else + ULP_INDEX_BITMAP_RESET(f_tbl->active_dflt_flows[a_idx], + idx); + } } /* - * Helper function to allocate the flow table and initialize - * is set.No validation being done in this function. + * Helper function to check if given fid is active flow. + * No validation being done in this function. * - * flow_tbl [in] Ptr to flow table + * flow_db [in] Ptr to flow database + * flow_type [in] - specify default or regular * idx [in] The index to bit to be set or reset. * * returns 1 on set or 0 if not set. */ static int32_t -ulp_flow_db_active_flow_is_set(struct bnxt_ulp_flow_tbl *flow_tbl, - uint32_t idx) +ulp_flow_db_active_flows_bit_is_set(struct bnxt_ulp_flow_db *flow_db, + enum bnxt_ulp_fdb_type flow_type, + uint32_t idx) { - uint32_t active_index; + struct bnxt_ulp_flow_tbl *f_tbl = &flow_db->flow_tbl; + uint32_t a_idx = idx / ULP_INDEX_BITMAP_SIZE; - active_index = idx / ULP_INDEX_BITMAP_SIZE; - return ULP_INDEX_BITMAP_GET(flow_tbl->active_flow_tbl[active_index], - idx); + if (flow_type == BNXT_ULP_FDB_TYPE_REGULAR) + return ULP_INDEX_BITMAP_GET(f_tbl->active_reg_flows[a_idx], + idx); + else + return ULP_INDEX_BITMAP_GET(f_tbl->active_dflt_flows[a_idx], + idx); } static uint8_t @@ -163,19 +180,17 @@ ulp_flow_db_res_info_to_params(struct ulp_fdb_resource_info *resource_info, * the stack for allocation operations. * * flow_db [in] Ptr to flow database structure - * tbl_idx [in] The index to table creation. * * Returns 0 on success or negative number on failure. */ static int32_t -ulp_flow_db_alloc_resource(struct bnxt_ulp_flow_db *flow_db, - enum bnxt_ulp_flow_db_tables tbl_idx) +ulp_flow_db_alloc_resource(struct bnxt_ulp_flow_db *flow_db) { uint32_t idx = 0; struct bnxt_ulp_flow_tbl *flow_tbl; uint32_t size; - flow_tbl = &flow_db->flow_tbl[tbl_idx]; + flow_tbl = &flow_db->flow_tbl; size = sizeof(struct ulp_fdb_resource_info) * flow_tbl->num_resources; flow_tbl->flow_resources = @@ -192,9 +207,15 @@ ulp_flow_db_alloc_resource(struct bnxt_ulp_flow_db *flow_db, return -ENOMEM; } size = (flow_tbl->num_flows / sizeof(uint64_t)) + 1; - flow_tbl->active_flow_tbl = rte_zmalloc("active flow tbl", size, 0); - if (!flow_tbl->active_flow_tbl) { - BNXT_TF_DBG(ERR, "Failed to alloc memory active tbl\n"); + flow_tbl->active_reg_flows = rte_zmalloc("active reg flows", size, 0); + if (!flow_tbl->active_reg_flows) { + BNXT_TF_DBG(ERR, "Failed to alloc memory active reg flows\n"); + return -ENOMEM; + } + + flow_tbl->active_dflt_flows = rte_zmalloc("active dflt flows", size, 0); + if (!flow_tbl->active_dflt_flows) { + BNXT_TF_DBG(ERR, "Failed to alloc memory active dflt flows\n"); return -ENOMEM; } @@ -213,22 +234,22 @@ ulp_flow_db_alloc_resource(struct bnxt_ulp_flow_db *flow_db, * Helper function to deallocate the flow table. * * flow_db [in] Ptr to flow database structure - * tbl_idx [in] The index to table creation. * * Returns none. */ static void -ulp_flow_db_dealloc_resource(struct bnxt_ulp_flow_db *flow_db, - enum bnxt_ulp_flow_db_tables tbl_idx) +ulp_flow_db_dealloc_resource(struct bnxt_ulp_flow_db *flow_db) { - struct bnxt_ulp_flow_tbl *flow_tbl; - - flow_tbl = &flow_db->flow_tbl[tbl_idx]; + struct bnxt_ulp_flow_tbl *flow_tbl = &flow_db->flow_tbl; /* Free all the allocated tables in the flow table. */ - if (flow_tbl->active_flow_tbl) { - rte_free(flow_tbl->active_flow_tbl); - flow_tbl->active_flow_tbl = NULL; + if (flow_tbl->active_reg_flows) { + rte_free(flow_tbl->active_reg_flows); + flow_tbl->active_reg_flows = NULL; + } + if (flow_tbl->active_dflt_flows) { + rte_free(flow_tbl->active_dflt_flows); + flow_tbl->active_dflt_flows = NULL; } if (flow_tbl->flow_tbl_stack) { @@ -271,12 +292,13 @@ ulp_flow_db_func_id_set(struct bnxt_ulp_flow_db *flow_db, * * Returns 0 on success or negative number on failure. */ -int32_t ulp_flow_db_init(struct bnxt_ulp_context *ulp_ctxt) +int32_t +ulp_flow_db_init(struct bnxt_ulp_context *ulp_ctxt) { - struct bnxt_ulp_device_params *dparms; - struct bnxt_ulp_flow_tbl *flow_tbl; - struct bnxt_ulp_flow_db *flow_db; - uint32_t dev_id; + struct bnxt_ulp_device_params *dparms; + struct bnxt_ulp_flow_tbl *flow_tbl; + struct bnxt_ulp_flow_db *flow_db; + uint32_t dev_id; /* Get the dev specific number of flows that needed to be supported. */ if (bnxt_ulp_cntxt_dev_id_get(ulp_ctxt, &dev_id)) { @@ -302,25 +324,22 @@ int32_t ulp_flow_db_init(struct bnxt_ulp_context *ulp_ctxt) bnxt_ulp_cntxt_ptr2_flow_db_set(ulp_ctxt, flow_db); /* Populate the regular flow table limits. */ - flow_tbl = &flow_db->flow_tbl[BNXT_ULP_REGULAR_FLOW_TABLE]; + flow_tbl = &flow_db->flow_tbl; flow_tbl->num_flows = dparms->flow_db_num_entries + 1; - flow_tbl->num_resources = (flow_tbl->num_flows * + flow_tbl->num_resources = ((dparms->flow_db_num_entries + 1) * dparms->num_resources_per_flow); - /* Populate the default flow table limits. */ - flow_tbl = &flow_db->flow_tbl[BNXT_ULP_DEFAULT_FLOW_TABLE]; - flow_tbl->num_flows = BNXT_FLOW_DB_DEFAULT_NUM_FLOWS + 1; - flow_tbl->num_resources = (flow_tbl->num_flows * - BNXT_FLOW_DB_DEFAULT_NUM_RESOURCES); + /* Include the default flow table limits. */ + flow_tbl->num_flows += (BNXT_FLOW_DB_DEFAULT_NUM_FLOWS + 1); + flow_tbl->num_resources += ((BNXT_FLOW_DB_DEFAULT_NUM_FLOWS + 1) * + BNXT_FLOW_DB_DEFAULT_NUM_RESOURCES); - /* Allocate the resource for the regular flow table. */ - if (ulp_flow_db_alloc_resource(flow_db, BNXT_ULP_REGULAR_FLOW_TABLE)) - goto error_free; - if (ulp_flow_db_alloc_resource(flow_db, BNXT_ULP_DEFAULT_FLOW_TABLE)) + /* Allocate the resource for the flow table. */ + if (ulp_flow_db_alloc_resource(flow_db)) goto error_free; /* add 1 since we are not using index 0 for flow id */ - flow_db->func_id_tbl_size = dparms->flow_db_num_entries + 1; + flow_db->func_id_tbl_size = flow_tbl->num_flows + 1; /* Allocate the function Id table */ flow_db->func_id_tbl = rte_zmalloc("bnxt_ulp_flow_db_func_id_table", flow_db->func_id_tbl_size * @@ -346,9 +365,10 @@ int32_t ulp_flow_db_init(struct bnxt_ulp_context *ulp_ctxt) * * Returns 0 on success. */ -int32_t ulp_flow_db_deinit(struct bnxt_ulp_context *ulp_ctxt) +int32_t +ulp_flow_db_deinit(struct bnxt_ulp_context *ulp_ctxt) { - struct bnxt_ulp_flow_db *flow_db; + struct bnxt_ulp_flow_db *flow_db; flow_db = bnxt_ulp_cntxt_ptr2_flow_db_get(ulp_ctxt); if (!flow_db) @@ -358,8 +378,7 @@ int32_t ulp_flow_db_deinit(struct bnxt_ulp_context *ulp_ctxt) bnxt_ulp_cntxt_ptr2_flow_db_set(ulp_ctxt, NULL); /* Free up all the memory. */ - ulp_flow_db_dealloc_resource(flow_db, BNXT_ULP_REGULAR_FLOW_TABLE); - ulp_flow_db_dealloc_resource(flow_db, BNXT_ULP_DEFAULT_FLOW_TABLE); + ulp_flow_db_dealloc_resource(flow_db); rte_free(flow_db->func_id_tbl); rte_free(flow_db); @@ -370,15 +389,17 @@ int32_t ulp_flow_db_deinit(struct bnxt_ulp_context *ulp_ctxt) * Allocate the flow database entry * * ulp_ctxt [in] Ptr to ulp_context - * tbl_idx [in] Specify it is regular or default flow + * flow_type [in] - specify default or regular + * func_id [in].function id of the ingress port * fid [out] The index to the flow entry * * returns 0 on success and negative on failure. */ -int32_t ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt, - enum bnxt_ulp_flow_db_tables tbl_idx, - uint16_t func_id, - uint32_t *fid) +int32_t +ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt, + enum bnxt_ulp_fdb_type flow_type, + uint16_t func_id, + uint32_t *fid) { struct bnxt_ulp_flow_db *flow_db; struct bnxt_ulp_flow_tbl *flow_tbl; @@ -390,7 +411,12 @@ int32_t ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt, return -EINVAL; } - flow_tbl = &flow_db->flow_tbl[tbl_idx]; + if (flow_type > BNXT_ULP_FDB_TYPE_DEFAULT) { + BNXT_TF_DBG(ERR, "Invalid flow type\n"); + return -EINVAL; + } + + flow_tbl = &flow_db->flow_tbl; /* check for max flows */ if (flow_tbl->num_flows <= flow_tbl->head_index) { BNXT_TF_DBG(ERR, "Flow database has reached max flows\n"); @@ -402,13 +428,15 @@ int32_t ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt, } *fid = flow_tbl->flow_tbl_stack[flow_tbl->head_index]; flow_tbl->head_index++; - ulp_flow_db_active_flow_set(flow_tbl, *fid, 1); - /* The function id update is only valid for regular flow table */ - if (tbl_idx == BNXT_ULP_REGULAR_FLOW_TABLE) + /* Set the flow type */ + ulp_flow_db_active_flows_bit_set(flow_db, flow_type, *fid, 1); + + /* function id update is only valid for regular flow table */ + if (flow_type == BNXT_ULP_FDB_TYPE_REGULAR) ulp_flow_db_func_id_set(flow_db, *fid, func_id); - /* all good, return success */ + /* return success */ return 0; } @@ -417,21 +445,22 @@ int32_t ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt, * The params->critical_resource has to be set to 0 to allocate a new resource. * * ulp_ctxt [in] Ptr to ulp_context - * tbl_idx [in] Specify it is regular or default flow + * flow_type [in] Specify it is regular or default flow * fid [in] The index to the flow entry * params [in] The contents to be copied into resource * * returns 0 on success and negative on failure. */ -int32_t ulp_flow_db_resource_add(struct bnxt_ulp_context *ulp_ctxt, - enum bnxt_ulp_flow_db_tables tbl_idx, - uint32_t fid, - struct ulp_flow_db_res_params *params) +int32_t +ulp_flow_db_resource_add(struct bnxt_ulp_context *ulp_ctxt, + enum bnxt_ulp_fdb_type flow_type, + uint32_t fid, + struct ulp_flow_db_res_params *params) { - struct bnxt_ulp_flow_db *flow_db; - struct bnxt_ulp_flow_tbl *flow_tbl; - struct ulp_fdb_resource_info *resource, *fid_resource; - uint32_t idx; + struct bnxt_ulp_flow_db *flow_db; + struct bnxt_ulp_flow_tbl *flow_tbl; + struct ulp_fdb_resource_info *resource, *fid_resource; + uint32_t idx; flow_db = bnxt_ulp_cntxt_ptr2_flow_db_get(ulp_ctxt); if (!flow_db) { @@ -439,12 +468,12 @@ int32_t ulp_flow_db_resource_add(struct bnxt_ulp_context *ulp_ctxt, return -EINVAL; } - if (tbl_idx >= BNXT_ULP_FLOW_TABLE_MAX) { - BNXT_TF_DBG(ERR, "Invalid table index\n"); + if (flow_type > BNXT_ULP_FDB_TYPE_DEFAULT) { + BNXT_TF_DBG(ERR, "Invalid flow type\n"); return -EINVAL; } - flow_tbl = &flow_db->flow_tbl[tbl_idx]; + flow_tbl = &flow_db->flow_tbl; /* check for max flows */ if (fid >= flow_tbl->num_flows || !fid) { BNXT_TF_DBG(ERR, "Invalid flow index\n"); @@ -452,7 +481,7 @@ int32_t ulp_flow_db_resource_add(struct bnxt_ulp_context *ulp_ctxt, } /* check if the flow is active or not */ - if (!ulp_flow_db_active_flow_is_set(flow_tbl, fid)) { + if (!ulp_flow_db_active_flows_bit_is_set(flow_db, flow_type, fid)) { BNXT_TF_DBG(ERR, "flow does not exist\n"); return -EINVAL; } @@ -507,22 +536,23 @@ int32_t ulp_flow_db_resource_add(struct bnxt_ulp_context *ulp_ctxt, * The params->critical_resource has to be set to 1 to free the first resource. * * ulp_ctxt [in] Ptr to ulp_context - * tbl_idx [in] Specify it is regular or default flow + * flow_type [in] Specify it is regular or default flow * fid [in] The index to the flow entry * params [in/out] The contents to be copied into params. * Onlythe critical_resource needs to be set by the caller. * * Returns 0 on success and negative on failure. */ -int32_t ulp_flow_db_resource_del(struct bnxt_ulp_context *ulp_ctxt, - enum bnxt_ulp_flow_db_tables tbl_idx, - uint32_t fid, - struct ulp_flow_db_res_params *params) +int32_t +ulp_flow_db_resource_del(struct bnxt_ulp_context *ulp_ctxt, + enum bnxt_ulp_fdb_type flow_type, + uint32_t fid, + struct ulp_flow_db_res_params *params) { - struct bnxt_ulp_flow_db *flow_db; - struct bnxt_ulp_flow_tbl *flow_tbl; - struct ulp_fdb_resource_info *nxt_resource, *fid_resource; - uint32_t nxt_idx = 0; + struct bnxt_ulp_flow_db *flow_db; + struct bnxt_ulp_flow_tbl *flow_tbl; + struct ulp_fdb_resource_info *nxt_resource, *fid_resource; + uint32_t nxt_idx = 0; flow_db = bnxt_ulp_cntxt_ptr2_flow_db_get(ulp_ctxt); if (!flow_db) { @@ -530,12 +560,12 @@ int32_t ulp_flow_db_resource_del(struct bnxt_ulp_context *ulp_ctxt, return -EINVAL; } - if (tbl_idx >= BNXT_ULP_FLOW_TABLE_MAX) { - BNXT_TF_DBG(ERR, "Invalid table index\n"); + if (flow_type > BNXT_ULP_FDB_TYPE_DEFAULT) { + BNXT_TF_DBG(ERR, "Invalid flow type\n"); return -EINVAL; } - flow_tbl = &flow_db->flow_tbl[tbl_idx]; + flow_tbl = &flow_db->flow_tbl; /* check for max flows */ if (fid >= flow_tbl->num_flows || !fid) { BNXT_TF_DBG(ERR, "Invalid flow index\n"); @@ -543,7 +573,7 @@ int32_t ulp_flow_db_resource_del(struct bnxt_ulp_context *ulp_ctxt, } /* check if the flow is active or not */ - if (!ulp_flow_db_active_flow_is_set(flow_tbl, fid)) { + if (!ulp_flow_db_active_flows_bit_is_set(flow_db, flow_type, fid)) { BNXT_TF_DBG(ERR, "flow does not exist\n"); return -EINVAL; } @@ -607,17 +637,18 @@ int32_t ulp_flow_db_resource_del(struct bnxt_ulp_context *ulp_ctxt, * Free the flow database entry * * ulp_ctxt [in] Ptr to ulp_context - * tbl_idx [in] Specify it is regular or default flow + * flow_type [in] - specify default or regular * fid [in] The index to the flow entry * * returns 0 on success and negative on failure. */ -int32_t ulp_flow_db_fid_free(struct bnxt_ulp_context *ulp_ctxt, - enum bnxt_ulp_flow_db_tables tbl_idx, - uint32_t fid) +int32_t +ulp_flow_db_fid_free(struct bnxt_ulp_context *ulp_ctxt, + enum bnxt_ulp_fdb_type flow_type, + uint32_t fid) { - struct bnxt_ulp_flow_db *flow_db; - struct bnxt_ulp_flow_tbl *flow_tbl; + struct bnxt_ulp_flow_db *flow_db; + struct bnxt_ulp_flow_tbl *flow_tbl; flow_db = bnxt_ulp_cntxt_ptr2_flow_db_get(ulp_ctxt); if (!flow_db) { @@ -625,12 +656,12 @@ int32_t ulp_flow_db_fid_free(struct bnxt_ulp_context *ulp_ctxt, return -EINVAL; } - if (tbl_idx >= BNXT_ULP_FLOW_TABLE_MAX) { - BNXT_TF_DBG(ERR, "Invalid table index\n"); + if (flow_type > BNXT_ULP_FDB_TYPE_DEFAULT) { + BNXT_TF_DBG(ERR, "Invalid flow type\n"); return -EINVAL; } - flow_tbl = &flow_db->flow_tbl[tbl_idx]; + flow_tbl = &flow_db->flow_tbl; /* check for limits of fid */ if (fid >= flow_tbl->num_flows || !fid) { @@ -639,7 +670,7 @@ int32_t ulp_flow_db_fid_free(struct bnxt_ulp_context *ulp_ctxt, } /* check if the flow is active or not */ - if (!ulp_flow_db_active_flow_is_set(flow_tbl, fid)) { + if (!ulp_flow_db_active_flows_bit_is_set(flow_db, flow_type, fid)) { BNXT_TF_DBG(ERR, "flow does not exist\n"); return -EINVAL; } @@ -649,8 +680,11 @@ int32_t ulp_flow_db_fid_free(struct bnxt_ulp_context *ulp_ctxt, return -ENOENT; } flow_tbl->flow_tbl_stack[flow_tbl->head_index] = fid; - ulp_flow_db_active_flow_set(flow_tbl, fid, 0); - if (tbl_idx == BNXT_ULP_REGULAR_FLOW_TABLE) + + /* Clear the flows bitmap */ + ulp_flow_db_active_flows_bit_set(flow_db, flow_type, fid, 0); + + if (flow_type == BNXT_ULP_FDB_TYPE_REGULAR) ulp_flow_db_func_id_set(flow_db, fid, 0); /* all good, return success */ @@ -661,22 +695,23 @@ int32_t ulp_flow_db_fid_free(struct bnxt_ulp_context *ulp_ctxt, * Get the flow database entry details * * ulp_ctxt [in] Ptr to ulp_context - * tbl_idx [in] Specify it is regular or default flow + * flow_type [in] - specify default or regular * fid [in] The index to the flow entry * nxt_idx [in/out] the index to the next entry * params [out] The contents to be copied into params. * * returns 0 on success and negative on failure. */ -int32_t ulp_flow_db_resource_get(struct bnxt_ulp_context *ulp_ctxt, - enum bnxt_ulp_flow_db_tables tbl_idx, - uint32_t fid, - uint32_t *nxt_idx, - struct ulp_flow_db_res_params *params) +int32_t +ulp_flow_db_resource_get(struct bnxt_ulp_context *ulp_ctxt, + enum bnxt_ulp_fdb_type flow_type, + uint32_t fid, + uint32_t *nxt_idx, + struct ulp_flow_db_res_params *params) { - struct bnxt_ulp_flow_db *flow_db; - struct bnxt_ulp_flow_tbl *flow_tbl; - struct ulp_fdb_resource_info *nxt_resource, *fid_resource; + struct bnxt_ulp_flow_db *flow_db; + struct bnxt_ulp_flow_tbl *flow_tbl; + struct ulp_fdb_resource_info *nxt_resource, *fid_resource; flow_db = bnxt_ulp_cntxt_ptr2_flow_db_get(ulp_ctxt); if (!flow_db) { @@ -684,12 +719,12 @@ int32_t ulp_flow_db_resource_get(struct bnxt_ulp_context *ulp_ctxt, return -EINVAL; } - if (tbl_idx >= BNXT_ULP_FLOW_TABLE_MAX) { - BNXT_TF_DBG(ERR, "Invalid table index\n"); + if (flow_type > BNXT_ULP_FDB_TYPE_DEFAULT) { + BNXT_TF_DBG(ERR, "Invalid flow type\n"); return -EINVAL; } - flow_tbl = &flow_db->flow_tbl[tbl_idx]; + flow_tbl = &flow_db->flow_tbl; /* check for limits of fid */ if (fid >= flow_tbl->num_flows || !fid) { @@ -698,7 +733,7 @@ int32_t ulp_flow_db_resource_get(struct bnxt_ulp_context *ulp_ctxt, } /* check if the flow is active or not */ - if (!ulp_flow_db_active_flow_is_set(flow_tbl, fid)) { + if (!ulp_flow_db_active_flows_bit_is_set(flow_db, flow_type, fid)) { BNXT_TF_DBG(ERR, "flow does not exist\n"); return -EINVAL; } @@ -724,17 +759,26 @@ int32_t ulp_flow_db_resource_get(struct bnxt_ulp_context *ulp_ctxt, * Get the flow database entry iteratively * * flow_tbl [in] Ptr to flow table + * flow_type [in] - specify default or regular * fid [in/out] The index to the flow entry * * returns 0 on success and negative on failure. */ static int32_t -ulp_flow_db_next_entry_get(struct bnxt_ulp_flow_tbl *flowtbl, - uint32_t *fid) +ulp_flow_db_next_entry_get(struct bnxt_ulp_flow_db *flow_db, + enum bnxt_ulp_fdb_type flow_type, + uint32_t *fid) { - uint32_t lfid = *fid; - uint32_t idx, s_idx, mod_fid; - uint64_t bs; + uint32_t lfid = *fid; + uint32_t idx, s_idx, mod_fid; + uint64_t bs; + uint64_t *active_flows; + struct bnxt_ulp_flow_tbl *flowtbl = &flow_db->flow_tbl; + + if (flow_type == BNXT_ULP_FDB_TYPE_REGULAR) + active_flows = flowtbl->active_reg_flows; + else + active_flows = flowtbl->active_dflt_flows; do { /* increment the flow id to find the next valid flow id */ @@ -744,7 +788,7 @@ ulp_flow_db_next_entry_get(struct bnxt_ulp_flow_tbl *flowtbl, idx = lfid / ULP_INDEX_BITMAP_SIZE; mod_fid = lfid % ULP_INDEX_BITMAP_SIZE; s_idx = idx; - while (!(bs = flowtbl->active_flow_tbl[idx])) { + while (!(bs = active_flows[idx])) { idx++; if ((idx * ULP_INDEX_BITMAP_SIZE) >= flowtbl->num_flows) return -ENOENT; @@ -761,7 +805,8 @@ ulp_flow_db_next_entry_get(struct bnxt_ulp_flow_tbl *flowtbl, BNXT_TF_DBG(ERR, "Flow Database is corrupt\n"); return -ENOENT; } - } while (!ulp_flow_db_active_flow_is_set(flowtbl, lfid)); + } while (!ulp_flow_db_active_flows_bit_is_set(flow_db, flow_type, + lfid)); /* all good, return success */ *fid = lfid; @@ -772,16 +817,16 @@ ulp_flow_db_next_entry_get(struct bnxt_ulp_flow_tbl *flowtbl, * Flush all flows in the flow database. * * ulp_ctxt [in] Ptr to ulp context - * tbl_idx [in] The index to table + * flow_type [in] - specify default or regular * * returns 0 on success or negative number on failure */ -int32_t ulp_flow_db_flush_flows(struct bnxt_ulp_context *ulp_ctx, - uint32_t idx) +int32_t +ulp_flow_db_flush_flows(struct bnxt_ulp_context *ulp_ctx, + enum bnxt_ulp_fdb_type flow_type) { - uint32_t fid = 0; - struct bnxt_ulp_flow_db *flow_db; - struct bnxt_ulp_flow_tbl *flow_tbl; + uint32_t fid = 0; + struct bnxt_ulp_flow_db *flow_db; if (!ulp_ctx) { BNXT_TF_DBG(ERR, "Invalid Argument\n"); @@ -798,9 +843,8 @@ int32_t ulp_flow_db_flush_flows(struct bnxt_ulp_context *ulp_ctx, return -EINVAL; } - flow_tbl = &flow_db->flow_tbl[idx]; - while (!ulp_flow_db_next_entry_get(flow_tbl, &fid)) - ulp_mapper_resources_free(ulp_ctx, fid, idx); + while (!ulp_flow_db_next_entry_get(flow_db, flow_type, &fid)) + ulp_mapper_resources_free(ulp_ctx, flow_type, fid); bnxt_ulp_cntxt_release_fdb_lock(ulp_ctx); @@ -811,7 +855,7 @@ int32_t ulp_flow_db_flush_flows(struct bnxt_ulp_context *ulp_ctx, * Flush all flows in the flow database that belong to a device function. * * ulp_ctxt [in] Ptr to ulp context - * tbl_idx [in] The index to table + * func_id [in] - The port function id * * returns 0 on success or negative number on failure */ @@ -821,7 +865,6 @@ ulp_flow_db_function_flow_flush(struct bnxt_ulp_context *ulp_ctx, { uint32_t flow_id = 0; struct bnxt_ulp_flow_db *flow_db; - struct bnxt_ulp_flow_tbl *flow_tbl; if (!ulp_ctx || !func_id) { BNXT_TF_DBG(ERR, "Invalid Argument\n"); @@ -837,11 +880,13 @@ ulp_flow_db_function_flow_flush(struct bnxt_ulp_context *ulp_ctx, BNXT_TF_DBG(ERR, "Flow db lock acquire failed\n"); return -EINVAL; } - flow_tbl = &flow_db->flow_tbl[BNXT_ULP_REGULAR_FLOW_TABLE]; - while (!ulp_flow_db_next_entry_get(flow_tbl, &flow_id)) { + + while (!ulp_flow_db_next_entry_get(flow_db, BNXT_ULP_FDB_TYPE_REGULAR, + &flow_id)) { if (flow_db->func_id_tbl[flow_id] == func_id) - ulp_mapper_resources_free(ulp_ctx, flow_id, - BNXT_ULP_REGULAR_FLOW_TABLE); + ulp_mapper_resources_free(ulp_ctx, + BNXT_ULP_FDB_TYPE_REGULAR, + flow_id); } bnxt_ulp_cntxt_release_fdb_lock(ulp_ctx); return 0; @@ -861,7 +906,7 @@ ulp_flow_db_session_flow_flush(struct bnxt_ulp_context *ulp_ctx) * TBD: Tf core implementation of FW session flush shall change this * implementation. */ - return ulp_flow_db_flush_flows(ulp_ctx, BNXT_ULP_REGULAR_FLOW_TABLE); + return ulp_flow_db_flush_flows(ulp_ctx, BNXT_ULP_FDB_TYPE_REGULAR); } /* @@ -904,7 +949,7 @@ ulp_flow_db_validate_flow_func(struct bnxt_ulp_context *ulp_ctx, */ static int32_t ulp_flow_db_resource_hndl_get(struct bnxt_ulp_context *ulp_ctx, - enum bnxt_ulp_flow_db_tables tbl_idx, + enum bnxt_ulp_fdb_type flow_type, uint32_t flow_id, uint32_t resource_func, uint32_t res_subtype, @@ -921,7 +966,12 @@ ulp_flow_db_resource_hndl_get(struct bnxt_ulp_context *ulp_ctx, return -EINVAL; } - flow_tbl = &flow_db->flow_tbl[tbl_idx]; + if (flow_type > BNXT_ULP_FDB_TYPE_DEFAULT) { + BNXT_TF_DBG(ERR, "Invalid flow type\n"); + return -EINVAL; + } + + flow_tbl = &flow_db->flow_tbl; /* check for limits of fid */ if (flow_id >= flow_tbl->num_flows || !flow_id) { @@ -930,7 +980,7 @@ ulp_flow_db_resource_hndl_get(struct bnxt_ulp_context *ulp_ctx, } /* check if the flow is active or not */ - if (!ulp_flow_db_active_flow_is_set(flow_tbl, flow_id)) { + if (!ulp_flow_db_active_flows_bit_is_set(flow_db, flow_type, flow_id)) { BNXT_TF_DBG(ERR, "flow does not exist\n"); return -EINVAL; } @@ -978,7 +1028,7 @@ ulp_default_flow_db_cfa_action_get(struct bnxt_ulp_context *ulp_ctx, int32_t rc; rc = ulp_flow_db_resource_hndl_get(ulp_ctx, - BNXT_ULP_DEFAULT_FLOW_TABLE, + BNXT_ULP_FDB_TYPE_DEFAULT, flow_id, BNXT_ULP_RESOURCE_FUNC_INDEX_TABLE, sub_type, &hndl); @@ -990,80 +1040,3 @@ ulp_default_flow_db_cfa_action_get(struct bnxt_ulp_context *ulp_ctx, *cfa_action = hndl; return 0; } - -#ifdef RTE_LIBRTE_BNXT_TRUFLOW_DEBUG -/* - * Dump the entry details - * - * ulp_ctxt [in] Ptr to ulp_context - * - * returns none - */ -static void ulp_flow_db_res_dump(struct ulp_fdb_resource_info *r, - uint32_t *nxt_res) -{ - uint8_t res_func = ulp_flow_db_resource_func_get(r); - - BNXT_TF_DBG(DEBUG, "Resource func = %x, nxt_resource_idx = %x\n", - res_func, (ULP_FLOW_DB_RES_NXT_MASK & r->nxt_resource_idx)); - if (res_func == BNXT_ULP_RESOURCE_FUNC_EXT_EM_TABLE || - res_func == BNXT_ULP_RESOURCE_FUNC_INT_EM_TABLE) - BNXT_TF_DBG(DEBUG, "EM Handle = 0x%016" PRIX64 "\n", - r->resource_em_handle); - else - BNXT_TF_DBG(DEBUG, "Handle = 0x%08x\n", r->resource_hndl); - - *nxt_res = 0; - ULP_FLOW_DB_RES_NXT_SET(*nxt_res, - r->nxt_resource_idx); -} - -/* - * Dump the flow database entry details - * - * ulp_ctxt [in] Ptr to ulp_context - * - * returns none - */ -int32_t ulp_flow_db_debug_dump(struct bnxt_ulp_context *ulp_ctxt) -{ - struct bnxt_ulp_flow_db *flow_db; - struct bnxt_ulp_flow_tbl *flow_tbl; - struct ulp_fdb_resource_info *r; - uint32_t nxt_res = 0; - enum bnxt_ulp_flow_db_tables tbl_idx; - uint32_t fid; - - if (!ulp_ctxt || !ulp_ctxt->cfg_data) { - BNXT_TF_DBG(ERR, "Invalid Arguments\n"); - return -EINVAL; - } - flow_db = bnxt_ulp_cntxt_ptr2_flow_db_get(ulp_ctxt); - if (!flow_db) { - BNXT_TF_DBG(ERR, "Invalid Arguments\n"); - return -EINVAL; - } - - for (tbl_idx = 0; tbl_idx < BNXT_ULP_FLOW_TABLE_MAX; tbl_idx++) { - flow_tbl = &flow_db->flow_tbl[tbl_idx]; - BNXT_TF_DBG(DEBUG, "Dump Tbl index = %u, flows = %u:%u\n", - tbl_idx, flow_tbl->num_flows, - flow_tbl->num_resources); - BNXT_TF_DBG(DEBUG, "Head_index = %u, Tail_index = %u\n", - flow_tbl->head_index, flow_tbl->tail_index); - for (fid = 0; fid < flow_tbl->num_flows; fid++) { - if (ulp_flow_db_active_flow_is_set(flow_tbl, fid)) { - BNXT_TF_DBG(DEBUG, "fid = %u\n", fid); - /* iterate the resource */ - nxt_res = fid; - do { - r = &flow_tbl->flow_resources[nxt_res]; - ulp_flow_db_res_dump(r, &nxt_res); - } while (nxt_res); - } - } - BNXT_TF_DBG(DEBUG, "Done.\n"); - } - return 0; -} -#endif diff --git a/drivers/net/bnxt/tf_ulp/ulp_flow_db.h b/drivers/net/bnxt/tf_ulp/ulp_flow_db.h index 8c83664..7ec4b8a 100644 --- a/drivers/net/bnxt/tf_ulp/ulp_flow_db.h +++ b/drivers/net/bnxt/tf_ulp/ulp_flow_db.h @@ -46,21 +46,15 @@ struct bnxt_ulp_flow_tbl { uint32_t tail_index; /* Table to track the active flows. */ - uint64_t *active_flow_tbl; + uint64_t *active_reg_flows; + uint64_t *active_dflt_flows; uint32_t num_flows; uint32_t num_resources; }; -/* Flow database supports two tables. */ -enum bnxt_ulp_flow_db_tables { - BNXT_ULP_REGULAR_FLOW_TABLE, - BNXT_ULP_DEFAULT_FLOW_TABLE, - BNXT_ULP_FLOW_TABLE_MAX -}; - /* Structure for the flow database resource information. */ struct bnxt_ulp_flow_db { - struct bnxt_ulp_flow_tbl flow_tbl[BNXT_ULP_FLOW_TABLE_MAX]; + struct bnxt_ulp_flow_tbl flow_tbl; uint16_t *func_id_tbl; uint32_t func_id_tbl_size; }; @@ -107,10 +101,11 @@ int32_t ulp_flow_db_deinit(struct bnxt_ulp_context *ulp_ctxt); * * returns 0 on success and negative on failure. */ -int32_t ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt, - enum bnxt_ulp_flow_db_tables tbl_idx, - uint16_t func_id, - uint32_t *fid); +int32_t +ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt, + enum bnxt_ulp_fdb_type flow_type, + uint16_t func_id, + uint32_t *fid); /* * Allocate the flow database entry. @@ -123,10 +118,11 @@ int32_t ulp_flow_db_fid_alloc(struct bnxt_ulp_context *ulp_ctxt, * * returns 0 on success and negative on failure. */ -int32_t ulp_flow_db_resource_add(struct bnxt_ulp_context *ulp_ctxt, - enum bnxt_ulp_flow_db_tables tbl_idx, - uint32_t fid, - struct ulp_flow_db_res_params *params); +int32_t +ulp_flow_db_resource_add(struct bnxt_ulp_context *ulp_ctxt, + enum bnxt_ulp_fdb_type flow_type, + uint32_t fid, + struct ulp_flow_db_res_params *params); /* * Free the flow database entry. @@ -140,10 +136,11 @@ int32_t ulp_flow_db_resource_add(struct bnxt_ulp_context *ulp_ctxt, * * Returns 0 on success and negative on failure. */ -int32_t ulp_flow_db_resource_del(struct bnxt_ulp_context *ulp_ctxt, - enum bnxt_ulp_flow_db_tables tbl_idx, - uint32_t fid, - struct ulp_flow_db_res_params *params); +int32_t +ulp_flow_db_resource_del(struct bnxt_ulp_context *ulp_ctxt, + enum bnxt_ulp_fdb_type flow_type, + uint32_t fid, + struct ulp_flow_db_res_params *params); /* * Free the flow database entry @@ -154,9 +151,10 @@ int32_t ulp_flow_db_resource_del(struct bnxt_ulp_context *ulp_ctxt, * * returns 0 on success and negative on failure. */ -int32_t ulp_flow_db_fid_free(struct bnxt_ulp_context *ulp_ctxt, - enum bnxt_ulp_flow_db_tables tbl_idx, - uint32_t fid); +int32_t +ulp_flow_db_fid_free(struct bnxt_ulp_context *ulp_ctxt, + enum bnxt_ulp_fdb_type tbl_idx, + uint32_t fid); /* *Get the flow database entry details @@ -169,11 +167,12 @@ int32_t ulp_flow_db_fid_free(struct bnxt_ulp_context *ulp_ctxt, * * returns 0 on success and negative on failure. */ -int32_t ulp_flow_db_resource_get(struct bnxt_ulp_context *ulp_ctxt, - enum bnxt_ulp_flow_db_tables tbl_idx, - uint32_t fid, - uint32_t *nxt_idx, - struct ulp_flow_db_res_params *params); +int32_t +ulp_flow_db_resource_get(struct bnxt_ulp_context *ulp_ctxt, + enum bnxt_ulp_fdb_type flow_type, + uint32_t fid, + uint32_t *nxt_idx, + struct ulp_flow_db_res_params *params); /* * Flush all flows in the flow database. @@ -183,8 +182,9 @@ int32_t ulp_flow_db_resource_get(struct bnxt_ulp_context *ulp_ctxt, * * returns 0 on success or negative number on failure */ -int32_t ulp_flow_db_flush_flows(struct bnxt_ulp_context *ulp_ctx, - uint32_t idx); +int32_t +ulp_flow_db_flush_flows(struct bnxt_ulp_context *ulp_ctx, + uint32_t idx); /* * Flush all flows in the flow database that belong to a device function. @@ -212,7 +212,7 @@ ulp_flow_db_session_flow_flush(struct bnxt_ulp_context *ulp_ctx); * Check that flow id matches the function id or not * * ulp_ctxt [in] Ptr to ulp context - * flow_db [in] Ptr to flow table + * flow_id [in] flow id of the flow. * func_id [in] The func_id to be set, for reset pass zero. * * returns true on success or false on failure @@ -236,15 +236,4 @@ ulp_default_flow_db_cfa_action_get(struct bnxt_ulp_context *ulp_ctx, uint32_t flow_id, uint16_t *cfa_action); -#ifdef RTE_LIBRTE_BNXT_TRUFLOW_DEBUG -/* - * Dump the flow database entry details - * - * ulp_ctxt [in] Ptr to ulp_context - * - * returns none - */ -int32_t ulp_flow_db_debug_dump(struct bnxt_ulp_context *ulp_ctxt); -#endif - #endif /* _ULP_FLOW_DB_H_ */ diff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper.c b/drivers/net/bnxt/tf_ulp/ulp_mapper.c index 5ed481a..0f55f4f 100644 --- a/drivers/net/bnxt/tf_ulp/ulp_mapper.c +++ b/drivers/net/bnxt/tf_ulp/ulp_mapper.c @@ -2482,12 +2482,12 @@ ulp_mapper_resource_free(struct bnxt_ulp_context *ulp, } int32_t -ulp_mapper_resources_free(struct bnxt_ulp_context *ulp_ctx, - uint32_t fid, - enum bnxt_ulp_flow_db_tables tbl_type) +ulp_mapper_resources_free(struct bnxt_ulp_context *ulp_ctx, + enum bnxt_ulp_fdb_type flow_type, + uint32_t fid) { - struct ulp_flow_db_res_params res_parms = { 0 }; - int32_t rc, trc; + struct ulp_flow_db_res_params res_parms = { 0 }; + int32_t rc, trc; if (!ulp_ctx) { BNXT_TF_DBG(ERR, "Invalid parms, unable to free flow\n"); @@ -2499,7 +2499,7 @@ ulp_mapper_resources_free(struct bnxt_ulp_context *ulp_ctx, * while status is good */ res_parms.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_YES; - rc = ulp_flow_db_resource_del(ulp_ctx, tbl_type, fid, &res_parms); + rc = ulp_flow_db_resource_del(ulp_ctx, flow_type, fid, &res_parms); if (rc) { /* @@ -2507,7 +2507,7 @@ ulp_mapper_resources_free(struct bnxt_ulp_context *ulp_ctx, * It likely means that the flow did not exist in the flow db. */ BNXT_TF_DBG(ERR, "Flow[%d][0x%08x] failed to free (rc=%d)\n", - tbl_type, fid, rc); + flow_type, fid, rc); return rc; } @@ -2521,20 +2521,20 @@ ulp_mapper_resources_free(struct bnxt_ulp_context *ulp_ctx, BNXT_TF_DBG(ERR, "Flow[%d][0x%x] Res[%d][0x%016" PRIx64 "] failed rc=%d.\n", - tbl_type, fid, res_parms.resource_func, + flow_type, fid, res_parms.resource_func, res_parms.resource_hndl, trc); /* All subsequent call require the non-critical_resource */ res_parms.critical_resource = BNXT_ULP_CRITICAL_RESOURCE_NO; rc = ulp_flow_db_resource_del(ulp_ctx, - tbl_type, + flow_type, fid, &res_parms); } /* Free the Flow ID since we've removed all resources */ - rc = ulp_flow_db_fid_free(ulp_ctx, tbl_type, fid); + rc = ulp_flow_db_fid_free(ulp_ctx, flow_type, fid); return rc; } @@ -2568,8 +2568,9 @@ ulp_mapper_glb_resource_info_deinit(struct bnxt_ulp_context *ulp_ctx, } int32_t -ulp_mapper_flow_destroy(struct bnxt_ulp_context *ulp_ctx, uint32_t fid, - enum bnxt_ulp_flow_db_tables flow_tbl_type) +ulp_mapper_flow_destroy(struct bnxt_ulp_context *ulp_ctx, + enum bnxt_ulp_fdb_type flow_type, + uint32_t fid) { int32_t rc; @@ -2582,7 +2583,7 @@ ulp_mapper_flow_destroy(struct bnxt_ulp_context *ulp_ctx, uint32_t fid, return -EINVAL; } - rc = ulp_mapper_resources_free(ulp_ctx, fid, flow_tbl_type); + rc = ulp_mapper_resources_free(ulp_ctx, flow_type, fid); bnxt_ulp_cntxt_release_fdb_lock(ulp_ctx); return rc; @@ -2624,7 +2625,7 @@ ulp_mapper_glb_template_table_init(struct bnxt_ulp_context *ulp_ctx) parms.ulp_ctx = ulp_ctx; parms.dev_id = dev_id; parms.mapper_data = mapper_data; - parms.flow_type = BNXT_ULP_DEFAULT_FLOW_TABLE; + parms.flow_type = BNXT_ULP_FDB_TYPE_DEFAULT; parms.tmpl_type = BNXT_ULP_TEMPLATE_TYPE_CLASS; /* Get the class table entry from dev id and class id */ @@ -2758,8 +2759,8 @@ ulp_mapper_flow_create(struct bnxt_ulp_context *ulp_ctx, flow_error: bnxt_ulp_cntxt_release_fdb_lock(ulp_ctx); /* Free all resources that were allocated during flow creation */ - trc = ulp_mapper_flow_destroy(ulp_ctx, parms.fid, - BNXT_ULP_REGULAR_FLOW_TABLE); + trc = ulp_mapper_flow_destroy(ulp_ctx, BNXT_ULP_FDB_TYPE_REGULAR, + parms.fid); if (trc) BNXT_TF_DBG(ERR, "Failed to free all resources rc=%d\n", trc); diff --git a/drivers/net/bnxt/tf_ulp/ulp_mapper.h b/drivers/net/bnxt/tf_ulp/ulp_mapper.h index 936fb9a..6f93bcd 100644 --- a/drivers/net/bnxt/tf_ulp/ulp_mapper.h +++ b/drivers/net/bnxt/tf_ulp/ulp_mapper.h @@ -111,16 +111,17 @@ ulp_mapper_flow_create(struct bnxt_ulp_context *ulp_ctx, /* Function that frees all resources associated with the flow. */ int32_t -ulp_mapper_flow_destroy(struct bnxt_ulp_context *ulp_ctx, uint32_t fid, - enum bnxt_ulp_flow_db_tables flow_tbl_type); +ulp_mapper_flow_destroy(struct bnxt_ulp_context *ulp_ctx, + enum bnxt_ulp_fdb_type flow_type, + uint32_t fid); /* * Function that frees all resources and can be called on default or regular * flows */ int32_t -ulp_mapper_resources_free(struct bnxt_ulp_context *ulp_ctx, - uint32_t fid, - enum bnxt_ulp_flow_db_tables tbl_type); +ulp_mapper_resources_free(struct bnxt_ulp_context *ulp_ctx, + enum bnxt_ulp_fdb_type flow_type, + uint32_t fid); #endif /* _ULP_MAPPER_H_ */