ice: fix getting UDP tunnel entry
authorMichal Swiatkowski <michal.swiatkowski@linux.intel.com>
Tue, 14 Sep 2021 23:25:05 +0000 (19:25 -0400)
committerTony Nguyen <anthony.l.nguyen@intel.com>
Thu, 14 Oct 2021 17:14:45 +0000 (10:14 -0700)
Correct parameters order in call to ice_tunnel_idx_to_entry function.

Entry in sparse port table is correct when the idx is 0. For idx 1 one
correct entry should be skipped, for idx 2 two of them should be skipped
etc. Change if condition to be true when idx is 0, which means that
previous valid entry of this tunnel type were skipped.

Fixes: b20e6c17c468 ("ice: convert to new udp_tunnel infrastructure")
Signed-off-by: Michal Swiatkowski <michal.swiatkowski@linux.intel.com>
Tested-by: Gurucharan G <gurucharanx.g@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
drivers/net/ethernet/intel/ice/ice_flex_pipe.c

index 06ac9badee7748e57a99e14a075fec85f1f5e8a6..1ac96dc66d0db86ef5962c58aef0ff10e1679d63 100644 (file)
@@ -1668,7 +1668,7 @@ static u16 ice_tunnel_idx_to_entry(struct ice_hw *hw, enum ice_tunnel_type type,
        for (i = 0; i < hw->tnl.count && i < ICE_TUNNEL_MAX_ENTRIES; i++)
                if (hw->tnl.tbl[i].valid &&
                    hw->tnl.tbl[i].type == type &&
-                   idx--)
+                   idx-- == 0)
                        return i;
 
        WARN_ON_ONCE(1);
@@ -1828,7 +1828,7 @@ int ice_udp_tunnel_set_port(struct net_device *netdev, unsigned int table,
        u16 index;
 
        tnl_type = ti->type == UDP_TUNNEL_TYPE_VXLAN ? TNL_VXLAN : TNL_GENEVE;
-       index = ice_tunnel_idx_to_entry(&pf->hw, idx, tnl_type);
+       index = ice_tunnel_idx_to_entry(&pf->hw, tnl_type, idx);
 
        status = ice_create_tunnel(&pf->hw, index, tnl_type, ntohs(ti->port));
        if (status) {