All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 00/11] backports: add igb driver
@ 2014-01-08 10:44 Stefan Assmann
  2014-01-08 10:44 ` [PATCH v3 01/11] backports: igb fixes for linux-3.12 Stefan Assmann
                   ` (10 more replies)
  0 siblings, 11 replies; 16+ messages in thread
From: Stefan Assmann @ 2014-01-08 10:44 UTC (permalink / raw)
  To: mcgrof; +Cc: backports, hauke, sassmann

This is a RFC for inclusion of the Intel igb wired ethernet driver.
Patches are split per kernel release that makes it easier to review
the changes and gives a nice history of what was necessary for each
release. Also the igb driver changes have been split up into individual
patches in patches/collateral-evolutions/network/82-ethernet. This and
file names are up for discussion, suggestions welcome.

v2:
Instead of backporting struct ethtool_ops the code in igb has been
wrapped in if LINUX_VERSION_CODE statements. This will result in higher
maintenance because of conflicts with future upstream igb changes but it
seems there's no better solution so far.
The patches in patches/collateral-evolutions/network/82-ethernet have
been kept separate but with a leading number to make sure they get
applied in the correct order.
The code that activates igb has been pushed to the end of the series to
not break any bisecting.
v3:
Use original struct ptp_clock and handle ptp_clock_register() with a
define. Also removed unused function warnings by wrapping the code
in if LINUX_VERSION_CODE statements.


Stefan Assmann (11):
  backports: igb fixes for linux-3.12
  backports: igb fixes for linux-3.9
  backports: igb fixes for linux-3.8
  backports: igb fixes for linux-3.7
  backports: igb fixes for linux-3.6
  backports: igb fixes for linux-3.5
  backports: igb fixes for linux-3.4
  backports: igb fixes for linux-3.3
  backports: igb fixes for linux-3.2
  backports: igb fixes for linux-3.1
  backports: enable igb and add defconfig

 backport/backport-include/linux/ethtool.h          | 79 ++++++++++++++++++++++
 backport/backport-include/linux/gfp.h              | 10 +++
 backport/backport-include/linux/if.h               |  8 +++
 backport/backport-include/linux/mdio.h             | 56 +++++++++++++++
 backport/backport-include/linux/pci.h              | 44 ++++++++++++
 backport/backport-include/linux/pci_regs.h         |  8 +++
 backport/backport-include/linux/ptp_clock_kernel.h | 38 +++++++++++
 backport/backport-include/linux/skbuff.h           | 74 ++++++++++++++++++++
 backport/backport-include/linux/u64_stats_sync.h   | 16 ++++-
 backport/compat/backport-3.10.c                    | 46 +++++++++++++
 backport/compat/compat-3.5.c                       | 11 +++
 backport/compat/compat-3.8.c                       | 34 ++++++++++
 backport/defconfigs/igb                            |  2 +
 copy-list                                          |  4 ++
 .../82-ethernet/0001-igb_net_device_ops.patch      | 56 +++++++++++++++
 .../82-ethernet/0002-igb_pci_sriov_configure.patch | 57 ++++++++++++++++
 .../network/82-ethernet/0004-igb_err_handler.patch | 16 +++++
 .../network/82-ethernet/0005-igb_mdi.patch         | 49 ++++++++++++++
 .../network/82-ethernet/0006-igb_eee.patch         | 31 +++++++++
 .../network/82-ethernet/0007-igb_ethtool_ops.patch | 56 +++++++++++++++
 .../network/82-ethernet/0008-igb_no_fcs.patch      | 16 +++++
 .../network/82-ethernet/0009-igb_vlan_rx_vid.patch | 64 ++++++++++++++++++
 .../network/82-ethernet/0010-igb_ethtool_ops.patch | 48 +++++++++++++
 .../network/82-ethernet/0011-igb_ethtool_ops.patch | 31 +++++++++
 .../82-ethernet/0012-igb_ndo_set_vf_spoofchk.patch | 51 ++++++++++++++
 25 files changed, 903 insertions(+), 2 deletions(-)
 create mode 100644 backport/backport-include/linux/gfp.h
 create mode 100644 backport/backport-include/linux/mdio.h
 create mode 100644 backport/backport-include/linux/ptp_clock_kernel.h
 create mode 100644 backport/defconfigs/igb
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0001-igb_net_device_ops.patch
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0002-igb_pci_sriov_configure.patch
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0004-igb_err_handler.patch
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0005-igb_mdi.patch
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0006-igb_eee.patch
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0007-igb_ethtool_ops.patch
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0008-igb_no_fcs.patch
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0009-igb_vlan_rx_vid.patch
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0010-igb_ethtool_ops.patch
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0011-igb_ethtool_ops.patch
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0012-igb_ndo_set_vf_spoofchk.patch

-- 
1.8.4.2


^ permalink raw reply	[flat|nested] 16+ messages in thread

* [PATCH v3 01/11] backports: igb fixes for linux-3.12
  2014-01-08 10:44 [PATCH v3 00/11] backports: add igb driver Stefan Assmann
@ 2014-01-08 10:44 ` Stefan Assmann
  2014-01-09 20:55   ` Hauke Mehrtens
  2014-01-08 10:44 ` [PATCH v3 02/11] backports: igb fixes for linux-3.9 Stefan Assmann
                   ` (9 subsequent siblings)
  10 siblings, 1 reply; 16+ messages in thread
From: Stefan Assmann @ 2014-01-08 10:44 UTC (permalink / raw)
  To: mcgrof; +Cc: backports, hauke, sassmann

- refactor u64_stats_sync.h a bit
- add u64_stats_init define

Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
---
 backport/backport-include/linux/u64_stats_sync.h | 16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)

diff --git a/backport/backport-include/linux/u64_stats_sync.h b/backport/backport-include/linux/u64_stats_sync.h
index f15116c..ce6b778 100644
--- a/backport/backport-include/linux/u64_stats_sync.h
+++ b/backport/backport-include/linux/u64_stats_sync.h
@@ -1,6 +1,17 @@
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
+#ifndef __BACKPORT_LINUX_U64_STATS_SYNC_H
+#define __BACKPORT_LINUX_U64_STATS_SYNC_H
+
 #include_next <linux/u64_stats_sync.h>
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,13,0)
+#if BITS_PER_LONG == 32 && defined(CONFIG_SMP)
+# define u64_stats_init(syncp)	seqcount_init(syncp.seq)
 #else
+# define u64_stats_init(syncp)	do { } while (0)
+#endif
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,13,0) */
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)
 #ifndef _LINUX_U64_STATS_SYNC_H
 #define _LINUX_U64_STATS_SYNC_H
 
@@ -141,4 +152,5 @@ static inline bool u64_stats_fetch_retry_bh(const struct u64_stats_sync *syncp,
 }
 
 #endif /* _LINUX_U64_STATS_SYNC_H */
