* [PATCH v4 01/12] backports: igb fixes for linux-3.13
2014-01-29 9:18 [PATCH v4 00/12] backports: add igb driver Stefan Assmann
@ 2014-01-29 9:18 ` Stefan Assmann
2014-01-29 9:18 ` [PATCH v4 02/12] backports: igb fixes for linux-3.12 Stefan Assmann
` (11 subsequent siblings)
12 siblings, 0 replies; 15+ messages in thread
From: Stefan Assmann @ 2014-01-29 9:18 UTC (permalink / raw)
To: mcgrof; +Cc: backports, hauke, sassmann
- add patches/collateral-evolutions/network/84-ethernet/0013-igb_hwmon.patch
Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
---
.../network/84-ethernet/0013-igb_hwmon.patch | 30 ++++++++++++++++++++
1 files changed, 30 insertions(+), 0 deletions(-)
create mode 100644 patches/collateral-evolutions/network/84-ethernet/0013-igb_hwmon.patch
diff --git a/patches/collateral-evolutions/network/84-ethernet/0013-igb_hwmon.patch b/patches/collateral-evolutions/network/84-ethernet/0013-igb_hwmon.patch
new file mode 100644
index 0000000..b2db7c2
--- /dev/null
+++ b/patches/collateral-evolutions/network/84-ethernet/0013-igb_hwmon.patch
@@ -0,0 +1,30 @@
+diff --git a/drivers/net/ethernet/intel/igb/igb_hwmon.c b/drivers/net/ethernet/intel/igb/igb_hwmon.c
+index fdf2b82..99507de 100644
+--- a/drivers/net/ethernet/intel/igb/igb_hwmon.c
++++ b/drivers/net/ethernet/intel/igb/igb_hwmon.c
+@@ -177,7 +177,9 @@ int igb_sysfs_init(struct igb_adapter *adapter)
+ {
+ struct hwmon_buff *igb_hwmon;
+ struct i2c_client *client;
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0)
+ struct device *hwmon_dev;
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0) */
+ unsigned int i;
+ int rc = 0;
+
+@@ -234,6 +236,7 @@ int igb_sysfs_init(struct igb_adapter *adapter)
+ igb_hwmon->groups[0] = &igb_hwmon->group;
+ igb_hwmon->group.attrs = igb_hwmon->attrs;
+
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0)
+ hwmon_dev = devm_hwmon_device_register_with_groups(&adapter->pdev->dev,
+ client->name,
+ igb_hwmon,
+@@ -246,6 +249,7 @@ int igb_sysfs_init(struct igb_adapter *adapter)
+ goto exit;
+
+ err:
++#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(3,13,0) */
+ igb_sysfs_del_adapter(adapter);
+ exit:
+ return rc;
--
1.7.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v4 02/12] backports: igb fixes for linux-3.12
2014-01-29 9:18 [PATCH v4 00/12] backports: add igb driver Stefan Assmann
2014-01-29 9:18 ` [PATCH v4 01/12] backports: igb fixes for linux-3.13 Stefan Assmann
@ 2014-01-29 9:18 ` Stefan Assmann
2014-01-29 9:19 ` [PATCH v4 03/12] backports: igb fixes for linux-3.9 Stefan Assmann
` (10 subsequent siblings)
12 siblings, 0 replies; 15+ messages in thread
From: Stefan Assmann @ 2014-01-29 9:18 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 files 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.7.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v4 03/12] backports: igb fixes for linux-3.9
2014-01-29 9:18 [PATCH v4 00/12] backports: add igb driver Stefan Assmann
2014-01-29 9:18 ` [PATCH v4 01/12] backports: igb fixes for linux-3.13 Stefan Assmann
2014-01-29 9:18 ` [PATCH v4 02/12] backports: igb fixes for linux-3.12 Stefan Assmann
@ 2014-01-29 9:19 ` Stefan Assmann
2014-01-29 9:19 ` [PATCH v4 04/12] backports: igb fixes for linux-3.8 Stefan Assmann
` (9 subsequent siblings)
12 siblings, 0 replies; 15+ messages in thread
From: Stefan Assmann @ 2014-01-29 9:19 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/84-ethernet/0001-igb_net_device_ops.patch
Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
---
backport/backport-include/linux/pci.h | 34 ++++++++++++
backport/backport-include/linux/pci_regs.h | 8 +++
backport/compat/backport-3.10.c | 46 ++++++++++++++++
.../84-ethernet/0001-igb_net_device_ops.patch | 56 ++++++++++++++++++++
4 files changed, 144 insertions(+), 0 deletions(-)
create mode 100644 patches/collateral-evolutions/network/84-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..f36384e 100644
--- a/backport/backport-include/linux/pci.h
+++ b/backport/backport-include/linux/pci.h
@@ -178,4 +178,38 @@ 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 */
+};
+
+#define pci_vfs_assigned LINUX_BACKPORT(pci_vfs_assigned)
+#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/84-ethernet/0001-igb_net_device_ops.patch b/patches/collateral-evolutions/network/84-ethernet/0001-igb_net_device_ops.patch
new file mode 100644
index 0000000..981b89e
--- /dev/null
+++ b/patches/collateral-evolutions/network/84-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.7.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v4 04/12] backports: igb fixes for linux-3.8
2014-01-29 9:18 [PATCH v4 00/12] backports: add igb driver Stefan Assmann
` (2 preceding siblings ...)
2014-01-29 9:19 ` [PATCH v4 03/12] backports: igb fixes for linux-3.9 Stefan Assmann
@ 2014-01-29 9:19 ` Stefan Assmann
2014-01-29 9:19 ` [PATCH v4 05/12] backports: igb fixes for linux-3.7 Stefan Assmann
` (8 subsequent siblings)
12 siblings, 0 replies; 15+ messages in thread
From: Stefan Assmann @ 2014-01-29 9:19 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 files changed, 9 insertions(+), 0 deletions(-)
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.7.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v4 05/12] backports: igb fixes for linux-3.7
2014-01-29 9:18 [PATCH v4 00/12] backports: add igb driver Stefan Assmann
` (3 preceding siblings ...)
2014-01-29 9:19 ` [PATCH v4 04/12] backports: igb fixes for linux-3.8 Stefan Assmann
@ 2014-01-29 9:19 ` Stefan Assmann
2014-01-29 9:19 ` [PATCH v4 06/12] backports: igb fixes for linux-3.6 Stefan Assmann
` (7 subsequent siblings)
12 siblings, 0 replies; 15+ messages in thread
From: Stefan Assmann @ 2014-01-29 9:19 UTC (permalink / raw)
To: mcgrof; +Cc: backports, hauke, sassmann
- add pci_sriov_set_totalvfs()
- add patches/collateral-evolutions/network/84-ethernet/0002-igb_pci_sriov_configure.patch
Several ifdefs in igb_main.c to avoid compiler warnings.
Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
---
backport/backport-include/linux/pci.h | 6 ++-
backport/compat/compat-3.8.c | 34 ++++++++++++
.../84-ethernet/0002-igb_pci_sriov_configure.patch | 57 ++++++++++++++++++++
3 files changed, 96 insertions(+), 1 deletions(-)
create mode 100644 patches/collateral-evolutions/network/84-ethernet/0002-igb_pci_sriov_configure.patch
diff --git a/backport/backport-include/linux/pci.h b/backport/backport-include/linux/pci.h
index f36384e..5201f1b 100644
--- a/backport/backport-include/linux/pci.h
+++ b/backport/backport-include/linux/pci.h
@@ -178,6 +178,11 @@ 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)
+#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 {
@@ -211,5 +216,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 6741989..d39e8d6 100644
--- a/backport/compat/compat-3.8.c
+++ b/backport/compat/compat-3.8.c
@@ -19,6 +19,8 @@
#include <linux/random.h>
#include <linux/of.h>
#include <linux/mm.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,
@@ -515,3 +517,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/84-ethernet/0002-igb_pci_sriov_configure.patch b/patches/collateral-evolutions/network/84-ethernet/0002-igb_pci_sriov_configure.patch
new file mode 100644
index 0000000..47722cc
--- /dev/null
+++ b/patches/collateral-evolutions/network/84-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.7.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v4 06/12] backports: igb fixes for linux-3.6
2014-01-29 9:18 [PATCH v4 00/12] backports: add igb driver Stefan Assmann
` (4 preceding siblings ...)
2014-01-29 9:19 ` [PATCH v4 05/12] backports: igb fixes for linux-3.7 Stefan Assmann
@ 2014-01-29 9:19 ` Stefan Assmann
2014-01-29 9:19 ` [PATCH v4 07/12] backports: igb fixes for linux-3.5 Stefan Assmann
` (6 subsequent siblings)
12 siblings, 0 replies; 15+ messages in thread
From: Stefan Assmann @ 2014-01-29 9:19 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/84-ethernet/0004-igb_err_handler.patch
- add patches/collateral-evolutions/network/84-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/84-ethernet/0004-igb_err_handler.patch | 16 ++++++
.../network/84-ethernet/0005-igb_mdi.patch | 49 ++++++++++++++++++++
4 files changed, 109 insertions(+), 0 deletions(-)
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/84-ethernet/0004-igb_err_handler.patch
create mode 100644 patches/collateral-evolutions/network/84-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/84-ethernet/0004-igb_err_handler.patch b/patches/collateral-evolutions/network/84-ethernet/0004-igb_err_handler.patch
new file mode 100644
index 0000000..393e8b5
--- /dev/null
+++ b/patches/collateral-evolutions/network/84-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/84-ethernet/0005-igb_mdi.patch b/patches/collateral-evolutions/network/84-ethernet/0005-igb_mdi.patch
new file mode 100644
index 0000000..7b381c9
--- /dev/null
+++ b/patches/collateral-evolutions/network/84-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.7.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v4 07/12] backports: igb fixes for linux-3.5
2014-01-29 9:18 [PATCH v4 00/12] backports: add igb driver Stefan Assmann
` (5 preceding siblings ...)
2014-01-29 9:19 ` [PATCH v4 06/12] backports: igb fixes for linux-3.6 Stefan Assmann
@ 2014-01-29 9:19 ` Stefan Assmann
2014-01-29 9:19 ` [PATCH v4 08/12] backports: igb fixes for linux-3.4 Stefan Assmann
` (5 subsequent siblings)
12 siblings, 0 replies; 15+ messages in thread
From: Stefan Assmann @ 2014-01-29 9:19 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/84-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/84-ethernet/0006-igb_eee.patch | 31 +++++++++++++
5 files changed, 140 insertions(+), 1 deletions(-)
create mode 100644 backport/backport-include/linux/gfp.h
create mode 100644 patches/collateral-evolutions/network/84-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/84-ethernet/0006-igb_eee.patch b/patches/collateral-evolutions/network/84-ethernet/0006-igb_eee.patch
new file mode 100644
index 0000000..f9927bf
--- /dev/null
+++ b/patches/collateral-evolutions/network/84-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.7.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v4 08/12] backports: igb fixes for linux-3.4
2014-01-29 9:18 [PATCH v4 00/12] backports: add igb driver Stefan Assmann
` (6 preceding siblings ...)
2014-01-29 9:19 ` [PATCH v4 07/12] backports: igb fixes for linux-3.5 Stefan Assmann
@ 2014-01-29 9:19 ` Stefan Assmann
2014-01-29 9:19 ` [PATCH v4 09/12] backports: igb fixes for linux-3.3 Stefan Assmann
` (4 subsequent siblings)
12 siblings, 0 replies; 15+ messages in thread
From: Stefan Assmann @ 2014-01-29 9:19 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/84-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/84-ethernet/0007-igb_ethtool_ops.patch | 56 ++++++++++++++++++++
4 files changed, 144 insertions(+), 0 deletions(-)
create mode 100644 patches/collateral-evolutions/network/84-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/84-ethernet/0007-igb_ethtool_ops.patch b/patches/collateral-evolutions/network/84-ethernet/0007-igb_ethtool_ops.patch
new file mode 100644
index 0000000..a625187
--- /dev/null
+++ b/patches/collateral-evolutions/network/84-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.7.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v4 09/12] backports: igb fixes for linux-3.3
2014-01-29 9:18 [PATCH v4 00/12] backports: add igb driver Stefan Assmann
` (7 preceding siblings ...)
2014-01-29 9:19 ` [PATCH v4 08/12] backports: igb fixes for linux-3.4 Stefan Assmann
@ 2014-01-29 9:19 ` Stefan Assmann
2014-01-29 9:19 ` [PATCH v4 10/12] backports: igb fixes for linux-3.2 Stefan Assmann
` (3 subsequent siblings)
12 siblings, 0 replies; 15+ messages in thread
From: Stefan Assmann @ 2014-01-29 9:19 UTC (permalink / raw)
To: mcgrof; +Cc: backports, hauke, sassmann
- add IFF_SUPP_NOFCS define
- add patches/collateral-evolutions/network/84-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/84-ethernet/0008-igb_no_fcs.patch | 16 ++++++++++++++++
2 files changed, 20 insertions(+), 0 deletions(-)
create mode 100644 patches/collateral-evolutions/network/84-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/84-ethernet/0008-igb_no_fcs.patch b/patches/collateral-evolutions/network/84-ethernet/0008-igb_no_fcs.patch
new file mode 100644
index 0000000..f196f2d
--- /dev/null
+++ b/patches/collateral-evolutions/network/84-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.7.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v4 10/12] backports: igb fixes for linux-3.2
2014-01-29 9:18 [PATCH v4 00/12] backports: add igb driver Stefan Assmann
` (8 preceding siblings ...)
2014-01-29 9:19 ` [PATCH v4 09/12] backports: igb fixes for linux-3.3 Stefan Assmann
@ 2014-01-29 9:19 ` Stefan Assmann
2014-01-29 9:19 ` [PATCH v4 11/12] backports: igb fixes for linux-3.1 Stefan Assmann
` (2 subsequent siblings)
12 siblings, 0 replies; 15+ messages in thread
From: Stefan Assmann @ 2014-01-29 9:19 UTC (permalink / raw)
To: mcgrof; +Cc: backports, hauke, sassmann
- add patches/collateral-evolutions/network/84-ethernet/0009-igb_vlan_rx_vid.patch
- add patches/collateral-evolutions/network/84-ethernet/0010-igb_ethtool_ops.patch
Signed-off-by: Stefan Assmann <sassmann@kpanic.de>
---
.../network/84-ethernet/0009-igb_vlan_rx_vid.patch | 64 ++++++++++++++++++++
.../network/84-ethernet/0010-igb_ethtool_ops.patch | 48 +++++++++++++++
2 files changed, 112 insertions(+), 0 deletions(-)
create mode 100644 patches/collateral-evolutions/network/84-ethernet/0009-igb_vlan_rx_vid.patch
create mode 100644 patches/collateral-evolutions/network/84-ethernet/0010-igb_ethtool_ops.patch
diff --git a/patches/collateral-evolutions/network/84-ethernet/0009-igb_vlan_rx_vid.patch b/patches/collateral-evolutions/network/84-ethernet/0009-igb_vlan_rx_vid.patch
new file mode 100644
index 0000000..44ea22e
--- /dev/null
+++ b/patches/collateral-evolutions/network/84-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/84-ethernet/0010-igb_ethtool_ops.patch b/patches/collateral-evolutions/network/84-ethernet/0010-igb_ethtool_ops.patch
new file mode 100644
index 0000000..9035d92
--- /dev/null
+++ b/patches/collateral-evolutions/network/84-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.7.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v4 11/12] backports: igb fixes for linux-3.1
2014-01-29 9:18 [PATCH v4 00/12] backports: add igb driver Stefan Assmann
` (9 preceding siblings ...)
2014-01-29 9:19 ` [PATCH v4 10/12] backports: igb fixes for linux-3.2 Stefan Assmann
@ 2014-01-29 9:19 ` Stefan Assmann
2014-01-29 9:19 ` [PATCH v4 12/12] backports: enable igb and add defconfig Stefan Assmann
2014-01-31 23:51 ` [PATCH v4 00/12] backports: add igb driver Hauke Mehrtens
12 siblings, 0 replies; 15+ messages in thread
From: Stefan Assmann @ 2014-01-29 9:19 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/84-ethernet/0011-igb_ethtool_ops.patch
- add patches/collateral-evolutions/network/84-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/84-ethernet/0011-igb_ethtool_ops.patch | 31 ++++++++++++
.../84-ethernet/0012-igb_ndo_set_vf_spoofchk.patch | 51 ++++++++++++++++++++
5 files changed, 113 insertions(+), 0 deletions(-)
create mode 100644 patches/collateral-evolutions/network/84-ethernet/0011-igb_ethtool_ops.patch
create mode 100644 patches/collateral-evolutions/network/84-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 5201f1b..ae8dafd 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)
#define pci_sriov_set_totalvfs LINUX_BACKPORT(pci_sriov_set_totalvfs)
int pci_sriov_set_totalvfs(struct pci_dev *dev, u16 numvfs);
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/84-ethernet/0011-igb_ethtool_ops.patch b/patches/collateral-evolutions/network/84-ethernet/0011-igb_ethtool_ops.patch
new file mode 100644
index 0000000..de1d07c
--- /dev/null
+++ b/patches/collateral-evolutions/network/84-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/84-ethernet/0012-igb_ndo_set_vf_spoofchk.patch b/patches/collateral-evolutions/network/84-ethernet/0012-igb_ndo_set_vf_spoofchk.patch
new file mode 100644
index 0000000..c6a6bc3
--- /dev/null
+++ b/patches/collateral-evolutions/network/84-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.7.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* [PATCH v4 12/12] backports: enable igb and add defconfig
2014-01-29 9:18 [PATCH v4 00/12] backports: add igb driver Stefan Assmann
` (10 preceding siblings ...)
2014-01-29 9:19 ` [PATCH v4 11/12] backports: igb fixes for linux-3.1 Stefan Assmann
@ 2014-01-29 9:19 ` Stefan Assmann
2014-01-31 23:51 ` [PATCH v4 00/12] backports: add igb driver Hauke Mehrtens
12 siblings, 0 replies; 15+ messages in thread
From: Stefan Assmann @ 2014-01-29 9:19 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(+), 0 deletions(-)
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 c516135..bde95a1 100644
--- a/copy-list
+++ b/copy-list
@@ -101,6 +101,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.7.1
^ permalink raw reply related [flat|nested] 15+ messages in thread* Re: [PATCH v4 00/12] backports: add igb driver
2014-01-29 9:18 [PATCH v4 00/12] backports: add igb driver Stefan Assmann
` (11 preceding siblings ...)
2014-01-29 9:19 ` [PATCH v4 12/12] backports: enable igb and add defconfig Stefan Assmann
@ 2014-01-31 23:51 ` Hauke Mehrtens
2014-02-02 21:17 ` Stefan Assmann
12 siblings, 1 reply; 15+ messages in thread
From: Hauke Mehrtens @ 2014-01-31 23:51 UTC (permalink / raw)
To: Stefan Assmann, mcgrof; +Cc: backports
On 01/29/2014 10:18 AM, Stefan Assmann wrote:
> This is a patchset 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/84-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/84-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.
> v4:
> Add several LINUX_BACKPORT defines to prevent possible clashes with
> distro backports. Patches rebased and tested against next-20140124.
>
Thank you Stefan for the patches.
I applied them with some changes. backports did not compile on some
older kernels, because include/linux/u64_stats_sync.h was missing there.
I also fixed some problems on CentOS 6.5 and Suse SLES 11 SP3. Some
strutes that are not used were removed too.
Hauke
^ permalink raw reply [flat|nested] 15+ messages in thread* Re: [PATCH v4 00/12] backports: add igb driver
2014-01-31 23:51 ` [PATCH v4 00/12] backports: add igb driver Hauke Mehrtens
@ 2014-02-02 21:17 ` Stefan Assmann
0 siblings, 0 replies; 15+ messages in thread
From: Stefan Assmann @ 2014-02-02 21:17 UTC (permalink / raw)
To: Hauke Mehrtens, mcgrof; +Cc: backports
On 01.02.2014 00:51, Hauke Mehrtens wrote:
> On 01/29/2014 10:18 AM, Stefan Assmann wrote:
>> This is a patchset 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/84-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/84-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.
>> v4:
>> Add several LINUX_BACKPORT defines to prevent possible clashes with
>> distro backports. Patches rebased and tested against next-20140124.
>>
>
> Thank you Stefan for the patches.
>
> I applied them with some changes. backports did not compile on some
> older kernels, because include/linux/u64_stats_sync.h was missing there.
> I also fixed some problems on CentOS 6.5 and Suse SLES 11 SP3. Some
> strutes that are not used were removed too.
Great! Thanks a lot. I'll take a look at the changes. I didn't see any
trouble when running ckmake which makes me wonder if I missed out on
any testing I could've run.
Stefan
^ permalink raw reply [flat|nested] 15+ messages in thread