diff options
Diffstat (limited to 'drivers/net/ethernet/intel/igbvf/netdev.c')
| -rw-r--r-- | drivers/net/ethernet/intel/igbvf/netdev.c | 54 | 
1 files changed, 23 insertions, 31 deletions
diff --git a/drivers/net/ethernet/intel/igbvf/netdev.c b/drivers/net/ethernet/intel/igbvf/netdev.c index 93eb7ee06d3..d608599e123 100644 --- a/drivers/net/ethernet/intel/igbvf/netdev.c +++ b/drivers/net/ethernet/intel/igbvf/netdev.c @@ -1043,11 +1043,11 @@ static void igbvf_set_interrupt_capability(struct igbvf_adapter *adapter)  		for (i = 0; i < 3; i++)  			adapter->msix_entries[i].entry = i; -		err = pci_enable_msix(adapter->pdev, -		                      adapter->msix_entries, 3); +		err = pci_enable_msix_range(adapter->pdev, +		                            adapter->msix_entries, 3, 3);  	} -	if (err) { +	if (err < 0) {  		/* MSI-X failed */  		dev_err(&adapter->pdev->dev,  		        "Failed to initialize MSI-X interrupts.\n"); @@ -1745,7 +1745,7 @@ static int igbvf_set_mac(struct net_device *netdev, void *p)  	hw->mac.ops.rar_set(hw, hw->mac.addr, 0); -	if (memcmp(addr->sa_data, hw->mac.addr, 6)) +	if (!ether_addr_equal(addr->sa_data, hw->mac.addr))  		return -EADDRNOTAVAIL;  	memcpy(netdev->dev_addr, addr->sa_data, netdev->addr_len); @@ -1910,20 +1910,18 @@ static int igbvf_tso(struct igbvf_adapter *adapter,                       struct sk_buff *skb, u32 tx_flags, u8 *hdr_len)  {  	struct e1000_adv_tx_context_desc *context_desc; -	unsigned int i; -	int err;  	struct igbvf_buffer *buffer_info;  	u32 info = 0, tu_cmd = 0;  	u32 mss_l4len_idx, l4len; +	unsigned int i; +	int err; +  	*hdr_len = 0; -	if (skb_header_cloned(skb)) { -		err = pskb_expand_head(skb, 0, 0, GFP_ATOMIC); -		if (err) { -			dev_err(&adapter->pdev->dev, -			        "igbvf_tso returning an error\n"); -			return err; -		} +	err = skb_cow_head(skb, 0); +	if (err < 0) { +		dev_err(&adapter->pdev->dev, "igbvf_tso returning an error\n"); +		return err;  	}  	l4len = tcp_hdrlen(skb); @@ -2014,12 +2012,12 @@ static inline bool igbvf_tx_csum(struct igbvf_adapter *adapter,  		if (skb->ip_summed == CHECKSUM_PARTIAL) {  			switch (skb->protocol) { -			case __constant_htons(ETH_P_IP): +			case htons(ETH_P_IP):  				tu_cmd |= E1000_ADVTXD_TUCMD_IPV4;  				if (ip_hdr(skb)->protocol == IPPROTO_TCP)  					tu_cmd |= E1000_ADVTXD_TUCMD_L4T_TCP;  				break; -			case __constant_htons(ETH_P_IPV6): +			case htons(ETH_P_IPV6):  				if (ipv6_hdr(skb)->nexthdr == IPPROTO_TCP)  					tu_cmd |= E1000_ADVTXD_TUCMD_L4T_TCP;  				break; @@ -2343,10 +2341,9 @@ static int igbvf_change_mtu(struct net_device *netdev, int new_mtu)  	struct igbvf_adapter *adapter = netdev_priv(netdev);  	int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN; -	if ((new_mtu < 68) || (max_frame > MAX_JUMBO_FRAME_SIZE)) { -		dev_err(&adapter->pdev->dev, "Invalid MTU setting\n"); +	if (new_mtu < 68 || new_mtu > INT_MAX - ETH_HLEN - ETH_FCS_LEN || +	    max_frame > MAX_JUMBO_FRAME_SIZE)  		return -EINVAL; -	}  #define MAX_STD_JUMBO_FRAME_SIZE 9234  	if (max_frame > MAX_STD_JUMBO_FRAME_SIZE) { @@ -2638,21 +2635,15 @@ static int igbvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  		return err;  	pci_using_dac = 0; -	err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(64)); +	err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(64));  	if (!err) { -		err = dma_set_coherent_mask(&pdev->dev, DMA_BIT_MASK(64)); -		if (!err) -			pci_using_dac = 1; +		pci_using_dac = 1;  	} else { -		err = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32)); +		err = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(32));  		if (err) { -			err = dma_set_coherent_mask(&pdev->dev, -						    DMA_BIT_MASK(32)); -			if (err) { -				dev_err(&pdev->dev, "No usable DMA " -				        "configuration, aborting\n"); -				goto err_dma; -			} +			dev_err(&pdev->dev, "No usable DMA " +			        "configuration, aborting\n"); +			goto err_dma;  		}  	} @@ -2699,7 +2690,7 @@ static int igbvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)  	if (ei->get_variants) {  		err = ei->get_variants(adapter);  		if (err) -			goto err_ioremap; +			goto err_get_variants;  	}  	/* setup adapter struct */ @@ -2796,6 +2787,7 @@ err_hw_init:  	kfree(adapter->rx_ring);  err_sw_init:  	igbvf_reset_interrupt_capability(adapter); +err_get_variants:  	iounmap(adapter->hw.hw_addr);  err_ioremap:  	free_netdev(netdev);  | 