-#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) */
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0) */
+#endif /* __BACKPORT_LINUX_U64_STATS_SYNC_H */
-- 
1.8.4.2


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v3 02/11] backports: igb fixes for linux-3.9
  2014-01-08 10:44 [PATCH v3 00/11] backports: add igb driver Stefan Assmann
  2014-01-08 10:44 ` [PATCH v3 01/11] backports: igb fixes for linux-3.12 Stefan Assmann
@ 2014-01-08 10:44 ` Stefan Assmann
  2014-01-09 21:01   ` Hauke Mehrtens
  2014-01-08 10:44 ` [PATCH v3 03/11] backports: igb fixes for linux-3.8 Stefan Assmann
                   ` (8 subsequent siblings)
  10 siblings, 1 reply; 16+ messages in thread
From: Stefan Assmann @ 2014-01-08 10:44 UTC (permalink / raw)
  To: mcgrof; +Cc: backports, hauke, sassmann

- add struct pci_sriov
- add pci_vfs_assigned()
- add PCI_SRIOV defines
- add patches/collateral-evolutions/network/82-ethernet/0001-igb_net_device_ops.patch

Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
---
 backport/backport-include/linux/pci.h              | 33 +++++++++++++
 backport/backport-include/linux/pci_regs.h         |  8 ++++
 backport/compat/backport-3.10.c                    | 46 ++++++++++++++++++
 .../82-ethernet/0001-igb_net_device_ops.patch      | 56 ++++++++++++++++++++++
 4 files changed, 143 insertions(+)
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0001-igb_net_device_ops.patch

diff --git a/backport/backport-include/linux/pci.h b/backport/backport-include/linux/pci.h
index 3a1815a..9083255 100644
--- a/backport/backport-include/linux/pci.h
+++ b/backport/backport-include/linux/pci.h
@@ -178,4 +178,37 @@ bool pci_pme_capable(struct pci_dev *dev, pci_power_t state);
 	.subvendor = (subvend), .subdevice = (subdev)
 #endif /* PCI_DEVICE_SUB */
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
+/* Taken from drivers/pci/pci.h */
+struct pci_sriov {
+	int pos;		/* capability position */
+	int nres;		/* number of resources */
+	u32 cap;		/* SR-IOV Capabilities */
+	u16 ctrl;		/* SR-IOV Control */
+	u16 total_VFs;		/* total VFs associated with the PF */
+	u16 initial_VFs;	/* initial VFs associated with the PF */
+	u16 num_VFs;		/* number of VFs available */
+	u16 offset;		/* first VF Routing ID offset */
+	u16 stride;		/* following VF stride */
+	u32 pgsz;		/* page size for BAR alignment */
+	u8 link;		/* Function Dependency Link */
+	u16 driver_max_VFs;	/* max num VFs driver supports */
+	struct pci_dev *dev;	/* lowest numbered PF */
+	struct pci_dev *self;	/* this PF */
+	struct mutex lock;	/* lock for VF bus */
+	struct work_struct mtask; /* VF Migration task */
+	u8 __iomem *mstate;	/* VF Migration State Array */
+};
+
+#ifdef CONFIG_PCI_IOV
+int pci_vfs_assigned(struct pci_dev *dev);
+#else
+static inline int pci_vfs_assigned(struct pci_dev *dev)
+{
+	return 0;
+}
+#endif
+
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) */
+
 #endif /* _BACKPORT_LINUX_PCI_H */
diff --git a/backport/backport-include/linux/pci_regs.h b/backport/backport-include/linux/pci_regs.h
index 5cfa742..b52c4a5 100644
--- a/backport/backport-include/linux/pci_regs.h
+++ b/backport/backport-include/linux/pci_regs.h
@@ -125,4 +125,12 @@
 #define PCI_PM_CAP_PME_SHIFT	11
 #endif
 
+#ifndef PCI_SRIOV_VF_DID
+#define PCI_SRIOV_VF_DID	0x1a	/* VF Device ID */
+#endif
+
+#ifndef PCI_SRIOV_CTRL_VFE
+#define PCI_SRIOV_CTRL_VFE	0x01	/* VF Enable */
+#endif
+
 #endif /* __BACKPORT_UAPI_PCI_REGS_H */
diff --git a/backport/compat/backport-3.10.c b/backport/compat/backport-3.10.c
index 07a8dac..a9f74ed 100644
--- a/backport/compat/backport-3.10.c
+++ b/backport/compat/backport-3.10.c
@@ -14,6 +14,8 @@
 #include <linux/proc_fs.h>
 #include <linux/random.h>
 #include <linux/tty.h>
+#include <linux/pci.h>
+#include <linux/pci_regs.h>
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
 #include <linux/init.h>
@@ -128,4 +130,48 @@ void tty_port_tty_hangup(struct tty_port *port, bool check_clocal)
 }
 EXPORT_SYMBOL_GPL(tty_port_tty_hangup);
 #endif /* CONFIG_TTY */
+
+#ifdef CONFIG_PCI_IOV
+/*
+ * pci_vfs_assigned - returns number of VFs are assigned to a guest
+ * @dev: the PCI device
+ *
+ * Returns number of VFs belonging to this device that are assigned to a guest.
+ * If device is not a physical function returns -ENODEV.
+ */
+int pci_vfs_assigned(struct pci_dev *dev)
+{
+	struct pci_dev *vfdev;
+	unsigned int vfs_assigned = 0;
+	unsigned short dev_id;
+
+	/* only search if we are a PF */
+	if (!dev->is_physfn)
+		return 0;
+
+	/*
+	 * determine the device ID for the VFs, the vendor ID will be the
+	 * same as the PF so there is no need to check for that one
+	 */
+	pci_read_config_word(dev, dev->sriov->pos + PCI_SRIOV_VF_DID, &dev_id);
+
+	/* loop through all the VFs to see if we own any that are assigned */
+	vfdev = pci_get_device(dev->vendor, dev_id, NULL);
+	while (vfdev) {
+		/*
+		 * It is considered assigned if it is a virtual function with
+		 * our dev as the physical function and the assigned bit is set
+		 */
+		if (vfdev->is_virtfn && (vfdev->physfn == dev) &&
+		    (vfdev->dev_flags & PCI_DEV_FLAGS_ASSIGNED))
+			vfs_assigned++;
+
+		vfdev = pci_get_device(dev->vendor, dev_id, vfdev);
+	}
+
+	return vfs_assigned;
+}
+EXPORT_SYMBOL_GPL(pci_vfs_assigned);
+#endif /* CONFIG_PCI_IOV */
+
 #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)) */
diff --git a/patches/collateral-evolutions/network/82-ethernet/0001-igb_net_device_ops.patch b/patches/collateral-evolutions/network/82-ethernet/0001-igb_net_device_ops.patch
new file mode 100644
index 0000000..981b89e
--- /dev/null
+++ b/patches/collateral-evolutions/network/82-ethernet/0001-igb_net_device_ops.patch
@@ -0,0 +1,56 @@
+diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
+index 14ad4c7..f2a5abf 100644
+--- a/drivers/net/ethernet/intel/igb/igb_main.c
++++ b/drivers/net/ethernet/intel/igb/igb_main.c
+@@ -161,8 +161,13 @@ static int igb_ioctl(struct net_device *, struct ifreq *, int cmd);
+ static void igb_tx_timeout(struct net_device *);
+ static void igb_reset_task(struct work_struct *);
+ static void igb_vlan_mode(struct net_device *netdev, netdev_features_t features);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
+ static int igb_vlan_rx_add_vid(struct net_device *, __be16, u16);
+ static int igb_vlan_rx_kill_vid(struct net_device *, __be16, u16);
++#else
++static int igb_vlan_rx_add_vid(struct net_device *, u16);
++static int igb_vlan_rx_kill_vid(struct net_device *, u16);
++#endif
+ static void igb_restore_vlan(struct igb_adapter *);
+ static void igb_rar_set_qsel(struct igb_adapter *, u8 *, u32 , u8);
+ static void igb_ping_all_vfs(struct igb_adapter *);
+@@ -6959,8 +6964,12 @@ static void igb_vlan_mode(struct net_device *netdev, netdev_features_t features)
+ 	igb_rlpml_set(adapter);
+ }
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
+ static int igb_vlan_rx_add_vid(struct net_device *netdev,
+ 			       __be16 proto, u16 vid)
++#else
++static int igb_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
++#endif
+ {
+ 	struct igb_adapter *adapter = netdev_priv(netdev);
+ 	struct e1000_hw *hw = &adapter->hw;
+@@ -6977,8 +6986,12 @@ static int igb_vlan_rx_add_vid(struct net_device *netdev,
+ 	return 0;
+ }
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
+ static int igb_vlan_rx_kill_vid(struct net_device *netdev,
+ 				__be16 proto, u16 vid)
++#else
++static int igb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
++#endif
+ {
+ 	struct igb_adapter *adapter = netdev_priv(netdev);
+ 	struct e1000_hw *hw = &adapter->hw;
+@@ -7004,7 +7017,11 @@ static void igb_restore_vlan(struct igb_adapter *adapter)
+ 	igb_vlan_mode(adapter->netdev, adapter->netdev->features);
+ 
+ 	for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID)
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
+ 		igb_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), vid);
++#else
++		igb_vlan_rx_add_vid(adapter->netdev, vid);
++#endif
+ }
+ 
+ int igb_set_spd_dplx(struct igb_adapter *adapter, u32 spd, u8 dplx)
-- 
1.8.4.2


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v3 03/11] backports: igb fixes for linux-3.8
  2014-01-08 10:44 [PATCH v3 00/11] backports: add igb driver Stefan Assmann
  2014-01-08 10:44 ` [PATCH v3 01/11] backports: igb fixes for linux-3.12 Stefan Assmann
  2014-01-08 10:44 ` [PATCH v3 02/11] backports: igb fixes for linux-3.9 Stefan Assmann
@ 2014-01-08 10:44 ` Stefan Assmann
  2014-01-08 10:44 ` [PATCH v3 04/11] backports: igb fixes for linux-3.7 Stefan Assmann
                   ` (7 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: Stefan Assmann @ 2014-01-08 10:44 UTC (permalink / raw)
  To: mcgrof; +Cc: backports, hauke, sassmann

- add missing NETDEV_FRAG defines

Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
---
 backport/backport-include/linux/skbuff.h | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/backport/backport-include/linux/skbuff.h b/backport/backport-include/linux/skbuff.h
index 43d33ca..7d04b54 100644
--- a/backport/backport-include/linux/skbuff.h
+++ b/backport/backport-include/linux/skbuff.h
@@ -224,4 +224,13 @@ static inline void skb_queue_splice_tail(const struct sk_buff_head *list,
 		     skb = skb->next)
 #endif /* < 2.6.28 */
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
+#ifndef NETDEV_FRAG_PAGE_MAX_ORDER
+#define NETDEV_FRAG_PAGE_MAX_ORDER get_order(32768)
+#endif
+#ifndef NETDEV_FRAG_PAGE_MAX_SIZE
+#define NETDEV_FRAG_PAGE_MAX_SIZE  (PAGE_SIZE << NETDEV_FRAG_PAGE_MAX_ORDER)
+#endif
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0) */
+
 #endif /* __BACKPORT_SKBUFF_H */
-- 
1.8.4.2


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v3 04/11] backports: igb fixes for linux-3.7
  2014-01-08 10:44 [PATCH v3 00/11] backports: add igb driver Stefan Assmann
                   ` (2 preceding siblings ...)
  2014-01-08 10:44 ` [PATCH v3 03/11] backports: igb fixes for linux-3.8 Stefan Assmann
@ 2014-01-08 10:44 ` Stefan Assmann
  2014-01-09 21:13   ` Hauke Mehrtens
  2014-01-08 10:44 ` [PATCH v3 05/11] backports: igb fixes for linux-3.6 Stefan Assmann
                   ` (6 subsequent siblings)
  10 siblings, 1 reply; 16+ messages in thread
From: Stefan Assmann @ 2014-01-08 10:44 UTC (permalink / raw)
  To: mcgrof; +Cc: backports, hauke, sassmann

- add pci_sriov_set_totalvfs()
- add patches/collateral-evolutions/network/82-ethernet/0002-igb_pci_sriov_configure.patch

Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
---
 backport/backport-include/linux/pci.h              |  5 +-
 backport/compat/compat-3.8.c                       | 34 +++++++++++++
 .../82-ethernet/0002-igb_pci_sriov_configure.patch | 57 ++++++++++++++++++++++
 3 files changed, 95 insertions(+), 1 deletion(-)
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0002-igb_pci_sriov_configure.patch

