linux/drivers/net/ethernet/intel/i40e
Jacob Keller 9af52f60b2 i40e: use (add|rm)_vlan_all_mac helper functions when changing PVID
The current flow for adding or updating the PVID for a VF uses
i40e_vsi_add_vlan and i40e_vsi_kill_vlan which each take, then release
the hash lock. In addition the two functions also must take special care
that they do not perform VLAN mode changes as this will make the code in
i40e_ndo_set_vf_port_vlan behave incorrectly.

Fix these issues by using the new helper functions i40e_add_vlan_all_mac
and i40e_rm_vlan_all_mac which expect the hash lock to already be taken.
Additionally these functions do not perform any state updates in regards
to VLAN mode, so they are safe to use in the PVID update flow.

It should be noted that we don't need the VLAN mode update code here,
because there are only a few flows here.

(a) we're adding a new PVID
  In this case, if we already had VLAN filters the VSI is knocked
  offline so we don't need to worry about pre-existing VLAN filters

(b) we're replacing an existing PVID
  In this case, we can't have any VLAN filters except those with the old
  PVID which we already take care of manually.

(c) we're removing an existing PVID
  Similarly to above, we can't have any existing VLAN filters except
  those with the old PVID which we already take care of correctly.

Because of this, we do not need (or even want) the special accounting
done in i40e_vsi_add_vlan, so use of the helpers is a saner alternative.
It also opens the door for a future patch which will refactor the flow
of i40e_vsi_add_vlan now that it is not needed in this function.

Change-ID: Ia841f63da94e12b106f41cf7d28ce8ce92f2ad99
Signed-off-by: Jacob Keller <jacob.e.keller@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
2016-12-06 21:34:20 -08:00
..
i40e_adminq_cmd.h i40e: Add FEC for 25g 2016-12-06 21:01:43 -08:00
i40e_adminq.c i40e: Implementation of ERROR state for NVM update state machine 2016-10-31 14:26:40 -07:00
i40e_adminq.h i40e: Move NVM variable out of AQ struct 2016-04-06 18:45:11 -07:00
i40e_alloc.h i40e: Fix GPL header 2014-01-09 02:10:23 -08:00
i40e_client.c i40e: reopen client after reset 2016-10-28 23:28:39 -07:00
i40e_client.h i40e: reopen client after reset 2016-10-28 23:28:39 -07:00
i40e_common.c i40e: Add functions which apply correct PHY access method for read and write operation 2016-12-06 21:09:39 -08:00
i40e_dcb_nl.c i40e: Change some messages from info to debug only 2015-10-15 01:58:41 -07:00
i40e_dcb.c i40e: refactor DCB function 2016-02-16 19:04:08 -08:00
i40e_dcb.h i40e: Add parsing for CEE DCBX TLVs 2015-10-08 15:11:38 -07:00
i40e_debugfs.c i40e: use unsigned printf format specifier for active_filters count 2016-12-06 20:57:18 -08:00
i40e_devids.h i40e: Add support for 25G devices 2016-12-06 20:59:43 -08:00
i40e_diag.c i40e: use BIT and BIT_ULL macros 2015-07-23 05:33:55 -07:00
i40e_diag.h i40e: Fix GPL header 2014-01-09 02:10:23 -08:00
i40e_ethtool.c i40e: defeature support for PTP L4 frame detection on XL710 2016-12-06 21:17:37 -08:00
i40e_fcoe.c i40e: store MAC/VLAN filters in a hash with the MAC Address as key 2016-10-31 14:26:40 -07:00
i40e_fcoe.h i40e: use BIT and BIT_ULL macros 2015-07-23 05:33:55 -07:00
i40e_hmc.c i40e: fix an uninitialized variable bug 2016-05-14 00:21:51 -07:00
i40e_hmc.h i40e: use BIT and BIT_ULL macros 2015-07-23 05:33:55 -07:00
i40e_lan_hmc.c i40e: use explicit cast from u16 to u8 2015-12-12 21:08:26 -08:00
i40e_lan_hmc.h i40e/i40evf: Big endian fixes for handling HMC 2014-06-26 04:44:57 -07:00
i40e_main.c i40e: use (add|rm)_vlan_all_mac helper functions when changing PVID 2016-12-06 21:34:20 -08:00
i40e_nvm.c i40e: Implementation of ERROR state for NVM update state machine 2016-10-31 14:26:40 -07:00
i40e_osdep.h move io-64-nonatomic*.h out of asm-generic 2015-10-15 00:21:07 +02:00
i40e_prototype.h i40e: Add functions which apply correct PHY access method for read and write operation 2016-12-06 21:09:39 -08:00
i40e_ptp.c i40e: defeature support for PTP L4 frame detection on XL710 2016-12-06 21:17:37 -08:00
i40e_register.h i40e: Expose some registers to program parser, FD and RSS logic 2016-02-18 23:49:31 -08:00
i40e_status.h i40e: Fix GPL header 2014-01-09 02:10:23 -08:00
i40e_txrx.c i40e/i40evf: napi_poll must return the work done 2016-12-06 20:46:13 -08:00
i40e_txrx.h i40e: simplify txd use count calculation 2016-12-06 20:40:50 -08:00
i40e_type.h i40e: Add support for 25G devices 2016-12-06 20:59:43 -08:00
i40e_virtchnl_pf.c i40e: use (add|rm)_vlan_all_mac helper functions when changing PVID 2016-12-06 21:34:20 -08:00
i40e_virtchnl_pf.h net: Update API for VF vlan protocol 802.1ad support 2016-09-24 08:01:26 -04:00
i40e_virtchnl.h i40e: group base mode VF offload flags 2016-10-28 23:28:39 -07:00
i40e.h i40e: use (add|rm)_vlan_all_mac helper functions when changing PVID 2016-12-06 21:34:20 -08:00
Makefile i40e: Add support for client interface for IWARP driver 2016-02-29 17:10:52 -05:00