Before this patch, RSS tunneled rules can not be destroyed at runtime. This is because it can not find the existing matching profile for tunnels. segs[0] should always be zero and all matched, segs[1] for inner part. It only construct one segment.
This patch modifies construct segment in ice_rem_rss_cfg_sync() to match ice_add_rss_cfg_sync(). Fixes: 75bc2ea04af4 ("net/ice/base: packet encapsulation for RSS") Signed-off-by: Zhirun Yan <zhirun....@intel.com> Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell...@intel.com> Signed-off-by: Qi Zhang <qi.z.zh...@intel.com> --- drivers/net/ice/base/ice_flow.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/net/ice/base/ice_flow.c b/drivers/net/ice/base/ice_flow.c index b6ed5e549..5a24e096d 100644 --- a/drivers/net/ice/base/ice_flow.c +++ b/drivers/net/ice/base/ice_flow.c @@ -2185,12 +2185,14 @@ ice_rem_rss_cfg_sync(struct ice_hw *hw, u16 vsi_handle, u64 hashed_flds, struct ice_flow_prof *prof; enum ice_status status; - segs = (struct ice_flow_seg_info *)ice_malloc(hw, sizeof(*segs)); + segs = (struct ice_flow_seg_info *)ice_calloc(hw, segs_cnt, + sizeof(*segs)); if (!segs) return ICE_ERR_NO_MEMORY; /* Construct the packet segment info from the hashed fields */ - status = ice_flow_set_rss_seg_info(segs, hashed_flds, addl_hdrs); + status = ice_flow_set_rss_seg_info(&segs[segs_cnt - 1], hashed_flds, + addl_hdrs); if (status) goto out; -- 2.13.6