Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a00f6fcc authored by David S. Miller's avatar David S. Miller
Browse files


Jeff Kirsher says:

====================
Intel Wired LAN Driver Updates

This series contains updates to igb, igbvf, i40e, ixgbe and ixgbevf.

Dan Carpenter provides a patch for igbvf to fix a bug found by a static
checker.  If the new MTU is very large, then "new_mtu + ETH_HLEN +
ETH_FCS_LEN" can wrap and the check on the next line can underflow.

Wei Yongjun provides 2 patches, the first against igbvf adds a missing
iounmap() before the return from igbvf_probe().  The second against
i40e, removes the include <linux/version.h> because it is not needed.

Carolyn provides a patch for igb to fix a call to set the master/slave
mode for all m88 generation 2 PHY's and removes the call for I210
devices which do not need it.

Stefan Assmann provides a patch for igb to fix an issue which was broke
by:
   commit fa44f2f1
   Author: Greg Rose <gregory.v.rose@intel.com>
   Date:   Thu Jan 17 01:03:06 2013 -0800
   igb: Enable SR-IOV configuration via PCI sysfs interface
which breaks the reloading of igb when VFs are assigned to a guest, in
several ways.

Jacob provides a patch for ixgbe and ixgbevf.  First, against ixgbe,
cleans up ixgbe_enumerate_functions to reduce code complexity.  The
second, against ixgbevf, adds support for ethtool's get_coalesce and
set_coalesce command for the ixgbevf driver.

Yijing Wang provides a patch for ixgbe to use pcie_capability_read_word()
to simplify the code.

Emil provides a ixgbe patch to fix an issue where the logic used to
detect changes in rx-usecs was incorrect and was masked by the call to
ixgbe_update_rsc().

Don provides 2 patches for ixgbevf.  First creates a new function to set
PSRTYPE.  The second bumps the ixgbevf driver version.
====================

Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 7f294054 9e6fcae7
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -46,7 +46,6 @@
#include <linux/sctp.h>
#include <linux/sctp.h>
#include <linux/pkt_sched.h>
#include <linux/pkt_sched.h>
#include <linux/ipv6.h>
#include <linux/ipv6.h>
#include <linux/version.h>
#include <net/checksum.h>
#include <net/checksum.h>
#include <net/ip6_checksum.h>
#include <net/ip6_checksum.h>
#include <linux/ethtool.h>
#include <linux/ethtool.h>
+3 −5
Original line number Original line Diff line number Diff line
@@ -708,11 +708,6 @@ s32 igb_copper_link_setup_m88(struct e1000_hw *hw)
		hw_dbg("Error committing the PHY changes\n");
		hw_dbg("Error committing the PHY changes\n");
		goto out;
		goto out;
	}
	}
	if (phy->type == e1000_phy_i210) {
		ret_val = igb_set_master_slave_mode(hw);
		if (ret_val)
			return ret_val;
	}


out:
out:
	return ret_val;
	return ret_val;
@@ -806,6 +801,9 @@ s32 igb_copper_link_setup_m88_gen2(struct e1000_hw *hw)
		hw_dbg("Error committing the PHY changes\n");
		hw_dbg("Error committing the PHY changes\n");
		return ret_val;
		return ret_val;
	}
	}
	ret_val = igb_set_master_slave_mode(hw);
	if (ret_val)
		return ret_val;


	return 0;
	return 0;
}
}
+16 −21
Original line number Original line Diff line number Diff line
@@ -182,6 +182,7 @@ static void igb_check_vf_rate_limit(struct igb_adapter *);


#ifdef CONFIG_PCI_IOV
#ifdef CONFIG_PCI_IOV
static int igb_vf_configure(struct igb_adapter *adapter, int vf);
static int igb_vf_configure(struct igb_adapter *adapter, int vf);
static int igb_pci_enable_sriov(struct pci_dev *dev, int num_vfs);
#endif
#endif


