X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fbnxt%2Ftf_ulp%2Fulp_mark_mgr.c;h=8b8dccf9f147f77487c99ef0db81a0f1e1ba1993;hb=6c7cbc8077dd25abd6baf264cd598252ecd9fb3b;hp=51742233845e4fe7cdc50a95ae5acc8e8606539f;hpb=55aeaac33ac878a84b0647fef5b1b85df476fb52;p=dpdk.git diff --git a/drivers/net/bnxt/tf_ulp/ulp_mark_mgr.c b/drivers/net/bnxt/tf_ulp/ulp_mark_mgr.c index 5174223384..8b8dccf9f1 100644 --- a/drivers/net/bnxt/tf_ulp/ulp_mark_mgr.c +++ b/drivers/net/bnxt/tf_ulp/ulp_mark_mgr.c @@ -18,6 +18,8 @@ BNXT_ULP_MARK_VALID) #define ULP_MARK_DB_ENTRY_IS_INVALID(mark_info) (!((mark_info)->flags &\ BNXT_ULP_MARK_VALID)) +#define ULP_MARK_DB_ENTRY_SET_VFR_ID(mark_info) ((mark_info)->flags |=\ + BNXT_ULP_MARK_VFR_ID) #define ULP_MARK_DB_ENTRY_IS_VFR_ID(mark_info) ((mark_info)->flags &\ BNXT_ULP_MARK_VFR_ID) #define ULP_MARK_DB_ENTRY_IS_GLOBAL_HW_FID(mark_info) ((mark_info)->flags &\ @@ -87,6 +89,9 @@ ulp_mark_db_init(struct bnxt_ulp_context *ctxt) /* Need to allocate 2 * Num flows to account for hash type bit */ mark_tbl->gfid_num_entries = dparms->mark_db_gfid_entries; + if (!mark_tbl->gfid_num_entries) + goto gfid_not_required; + mark_tbl->gfid_tbl = rte_zmalloc("ulp_rx_eem_flow_mark_table", mark_tbl->gfid_num_entries * sizeof(struct bnxt_gfid_mark_info), @@ -109,14 +114,17 @@ ulp_mark_db_init(struct bnxt_ulp_context *ctxt) mark_tbl->gfid_num_entries - 1, mark_tbl->gfid_mask); +gfid_not_required: /* Add the mark tbl to the ulp context. */ bnxt_ulp_cntxt_ptr2_mark_db_set(ctxt, mark_tbl); return 0; mem_error: - rte_free(mark_tbl->gfid_tbl); - rte_free(mark_tbl->lfid_tbl); - rte_free(mark_tbl); + if (mark_tbl) { + rte_free(mark_tbl->gfid_tbl); + rte_free(mark_tbl->lfid_tbl); + rte_free(mark_tbl); + } BNXT_TF_DBG(DEBUG, "Failed to allocate memory for mark mgr\n"); return -ENOMEM; } @@ -186,9 +194,6 @@ ulp_mark_db_mark_get(struct bnxt_ulp_context *ctxt, ULP_MARK_DB_ENTRY_IS_INVALID(&mtbl->gfid_tbl[idx])) return -EINVAL; - BNXT_TF_DBG(DEBUG, "Get GFID[0x%0x] = 0x%0x\n", - idx, mtbl->gfid_tbl[idx].mark_id); - *vfr_flag = ULP_MARK_DB_ENTRY_IS_VFR_ID(&mtbl->gfid_tbl[idx]); *mark = mtbl->gfid_tbl[idx].mark_id; } else { @@ -196,9 +201,6 @@ ulp_mark_db_mark_get(struct bnxt_ulp_context *ctxt, ULP_MARK_DB_ENTRY_IS_INVALID(&mtbl->lfid_tbl[idx])) return -EINVAL; - BNXT_TF_DBG(DEBUG, "Get LFID[0x%0x] = 0x%0x\n", - idx, mtbl->lfid_tbl[idx].mark_id); - *vfr_flag = ULP_MARK_DB_ENTRY_IS_VFR_ID(&mtbl->lfid_tbl[idx]); *mark = mtbl->lfid_tbl[idx].mark_id; } @@ -259,6 +261,9 @@ ulp_mark_db_mark_add(struct bnxt_ulp_context *ctxt, BNXT_TF_DBG(DEBUG, "Set LFID[0x%0x] = 0x%0x\n", fid, mark); mtbl->lfid_tbl[fid].mark_id = mark; ULP_MARK_DB_ENTRY_SET_VALID(&mtbl->lfid_tbl[fid]); + + if (mark_flag & BNXT_ULP_MARK_VFR_ID) + ULP_MARK_DB_ENTRY_SET_VFR_ID(&mtbl->lfid_tbl[fid]); } return 0;