diff options
Diffstat (limited to 'drivers/net/ethernet/intel/igc')
| -rw-r--r-- | drivers/net/ethernet/intel/igc/igc.h | 4 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/igc/igc_ethtool.c | 31 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/igc/igc_main.c | 2 | 
3 files changed, 22 insertions, 15 deletions
| diff --git a/drivers/net/ethernet/intel/igc/igc.h b/drivers/net/ethernet/intel/igc/igc.h index 8ebe6999a528..f48f82d5e274 100644 --- a/drivers/net/ethernet/intel/igc/igc.h +++ b/drivers/net/ethernet/intel/igc/igc.h @@ -379,11 +379,11 @@ static inline u32 igc_rss_type(const union igc_adv_rx_desc *rx_desc)  /* TX/RX descriptor defines */  #define IGC_DEFAULT_TXD		256  #define IGC_DEFAULT_TX_WORK	128 -#define IGC_MIN_TXD		80 +#define IGC_MIN_TXD		64  #define IGC_MAX_TXD		4096  #define IGC_DEFAULT_RXD		256 -#define IGC_MIN_RXD		80 +#define IGC_MIN_RXD		64  #define IGC_MAX_RXD		4096  /* Supported Rx Buffer Sizes */ diff --git a/drivers/net/ethernet/intel/igc/igc_ethtool.c b/drivers/net/ethernet/intel/igc/igc_ethtool.c index 93bce729be76..7ab6dd58e400 100644 --- a/drivers/net/ethernet/intel/igc/igc_ethtool.c +++ b/drivers/net/ethernet/intel/igc/igc_ethtool.c @@ -868,6 +868,18 @@ static void igc_ethtool_get_stats(struct net_device *netdev,  	spin_unlock(&adapter->stats64_lock);  } +static int igc_ethtool_get_previous_rx_coalesce(struct igc_adapter *adapter) +{ +	return (adapter->rx_itr_setting <= 3) ? +		adapter->rx_itr_setting : adapter->rx_itr_setting >> 2; +} + +static int igc_ethtool_get_previous_tx_coalesce(struct igc_adapter *adapter) +{ +	return (adapter->tx_itr_setting <= 3) ? +		adapter->tx_itr_setting : adapter->tx_itr_setting >> 2; +} +  static int igc_ethtool_get_coalesce(struct net_device *netdev,  				    struct ethtool_coalesce *ec,  				    struct kernel_ethtool_coalesce *kernel_coal, @@ -875,17 +887,8 @@ static int igc_ethtool_get_coalesce(struct net_device *netdev,  {  	struct igc_adapter *adapter = netdev_priv(netdev); -	if (adapter->rx_itr_setting <= 3) -		ec->rx_coalesce_usecs = adapter->rx_itr_setting; -	else -		ec->rx_coalesce_usecs = adapter->rx_itr_setting >> 2; - -	if (!(adapter->flags & IGC_FLAG_QUEUE_PAIRS)) { -		if (adapter->tx_itr_setting <= 3) -			ec->tx_coalesce_usecs = adapter->tx_itr_setting; -		else -			ec->tx_coalesce_usecs = adapter->tx_itr_setting >> 2; -	} +	ec->rx_coalesce_usecs = igc_ethtool_get_previous_rx_coalesce(adapter); +	ec->tx_coalesce_usecs = igc_ethtool_get_previous_tx_coalesce(adapter);  	return 0;  } @@ -910,8 +913,12 @@ static int igc_ethtool_set_coalesce(struct net_device *netdev,  	    ec->tx_coalesce_usecs == 2)  		return -EINVAL; -	if ((adapter->flags & IGC_FLAG_QUEUE_PAIRS) && ec->tx_coalesce_usecs) +	if ((adapter->flags & IGC_FLAG_QUEUE_PAIRS) && +	    ec->tx_coalesce_usecs != igc_ethtool_get_previous_tx_coalesce(adapter)) { +		NL_SET_ERR_MSG_MOD(extack, +				   "Queue Pair mode enabled, both Rx and Tx coalescing controlled by rx-usecs");  		return -EINVAL; +	}  	/* If ITR is disabled, disable DMAC */  	if (ec->rx_coalesce_usecs == 0) { diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c index 293b45717683..98de34d0ce07 100644 --- a/drivers/net/ethernet/intel/igc/igc_main.c +++ b/drivers/net/ethernet/intel/igc/igc_main.c @@ -6491,7 +6491,7 @@ static int igc_xdp_xmit(struct net_device *dev, int num_frames,  	struct igc_ring *ring;  	int i, drops; -	if (unlikely(test_bit(__IGC_DOWN, &adapter->state))) +	if (unlikely(!netif_carrier_ok(dev)))  		return -ENETDOWN;  	if (unlikely(flags & ~XDP_XMIT_FLAGS_MASK)) | 