#ifdef CONFIG_PM
#ifdef CONFIG_PM
@@ -2470,26 +2471,18 @@ static int igb_enable_sriov(struct pci_dev *pdev, int num_vfs)
	int err = 0;
	int err = 0;
	int i;
	int i;


	if (!adapter->msix_entries) {
	if (!adapter->msix_entries || num_vfs > 7) {
		err = -EPERM;
		err = -EPERM;
		goto out;
		goto out;
	}
	}

	if (!num_vfs)
	if (!num_vfs)
		goto out;
		goto out;
	else if (old_vfs && old_vfs == num_vfs)
		goto out;
	else if (old_vfs && old_vfs != num_vfs)
		err = igb_disable_sriov(pdev);

	if (err)
		goto out;

	if (num_vfs > 7) {
		err = -EPERM;
		goto out;
	}


	if (old_vfs) {
		dev_info(&pdev->dev, "%d pre-allocated VFs found - override max_vfs setting of %d\n",
			 old_vfs, max_vfs);
		adapter->vfs_allocated_count = old_vfs;
	} else
		adapter->vfs_allocated_count = num_vfs;
		adapter->vfs_allocated_count = num_vfs;


	adapter->vf_data = kcalloc(adapter->vfs_allocated_count,
	adapter->vf_data = kcalloc(adapter->vfs_allocated_count,
@@ -2504,10 +2497,12 @@ static int igb_enable_sriov(struct pci_dev *pdev, int num_vfs)
		goto out;
		goto out;
	}
	}


	/* only call pci_enable_sriov() if no VFs are allocated already */
	if (!old_vfs) {
		err = pci_enable_sriov(pdev, adapter->vfs_allocated_count);
		err = pci_enable_sriov(pdev, adapter->vfs_allocated_count);
		if (err)
		if (err)
			goto err_out;
			goto err_out;

	}
	dev_info(&pdev->dev, "%d VFs allocated\n",
	dev_info(&pdev->dev, "%d VFs allocated\n",
		 adapter->vfs_allocated_count);
		 adapter->vfs_allocated_count);
	for (i = 0; i < adapter->vfs_allocated_count; i++)
	for (i = 0; i < adapter->vfs_allocated_count; i++)
@@ -2623,7 +2618,7 @@ static void igb_probe_vfs(struct igb_adapter *adapter)
		return;
		return;


	pci_sriov_set_totalvfs(pdev, 7);
	pci_sriov_set_totalvfs(pdev, 7);
	igb_enable_sriov(pdev, max_vfs);
	igb_pci_enable_sriov(pdev, max_vfs);


#endif /* CONFIG_PCI_IOV */
#endif /* CONFIG_PCI_IOV */
}
}
+4 −4
Original line number Original line Diff line number Diff line
@@ -2343,10 +2343,9 @@ static int igbvf_change_mtu(struct net_device *netdev, int new_mtu)
	struct igbvf_adapter *adapter = netdev_priv(netdev);
	struct igbvf_adapter *adapter = netdev_priv(netdev);
	int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
	int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;


	if ((new_mtu < 68) || (max_frame > MAX_JUMBO_FRAME_SIZE)) {
	if (new_mtu < 68 || new_mtu > INT_MAX - ETH_HLEN - ETH_FCS_LEN ||
		dev_err(&adapter->pdev->dev, "Invalid MTU setting\n");
	    max_frame > MAX_JUMBO_FRAME_SIZE)
		return -EINVAL;
		return -EINVAL;
	}


#define MAX_STD_JUMBO_FRAME_SIZE 9234
#define MAX_STD_JUMBO_FRAME_SIZE 9234
	if (max_frame > MAX_STD_JUMBO_FRAME_SIZE) {
	if (max_frame > MAX_STD_JUMBO_FRAME_SIZE) {
@@ -2699,7 +2698,7 @@ static int igbvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
	if (ei->get_variants) {
	if (ei->get_variants) {
		err = ei->get_variants(adapter);
		err = ei->get_variants(adapter);
		if (err)
		if (err)
			goto err_ioremap;
			goto err_get_variants;
	}
	}


	/* setup adapter struct */
	/* setup adapter struct */
@@ -2796,6 +2795,7 @@ static int igbvf_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
	kfree(adapter->rx_ring);
	kfree(adapter->rx_ring);
err_sw_init:
err_sw_init:
	igbvf_reset_interrupt_capability(adapter);
	igbvf_reset_interrupt_capability(adapter);
err_get_variants:
	iounmap(adapter->hw.hw_addr);
	iounmap(adapter->hw.hw_addr);
err_ioremap:
err_ioremap:
	free_netdev(netdev);
	free_netdev(netdev);
+3 −3
Original line number Original line Diff line number Diff line
@@ -2257,13 +2257,13 @@ static int ixgbe_set_coalesce(struct net_device *netdev,


#if IS_ENABLED(CONFIG_BQL)
#if IS_ENABLED(CONFIG_BQL)
	/* detect ITR changes that require update of TXDCTL.WTHRESH */
	/* detect ITR changes that require update of TXDCTL.WTHRESH */
	if ((adapter->tx_itr_setting > 1) &&
	if ((adapter->tx_itr_setting != 1) &&
	    (adapter->tx_itr_setting < IXGBE_100K_ITR)) {
	    (adapter->tx_itr_setting < IXGBE_100K_ITR)) {
		if ((tx_itr_prev == 1) ||
		if ((tx_itr_prev == 1) ||
		    (tx_itr_prev > IXGBE_100K_ITR))
		    (tx_itr_prev >= IXGBE_100K_ITR))
			need_reset = true;
			need_reset = true;
	} else {
	} else {
		if ((tx_itr_prev > 1) &&
		if ((tx_itr_prev != 1) &&
		    (tx_itr_prev < IXGBE_100K_ITR))
		    (tx_itr_prev < IXGBE_100K_ITR))
			need_reset = true;
			need_reset = true;
	}
	}
Loading