diff --git a/backport/backport-include/linux/pci.h b/backport/backport-include/linux/pci.h
index 9083255..65a76a1 100644
--- a/backport/backport-include/linux/pci.h
+++ b/backport/backport-include/linux/pci.h
@@ -178,6 +178,10 @@ bool pci_pme_capable(struct pci_dev *dev, pci_power_t state);
 	.subvendor = (subvend), .subdevice = (subdev)
 #endif /* PCI_DEVICE_SUB */
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)
+int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs);
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0) */
+
 #if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
 /* Taken from drivers/pci/pci.h */
 struct pci_sriov {
@@ -210,5 +214,4 @@ static inline int pci_vfs_assigned(struct pci_dev *dev)
 #endif
 
 #endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) */
-
 #endif /* _BACKPORT_LINUX_PCI_H */
diff --git a/backport/compat/compat-3.8.c b/backport/compat/compat-3.8.c
index c6824bf..9d96b36 100644
--- a/backport/compat/compat-3.8.c
+++ b/backport/compat/compat-3.8.c
@@ -18,6 +18,8 @@
 #include <linux/netdevice.h>
 #include <linux/random.h>
 #include <linux/of.h>
+#include <linux/pci.h>
+#include <linux/pci_regs.h>
 
 #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,7,8))
 void netdev_set_default_ethtool_ops(struct net_device *dev,
@@ -514,3 +516,35 @@ int of_property_read_u8_array(const struct device_node *np,
 }
 EXPORT_SYMBOL_GPL(of_property_read_u8_array);
 #endif /* CONFIG_OF */
+
+#ifdef CONFIG_PCI_IOV
+/**
+ * pci_sriov_set_totalvfs -- reduce the TotalVFs available
+ * @dev: the PCI PF device
+ * @numvfs: number that should be used for TotalVFs supported
+ *
+ * Should be called from PF driver's probe routine with
+ * device's mutex held.
+ *
+ * Returns 0 if PF is an SRIOV-capable device and
+ * value of numvfs valid. If not a PF return -ENOSYS;
+ * if numvfs is invalid return -EINVAL;
+ * if VFs already enabled, return -EBUSY.
+ */
+int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs)
+{
+	if (!dev->is_physfn)
+		return -ENOSYS;
+	if (numvfs > dev->sriov->total_VFs)
+		return -EINVAL;
+
+	/* Shouldn't change if VFs already enabled */
+	if (dev->sriov->ctrl & PCI_SRIOV_CTRL_VFE)
+		return -EBUSY;
+	else
+		dev->sriov->driver_max_VFs = numvfs;
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(pci_sriov_set_totalvfs);
+#endif /* CONFIG_PCI_IOV */
diff --git a/patches/collateral-evolutions/network/82-ethernet/0002-igb_pci_sriov_configure.patch b/patches/collateral-evolutions/network/82-ethernet/0002-igb_pci_sriov_configure.patch
new file mode 100644
index 0000000..47722cc
--- /dev/null
+++ b/patches/collateral-evolutions/network/82-ethernet/0002-igb_pci_sriov_configure.patch
@@ -0,0 +1,57 @@
+diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
+index f2a5abf..dd878b6 100644
+--- a/drivers/net/ethernet/intel/igb/igb_main.c
++++ b/drivers/net/ethernet/intel/igb/igb_main.c
+@@ -207,7 +207,9 @@ static const struct dev_pm_ops igb_pm_ops = {
+ };
+ #endif
+ static void igb_shutdown(struct pci_dev *);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)
+ static int igb_pci_sriov_configure(struct pci_dev *dev, int num_vfs);
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0) */
+ #ifdef CONFIG_IGB_DCA
+ static int igb_notify_dca(struct notifier_block *, unsigned long, void *);
+ static struct notifier_block dca_notifier = {
+@@ -249,7 +251,9 @@ static struct pci_driver igb_driver = {
+ 	.driver.pm = &igb_pm_ops,
+ #endif
+ 	.shutdown = igb_shutdown,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)
+ 	.sriov_configure = igb_pci_sriov_configure,
++#endif
+ 	.err_handler = &igb_err_handler
+ };
+ 
+@@ -7310,6 +7314,7 @@ static int igb_sriov_reinit(struct pci_dev *dev)
+ 	return 0;
+ }
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)
+ static int igb_pci_disable_sriov(struct pci_dev *dev)
+ {
+ 	int err = igb_disable_sriov(dev);
+@@ -7319,6 +7324,7 @@ static int igb_pci_disable_sriov(struct pci_dev *dev)
+ 
+ 	return err;
+ }
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0) */
+ 
+ static int igb_pci_enable_sriov(struct pci_dev *dev, int num_vfs)
+ {
+@@ -7336,6 +7342,8 @@ out:
+ }
+ 
+ #endif
++
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)
+ static int igb_pci_sriov_configure(struct pci_dev *dev, int num_vfs)
+ {
+ #ifdef CONFIG_PCI_IOV
+@@ -7346,6 +7354,7 @@ static int igb_pci_sriov_configure(struct pci_dev *dev, int num_vfs)
+ #endif
+ 	return 0;
+ }
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0) */
+ 
+ #ifdef CONFIG_NET_POLL_CONTROLLER
+ /* Polling 'interrupt' - used by things like netconsole to send skbs
-- 
1.8.4.2


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v3 05/11] backports: igb fixes for linux-3.6
  2014-01-08 10:44 [PATCH v3 00/11] backports: add igb driver Stefan Assmann
                   ` (3 preceding siblings ...)
  2014-01-08 10:44 ` [PATCH v3 04/11] backports: igb fixes for linux-3.7 Stefan Assmann
@ 2014-01-08 10:44 ` Stefan Assmann
  2014-01-08 10:44 ` [PATCH v3 06/11] backports: igb fixes for linux-3.5 Stefan Assmann
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: Stefan Assmann @ 2014-01-08 10:44 UTC (permalink / raw)
  To: mcgrof; +Cc: backports, hauke, sassmann

- backport ethtool_cmd
- backport ethtool_ops
- backport mmd_eee_adv_to_ethtool_adv_t
- add define to map ptp_clock_register() to old version
- add patches/collateral-evolutions/network/82-ethernet/0004-igb_err_handler.patch
- add patches/collateral-evolutions/network/82-ethernet/0005-igb_mdi.patch

Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
---
 backport/backport-include/linux/mdio.h             | 35 ++++++++++++++++
 backport/backport-include/linux/ptp_clock_kernel.h |  9 ++++
 .../network/82-ethernet/0004-igb_err_handler.patch | 16 +++++++
 .../network/82-ethernet/0005-igb_mdi.patch         | 49 ++++++++++++++++++++++
 4 files changed, 109 insertions(+)
 create mode 100644 backport/backport-include/linux/mdio.h
 create mode 100644 backport/backport-include/linux/ptp_clock_kernel.h
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0004-igb_err_handler.patch
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0005-igb_mdi.patch

diff --git a/backport/backport-include/linux/mdio.h b/backport/backport-include/linux/mdio.h
new file mode 100644
index 0000000..2a38121
--- /dev/null
+++ b/backport/backport-include/linux/mdio.h
@@ -0,0 +1,35 @@
+#ifndef __BACKPORT_LINUX_MDIO_H
+#define __BACKPORT_LINUX_MDIO_H
+#include_next <linux/mdio.h>
+
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0)
+/**
+ * mmd_eee_adv_to_ethtool_adv_t
+ * @eee_adv: value of the MMD EEE Advertisement/Link Partner Ability registers
+ *
+ * A small helper function that translates the MMD EEE Advertisment (7.60)
+ * and MMD EEE Link Partner Ability (7.61) bits to ethtool advertisement
+ * settings.
+ */
+static inline u32 mmd_eee_adv_to_ethtool_adv_t(u16 eee_adv)
+{
+	u32 adv = 0;
+
+	if (eee_adv & MDIO_EEE_100TX)
+		adv |= ADVERTISED_100baseT_Full;
+	if (eee_adv & MDIO_EEE_1000T)
+		adv |= ADVERTISED_1000baseT_Full;
+	if (eee_adv & MDIO_EEE_10GT)
+		adv |= ADVERTISED_10000baseT_Full;
+	if (eee_adv & MDIO_EEE_1000KX)
+		adv |= ADVERTISED_1000baseKX_Full;
+	if (eee_adv & MDIO_EEE_10GKX4)
+		adv |= ADVERTISED_10000baseKX4_Full;
+	if (eee_adv & MDIO_EEE_10GKR)
+		adv |= ADVERTISED_10000baseKR_Full;
+
+	return adv;
+}
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0) */
+
+#endif /* __BACKPORT_LINUX_MDIO_H */
diff --git a/backport/backport-include/linux/ptp_clock_kernel.h b/backport/backport-include/linux/ptp_clock_kernel.h
new file mode 100644
index 0000000..f64e705
--- /dev/null
+++ b/backport/backport-include/linux/ptp_clock_kernel.h
@@ -0,0 +1,9 @@
+#ifndef __BACKPORT_PTP_CLOCK_KERNEL_H
+#define __BACKPORT_PTP_CLOCK_KERNEL_H
+#include_next <linux/ptp_clock_kernel.h>
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0)
+#define ptp_clock_register(info,parent) ptp_clock_register(info)
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0) */
+
+#endif /* __BACKPORT_PTP_CLOCK_KERNEL_H */
diff --git a/patches/collateral-evolutions/network/82-ethernet/0004-igb_err_handler.patch b/patches/collateral-evolutions/network/82-ethernet/0004-igb_err_handler.patch
new file mode 100644
index 0000000..393e8b5
--- /dev/null
+++ b/patches/collateral-evolutions/network/82-ethernet/0004-igb_err_handler.patch
@@ -0,0 +1,16 @@
+diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
+index 67441f2..4df7bce 100644
+--- a/drivers/net/ethernet/intel/igb/igb_main.c
++++ b/drivers/net/ethernet/intel/igb/igb_main.c
+@@ -232,7 +232,11 @@ static pci_ers_result_t igb_io_error_detected(struct pci_dev *,
+ static pci_ers_result_t igb_io_slot_reset(struct pci_dev *);
+ static void igb_io_resume(struct pci_dev *);
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0)
+ static const struct pci_error_handlers igb_err_handler = {
++#else
++static struct pci_error_handlers igb_err_handler = {
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0) */
+ 	.error_detected = igb_io_error_detected,
+ 	.slot_reset = igb_io_slot_reset,
+ 	.resume = igb_io_resume,
diff --git a/patches/collateral-evolutions/network/82-ethernet/0005-igb_mdi.patch b/patches/collateral-evolutions/network/82-ethernet/0005-igb_mdi.patch
new file mode 100644
index 0000000..7b381c9
--- /dev/null
+++ b/patches/collateral-evolutions/network/82-ethernet/0005-igb_mdi.patch
@@ -0,0 +1,49 @@
+diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
+index c3143da..05fd6f8 100644
+--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
++++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
+@@ -249,10 +249,12 @@ static int igb_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
+ 	else
+ 		ecmd->eth_tp_mdix = ETH_TP_MDI_INVALID;
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0)
+ 	if (hw->phy.mdix == AUTO_ALL_MODES)
+ 		ecmd->eth_tp_mdix_ctrl = ETH_TP_MDI_AUTO;
+ 	else
+ 		ecmd->eth_tp_mdix_ctrl = hw->phy.mdix;
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0) */
+ 
+ 	return 0;
+ }
+@@ -271,6 +273,7 @@ static int igb_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
+ 		return -EINVAL;
+ 	}
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0)
+ 	/* MDI setting is only allowed when autoneg enabled because
+ 	 * some hardware doesn't allow MDI setting when speed or
+ 	 * duplex is forced.
+@@ -285,6 +288,7 @@ static int igb_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
+ 			return -EINVAL;
+ 		}
+ 	}
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0) */
+ 
+ 	while (test_and_set_bit(__IGB_RESETTING, &adapter->state))
+ 		msleep(1);
+@@ -328,6 +332,7 @@ static int igb_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
+ 		}
+ 	}
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0)
+ 	/* MDI-X => 2; MDI => 1; Auto => 3 */
+ 	if (ecmd->eth_tp_mdix_ctrl) {
+ 		/* fix up the value for auto (3 => 0) as zero is mapped
+@@ -338,6 +343,7 @@ static int igb_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
+ 		else
+ 			hw->phy.mdix = ecmd->eth_tp_mdix_ctrl;
+ 	}
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,7,0) */
+ 
+ 	/* reset the link */
+ 	if (netif_running(adapter->netdev)) {
-- 
1.8.4.2


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v3 06/11] backports: igb fixes for linux-3.5
  2014-01-08 10:44 [PATCH v3 00/11] backports: add igb driver Stefan Assmann
                   ` (4 preceding siblings ...)
  2014-01-08 10:44 ` [PATCH v3 05/11] backports: igb fixes for linux-3.6 Stefan Assmann
@ 2014-01-08 10:44 ` Stefan Assmann
  2014-01-08 10:44 ` [PATCH v3 07/11] backports: igb fixes for linux-3.4 Stefan Assmann
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: Stefan Assmann @ 2014-01-08 10:44 UTC (permalink / raw)
  To: mcgrof; +Cc: backports, hauke, sassmann

- add EEE defines
- add struct ethtool_eee
- backport __skb_alloc_page and __skb_alloc_pages
- add patches/collateral-evolutions/network/82-ethernet/0006-igb_eee.patch

Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
---
 backport/backport-include/linux/ethtool.h          | 31 +++++++++++++++
 backport/backport-include/linux/gfp.h              | 10 +++++
 backport/backport-include/linux/mdio.h             | 23 ++++++++++-
 backport/backport-include/linux/skbuff.h           | 46 ++++++++++++++++++++++
 .../network/82-ethernet/0006-igb_eee.patch         | 31 +++++++++++++++
 5 files changed, 140 insertions(+), 1 deletion(-)
 create mode 100644 backport/backport-include/linux/gfp.h
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0006-igb_eee.patch

diff --git a/backport/backport-include/linux/ethtool.h b/backport/backport-include/linux/ethtool.h
index 647fbf6..4f13cb9 100644
--- a/backport/backport-include/linux/ethtool.h
+++ b/backport/backport-include/linux/ethtool.h
@@ -42,4 +42,35 @@ static inline __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)
 }
 #endif
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)
+/**
+ * struct ethtool_eee - Energy Efficient Ethernet information
+ * @cmd: ETHTOOL_{G,S}EEE
+ * @supported: Mask of %SUPPORTED_* flags for the speed/duplex combinations
+ *	for which there is EEE support.
+ * @advertised: Mask of %ADVERTISED_* flags for the speed/duplex combinations
+ *	advertised as eee capable.
+ * @lp_advertised: Mask of %ADVERTISED_* flags for the speed/duplex
+ *	combinations advertised by the link partner as eee capable.
+ * @eee_active: Result of the eee auto negotiation.
+ * @eee_enabled: EEE configured mode (enabled/disabled).
+ * @tx_lpi_enabled: Whether the interface should assert its tx lpi, given
+ *	that eee was negotiated.
+ * @tx_lpi_timer: Time in microseconds the interface delays prior to asserting
+ *	its tx lpi (after reaching 'idle' state). Effective only when eee
+ *	was negotiated and tx_lpi_enabled was set.
+ */
+struct ethtool_eee {
+	__u32	cmd;
+	__u32	supported;
+	__u32	advertised;
+	__u32	lp_advertised;
+	__u32	eee_active;
+	__u32	eee_enabled;
+	__u32	tx_lpi_enabled;
+	__u32	tx_lpi_timer;
+	__u32	reserved[2];
+};
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0) */
+
 #endif /* __BACKPORT_LINUX_ETHTOOL_H */
