net/ice/base: fix unexpected switch rule overwrite
authorQi Zhang <qi.z.zhang@intel.com>
Tue, 8 Oct 2019 01:50:14 +0000 (09:50 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Wed, 23 Oct 2019 14:43:09 +0000 (16:43 +0200)
A switch rule with "drop" action will be overwritten by a
rule with same pattern match but with a "to queue" action.
While in an inversed flow creation sequence, the "to queue"
can't be overwritten by the "drop" rule.

The inconsistent behavior is not expected, the patch
fix the issue by preventing rule overwrite in both cases.

Fixes: fed0c5ca5f19 ("net/ice/base: support programming a new switch recipe")
Cc: stable@dpdk.org
Signed-off-by: Qi Zhang <qi.z.zhang@intel.com>
Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
Acked-by: Qiming Yang <qiming.yang@intel.com>
drivers/net/ice/base/ice_switch.c

index 334f1b5..2c02021 100644 (file)
@@ -5977,13 +5977,10 @@ ice_adv_add_update_vsi_list(struct ice_hw *hw,
        u16 vsi_list_id = 0;
 
        if (cur_fltr->sw_act.fltr_act == ICE_FWD_TO_Q ||
-           cur_fltr->sw_act.fltr_act == ICE_FWD_TO_QGRP)
+           cur_fltr->sw_act.fltr_act == ICE_FWD_TO_QGRP ||
+           cur_fltr->sw_act.fltr_act == ICE_DROP_PACKET)
                return ICE_ERR_NOT_IMPL;
 
-       if (cur_fltr->sw_act.fltr_act == ICE_DROP_PACKET &&
-           new_fltr->sw_act.fltr_act == ICE_DROP_PACKET)
-               return ICE_ERR_ALREADY_EXISTS;
-
        if ((new_fltr->sw_act.fltr_act == ICE_FWD_TO_Q ||
             new_fltr->sw_act.fltr_act == ICE_FWD_TO_QGRP) &&
            (cur_fltr->sw_act.fltr_act == ICE_FWD_TO_VSI ||