diff options
Diffstat (limited to 'drivers/net/ethernet/intel/igb/igb_main.c')
| -rw-r--r-- | drivers/net/ethernet/intel/igb/igb_main.c | 51 | 
1 files changed, 29 insertions, 22 deletions
| diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c index 18a019a47182..47ece02fce99 100644 --- a/drivers/net/ethernet/intel/igb/igb_main.c +++ b/drivers/net/ethernet/intel/igb/igb_main.c @@ -7648,6 +7648,20 @@ static int igb_set_vf_mac_filter(struct igb_adapter *adapter, const int vf,  	struct vf_mac_filter *entry = NULL;  	int ret = 0; +	if ((vf_data->flags & IGB_VF_FLAG_PF_SET_MAC) && +	    !vf_data->trusted) { +		dev_warn(&pdev->dev, +			 "VF %d requested MAC filter but is administratively denied\n", +			  vf); +		return -EINVAL; +	} +	if (!is_valid_ether_addr(addr)) { +		dev_warn(&pdev->dev, +			 "VF %d attempted to set invalid MAC filter\n", +			  vf); +		return -EINVAL; +	} +  	switch (info) {  	case E1000_VF_MAC_FILTER_CLR:  		/* remove all unicast MAC filters related to the current VF */ @@ -7661,20 +7675,6 @@ static int igb_set_vf_mac_filter(struct igb_adapter *adapter, const int vf,  		}  		break;  	case E1000_VF_MAC_FILTER_ADD: -		if ((vf_data->flags & IGB_VF_FLAG_PF_SET_MAC) && -		    !vf_data->trusted) { -			dev_warn(&pdev->dev, -				 "VF %d requested MAC filter but is administratively denied\n", -				 vf); -			return -EINVAL; -		} -		if (!is_valid_ether_addr(addr)) { -			dev_warn(&pdev->dev, -				 "VF %d attempted to set invalid MAC filter\n", -				 vf); -			return -EINVAL; -		} -  		/* try to find empty slot in the list */  		list_for_each(pos, &adapter->vf_macs.l) {  			entry = list_entry(pos, struct vf_mac_filter, l); @@ -8026,7 +8026,7 @@ static int igb_poll(struct napi_struct *napi, int budget)  	if (likely(napi_complete_done(napi, work_done)))  		igb_ring_irq_enable(q_vector); -	return min(work_done, budget - 1); +	return work_done;  }  /** @@ -8367,7 +8367,7 @@ static struct sk_buff *igb_build_skb(struct igb_ring *rx_ring,  	net_prefetch(xdp->data_meta);  	/* build an skb around the page buffer */ -	skb = build_skb(xdp->data_hard_start, truesize); +	skb = napi_build_skb(xdp->data_hard_start, truesize);  	if (unlikely(!skb))  		return NULL; @@ -9254,7 +9254,7 @@ static int __maybe_unused igb_suspend(struct device *dev)  	return __igb_shutdown(to_pci_dev(dev), NULL, 0);  } -static int __maybe_unused igb_resume(struct device *dev) +static int __maybe_unused __igb_resume(struct device *dev, bool rpm)  {  	struct pci_dev *pdev = to_pci_dev(dev);  	struct net_device *netdev = pci_get_drvdata(pdev); @@ -9297,17 +9297,24 @@ static int __maybe_unused igb_resume(struct device *dev)  	wr32(E1000_WUS, ~0); -	rtnl_lock(); +	if (!rpm) +		rtnl_lock();  	if (!err && netif_running(netdev))  		err = __igb_open(netdev, true);  	if (!err)  		netif_device_attach(netdev); -	rtnl_unlock(); +	if (!rpm) +		rtnl_unlock();  	return err;  } +static int __maybe_unused igb_resume(struct device *dev) +{ +	return __igb_resume(dev, false); +} +  static int __maybe_unused igb_runtime_idle(struct device *dev)  {  	struct net_device *netdev = dev_get_drvdata(dev); @@ -9326,7 +9333,7 @@ static int __maybe_unused igb_runtime_suspend(struct device *dev)  static int __maybe_unused igb_runtime_resume(struct device *dev)  { -	return igb_resume(dev); +	return __igb_resume(dev, true);  }  static void igb_shutdown(struct pci_dev *pdev) @@ -9442,7 +9449,7 @@ static pci_ers_result_t igb_io_error_detected(struct pci_dev *pdev,   *  @pdev: Pointer to PCI device   *   *  Restart the card from scratch, as if from a cold-boot. Implementation - *  resembles the first-half of the igb_resume routine. + *  resembles the first-half of the __igb_resume routine.   **/  static pci_ers_result_t igb_io_slot_reset(struct pci_dev *pdev)  { @@ -9482,7 +9489,7 @@ static pci_ers_result_t igb_io_slot_reset(struct pci_dev *pdev)   *   *  This callback is called when the error recovery driver tells us that   *  its OK to resume normal operation. Implementation resembles the - *  second-half of the igb_resume routine. + *  second-half of the __igb_resume routine.   */  static void igb_io_resume(struct pci_dev *pdev)  { |