diff --git a/backport/backport-include/linux/gfp.h b/backport/backport-include/linux/gfp.h
new file mode 100644
index 0000000..2962290
--- /dev/null
+++ b/backport/backport-include/linux/gfp.h
@@ -0,0 +1,10 @@
+#ifndef __BACKPORT_LINUX_GFP_H
+#define __BACKPORT_LINUX_GFP_H
+#include_next <linux/gfp.h>
+
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0))
+#define ___GFP_MEMALLOC		0x2000u
+#define __GFP_MEMALLOC	((__force gfp_t)___GFP_MEMALLOC)/* Allow access to emergency reserves */
+#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)) */
+
+#endif /* __BACKPORT_LINUX_GFP_H */
diff --git a/backport/backport-include/linux/mdio.h b/backport/backport-include/linux/mdio.h
index 2a38121..838958a 100644
--- a/backport/backport-include/linux/mdio.h
+++ b/backport/backport-include/linux/mdio.h
@@ -2,6 +2,28 @@
 #define __BACKPORT_LINUX_MDIO_H
 #include_next <linux/mdio.h>
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)
+/* EEE Supported/Advertisement/LP Advertisement registers.
+ *
+ * EEE capability Register (3.20), Advertisement (7.60) and
+ * Link partner ability (7.61) registers have and can use the same identical
+ * bit masks.
+ */
+#define MDIO_AN_EEE_ADV_100TX	0x0002	/* Advertise 100TX EEE cap */
+#define MDIO_AN_EEE_ADV_1000T	0x0004	/* Advertise 1000T EEE cap */
+/* Note: the two defines above can be potentially used by the user-land
+ * and cannot remove them now.
+ * So, we define the new generic MDIO_EEE_100TX and MDIO_EEE_1000T macros
+ * using the previous ones (that can be considered obsolete).
+ */
+#define MDIO_EEE_100TX		MDIO_AN_EEE_ADV_100TX	/* 100TX EEE cap */
+#define MDIO_EEE_1000T		MDIO_AN_EEE_ADV_1000T	/* 1000T EEE cap */
+#define MDIO_EEE_10GT		0x0008	/* 10GT EEE cap */
+#define MDIO_EEE_1000KX		0x0010	/* 1000KX EEE cap */
+#define MDIO_EEE_10GKX4		0x0020	/* 10G KX4 EEE cap */
+#define MDIO_EEE_10GKR		0x0040	/* 10G KR EEE cap */
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0) */
+
 #if LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0)
 /**
  * mmd_eee_adv_to_ethtool_adv_t
@@ -31,5 +53,4 @@ static inline u32 mmd_eee_adv_to_ethtool_adv_t(u16 eee_adv)
 	return adv;
 }
 #endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0) */
-
 #endif /* __BACKPORT_LINUX_MDIO_H */
diff --git a/backport/backport-include/linux/skbuff.h b/backport/backport-include/linux/skbuff.h
index 7d04b54..c1b2753 100644
--- a/backport/backport-include/linux/skbuff.h
+++ b/backport/backport-include/linux/skbuff.h
@@ -224,6 +224,52 @@ static inline void skb_queue_splice_tail(const struct sk_buff_head *list,
 		     skb = skb->next)
 #endif /* < 2.6.28 */
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)
+/**
+ *	__skb_alloc_pages - allocate pages for ps-rx on a skb and preserve pfmemalloc data
+ *	@gfp_mask: alloc_pages_node mask. Set __GFP_NOMEMALLOC if not for network packet RX
+ *	@skb: skb to set pfmemalloc on if __GFP_MEMALLOC is used
+ *	@order: size of the allocation
+ *
+ * 	Allocate a new page.
+ *
+ * 	%NULL is returned if there is no free memory.
+*/
+static inline struct page *__skb_alloc_pages(gfp_t gfp_mask,
+					      struct sk_buff *skb,
+					      unsigned int order)
+{
+	struct page *page;
+
+	gfp_mask |= __GFP_COLD;
+#if 0
+	if (!(gfp_mask & __GFP_NOMEMALLOC))
+		gfp_mask |= __GFP_MEMALLOC;
+#endif
+	page = alloc_pages_node(NUMA_NO_NODE, gfp_mask, order);
+#if 0
+	if (skb && page && page->pfmemalloc)
+		skb->pfmemalloc = true;
+#endif
+	return page;
+}
+
+/**
+ *	__skb_alloc_page - allocate a page for ps-rx for a given skb and preserve pfmemalloc data
+ *	@gfp_mask: alloc_pages_node mask. Set __GFP_NOMEMALLOC if not for network packet RX
+ *	@skb: skb to set pfmemalloc on if __GFP_MEMALLOC is used
+ *
+ * 	Allocate a new page.
+ *
+ * 	%NULL is returned if there is no free memory.
+ */
+static inline struct page *__skb_alloc_page(gfp_t gfp_mask,
+					     struct sk_buff *skb)
+{
+	return __skb_alloc_pages(gfp_mask, skb, 0);
+}
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0) */
+
 #if LINUX_VERSION_CODE < KERNEL_VERSION(3,9,0)
 #ifndef NETDEV_FRAG_PAGE_MAX_ORDER
 #define NETDEV_FRAG_PAGE_MAX_ORDER get_order(32768)
diff --git a/patches/collateral-evolutions/network/82-ethernet/0006-igb_eee.patch b/patches/collateral-evolutions/network/82-ethernet/0006-igb_eee.patch
new file mode 100644
index 0000000..f9927bf
--- /dev/null
+++ b/patches/collateral-evolutions/network/82-ethernet/0006-igb_eee.patch
@@ -0,0 +1,31 @@
+diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
+index 9b15820..9767f11 100644
+--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
++++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
+@@ -2585,6 +2585,7 @@ static int igb_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
+ 	return ret;
+ }
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)
+ static int igb_get_eee(struct net_device *netdev, struct ethtool_eee *edata)
+ {
+ 	struct igb_adapter *adapter = netdev_priv(netdev);
+@@ -2713,6 +2714,7 @@ static int igb_set_eee(struct net_device *netdev,
+ 
+ 	return 0;
+ }
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0) */
+ 
+ static int igb_get_module_info(struct net_device *netdev,
+ 			       struct ethtool_modinfo *modinfo)
+@@ -3001,8 +3003,10 @@ static const struct ethtool_ops igb_ethtool_ops = {
+ 	.get_ts_info		= igb_get_ts_info,
+ 	.get_rxnfc		= igb_get_rxnfc,
+ 	.set_rxnfc		= igb_set_rxnfc,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)
+ 	.get_eee		= igb_get_eee,
+ 	.set_eee		= igb_set_eee,
++#endif
+ 	.get_module_info	= igb_get_module_info,
+ 	.get_module_eeprom	= igb_get_module_eeprom,
+ 	.get_rxfh_indir_size	= igb_get_rxfh_indir_size,
-- 
1.8.4.2


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v3 07/11] backports: igb fixes for linux-3.4
  2014-01-08 10:44 [PATCH v3 00/11] backports: add igb driver Stefan Assmann
                   ` (5 preceding siblings ...)
  2014-01-08 10:44 ` [PATCH v3 06/11] backports: igb fixes for linux-3.5 Stefan Assmann
@ 2014-01-08 10:44 ` Stefan Assmann
  2014-01-08 10:44 ` [PATCH v3 08/11] backports: igb fixes for linux-3.3 Stefan Assmann
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: Stefan Assmann @ 2014-01-08 10:44 UTC (permalink / raw)
  To: mcgrof; +Cc: backports, hauke, sassmann

- add struct ethtool_ts_info
- add struct ethtool_modinfo
- add struct timestamp_event_queue
- add struct ptp_clock
- add ptp_clock_index()
- add patches/collateral-evolutions/network/82-ethernet/0007-igb_ethtool_ops.patch

Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
---
 backport/backport-include/linux/ethtool.h          | 48 +++++++++++++++++++
 backport/backport-include/linux/ptp_clock_kernel.h | 29 +++++++++++
 backport/compat/compat-3.5.c                       | 11 +++++
 .../network/82-ethernet/0007-igb_ethtool_ops.patch | 56 ++++++++++++++++++++++
 4 files changed, 144 insertions(+)
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0007-igb_ethtool_ops.patch

diff --git a/backport/backport-include/linux/ethtool.h b/backport/backport-include/linux/ethtool.h
index 4f13cb9..38882de 100644
--- a/backport/backport-include/linux/ethtool.h
+++ b/backport/backport-include/linux/ethtool.h
@@ -42,6 +42,54 @@ static inline __u32 ethtool_cmd_speed(const struct ethtool_cmd *ep)
 }
 #endif
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
+/* EEPROM Standards for plug in modules */
+#define ETH_MODULE_SFF_8079		0x1
+#define ETH_MODULE_SFF_8079_LEN		256
+#define ETH_MODULE_SFF_8472		0x2
+#define ETH_MODULE_SFF_8472_LEN		512
+
+/**
+ * struct ethtool_ts_info - holds a device's timestamping and PHC association
+ * @cmd: command number = %ETHTOOL_GET_TS_INFO
+ * @so_timestamping: bit mask of the sum of the supported SO_TIMESTAMPING flags
+ * @phc_index: device index of the associated PHC, or -1 if there is none
+ * @tx_types: bit mask of the supported hwtstamp_tx_types enumeration values
+ * @rx_filters: bit mask of the supported hwtstamp_rx_filters enumeration values
+ *
+ * The bits in the 'tx_types' and 'rx_filters' fields correspond to
+ * the 'hwtstamp_tx_types' and 'hwtstamp_rx_filters' enumeration values,
+ * respectively.  For example, if the device supports HWTSTAMP_TX_ON,
+ * then (1 << HWTSTAMP_TX_ON) in 'tx_types' will be set.
+ */
+struct ethtool_ts_info {
+	__u32	cmd;
+	__u32	so_timestamping;
+	__s32	phc_index;
+	__u32	tx_types;
+	__u32	tx_reserved[3];
+	__u32	rx_filters;
+	__u32	rx_reserved[3];
+};
+
+/**
+ * struct ethtool_modinfo - plugin module eeprom information
+ * @cmd: %ETHTOOL_GMODULEINFO
+ * @type: Standard the module information conforms to %ETH_MODULE_SFF_xxxx
+ * @eeprom_len: Length of the eeprom
+ *
+ * This structure is used to return the information to
+ * properly size memory for a subsequent call to %ETHTOOL_GMODULEEEPROM.
+ * The type code indicates the eeprom data format
+ */
+struct ethtool_modinfo {
+	__u32   cmd;
+	__u32   type;
+	__u32   eeprom_len;
+	__u32   reserved[8];
+};
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) */
+
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)
 /**
  * struct ethtool_eee - Energy Efficient Ethernet information
diff --git a/backport/backport-include/linux/ptp_clock_kernel.h b/backport/backport-include/linux/ptp_clock_kernel.h
index f64e705..90def75 100644
--- a/backport/backport-include/linux/ptp_clock_kernel.h
+++ b/backport/backport-include/linux/ptp_clock_kernel.h
@@ -2,6 +2,35 @@
 #define __BACKPORT_PTP_CLOCK_KERNEL_H
 #include_next <linux/ptp_clock_kernel.h>
 
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0)
+#include <linux/posix-clock.h>
+
+#define PTP_MAX_TIMESTAMPS 128
+#define PTP_BUF_TIMESTAMPS 30
+
+struct timestamp_event_queue {
+	struct ptp_extts_event buf[PTP_MAX_TIMESTAMPS];
+	int head;
+	int tail;
+	spinlock_t lock;
+};
+
+struct ptp_clock {
+	struct posix_clock clock;
+	struct device *dev;
+	struct ptp_clock_info *info;
+	dev_t devid;
+	int index; /* index into clocks.map */
+	struct pps_device *pps_source;
+	struct timestamp_event_queue tsevq; /* simple fifo for time stamps */
+	struct mutex tsevq_mux; /* one process at a time reading the fifo */
+	wait_queue_head_t tsev_wq;
+	int defunct; /* tells readers to go away when clock is being removed */
+};
+
+extern int ptp_clock_index(struct ptp_clock *ptp);
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,5,0) */
+
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0)
 #define ptp_clock_register(info,parent) ptp_clock_register(info)
 #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,7,0) */
