diff options
Diffstat (limited to 'drivers/net/ethernet/intel/i40evf')
| -rw-r--r-- | drivers/net/ethernet/intel/i40evf/i40e_common.c | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/i40evf/i40e_devids.h | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/i40evf/i40e_txrx.c | 33 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/i40evf/i40evf_main.c | 8 | ||||
| -rw-r--r-- | drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c | 8 | 
5 files changed, 31 insertions, 20 deletions
diff --git a/drivers/net/ethernet/intel/i40evf/i40e_common.c b/drivers/net/ethernet/intel/i40evf/i40e_common.c index 8f64204000fb..4db0c0326185 100644 --- a/drivers/net/ethernet/intel/i40evf/i40e_common.c +++ b/drivers/net/ethernet/intel/i40evf/i40e_common.c @@ -59,7 +59,6 @@ i40e_status i40e_set_mac_type(struct i40e_hw *hw)  		case I40E_DEV_ID_1G_BASE_T_X722:  		case I40E_DEV_ID_10G_BASE_T_X722:  		case I40E_DEV_ID_SFP_I_X722: -		case I40E_DEV_ID_QSFP_I_X722:  			hw->mac.type = I40E_MAC_X722;  			break;  		case I40E_DEV_ID_X722_VF: diff --git a/drivers/net/ethernet/intel/i40evf/i40e_devids.h b/drivers/net/ethernet/intel/i40evf/i40e_devids.h index d34972bab09c..70235706915e 100644 --- a/drivers/net/ethernet/intel/i40evf/i40e_devids.h +++ b/drivers/net/ethernet/intel/i40evf/i40e_devids.h @@ -45,7 +45,6 @@  #define I40E_DEV_ID_1G_BASE_T_X722	0x37D1  #define I40E_DEV_ID_10G_BASE_T_X722	0x37D2  #define I40E_DEV_ID_SFP_I_X722		0x37D3 -#define I40E_DEV_ID_QSFP_I_X722		0x37D4  #define I40E_DEV_ID_X722_VF		0x37CD  #define I40E_DEV_ID_X722_VF_HV		0x37D9 diff --git a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c index be99189da925..a579193b2c21 100644 --- a/drivers/net/ethernet/intel/i40evf/i40e_txrx.c +++ b/drivers/net/ethernet/intel/i40evf/i40e_txrx.c @@ -259,13 +259,12 @@ static bool i40e_clean_tx_irq(struct i40e_vsi *vsi,  	tx_ring->q_vector->tx.total_packets += total_packets;  	if (tx_ring->flags & I40E_TXR_FLAGS_WB_ON_ITR) { -		unsigned int j = 0;  		/* check to see if there are < 4 descriptors  		 * waiting to be written back, then kick the hardware to force  		 * them to be written back in case we stay in NAPI.  		 * In this mode on X722 we do not enable Interrupt.  		 */ -		j = i40evf_get_tx_pending(tx_ring, false); +		unsigned int j = i40evf_get_tx_pending(tx_ring, false);  		if (budget &&  		    ((j / (WB_STRIDE + 1)) == 0) && (j > 0) && @@ -752,8 +751,8 @@ static inline void i40e_rx_checksum(struct i40e_vsi *vsi,  				    union i40e_rx_desc *rx_desc)  {  	struct i40e_rx_ptype_decoded decoded; -	bool ipv4, ipv6, tunnel = false;  	u32 rx_error, rx_status; +	bool ipv4, ipv6;  	u8 ptype;  	u64 qword; @@ -808,19 +807,23 @@ static inline void i40e_rx_checksum(struct i40e_vsi *vsi,  	if (rx_error & BIT(I40E_RX_DESC_ERROR_PPRS_SHIFT))  		return; -	/* The hardware supported by this driver does not validate outer -	 * checksums for tunneled VXLAN or GENEVE frames.  I don't agree -	 * with it but the specification states that you "MAY validate", it -	 * doesn't make it a hard requirement so if we have validated the -	 * inner checksum report CHECKSUM_UNNECESSARY. +	/* If there is an outer header present that might contain a checksum +	 * we need to bump the checksum level by 1 to reflect the fact that +	 * we are indicating we validated the inner checksum.  	 */ -	if (decoded.inner_prot & (I40E_RX_PTYPE_INNER_PROT_TCP | -				  I40E_RX_PTYPE_INNER_PROT_UDP | -				  I40E_RX_PTYPE_INNER_PROT_SCTP)) -		tunnel = true; - -	skb->ip_summed = CHECKSUM_UNNECESSARY; -	skb->csum_level = tunnel ? 1 : 0; +	if (decoded.tunnel_type >= I40E_RX_PTYPE_TUNNEL_IP_GRENAT) +		skb->csum_level = 1; + +	/* Only report checksum unnecessary for TCP, UDP, or SCTP */ +	switch (decoded.inner_prot) { +	case I40E_RX_PTYPE_INNER_PROT_TCP: +	case I40E_RX_PTYPE_INNER_PROT_UDP: +	case I40E_RX_PTYPE_INNER_PROT_SCTP: +		skb->ip_summed = CHECKSUM_UNNECESSARY; +		/* fall though */ +	default: +		break; +	}  	return; diff --git a/drivers/net/ethernet/intel/i40evf/i40evf_main.c b/drivers/net/ethernet/intel/i40evf/i40evf_main.c index 16c552952860..600fb9c4a7f0 100644 --- a/drivers/net/ethernet/intel/i40evf/i40evf_main.c +++ b/drivers/net/ethernet/intel/i40evf/i40evf_main.c @@ -37,8 +37,8 @@ static const char i40evf_driver_string[] =  #define DRV_KERN "-k"  #define DRV_VERSION_MAJOR 1 -#define DRV_VERSION_MINOR 5 -#define DRV_VERSION_BUILD 10 +#define DRV_VERSION_MINOR 6 +#define DRV_VERSION_BUILD 11  #define DRV_VERSION __stringify(DRV_VERSION_MAJOR) "." \  	     __stringify(DRV_VERSION_MINOR) "." \  	     __stringify(DRV_VERSION_BUILD) \ @@ -57,7 +57,9 @@ static const char i40evf_copyright[] =   */  static const struct pci_device_id i40evf_pci_tbl[] = {  	{PCI_VDEVICE(INTEL, I40E_DEV_ID_VF), 0}, +	{PCI_VDEVICE(INTEL, I40E_DEV_ID_VF_HV), 0},  	{PCI_VDEVICE(INTEL, I40E_DEV_ID_X722_VF), 0}, +	{PCI_VDEVICE(INTEL, I40E_DEV_ID_X722_VF_HV), 0},  	/* required last entry */  	{0, }  }; @@ -825,7 +827,7 @@ i40evf_mac_filter *i40evf_add_filter(struct i40evf_adapter *adapter,  		ether_addr_copy(f->macaddr, macaddr); -		list_add(&f->list, &adapter->mac_filter_list); +		list_add_tail(&f->list, &adapter->mac_filter_list);  		f->add = true;  		adapter->aq_required |= I40EVF_FLAG_AQ_ADD_MAC_FILTER;  	} diff --git a/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c b/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c index f13445691507..d76c221d4c8a 100644 --- a/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c +++ b/drivers/net/ethernet/intel/i40evf/i40evf_virtchnl.c @@ -434,6 +434,8 @@ void i40evf_add_ether_addrs(struct i40evf_adapter *adapter)  			ether_addr_copy(veal->list[i].addr, f->macaddr);  			i++;  			f->add = false; +			if (i == count) +				break;  		}  	}  	if (!more) @@ -497,6 +499,8 @@ void i40evf_del_ether_addrs(struct i40evf_adapter *adapter)  			i++;  			list_del(&f->list);  			kfree(f); +			if (i == count) +				break;  		}  	}  	if (!more) @@ -560,6 +564,8 @@ void i40evf_add_vlans(struct i40evf_adapter *adapter)  			vvfl->vlan_id[i] = f->vlan;  			i++;  			f->add = false; +			if (i == count) +				break;  		}  	}  	if (!more) @@ -623,6 +629,8 @@ void i40evf_del_vlans(struct i40evf_adapter *adapter)  			i++;  			list_del(&f->list);  			kfree(f); +			if (i == count) +				break;  		}  	}  	if (!more)  |