diff options
Diffstat (limited to 'drivers/net/ethernet/sfc/efx.c')
| -rw-r--r-- | drivers/net/ethernet/sfc/efx.c | 24 | 
1 files changed, 14 insertions, 10 deletions
diff --git a/drivers/net/ethernet/sfc/efx.c b/drivers/net/ethernet/sfc/efx.c index b9cb697b2818..e3c492fcaff0 100644 --- a/drivers/net/ethernet/sfc/efx.c +++ b/drivers/net/ethernet/sfc/efx.c @@ -471,8 +471,7 @@ efx_alloc_channel(struct efx_nic *efx, int i, struct efx_channel *old_channel)  	rx_queue = &channel->rx_queue;  	rx_queue->efx = efx; -	setup_timer(&rx_queue->slow_fill, efx_rx_slow_fill, -		    (unsigned long)rx_queue); +	timer_setup(&rx_queue->slow_fill, efx_rx_slow_fill, 0);  	return channel;  } @@ -511,8 +510,7 @@ efx_copy_channel(const struct efx_channel *old_channel)  	rx_queue = &channel->rx_queue;  	rx_queue->buffer = NULL;  	memset(&rx_queue->rxd, 0, sizeof(rx_queue->rxd)); -	setup_timer(&rx_queue->slow_fill, efx_rx_slow_fill, -		    (unsigned long)rx_queue); +	timer_setup(&rx_queue->slow_fill, efx_rx_slow_fill, 0);  	return channel;  } @@ -2317,8 +2315,11 @@ static int efx_set_features(struct net_device *net_dev, netdev_features_t data)  			return rc;  	} -	/* If Rx VLAN filter is changed, update filters via mac_reconfigure */ -	if ((net_dev->features ^ data) & NETIF_F_HW_VLAN_CTAG_FILTER) { +	/* If Rx VLAN filter is changed, update filters via mac_reconfigure. +	 * If rx-fcs is changed, mac_reconfigure updates that too. +	 */ +	if ((net_dev->features ^ data) & (NETIF_F_HW_VLAN_CTAG_FILTER | +					  NETIF_F_RXFCS)) {  		/* efx_set_rx_mode() will schedule MAC work to update filters  		 * when a new features are finally set in net_dev.  		 */ @@ -2809,7 +2810,7 @@ static void efx_reset_work(struct work_struct *data)  	unsigned long pending;  	enum reset_type method; -	pending = ACCESS_ONCE(efx->reset_pending); +	pending = READ_ONCE(efx->reset_pending);  	method = fls(pending) - 1;  	if (method == RESET_TYPE_MC_BIST) @@ -2874,7 +2875,7 @@ void efx_schedule_reset(struct efx_nic *efx, enum reset_type type)  	/* If we're not READY then just leave the flags set as the cue  	 * to abort probing or reschedule the reset later.  	 */ -	if (ACCESS_ONCE(efx->state) != STATE_READY) +	if (READ_ONCE(efx->state) != STATE_READY)  		return;  	/* efx_process_channel() will no longer read events once a @@ -3244,7 +3245,7 @@ static int efx_pci_probe_post_io(struct efx_nic *efx)  	/* Determine netdevice features */  	net_dev->features |= (efx->type->offload_features | NETIF_F_SG | -			      NETIF_F_TSO | NETIF_F_RXCSUM); +			      NETIF_F_TSO | NETIF_F_RXCSUM | NETIF_F_RXALL);  	if (efx->type->offload_features & (NETIF_F_IPV6_CSUM | NETIF_F_HW_CSUM))  		net_dev->features |= NETIF_F_TSO6;  	/* Check whether device supports TSO */ @@ -3255,7 +3256,10 @@ static int efx_pci_probe_post_io(struct efx_nic *efx)  				   NETIF_F_HIGHDMA | NETIF_F_ALL_TSO |  				   NETIF_F_RXCSUM); -	net_dev->hw_features = net_dev->features & ~efx->fixed_features; +	net_dev->hw_features |= net_dev->features & ~efx->fixed_features; + +	/* Disable receiving frames with bad FCS, by default. */ +	net_dev->features &= ~NETIF_F_RXALL;  	/* Disable VLAN filtering by default.  It may be enforced if  	 * the feature is fixed (i.e. VLAN filters are required to  | 