diff --git a/backport/compat/compat-3.5.c b/backport/compat/compat-3.5.c
index 95f52b9..0a4aaba 100644
--- a/backport/compat/compat-3.5.c
+++ b/backport/compat/compat-3.5.c
@@ -12,6 +12,9 @@
 #include <linux/highuid.h>
 #include <linux/ktime.h>
 #include <linux/hrtimer.h>
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0)
+#include <linux/ptp_clock_kernel.h>
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) */
 
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0))
 #include <linux/device.h>
@@ -64,3 +67,11 @@ int overflowgid = DEFAULT_OVERFLOWGID;
 EXPORT_SYMBOL_GPL(overflowuid);
 EXPORT_SYMBOL_GPL(overflowgid);
 #endif
+
+#ifdef CONFIG_PTP_1588_CLOCK
+int ptp_clock_index(struct ptp_clock *ptp)
+{
+	return ptp->index;
+}
+EXPORT_SYMBOL(ptp_clock_index);
+#endif /* CONFIG_PTP_1588_CLOCK */
diff --git a/patches/collateral-evolutions/network/82-ethernet/0007-igb_ethtool_ops.patch b/patches/collateral-evolutions/network/82-ethernet/0007-igb_ethtool_ops.patch
new file mode 100644
index 0000000..a625187
--- /dev/null
+++ b/patches/collateral-evolutions/network/82-ethernet/0007-igb_ethtool_ops.patch
@@ -0,0 +1,56 @@
+diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
+index 9767f11..3cf9600 100644
+--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
++++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
+@@ -2350,6 +2350,7 @@ static void igb_get_strings(struct net_device *netdev, u32 stringset, u8 *data)
+ 	}
+ }
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
+ static int igb_get_ts_info(struct net_device *dev,
+ 			   struct ethtool_ts_info *info)
+ {
+@@ -2405,6 +2406,7 @@ static int igb_get_ts_info(struct net_device *dev,
+ 		return -EOPNOTSUPP;
+ 	}
+ }
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0) */
+ 
+ static int igb_get_rss_hash_opts(struct igb_adapter *adapter,
+ 				 struct ethtool_rxnfc *cmd)
+@@ -2716,6 +2718,7 @@ static int igb_set_eee(struct net_device *netdev,
+ }
+ #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0) */
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
+ static int igb_get_module_info(struct net_device *netdev,
+ 			       struct ethtool_modinfo *modinfo)
+ {
+@@ -2794,6 +2797,7 @@ static int igb_get_module_eeprom(struct net_device *netdev,
+ 
+ 	return 0;
+ }
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0) */
+ 
+ static int igb_ethtool_begin(struct net_device *netdev)
+ {
+@@ -3000,15 +3004,19 @@ static const struct ethtool_ops igb_ethtool_ops = {
+ 	.get_ethtool_stats	= igb_get_ethtool_stats,
+ 	.get_coalesce		= igb_get_coalesce,
+ 	.set_coalesce		= igb_set_coalesce,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
+ 	.get_ts_info		= igb_get_ts_info,
++#endif
+ 	.get_rxnfc		= igb_get_rxnfc,
+ 	.set_rxnfc		= igb_set_rxnfc,
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)
+ 	.get_eee		= igb_get_eee,
+ 	.set_eee		= igb_set_eee,
+ #endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
+ 	.get_module_info	= igb_get_module_info,
+ 	.get_module_eeprom	= igb_get_module_eeprom,
++#endif
+ 	.get_rxfh_indir_size	= igb_get_rxfh_indir_size,
+ 	.get_rxfh_indir		= igb_get_rxfh_indir,
+ 	.set_rxfh_indir		= igb_set_rxfh_indir,
-- 
1.8.4.2


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v3 08/11] backports: igb fixes for linux-3.3
  2014-01-08 10:44 [PATCH v3 00/11] backports: add igb driver Stefan Assmann
                   ` (6 preceding siblings ...)
  2014-01-08 10:44 ` [PATCH v3 07/11] backports: igb fixes for linux-3.4 Stefan Assmann
@ 2014-01-08 10:44 ` Stefan Assmann
  2014-01-08 10:44 ` [PATCH v3 09/11] backports: igb fixes for linux-3.2 Stefan Assmann
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: Stefan Assmann @ 2014-01-08 10:44 UTC (permalink / raw)
  To: mcgrof; +Cc: backports, hauke, sassmann

- add IFF_SUPP_NOFCS define
- add patches/collateral-evolutions/network/82-ethernet/0008-igb_no_fcs.patch

Is there a better way to handle struct sk_buff changes?

Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
---
 backport/backport-include/linux/if.h                     |  4 ++++
 .../network/82-ethernet/0008-igb_no_fcs.patch            | 16 ++++++++++++++++
 2 files changed, 20 insertions(+)
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0008-igb_no_fcs.patch

diff --git a/backport/backport-include/linux/if.h b/backport/backport-include/linux/if.h
index 8f85b83..f23d2b8 100644
--- a/backport/backport-include/linux/if.h
+++ b/backport/backport-include/linux/if.h
@@ -33,4 +33,8 @@
 #define IFF_LIVE_ADDR_CHANGE 0x100000
 #endif
 
+#ifndef IFF_SUPP_NOFCS
+#define IFF_SUPP_NOFCS	0x80000		/* device supports sending custom FCS */
+#endif
+
 #endif	/* _BACKPORT_LINUX_IF_H */
diff --git a/patches/collateral-evolutions/network/82-ethernet/0008-igb_no_fcs.patch b/patches/collateral-evolutions/network/82-ethernet/0008-igb_no_fcs.patch
new file mode 100644
index 0000000..f196f2d
--- /dev/null
+++ b/patches/collateral-evolutions/network/82-ethernet/0008-igb_no_fcs.patch
@@ -0,0 +1,16 @@
+diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
+index fd6a103..a919cfa 100644
+--- a/drivers/net/ethernet/intel/igb/igb_main.c
++++ b/drivers/net/ethernet/intel/igb/igb_main.c
+@@ -4480,9 +4480,10 @@ static u32 igb_tx_cmd_type(struct sk_buff *skb, u32 tx_flags)
+ 	cmd_type |= IGB_SET_FLAG(tx_flags, IGB_TX_FLAGS_TSTAMP,
+ 				 (E1000_ADVTXD_MAC_TSTAMP));
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0)
+ 	/* insert frame checksum */
+ 	cmd_type ^= IGB_SET_FLAG(skb->no_fcs, 1, E1000_ADVTXD_DCMD_IFCS);
+-
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,4,0) */
+ 	return cmd_type;
+ }
+ 
-- 
1.8.4.2


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v3 09/11] backports: igb fixes for linux-3.2
  2014-01-08 10:44 [PATCH v3 00/11] backports: add igb driver Stefan Assmann
                   ` (7 preceding siblings ...)
  2014-01-08 10:44 ` [PATCH v3 08/11] backports: igb fixes for linux-3.3 Stefan Assmann
