diff mbox series

[next,S86,V3,5/8] i40e: do not force filter failure in overflow promiscuous

Message ID 20180205111121.59468-5-alice.michael@intel.com
State Superseded
Headers show
Series None | expand

Commit Message

Michael, Alice Feb. 5, 2018, 11:11 a.m. UTC
From: Alan Brady <alan.brady@intel.com>

Broadcast filters can now cause overflow promiscuous to trigger when
adding "too many" VLANs to all the ports of a device and the driver
needs a way to exit overflow promiscuous once triggered.

Currently the driver looks to see if there are "too many" filters and/or
we have any failed filters to determine when it is safe to exit overflow
promiscuous.  If we trigger overflow promiscuous with broadcast filters,
any new filters added will be "auto-failed" until we exit overflow
promiscuous.  Since the user can't manually remove the failed broadcast
filters for VLANs (nor should we expect the user to do such), there is
no way to exit overflow promiscuous without reloading the driver.

The easiest way to do this is to remove the shortcut to "auto-fail"
filters in overflow promscuous.  If the user removes the VLANs, the
failed filters will be removed and since we're no longer "auto-failing"
new filters, we'll eventually get a good set of filters and exit
overflow promiscuous.

This has the side benefit of making filter state more explicit in that
if a filter says it's failed we know for a fact it failed and not just
assuming it will if we're in overflow promiscuous.  This is nice because
if the user removes some filters and then adds some, even if we're in
overflow promiscuous, the filter might succeed; we were just assuming it
won't because the user hasn't rectified other existing failed filters.

Signed-off-by: Alan Brady <alan.brady@intel.com>
---
 drivers/net/ethernet/intel/i40e/i40e_main.c | 15 +--------------
 1 file changed, 1 insertion(+), 14 deletions(-)

Comments

Bowers, AndrewX Feb. 6, 2018, 10:35 p.m. UTC | #1
> -----Original Message-----
> From: Intel-wired-lan [mailto:intel-wired-lan-bounces@osuosl.org] On
> Behalf Of Alice Michael
> Sent: Monday, February 5, 2018 3:11 AM
> To: Michael, Alice <alice.michael@intel.com>; intel-wired-
> lan@lists.osuosl.org
> Subject: [Intel-wired-lan] [next PATCH S86 V3 5/8] i40e: do not force filter
> failure in overflow promiscuous
> 
> From: Alan Brady <alan.brady@intel.com>
> 
> Broadcast filters can now cause overflow promiscuous to trigger when adding
> "too many" VLANs to all the ports of a device and the driver needs a way to
> exit overflow promiscuous once triggered.
> 
> Currently the driver looks to see if there are "too many" filters and/or we
> have any failed filters to determine when it is safe to exit overflow
> promiscuous.  If we trigger overflow promiscuous with broadcast filters, any
> new filters added will be "auto-failed" until we exit overflow promiscuous.
> Since the user can't manually remove the failed broadcast filters for VLANs
> (nor should we expect the user to do such), there is no way to exit overflow
> promiscuous without reloading the driver.
> 
> The easiest way to do this is to remove the shortcut to "auto-fail"
> filters in overflow promscuous.  If the user removes the VLANs, the failed
> filters will be removed and since we're no longer "auto-failing"
> new filters, we'll eventually get a good set of filters and exit overflow
> promiscuous.
> 
> This has the side benefit of making filter state more explicit in that if a filter
> says it's failed we know for a fact it failed and not just assuming it will if we're
> in overflow promiscuous.  This is nice because if the user removes some
> filters and then adds some, even if we're in overflow promiscuous, the filter
> might succeed; we were just assuming it won't because the user hasn't
> rectified other existing failed filters.
> 
> Signed-off-by: Alan Brady <alan.brady@intel.com>
> ---
>  drivers/net/ethernet/intel/i40e/i40e_main.c | 15 +--------------
>  1 file changed, 1 insertion(+), 14 deletions(-)

Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
diff mbox series

Patch

diff --git a/drivers/net/ethernet/intel/i40e/i40e_main.c b/drivers/net/ethernet/intel/i40e/i40e_main.c
index 265cdf9..90ea65b 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_main.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_main.c
@@ -1380,14 +1380,7 @@  struct i40e_mac_filter *i40e_add_filter(struct i40e_vsi *vsi,
 
 		ether_addr_copy(f->macaddr, macaddr);
 		f->vlan = vlan;
-		/* If we're in overflow promisc mode, set the state directly
-		 * to failed, so we don't bother to try sending the filter
-		 * to the hardware.
-		 */
-		if (test_bit(__I40E_VSI_OVERFLOW_PROMISC, vsi->state))
-			f->state = I40E_FILTER_FAILED;
-		else
-			f->state = I40E_FILTER_NEW;
+		f->state = I40E_FILTER_NEW;
 		INIT_HLIST_NODE(&f->hlist);
 
 		key = i40e_addr_to_hkey(macaddr);
@@ -2424,12 +2417,6 @@  int i40e_sync_vsi_filters(struct i40e_vsi *vsi)
 
 		num_add = 0;
 		hlist_for_each_entry_safe(new, h, &tmp_add_list, hlist) {
-			if (test_bit(__I40E_VSI_OVERFLOW_PROMISC,
-				     vsi->state)) {
-				new->state = I40E_FILTER_FAILED;
-				continue;
-			}
-
 			/* handle broadcast filters by updating the broadcast
 			 * promiscuous flag instead of adding a MAC filter.
 			 */