net/ice/base: protect list add with lock
authorLeyi Rong <leyi.rong@intel.com>
Wed, 19 Jun 2019 15:18:22 +0000 (23:18 +0800)
committerFerruh Yigit <ferruh.yigit@intel.com>
Fri, 28 Jun 2019 18:31:48 +0000 (20:31 +0200)
Function ice_add_rule_internal needs to call ice_create_pkt_fwd_rule
with lock held because it uses the LIST_ADD to modify the filter
rule list. It needs to be protected when modified.

Signed-off-by: Tarun Singh <tarun.k.singh@intel.com>
Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com>
Signed-off-by: Leyi Rong <leyi.rong@intel.com>
Acked-by: Qi Zhang <qi.z.zhang@intel.com>
drivers/net/ice/base/ice_switch.c

index 830025e..988de36 100644 (file)
@@ -2288,14 +2288,15 @@ ice_add_rule_internal(struct ice_hw *hw, u8 recp_id,
 
        m_entry = ice_find_rule_entry(hw, recp_id, new_fltr);
        if (!m_entry) {
-               ice_release_lock(rule_lock);
-               return ice_create_pkt_fwd_rule(hw, f_entry);
+               status = ice_create_pkt_fwd_rule(hw, f_entry);
+               goto exit_add_rule_internal;
        }
 
        cur_fltr = &m_entry->fltr_info;
        status = ice_add_update_vsi_list(hw, m_entry, cur_fltr, new_fltr);
-       ice_release_lock(rule_lock);
 
+exit_add_rule_internal:
+       ice_release_lock(rule_lock);
        return status;
 }