@ 2014-01-08 10:44 ` Stefan Assmann
  2014-01-08 10:44 ` [PATCH v3 10/11] backports: igb fixes for linux-3.1 Stefan Assmann
  2014-01-08 10:44 ` [PATCH v3 11/11] backports: enable igb and add defconfig Stefan Assmann
  10 siblings, 0 replies; 16+ messages in thread
From: Stefan Assmann @ 2014-01-08 10:44 UTC (permalink / raw)
  To: mcgrof; +Cc: backports, hauke, sassmann

- add patches/collateral-evolutions/network/82-ethernet/0009-igb_vlan_rx_vid.patch
- add patches/collateral-evolutions/network/82-ethernet/0010-igb_ethtool_ops.patch

Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
---
 .../network/82-ethernet/0009-igb_vlan_rx_vid.patch | 64 ++++++++++++++++++++++
 .../network/82-ethernet/0010-igb_ethtool_ops.patch | 48 ++++++++++++++++
 2 files changed, 112 insertions(+)
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0009-igb_vlan_rx_vid.patch
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0010-igb_ethtool_ops.patch

diff --git a/patches/collateral-evolutions/network/82-ethernet/0009-igb_vlan_rx_vid.patch b/patches/collateral-evolutions/network/82-ethernet/0009-igb_vlan_rx_vid.patch
new file mode 100644
index 0000000..44ea22e
--- /dev/null
+++ b/patches/collateral-evolutions/network/82-ethernet/0009-igb_vlan_rx_vid.patch
@@ -0,0 +1,64 @@
+diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
+index 37e6062..6bf0a88 100644
+--- a/drivers/net/ethernet/intel/igb/igb_main.c
++++ b/drivers/net/ethernet/intel/igb/igb_main.c
+@@ -164,10 +164,13 @@ static void igb_vlan_mode(struct net_device *netdev, netdev_features_t features)
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
+ static int igb_vlan_rx_add_vid(struct net_device *, __be16, u16);
+ static int igb_vlan_rx_kill_vid(struct net_device *, __be16, u16);
+-#else
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)
+ static int igb_vlan_rx_add_vid(struct net_device *, u16);
+ static int igb_vlan_rx_kill_vid(struct net_device *, u16);
+-#endif
++#else
++static void igb_vlan_rx_add_vid(struct net_device *, u16);
++static void igb_vlan_rx_kill_vid(struct net_device *, u16);
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) */
+ static void igb_restore_vlan(struct igb_adapter *);
+ static void igb_rar_set_qsel(struct igb_adapter *, u8 *, u32 , u8);
+ static void igb_ping_all_vfs(struct igb_adapter *);
+@@ -6974,8 +6977,10 @@ static void igb_vlan_mode(struct net_device *netdev, netdev_features_t features)
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
+ static int igb_vlan_rx_add_vid(struct net_device *netdev,
+ 			       __be16 proto, u16 vid)
+-#else
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)
+ static int igb_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
++#else
++static void igb_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
+ #endif
+ {
+ 	struct igb_adapter *adapter = netdev_priv(netdev);
+@@ -6990,15 +6995,19 @@ static int igb_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
+ 
+ 	set_bit(vid, adapter->active_vlans);
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)
+ 	return 0;
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0) */
+ }
+ 
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
+ static int igb_vlan_rx_kill_vid(struct net_device *netdev,
+ 				__be16 proto, u16 vid)
+-#else
++#elif LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)
+ static int igb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
+-#endif
++#else
++static void igb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0) */
+ {
+ 	struct igb_adapter *adapter = netdev_priv(netdev);
+ 	struct e1000_hw *hw = &adapter->hw;
+@@ -7014,7 +7023,9 @@ static int igb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
+ 
+ 	clear_bit(vid, adapter->active_vlans);
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)
+ 	return 0;
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0) */
+ }
+ 
+ static void igb_restore_vlan(struct igb_adapter *adapter)
diff --git a/patches/collateral-evolutions/network/82-ethernet/0010-igb_ethtool_ops.patch b/patches/collateral-evolutions/network/82-ethernet/0010-igb_ethtool_ops.patch
new file mode 100644
index 0000000..9035d92
--- /dev/null
+++ b/patches/collateral-evolutions/network/82-ethernet/0010-igb_ethtool_ops.patch
@@ -0,0 +1,48 @@
+diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
+index 3cf9600..5e519ce 100644
+--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
++++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
+@@ -2812,6 +2812,7 @@ static void igb_ethtool_complete(struct net_device *netdev)
+ 	pm_runtime_put(&adapter->pdev->dev);
+ }
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)
+ static u32 igb_get_rxfh_indir_size(struct net_device *netdev)
+ {
+ 	return IGB_RETA_SIZE;
+@@ -2827,6 +2828,7 @@ static int igb_get_rxfh_indir(struct net_device *netdev, u32 *indir)
+ 
+ 	return 0;
+ }
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0) */
+ 
+ void igb_write_rss_indir_tbl(struct igb_adapter *adapter)
+ {
+@@ -2863,6 +2865,7 @@ void igb_write_rss_indir_tbl(struct igb_adapter *adapter)
+ 	}
+ }
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)
+ static int igb_set_rxfh_indir(struct net_device *netdev, const u32 *indir)
+ {
+ 	struct igb_adapter *adapter = netdev_priv(netdev);
+@@ -2895,6 +2898,7 @@ static int igb_set_rxfh_indir(struct net_device *netdev, const u32 *indir)
+ 
+ 	return 0;
+ }
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0) */
+ 
+ static unsigned int igb_max_channels(struct igb_adapter *adapter)
+ {
+@@ -3017,9 +3021,11 @@ static const struct ethtool_ops igb_ethtool_ops = {
+ 	.get_module_info	= igb_get_module_info,
+ 	.get_module_eeprom	= igb_get_module_eeprom,
+ #endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0)
+ 	.get_rxfh_indir_size	= igb_get_rxfh_indir_size,
+ 	.get_rxfh_indir		= igb_get_rxfh_indir,
+ 	.set_rxfh_indir		= igb_set_rxfh_indir,
++#endif
+ 	.get_channels		= igb_get_channels,
+ 	.set_channels		= igb_set_channels,
+ 	.begin			= igb_ethtool_begin,
-- 
1.8.4.2


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v3 10/11] backports: igb fixes for linux-3.1
  2014-01-08 10:44 [PATCH v3 00/11] backports: add igb driver Stefan Assmann
                   ` (8 preceding siblings ...)
  2014-01-08 10:44 ` [PATCH v3 09/11] backports: igb fixes for linux-3.2 Stefan Assmann
@ 2014-01-08 10:44 ` Stefan Assmann
  2014-01-08 10:44 ` [PATCH v3 11/11] backports: enable igb and add defconfig Stefan Assmann
  10 siblings, 0 replies; 16+ messages in thread
From: Stefan Assmann @ 2014-01-08 10:44 UTC (permalink / raw)
  To: mcgrof; +Cc: backports, hauke, sassmann

- add IFF_UNICAST_FLT define
- add PCI_DEV_FLAGS_ASSIGNED define
- add skb_frag_size_sub()
- add skb_frag_address()
- add patches/collateral-evolutions/network/82-ethernet/0011-igb_ethtool_ops.patch
- add patches/collateral-evolutions/network/82-ethernet/0012-igb_ndo_set_vf_spoofchk.patch

Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
---
 backport/backport-include/linux/if.h               |  4 ++
 backport/backport-include/linux/pci.h              |  8 ++++
 backport/backport-include/linux/skbuff.h           | 19 ++++++++
 .../network/82-ethernet/0011-igb_ethtool_ops.patch | 31 +++++++++++++
 .../82-ethernet/0012-igb_ndo_set_vf_spoofchk.patch | 51 ++++++++++++++++++++++
 5 files changed, 113 insertions(+)
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0011-igb_ethtool_ops.patch
 create mode 100644 patches/collateral-evolutions/network/82-ethernet/0012-igb_ndo_set_vf_spoofchk.patch

diff --git a/backport/backport-include/linux/if.h b/backport/backport-include/linux/if.h
index f23d2b8..a072579 100644
--- a/backport/backport-include/linux/if.h
+++ b/backport/backport-include/linux/if.h
@@ -37,4 +37,8 @@
 #define IFF_SUPP_NOFCS	0x80000		/* device supports sending custom FCS */
 #endif
 
+#ifndef IFF_UNICAST_FLT
+#define IFF_UNICAST_FLT	0x20000		/* Supports unicast filtering	*/
+#endif
+
 #endif	/* _BACKPORT_LINUX_IF_H */
diff --git a/backport/backport-include/linux/pci.h b/backport/backport-include/linux/pci.h
index 65a76a1..2c98a99 100644
--- a/backport/backport-include/linux/pci.h
+++ b/backport/backport-include/linux/pci.h
@@ -178,6 +178,14 @@ bool pci_pme_capable(struct pci_dev *dev, pci_power_t state);
 	.subvendor = (subvend), .subdevice = (subdev)
 #endif /* PCI_DEVICE_SUB */
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0)
+enum backport_pci_dev_flags {
+	/* Provide indication device is assigned by a Virtual Machine Manager */
+	PCI_DEV_FLAGS_ASSIGNED = (__force pci_dev_flags_t) 4,
+};
+#define pci_dev_flags LINUX_BACKPORT(pci_dev_flags);
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0) */
+
 #if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)
 int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs);
 #endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0) */
diff --git a/backport/backport-include/linux/skbuff.h b/backport/backport-include/linux/skbuff.h
index c1b2753..2207e7e 100644
--- a/backport/backport-include/linux/skbuff.h
+++ b/backport/backport-include/linux/skbuff.h
@@ -224,6 +224,25 @@ static inline void skb_queue_splice_tail(const struct sk_buff_head *list,
 		     skb = skb->next)
 #endif /* < 2.6.28 */
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0)
+static inline void skb_frag_size_sub(skb_frag_t *frag, int delta)
+{
+	frag->size -= delta;
+}
+
+/**
+ * skb_frag_address - gets the address of the data contained in a paged fragment
+ * @frag: the paged fragment buffer
+ *
+ * Returns the address of the data within @frag. The page must already
+ * be mapped.
+ */
+static inline void *skb_frag_address(const skb_frag_t *frag)
+{
+	return page_address(skb_frag_page(frag)) + frag->page_offset;
+}
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,2,0) */
+
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,0,0) && LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)
 /**
  *	__skb_alloc_pages - allocate pages for ps-rx on a skb and preserve pfmemalloc data
diff --git a/patches/collateral-evolutions/network/82-ethernet/0011-igb_ethtool_ops.patch b/patches/collateral-evolutions/network/82-ethernet/0011-igb_ethtool_ops.patch
new file mode 100644
index 0000000..de1d07c
--- /dev/null
+++ b/patches/collateral-evolutions/network/82-ethernet/0011-igb_ethtool_ops.patch
@@ -0,0 +1,31 @@
+diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
+index 5e519ce..9f61f1d 100644
+--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
++++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
+@@ -2408,6 +2408,7 @@ static int igb_get_ts_info(struct net_device *dev,
+ }
+ #endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0) */
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)
+ static int igb_get_rss_hash_opts(struct igb_adapter *adapter,
+ 				 struct ethtool_rxnfc *cmd)
+ {
+@@ -2586,6 +2587,7 @@ static int igb_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
+ 
+ 	return ret;
+ }
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0) */
+ 
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)
+ static int igb_get_eee(struct net_device *netdev, struct ethtool_eee *edata)
+@@ -3011,8 +3013,10 @@ static const struct ethtool_ops igb_ethtool_ops = {
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,5,0)
+ 	.get_ts_info		= igb_get_ts_info,
+ #endif
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)
+ 	.get_rxnfc		= igb_get_rxnfc,
+ 	.set_rxnfc		= igb_set_rxnfc,
++#endif
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)
+ 	.get_eee		= igb_get_eee,
+ 	.set_eee		= igb_set_eee,
diff --git a/patches/collateral-evolutions/network/82-ethernet/0012-igb_ndo_set_vf_spoofchk.patch b/patches/collateral-evolutions/network/82-ethernet/0012-igb_ndo_set_vf_spoofchk.patch
new file mode 100644
index 0000000..c6a6bc3
--- /dev/null
+++ b/patches/collateral-evolutions/network/82-ethernet/0012-igb_ndo_set_vf_spoofchk.patch
@@ -0,0 +1,51 @@
+diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
+index 35ac7d8..e609f71 100644
+--- a/drivers/net/ethernet/intel/igb/igb_main.c
++++ b/drivers/net/ethernet/intel/igb/igb_main.c
+@@ -182,8 +182,10 @@ static int igb_ndo_set_vf_mac(struct net_device *netdev, int vf, u8 *mac);
+ static int igb_ndo_set_vf_vlan(struct net_device *netdev,
+ 			       int vf, u16 vlan, u8 qos);
+ static int igb_ndo_set_vf_bw(struct net_device *netdev, int vf, int tx_rate);
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)
+ static int igb_ndo_set_vf_spoofchk(struct net_device *netdev, int vf,
+ 				   bool setting);
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0) */
+ static int igb_ndo_get_vf_config(struct net_device *netdev, int vf,
+ 				 struct ifla_vf_info *ivi);
+ static void igb_check_vf_rate_limit(struct igb_adapter *);
+@@ -1934,7 +1936,9 @@ static const struct net_device_ops igb_netdev_ops = {
+ 	.ndo_set_vf_mac		= igb_ndo_set_vf_mac,
+ 	.ndo_set_vf_vlan	= igb_ndo_set_vf_vlan,
+ 	.ndo_set_vf_tx_rate	= igb_ndo_set_vf_bw,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)
+ 	.ndo_set_vf_spoofchk	= igb_ndo_set_vf_spoofchk,
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0) */
+ 	.ndo_get_vf_config	= igb_ndo_get_vf_config,
+ #ifdef CONFIG_NET_POLL_CONTROLLER
+ 	.ndo_poll_controller	= igb_netpoll,
+@@ -7645,6 +7649,7 @@ static int igb_ndo_set_vf_bw(struct net_device *netdev, int vf, int tx_rate)
+ 	return 0;
+ }
+ 
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)
+ static int igb_ndo_set_vf_spoofchk(struct net_device *netdev, int vf,
+ 				   bool setting)
+ {
+@@ -7671,6 +7676,7 @@ static int igb_ndo_set_vf_spoofchk(struct net_device *netdev, int vf,
+ 	adapter->vf_data[vf].spoofchk_enabled = setting;
+ 	return E1000_SUCCESS;
+ }
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0) */
+ 
+ static int igb_ndo_get_vf_config(struct net_device *netdev,
+ 				 int vf, struct ifla_vf_info *ivi)
+@@ -7683,7 +7689,9 @@ static int igb_ndo_get_vf_config(struct net_device *netdev,
+ 	ivi->tx_rate = adapter->vf_data[vf].tx_rate;
+ 	ivi->vlan = adapter->vf_data[vf].pf_vlan;
+ 	ivi->qos = adapter->vf_data[vf].pf_qos;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0)
+ 	ivi->spoofchk = adapter->vf_data[vf].spoofchk_enabled;
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,2,0) */
+ 	return 0;
+ }
+ 
-- 
1.8.4.2


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [PATCH v3 11/11] backports: enable igb and add defconfig
  2014-01-08 10:44 [PATCH v3 00/11] backports: add igb driver Stefan Assmann
                   ` (9 preceding siblings ...)
  2014-01-08 10:44 ` [PATCH v3 10/11] backports: igb fixes for linux-3.1 Stefan Assmann
@ 2014-01-08 10:44 ` Stefan Assmann
  10 siblings, 0 replies; 16+ messages in thread
From: Stefan Assmann @ 2014-01-08 10:44 UTC (permalink / raw)
  To: mcgrof; +Cc: backports, hauke, sassmann

Add defconfig and necessary files to copy-list.

Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
---
 backport/defconfigs/igb | 2 ++
 copy-list               | 4 ++++
 2 files changed, 6 insertions(+)
 create mode 100644 backport/defconfigs/igb

diff --git a/backport/defconfigs/igb b/backport/defconfigs/igb
new file mode 100644
index 0000000..8045257
--- /dev/null
+++ b/backport/defconfigs/igb
@@ -0,0 +1,2 @@
+CPTCFG_NET_VENDOR_INTEL=y
+CPTCFG_IGB=m
diff --git a/copy-list b/copy-list
index 9444aff..2b2e177 100644
--- a/copy-list
+++ b/copy-list
@@ -100,6 +100,10 @@ drivers/net/ethernet/broadcom/Makefile
 drivers/net/ethernet/broadcom/b44.c
 drivers/net/ethernet/broadcom/b44.h
 
