diff options
Diffstat (limited to 'drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c')
| -rw-r--r-- | drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c | 23 | 
1 files changed, 12 insertions, 11 deletions
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c index 6cfc9dc16537..0bbad4a5cc2f 100644 --- a/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_ethtool.c @@ -2665,6 +2665,14 @@ static int ixgbe_get_rss_hash_opts(struct ixgbe_adapter *adapter,  	return 0;  } +static int ixgbe_rss_indir_tbl_max(struct ixgbe_adapter *adapter) +{ +	if (adapter->hw.mac.type < ixgbe_mac_X550) +		return 16; +	else +		return 64; +} +  static int ixgbe_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd,  			   u32 *rule_locs)  { @@ -2673,7 +2681,8 @@ static int ixgbe_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd,  	switch (cmd->cmd) {  	case ETHTOOL_GRXRINGS: -		cmd->data = adapter->num_rx_queues; +		cmd->data = min_t(int, adapter->num_rx_queues, +				  ixgbe_rss_indir_tbl_max(adapter));  		ret = 0;  		break;  	case ETHTOOL_GRXCLSRLCNT: @@ -3075,14 +3084,6 @@ static int ixgbe_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)  	return ret;  } -static int ixgbe_rss_indir_tbl_max(struct ixgbe_adapter *adapter) -{ -	if (adapter->hw.mac.type < ixgbe_mac_X550) -		return 16; -	else -		return 64; -} -  static u32 ixgbe_get_rxfh_key_size(struct net_device *netdev)  {  	return IXGBE_RSS_KEY_SIZE; @@ -3131,8 +3132,8 @@ static int ixgbe_set_rxfh(struct net_device *netdev, const u32 *indir,  	int i;  	u32 reta_entries = ixgbe_rss_indir_tbl_entries(adapter); -	if (hfunc) -		return -EINVAL; +	if (hfunc != ETH_RSS_HASH_NO_CHANGE && hfunc != ETH_RSS_HASH_TOP) +		return -EOPNOTSUPP;  	/* Fill out the redirection table */  	if (indir) {  |