X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=drivers%2Fnet%2Fice%2Fbase%2Fice_flow.c;h=be819e0e9c6fead084a1913f5e7f4a6984e75618;hb=7f9f46d6cef5b03681a3935b9a18378e08ca6f62;hp=03a324d49088376984cd855a065fd71afec6d18b;hpb=b09dff27e979467197fc9bb6e5e869a5fdd99ea3;p=dpdk.git diff --git a/drivers/net/ice/base/ice_flow.c b/drivers/net/ice/base/ice_flow.c index 03a324d490..be819e0e9c 100644 --- a/drivers/net/ice/base/ice_flow.c +++ b/drivers/net/ice/base/ice_flow.c @@ -516,7 +516,7 @@ ice_flow_xtract_fld(struct ice_hw *hw, struct ice_flow_prof_params *params, struct ice_flow_fld_info *flds; u16 cnt, ese_bits, i; s16 adj = 0; - u8 off; + u16 off; flds = params->prof->segs[seg].fields; @@ -910,8 +910,11 @@ ice_flow_rem_entry_sync(struct ice_hw *hw, struct ice_flow_entry *entry) if (entry->entry) ice_free(hw, entry->entry); - if (entry->acts) + if (entry->acts) { ice_free(hw, entry->acts); + entry->acts = NULL; + entry->acts_cnt = 0; + } ice_free(hw, entry); @@ -953,7 +956,10 @@ ice_flow_add_prof_sync(struct ice_hw *hw, enum ice_block blk, return ICE_ERR_NO_MEMORY; /* initialize extraction sequence to all invalid (0xff) */ - ice_memset(params.es, 0xff, sizeof(params.es), ICE_NONDMA_MEM); + for (i = 0; i < ICE_MAX_FV_WORDS; i++) { + params.es[i].prot_id = ICE_PROT_INVALID; + params.es[i].off = ICE_FV_OFFSET_INVAL; + } params.blk = blk; params.prof->id = prof_id; @@ -1306,6 +1312,7 @@ ice_flow_add_entry(struct ice_hw *hw, enum ice_block blk, u64 prof_id, e->id = entry_id; e->vsi_handle = vsi_handle; e->prof = prof; + e->priority = prio; switch (blk) { case ICE_BLK_RSS: @@ -1672,7 +1679,8 @@ ice_add_rss_vsi_ctx(struct ice_hw *hw, u16 vsi_handle, rss_cfg->hashed_flds = prof->segs[prof->segs_cnt - 1].match; rss_cfg->packet_hdr = prof->segs[prof->segs_cnt - 1].hdrs; - LIST_ADD(&rss_cfg->l_entry, &hw->vsi_ctx[vsi_handle]->rss_list_head); + LIST_ADD_TAIL(&rss_cfg->l_entry, + &hw->vsi_ctx[vsi_handle]->rss_list_head); return ICE_SUCCESS; } @@ -1851,11 +1859,14 @@ ice_rem_rss_cfg_sync(struct ice_hw *hw, u16 vsi_handle, u64 hashed_flds, if (status) goto out; + /* Remove RSS configuration from VSI context before deleting + * the flow profile. + */ + ice_rem_rss_cfg_vsi_ctx(hw, vsi_handle, prof); + if (!ice_is_any_bit_set(prof->vsis, ICE_MAX_VSI)) status = ice_flow_rem_prof_sync(hw, blk, prof); - ice_rem_rss_cfg_vsi_ctx(hw, vsi_handle, prof); - out: ice_free(hw, segs); return status;