+drivers/net/ethernet/intel/Kconfig
+drivers/net/ethernet/intel/Makefile
+drivers/net/ethernet/intel/igb/
+
 # wwan drivers
 include/uapi/linux/usb/cdc.h
 include/uapi/linux/usb/cdc-wdm.h
-- 
1.8.4.2


^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [PATCH v3 01/11] backports: igb fixes for linux-3.12
  2014-01-08 10:44 ` [PATCH v3 01/11] backports: igb fixes for linux-3.12 Stefan Assmann
@ 2014-01-09 20:55   ` Hauke Mehrtens
  0 siblings, 0 replies; 16+ messages in thread
From: Hauke Mehrtens @ 2014-01-09 20:55 UTC (permalink / raw)
  To: Stefan Assmann, mcgrof; +Cc: backports

On 01/08/2014 11:44 AM, Stefan Assmann wrote:
> - refactor u64_stats_sync.h a bit
> - add u64_stats_init define
> 
> Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
> ---
>  backport/backport-include/linux/u64_stats_sync.h | 16 ++++++++++++++--
>  1 file changed, 14 insertions(+), 2 deletions(-)
> 
> diff --git a/backport/backport-include/linux/u64_stats_sync.h b/backport/backport-include/linux/u64_stats_sync.h
> index f15116c..ce6b778 100644
> --- a/backport/backport-include/linux/u64_stats_sync.h
> +++ b/backport/backport-include/linux/u64_stats_sync.h
> @@ -1,6 +1,17 @@
> -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
> +#ifndef __BACKPORT_LINUX_U64_STATS_SYNC_H
> +#define __BACKPORT_LINUX_U64_STATS_SYNC_H
> +
>  #include_next <linux/u64_stats_sync.h>
> +
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,13,0)
> +#if BITS_PER_LONG == 32 && defined(CONFIG_SMP)
> +# define u64_stats_init(syncp)	seqcount_init(syncp.seq)
>  #else
> +# define u64_stats_init(syncp)	do { } while (0)
> +#endif
> +#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,13,0) */
> +
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0)
>  #ifndef _LINUX_U64_STATS_SYNC_H
>  #define _LINUX_U64_STATS_SYNC_H

_LINUX_U64_STATS_SYNC_H could be removed now.

>  
> @@ -141,4 +152,5 @@ static inline bool u64_stats_fetch_retry_bh(const struct u64_stats_sync *syncp,
>  }
>  
>  #endif /* _LINUX_U64_STATS_SYNC_H */
> -#endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0)) */
> +#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,6,0) */
> +#endif /* __BACKPORT_LINUX_U64_STATS_SYNC_H */
> 


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v3 02/11] backports: igb fixes for linux-3.9
  2014-01-08 10:44 ` [PATCH v3 02/11] backports: igb fixes for linux-3.9 Stefan Assmann
@ 2014-01-09 21:01   ` Hauke Mehrtens
  0 siblings, 0 replies; 16+ messages in thread
From: Hauke Mehrtens @ 2014-01-09 21:01 UTC (permalink / raw)
  To: Stefan Assmann, mcgrof; +Cc: backports

On 01/08/2014 11:44 AM, Stefan Assmann wrote:
> - add struct pci_sriov
> - add pci_vfs_assigned()
> - add PCI_SRIOV defines
> - add patches/collateral-evolutions/network/82-ethernet/0001-igb_net_device_ops.patch
> 
> Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
> ---
>  backport/backport-include/linux/pci.h              | 33 +++++++++++++
>  backport/backport-include/linux/pci_regs.h         |  8 ++++
>  backport/compat/backport-3.10.c                    | 46 ++++++++++++++++++
>  .../82-ethernet/0001-igb_net_device_ops.patch      | 56 ++++++++++++++++++++++
>  4 files changed, 143 insertions(+)
>  create mode 100644 patches/collateral-evolutions/network/82-ethernet/0001-igb_net_device_ops.patch
> 
> diff --git a/backport/backport-include/linux/pci.h b/backport/backport-include/linux/pci.h
> index 3a1815a..9083255 100644
> --- a/backport/backport-include/linux/pci.h
> +++ b/backport/backport-include/linux/pci.h
> @@ -178,4 +178,37 @@ bool pci_pme_capable(struct pci_dev *dev, pci_power_t state);
>  	.subvendor = (subvend), .subdevice = (subdev)
>  #endif /* PCI_DEVICE_SUB */
>  
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
> +/* Taken from drivers/pci/pci.h */
> +struct pci_sriov {
> +	int pos;		/* capability position */
> +	int nres;		/* number of resources */
> +	u32 cap;		/* SR-IOV Capabilities */
> +	u16 ctrl;		/* SR-IOV Control */
> +	u16 total_VFs;		/* total VFs associated with the PF */
> +	u16 initial_VFs;	/* initial VFs associated with the PF */
> +	u16 num_VFs;		/* number of VFs available */
> +	u16 offset;		/* first VF Routing ID offset */
> +	u16 stride;		/* following VF stride */
> +	u32 pgsz;		/* page size for BAR alignment */
> +	u8 link;		/* Function Dependency Link */
> +	u16 driver_max_VFs;	/* max num VFs driver supports */
> +	struct pci_dev *dev;	/* lowest numbered PF */
> +	struct pci_dev *self;	/* this PF */
> +	struct mutex lock;	/* lock for VF bus */
> +	struct work_struct mtask; /* VF Migration task */
> +	u8 __iomem *mstate;	/* VF Migration State Array */
> +};
> +

Please add this here:
#define pci_vfs_assigned LINUX_BACKPORT(pci_vfs_assigned)

This renames the function in backport by adding a backport_ prefix. If a
distribution backports this function compat.ko would not load without
this prefix.

> +#ifdef CONFIG_PCI_IOV
> +int pci_vfs_assigned(struct pci_dev *dev);
> +#else
> +static inline int pci_vfs_assigned(struct pci_dev *dev)
> +{
> +	return 0;
> +}
> +#endif
> +
> +#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) */
> +
>  #endif /* _BACKPORT_LINUX_PCI_H */
> diff --git a/backport/backport-include/linux/pci_regs.h b/backport/backport-include/linux/pci_regs.h
> index 5cfa742..b52c4a5 100644
> --- a/backport/backport-include/linux/pci_regs.h
> +++ b/backport/backport-include/linux/pci_regs.h
> @@ -125,4 +125,12 @@
>  #define PCI_PM_CAP_PME_SHIFT	11
>  #endif
>  
> +#ifndef PCI_SRIOV_VF_DID
> +#define PCI_SRIOV_VF_DID	0x1a	/* VF Device ID */
> +#endif
> +
> +#ifndef PCI_SRIOV_CTRL_VFE
> +#define PCI_SRIOV_CTRL_VFE	0x01	/* VF Enable */
> +#endif
> +
>  #endif /* __BACKPORT_UAPI_PCI_REGS_H */
> diff --git a/backport/compat/backport-3.10.c b/backport/compat/backport-3.10.c
> index 07a8dac..a9f74ed 100644
> --- a/backport/compat/backport-3.10.c
> +++ b/backport/compat/backport-3.10.c
> @@ -14,6 +14,8 @@
>  #include <linux/proc_fs.h>
>  #include <linux/random.h>
>  #include <linux/tty.h>
> +#include <linux/pci.h>
> +#include <linux/pci_regs.h>
>  
>  #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,6,0))
>  #include <linux/init.h>
> @@ -128,4 +130,48 @@ void tty_port_tty_hangup(struct tty_port *port, bool check_clocal)
>  }
>  EXPORT_SYMBOL_GPL(tty_port_tty_hangup);
>  #endif /* CONFIG_TTY */
> +
> +#ifdef CONFIG_PCI_IOV
> +/*
> + * pci_vfs_assigned - returns number of VFs are assigned to a guest
> + * @dev: the PCI device
> + *
> + * Returns number of VFs belonging to this device that are assigned to a guest.
> + * If device is not a physical function returns -ENODEV.
> + */
> +int pci_vfs_assigned(struct pci_dev *dev)
> +{
> +	struct pci_dev *vfdev;
> +	unsigned int vfs_assigned = 0;
> +	unsigned short dev_id;
> +
> +	/* only search if we are a PF */
> +	if (!dev->is_physfn)
> +		return 0;
> +
> +	/*
> +	 * determine the device ID for the VFs, the vendor ID will be the
> +	 * same as the PF so there is no need to check for that one
> +	 */
> +	pci_read_config_word(dev, dev->sriov->pos + PCI_SRIOV_VF_DID, &dev_id);
> +
> +	/* loop through all the VFs to see if we own any that are assigned */
> +	vfdev = pci_get_device(dev->vendor, dev_id, NULL);
> +	while (vfdev) {
> +		/*
> +		 * It is considered assigned if it is a virtual function with
> +		 * our dev as the physical function and the assigned bit is set
> +		 */
> +		if (vfdev->is_virtfn && (vfdev->physfn == dev) &&
> +		    (vfdev->dev_flags & PCI_DEV_FLAGS_ASSIGNED))
> +			vfs_assigned++;
> +
> +		vfdev = pci_get_device(dev->vendor, dev_id, vfdev);
> +	}
> +
> +	return vfs_assigned;
> +}
> +EXPORT_SYMBOL_GPL(pci_vfs_assigned);
> +#endif /* CONFIG_PCI_IOV */
> +
>  #endif /* (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,28)) */
> diff --git a/patches/collateral-evolutions/network/82-ethernet/0001-igb_net_device_ops.patch b/patches/collateral-evolutions/network/82-ethernet/0001-igb_net_device_ops.patch
> new file mode 100644
> index 0000000..981b89e
> --- /dev/null
> +++ b/patches/collateral-evolutions/network/82-ethernet/0001-igb_net_device_ops.patch
> @@ -0,0 +1,56 @@
> +diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
> +index 14ad4c7..f2a5abf 100644
> +--- a/drivers/net/ethernet/intel/igb/igb_main.c
> ++++ b/drivers/net/ethernet/intel/igb/igb_main.c
> +@@ -161,8 +161,13 @@ static int igb_ioctl(struct net_device *, struct ifreq *, int cmd);
> + static void igb_tx_timeout(struct net_device *);
> + static void igb_reset_task(struct work_struct *);
> + static void igb_vlan_mode(struct net_device *netdev, netdev_features_t features);
> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> + static int igb_vlan_rx_add_vid(struct net_device *, __be16, u16);
> + static int igb_vlan_rx_kill_vid(struct net_device *, __be16, u16);
> ++#else
> ++static int igb_vlan_rx_add_vid(struct net_device *, u16);
> ++static int igb_vlan_rx_kill_vid(struct net_device *, u16);
> ++#endif
> + static void igb_restore_vlan(struct igb_adapter *);
> + static void igb_rar_set_qsel(struct igb_adapter *, u8 *, u32 , u8);
> + static void igb_ping_all_vfs(struct igb_adapter *);
> +@@ -6959,8 +6964,12 @@ static void igb_vlan_mode(struct net_device *netdev, netdev_features_t features)
> + 	igb_rlpml_set(adapter);
> + }
> + 
> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> + static int igb_vlan_rx_add_vid(struct net_device *netdev,
> + 			       __be16 proto, u16 vid)
> ++#else
> ++static int igb_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
> ++#endif
> + {
> + 	struct igb_adapter *adapter = netdev_priv(netdev);
> + 	struct e1000_hw *hw = &adapter->hw;
> +@@ -6977,8 +6986,12 @@ static int igb_vlan_rx_add_vid(struct net_device *netdev,
> + 	return 0;
> + }
> + 
> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> + static int igb_vlan_rx_kill_vid(struct net_device *netdev,
> + 				__be16 proto, u16 vid)
> ++#else
> ++static int igb_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
> ++#endif
> + {
> + 	struct igb_adapter *adapter = netdev_priv(netdev);
> + 	struct e1000_hw *hw = &adapter->hw;
> +@@ -7004,7 +7017,11 @@ static void igb_restore_vlan(struct igb_adapter *adapter)
> + 	igb_vlan_mode(adapter->netdev, adapter->netdev->features);
> + 
> + 	for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID)
> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0)
> + 		igb_vlan_rx_add_vid(adapter->netdev, htons(ETH_P_8021Q), vid);
> ++#else
> ++		igb_vlan_rx_add_vid(adapter->netdev, vid);
> ++#endif
> + }
> + 
> + int igb_set_spd_dplx(struct igb_adapter *adapter, u32 spd, u8 dplx)
> 


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v3 04/11] backports: igb fixes for linux-3.7
  2014-01-08 10:44 ` [PATCH v3 04/11] backports: igb fixes for linux-3.7 Stefan Assmann
@ 2014-01-09 21:13   ` Hauke Mehrtens
  2014-01-13  7:40     ` Stefan Assmann
  0 siblings, 1 reply; 16+ messages in thread
From: Hauke Mehrtens @ 2014-01-09 21:13 UTC (permalink / raw)
  To: Stefan Assmann, mcgrof; +Cc: backports

On 01/08/2014 11:44 AM, Stefan Assmann wrote:
> - add pci_sriov_set_totalvfs()
> - add patches/collateral-evolutions/network/82-ethernet/0002-igb_pci_sriov_configure.patch
> 
> Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
> ---
>  backport/backport-include/linux/pci.h              |  5 +-
>  backport/compat/compat-3.8.c                       | 34 +++++++++++++
>  .../82-ethernet/0002-igb_pci_sriov_configure.patch | 57 ++++++++++++++++++++++
>  3 files changed, 95 insertions(+), 1 deletion(-)
>  create mode 100644 patches/collateral-evolutions/network/82-ethernet/0002-igb_pci_sriov_configure.patch
> 
> diff --git a/backport/backport-include/linux/pci.h b/backport/backport-include/linux/pci.h
> index 9083255..65a76a1 100644
> --- a/backport/backport-include/linux/pci.h
> +++ b/backport/backport-include/linux/pci.h
> @@ -178,6 +178,10 @@ bool pci_pme_capable(struct pci_dev *dev, pci_power_t state);
>  	.subvendor = (subvend), .subdevice = (subdev)
>  #endif /* PCI_DEVICE_SUB */
>  
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)

Please add this here:
#define pci_sriov_set_totalvfs LINUX_BACKPORT(pci_sriov_set_totalvfs)

> +int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs);
> +#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0) */
> +
>  #if LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0)
>  /* Taken from drivers/pci/pci.h */
>  struct pci_sriov {
> @@ -210,5 +214,4 @@ static inline int pci_vfs_assigned(struct pci_dev *dev)
>  #endif
>  
>  #endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3,10,0) */
> -
>  #endif /* _BACKPORT_LINUX_PCI_H */
> diff --git a/backport/compat/compat-3.8.c b/backport/compat/compat-3.8.c
> index c6824bf..9d96b36 100644
> --- a/backport/compat/compat-3.8.c
> +++ b/backport/compat/compat-3.8.c
> @@ -18,6 +18,8 @@
>  #include <linux/netdevice.h>
>  #include <linux/random.h>
>  #include <linux/of.h>
> +#include <linux/pci.h>
> +#include <linux/pci_regs.h>
>  
>  #if (LINUX_VERSION_CODE < KERNEL_VERSION(3,7,8))
>  void netdev_set_default_ethtool_ops(struct net_device *dev,
> @@ -514,3 +516,35 @@ int of_property_read_u8_array(const struct device_node *np,
>  }
>  EXPORT_SYMBOL_GPL(of_property_read_u8_array);
>  #endif /* CONFIG_OF */
> +
> +#ifdef CONFIG_PCI_IOV
> +/**
> + * pci_sriov_set_totalvfs -- reduce the TotalVFs available
> + * @dev: the PCI PF device
> + * @numvfs: number that should be used for TotalVFs supported
> + *
> + * Should be called from PF driver's probe routine with
> + * device's mutex held.
> + *
> + * Returns 0 if PF is an SRIOV-capable device and
> + * value of numvfs valid. If not a PF return -ENOSYS;
> + * if numvfs is invalid return -EINVAL;
> + * if VFs already enabled, return -EBUSY.
> + */
> +int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs)
> +{
> +	if (!dev->is_physfn)
> +		return -ENOSYS;
> +	if (numvfs > dev->sriov->total_VFs)
> +		return -EINVAL;
> +
> +	/* Shouldn't change if VFs already enabled */
> +	if (dev->sriov->ctrl & PCI_SRIOV_CTRL_VFE)
> +		return -EBUSY;
> +	else
> +		dev->sriov->driver_max_VFs = numvfs;
> +
> +	return 0;
> +}
> +EXPORT_SYMBOL_GPL(pci_sriov_set_totalvfs);
> +#endif /* CONFIG_PCI_IOV */
> diff --git a/patches/collateral-evolutions/network/82-ethernet/0002-igb_pci_sriov_configure.patch b/patches/collateral-evolutions/network/82-ethernet/0002-igb_pci_sriov_configure.patch
> new file mode 100644
> index 0000000..47722cc
> --- /dev/null
> +++ b/patches/collateral-evolutions/network/82-ethernet/0002-igb_pci_sriov_configure.patch
> @@ -0,0 +1,57 @@
> +diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
> +index f2a5abf..dd878b6 100644
> +--- a/drivers/net/ethernet/intel/igb/igb_main.c
> ++++ b/drivers/net/ethernet/intel/igb/igb_main.c
> +@@ -207,7 +207,9 @@ static const struct dev_pm_ops igb_pm_ops = {
> + };
> + #endif
> + static void igb_shutdown(struct pci_dev *);
> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)
> + static int igb_pci_sriov_configure(struct pci_dev *dev, int num_vfs);
> ++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0) */
> + #ifdef CONFIG_IGB_DCA
> + static int igb_notify_dca(struct notifier_block *, unsigned long, void *);
> + static struct notifier_block dca_notifier = {
> +@@ -249,7 +251,9 @@ static struct pci_driver igb_driver = {
> + 	.driver.pm = &igb_pm_ops,
> + #endif
> + 	.shutdown = igb_shutdown,
> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)
> + 	.sriov_configure = igb_pci_sriov_configure,
> ++#endif
> + 	.err_handler = &igb_err_handler
> + };
> + 
> +@@ -7310,6 +7314,7 @@ static int igb_sriov_reinit(struct pci_dev *dev)
> + 	return 0;
> + }
> + 
> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)
> + static int igb_pci_disable_sriov(struct pci_dev *dev)
> + {
> + 	int err = igb_disable_sriov(dev);
> +@@ -7319,6 +7324,7 @@ static int igb_pci_disable_sriov(struct pci_dev *dev)
> + 
> + 	return err;
> + }
> ++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0) */
> + 
> + static int igb_pci_enable_sriov(struct pci_dev *dev, int num_vfs)
> + {
> +@@ -7336,6 +7342,8 @@ out:
> + }
> + 
> + #endif
> ++
> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0)
> + static int igb_pci_sriov_configure(struct pci_dev *dev, int num_vfs)
> + {
> + #ifdef CONFIG_PCI_IOV
> +@@ -7346,6 +7354,7 @@ static int igb_pci_sriov_configure(struct pci_dev *dev, int num_vfs)
> + #endif
> + 	return 0;
> + }
> ++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,8,0) */
> + 
> + #ifdef CONFIG_NET_POLL_CONTROLLER
> + /* Polling 'interrupt' - used by things like netconsole to send skbs
> 


^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [PATCH v3 04/11] backports: igb fixes for linux-3.7
  2014-01-09 21:13   ` Hauke Mehrtens
@ 2014-01-13  7:40     ` Stefan Assmann
  0 siblings, 0 replies; 16+ messages in thread
From: Stefan Assmann @ 2014-01-13  7:40 UTC (permalink / raw)
  To: Hauke Mehrtens, mcgrof; +Cc: backports

On 09.01.2014 22:13, Hauke Mehrtens wrote:
> On 01/08/2014 11:44 AM, Stefan Assmann wrote:
>> - add pci_sriov_set_totalvfs()
>> - add patches/collateral-evolutions/network/82-ethernet/0002-igb_pci_sriov_configure.patch
>>
>> Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
>> ---
>>  backport/backport-include/linux/pci.h              |  5 +-
>>  backport/compat/compat-3.8.c                       | 34 +++++++++++++
>>  .../82-ethernet/0002-igb_pci_sriov_configure.patch | 57 ++++++++++++++++++++++
>>  3 files changed, 95 insertions(+), 1 deletion(-)
>>  create mode 100644 patches/collateral-evolutions/network/82-ethernet/0002-igb_pci_sriov_configure.patch
>>
>> diff --git a/backport/backport-include/linux/pci.h b/backport/backport-include/linux/pci.h
>> index 9083255..65a76a1 100644
>> --- a/backport/backport-include/linux/pci.h
>> +++ b/backport/backport-include/linux/pci.h
>> @@ -178,6 +178,10 @@ bool pci_pme_capable(struct pci_dev *dev, pci_power_t state);
>>  	.subvendor = (subvend), .subdevice = (subdev)
>>  #endif /* PCI_DEVICE_SUB */
>>  
>> +#if LINUX_VERSION_CODE < KERNEL_VERSION(3,8,0)
> 
> Please add this here:
> #define pci_sriov_set_totalvfs LINUX_BACKPORT(pci_sriov_set_totalvfs)

Hi Hauke,

thanks for the comments. Any chance for you to apply the series and I'll
post follow up patch to fix up the remaining small issues. Rebasing the
patches is time consuming, especially since the latest cocci changes.

  Stefan

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2014-01-13  7:46 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-01-08 10:44 [PATCH v3 00/11] backports: add igb driver Stefan Assmann
2014-01-08 10:44 ` [PATCH v3 01/11] backports: igb fixes for linux-3.12 Stefan Assmann
2014-01-09 20:55   ` Hauke Mehrtens
2014-01-08 10:44 ` [PATCH v3 02/11] backports: igb fixes for linux-3.9 Stefan Assmann
2014-01-09 21:01   ` Hauke Mehrtens
2014-01-08 10:44 ` [PATCH v3 03/11] backports: igb fixes for linux-3.8 Stefan Assmann
2014-01-08 10:44 ` [PATCH v3 04/11] backports: igb fixes for linux-3.7 Stefan Assmann
2014-01-09 21:13   ` Hauke Mehrtens
2014-01-13  7:40     ` Stefan Assmann
2014-01-08 10:44 ` [PATCH v3 05/11] backports: igb fixes for linux-3.6 Stefan Assmann
2014-01-08 10:44 ` [PATCH v3 06/11] backports: igb fixes for linux-3.5 Stefan Assmann
2014-01-08 10:44 ` [PATCH v3 07/11] backports: igb fixes for linux-3.4 Stefan Assmann
2014-01-08 10:44 ` [PATCH v3 08/11] backports: igb fixes for linux-3.3 Stefan Assmann
2014-01-08 10:44 ` [PATCH v3 09/11] backports: igb fixes for linux-3.2 Stefan Assmann
2014-01-08 10:44 ` [PATCH v3 10/11] backports: igb fixes for linux-3.1 Stefan Assmann
2014-01-08 10:44 ` [PATCH v3 11/11] backports: enable igb and add defconfig Stefan Assmann

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.