]> git.proxmox.com Git - pve-kernel.git/commitdiff
Revert "remove outdated intel nic drivers"
authorThomas Lamprecht <t.lamprecht@proxmox.com>
Fri, 28 Jul 2017 11:09:25 +0000 (13:09 +0200)
committerWolfgang Bumiller <w.bumiller@proxmox.com>
Fri, 28 Jul 2017 12:02:26 +0000 (14:02 +0200)
This reverts commit 7beee5f3eb0d70c10ee68b952d53245234c0ab70.

While they repositories of those drivers state that the in kernel one
should be used, as they are newer, it seems they do not provide the
same functionallity. So revert to the out of tree drivers for now.

Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
12 files changed:
Makefile
e1000e-3.3.5.3.tar.gz [new file with mode: 0644]
e1000e_4.10_compat.patch [new file with mode: 0644]
e1000e_4.10_max-mtu.patch [new file with mode: 0644]
igb-5.3.5.4.tar.gz [new file with mode: 0644]
igb_4.10_compat.patch [new file with mode: 0644]
igb_4.10_max-mtu.patch [new file with mode: 0644]
igb_4.9_compat.patch [new file with mode: 0644]
intel-module-gcc6-compat.patch [new file with mode: 0644]
ixgbe-5.0.4.tar.gz [new file with mode: 0644]
ixgbe_4.10_compat.patch [new file with mode: 0644]
ixgbe_4.10_max-mtu.patch [new file with mode: 0644]

index 6eae6136c54de56a8d6cda0b608cf9c59b40fff3..644ad8abb508d41653f5a47d53eaff2f5b0aae14 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -34,6 +34,15 @@ TOP=$(shell pwd)
 
 KERNEL_CFG_ORG=config-${KERNEL_VER}.org
 
+E1000EDIR=e1000e-3.3.5.3
+E1000ESRC=${E1000EDIR}.tar.gz
+
+IGBDIR=igb-5.3.5.4
+IGBSRC=${IGBDIR}.tar.gz
+
+IXGBEDIR=ixgbe-5.0.4
+IXGBESRC=${IXGBEDIR}.tar.gz
+
 SPLDIR=pkg-spl
 SPLSRC=submodules/zfs/pkg-spl.tar.gz
 ZFSDIR=pkg-zfs
@@ -147,13 +156,19 @@ abi-${KVNAME}: .compile_mark
 abicheck: abi-${KVNAME} abi-previous abi-blacklist
        ./abi-check abi-${KVNAME} abi-previous ${SKIPABI}
 
-data: .compile_mark ${SPL_MODULES} ${ZFS_MODULES}
+data: .compile_mark igb.ko ixgbe.ko e1000e.ko ${SPL_MODULES} ${ZFS_MODULES}
        rm -rf data tmp; mkdir -p tmp/lib/modules/${KVNAME}
        mkdir tmp/boot
        install -m 644 ${KERNEL_SRC}/.config tmp/boot/config-${KVNAME}
        install -m 644 ${KERNEL_SRC}/System.map tmp/boot/System.map-${KVNAME}
        install -m 644 ${KERNEL_SRC}/arch/${KERNEL_ARCH}/boot/bzImage tmp/boot/vmlinuz-${KVNAME}
        cd ${KERNEL_SRC}; make INSTALL_MOD_PATH=../tmp/ modules_install
+       ## install latest ibg driver
+       install -m 644 igb.ko tmp/lib/modules/${KVNAME}/kernel/drivers/net/ethernet/intel/igb/
+       # install latest ixgbe driver
+       install -m 644 ixgbe.ko tmp/lib/modules/${KVNAME}/kernel/drivers/net/ethernet/intel/ixgbe/
+       # install latest e1000e driver
+       install -m 644 e1000e.ko tmp/lib/modules/${KVNAME}/kernel/drivers/net/ethernet/intel/e1000e/
        # install zfs drivers
        install -d -m 0755 tmp/lib/modules/${KVNAME}/zfs
        install -m 644 ${SPL_MODULES} ${ZFS_MODULES} tmp/lib/modules/${KVNAME}/zfs
@@ -239,6 +254,36 @@ ${KERNEL_SRC}/README: ${KERNEL_SRC_SUBMODULE} | submodules
        sed -i ${KERNEL_SRC}/Makefile -e 's/^EXTRAVERSION.*$$/EXTRAVERSION=${EXTRAVERSION}/'
        touch $@
 
+e1000e.ko e1000e: .compile_mark ${E1000ESRC}
+       rm -rf ${E1000EDIR}
+       tar xf ${E1000ESRC}
+       [ ! -e /lib/modules/${KVNAME}/build ] || (echo "please remove /lib/modules/${KVNAME}/build" && false)
+       cd ${E1000EDIR}; patch -p1 < ../intel-module-gcc6-compat.patch
+       cd ${E1000EDIR}; patch -p1 < ../e1000e_4.10_compat.patch
+       cd ${E1000EDIR}; patch -p1 < ../e1000e_4.10_max-mtu.patch
+       cd ${E1000EDIR}/src; make BUILD_KERNEL=${KVNAME} KSRC=${TOP}/${KERNEL_SRC}
+       cp ${E1000EDIR}/src/e1000e.ko e1000e.ko
+
+igb.ko igb: .compile_mark ${IGBSRC}
+       rm -rf ${IGBDIR}
+       tar xf ${IGBSRC}
+       [ ! -e /lib/modules/${KVNAME}/build ] || (echo "please remove /lib/modules/${KVNAME}/build" && false)
+       cd ${IGBDIR}; patch -p1 < ../intel-module-gcc6-compat.patch
+       cd ${IGBDIR}; patch -p1 < ../igb_4.9_compat.patch
+       cd ${IGBDIR}; patch -p1 < ../igb_4.10_compat.patch
+       cd ${IGBDIR}; patch -p1 < ../igb_4.10_max-mtu.patch
+       cd ${IGBDIR}/src; make BUILD_KERNEL=${KVNAME} KSRC=${TOP}/${KERNEL_SRC}
+       cp ${IGBDIR}/src/igb.ko igb.ko
+
+ixgbe.ko ixgbe: .compile_mark ${IXGBESRC}
+       rm -rf ${IXGBEDIR}
+       tar xf ${IXGBESRC}
+       [ ! -e /lib/modules/${KVNAME}/build ] || (echo "please remove /lib/modules/${KVNAME}/build" && false)
+       cd ${IXGBEDIR}; patch -p1 < ../ixgbe_4.10_compat.patch
+       cd ${IXGBEDIR}; patch -p1 < ../ixgbe_4.10_max-mtu.patch
+       cd ${IXGBEDIR}/src; make CFLAGS_EXTRA="-DIXGBE_NO_LRO" BUILD_KERNEL=${KVNAME} KSRC=${TOP}/${KERNEL_SRC}
+       cp ${IXGBEDIR}/src/ixgbe.ko ixgbe.ko
+
 $(SPL_KO_REST): $(SPL_KO)
 $(SPL_KO): .compile_mark ${SPLSRC}
        rm -rf ${SPLDIR}
diff --git a/e1000e-3.3.5.3.tar.gz b/e1000e-3.3.5.3.tar.gz
new file mode 100644 (file)
index 0000000..c67490d
Binary files /dev/null and b/e1000e-3.3.5.3.tar.gz differ
diff --git a/e1000e_4.10_compat.patch b/e1000e_4.10_compat.patch
new file mode 100644 (file)
index 0000000..e8f1d4c
--- /dev/null
@@ -0,0 +1,81 @@
+ src/{netdev.c.orig => netdev.c} | 18 +++++++++---------
+ src/{ptp.c.orig => ptp.c} | 4 ++--
+ 2 files changed, 11 insertions(+), 11 deletions(-)
+
+diff --git a/src/netdev.c.orig b/src/netdev.c
+index 73b0f9a..480265b 100644
+--- a/src/netdev.c.orig
++++ b/src/netdev.c
+@@ -4833,24 +4833,24 @@ void e1000e_reinit_locked(struct e1000_adapter *adapter)
+ /**
+  * e1000e_sanitize_systim - sanitize raw cycle counter reads
+  * @hw: pointer to the HW structure
+- * @systim: cycle_t value read, sanitized and returned
++ * @systim: u64 value read, sanitized and returned
+  *
+  * Errata for 82574/82583 possible bad bits read from SYSTIMH/L:
+  * check to see that the time is incrementing at a reasonable
+  * rate and is a multiple of incvalue.
+  **/
+-static cycle_t e1000e_sanitize_systim(struct e1000_hw *hw, cycle_t systim)
++static u64 e1000e_sanitize_systim(struct e1000_hw *hw, u64 systim)
+ {
+       u64 time_delta, rem, temp;
+-      cycle_t systim_next;
++      u64 systim_next;
+       u32 incvalue;
+       int i;
+       incvalue = er32(TIMINCA) & E1000_TIMINCA_INCVALUE_MASK;
+       for (i = 0; i < E1000_MAX_82574_SYSTIM_REREADS; i++) {
+               /* latch SYSTIMH on read of SYSTIML */
+-              systim_next = (cycle_t)er32(SYSTIML);
+-              systim_next |= (cycle_t)er32(SYSTIMH) << 32;
++              systim_next = (u64)er32(SYSTIML);
++              systim_next |= (u64)er32(SYSTIMH) << 32;
+               time_delta = systim_next - systim;
+               temp = time_delta;
+@@ -4872,13 +4872,13 @@ static cycle_t e1000e_sanitize_systim(struct e1000_hw *hw, cycle_t systim)
+  * e1000e_cyclecounter_read - read raw cycle counter (used by time counter)
+  * @cc: cyclecounter structure
+  **/
+-static cycle_t e1000e_cyclecounter_read(const struct cyclecounter *cc)
++static u64 e1000e_cyclecounter_read(const struct cyclecounter *cc)
+ {
+       struct e1000_adapter *adapter = container_of(cc, struct e1000_adapter,
+                                                    cc);
+       struct e1000_hw *hw = &adapter->hw;
+       u32 systimel, systimeh;
+-      cycle_t systim;
++      u64 systim;
+       /* SYSTIMH latching upon SYSTIML read does not work well.
+        * This means that if SYSTIML overflows after we read it but before
+        * we read SYSTIMH, the value of SYSTIMH has been incremented and we
+@@ -4899,8 +4899,8 @@ static cycle_t e1000e_cyclecounter_read(const struct cyclecounter *cc)
+                       systimel = systimel_2;
+               }
+       }
+-      systim = (cycle_t)systimel;
+-      systim |= (cycle_t)systimeh << 32;
++      systim = (u64)systimel;
++      systim |= (u64)systimeh << 32;
+       if (adapter->flags2 & FLAG2_CHECK_SYSTIM_OVERFLOW)
+               systim = e1000e_sanitize_systim(hw, systim);
+
+diff --git a/src/ptp.c.orig b/src/ptp.c
+index 00c419f..228adce 100644
+--- a/src/ptp.c.orig
++++ b/src/ptp.c
+@@ -136,8 +136,8 @@ static int e1000e_phc_get_syncdevicetime(ktime_t * device,
+       unsigned long flags;
+       int i;
+       u32 tsync_ctrl;
+-      cycle_t dev_cycles;
+-      cycle_t sys_cycles;
++      u64 dev_cycles;
++      u64 sys_cycles;
+       tsync_ctrl = er32(TSYNCTXCTL);
+       tsync_ctrl |= E1000_TSYNCTXCTL_START_SYNC |
diff --git a/e1000e_4.10_max-mtu.patch b/e1000e_4.10_max-mtu.patch
new file mode 100644 (file)
index 0000000..69272d7
--- /dev/null
@@ -0,0 +1,37 @@
+diff --git a/src/netdev.c b/src/netdev.c
+index 73b0f9a..aef1bc2 100644
+--- a/src/netdev.c
++++ b/src/netdev.c
+@@ -6724,19 +6724,12 @@ static int e1000_change_mtu(struct net_device *netdev, int new_mtu)
+       int max_frame = new_mtu + VLAN_ETH_HLEN + ETH_FCS_LEN;
+       /* Jumbo frame support */
+-      if ((max_frame > (VLAN_ETH_FRAME_LEN + ETH_FCS_LEN)) &&
++      if ((new_mtu > ETH_DATA_LEN) &&
+           !(adapter->flags & FLAG_HAS_JUMBO_FRAMES)) {
+               e_err("Jumbo Frames not supported.\n");
+               return -EINVAL;
+       }
+-      /* Supported frame sizes */
+-      if ((new_mtu < (VLAN_ETH_ZLEN + ETH_FCS_LEN)) ||
+-          (max_frame > adapter->max_hw_frame_size)) {
+-              e_err("Unsupported MTU setting\n");
+-              return -EINVAL;
+-      }
+-
+       /* Jumbo frame workaround on 82579 and newer requires CRC be stripped */
+       if ((adapter->hw.mac.type >= e1000_pch2lan) &&
+           !(adapter->flags2 & FLAG2_CRC_STRIPPING) &&
+@@ -8262,6 +8255,11 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
+ #endif /* HAVE_NETDEV_VLAN_FEATURES */
+       }
++      /* MTU range: 68 - max_hw_frame_size */
++      netdev->min_mtu = ETH_MIN_MTU;
++      netdev->max_mtu = adapter->max_hw_frame_size -
++                        (VLAN_ETH_HLEN + ETH_FCS_LEN);
++
+       if (e1000e_enable_mng_pass_thru(&adapter->hw))
+               adapter->flags |= FLAG_MNG_PT_ENABLED;
diff --git a/igb-5.3.5.4.tar.gz b/igb-5.3.5.4.tar.gz
new file mode 100644 (file)
index 0000000..18cbf69
Binary files /dev/null and b/igb-5.3.5.4.tar.gz differ
diff --git a/igb_4.10_compat.patch b/igb_4.10_compat.patch
new file mode 100644 (file)
index 0000000..2dc5c46
--- /dev/null
@@ -0,0 +1,25 @@
+ src/{igb_ptp.c.orig => igb_ptp.c} | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/igb_ptp.c.orig b/src/igb_ptp.c
+index 744fa65..f334ac7 100644
+--- a/src/igb_ptp.c.orig
++++ b/src/igb_ptp.c
+@@ -93,7 +93,7 @@
+  * SYSTIM read access for the 82576
+  */
+-static cycle_t igb_ptp_read_82576(const struct cyclecounter *cc)
++static u64 igb_ptp_read_82576(const struct cyclecounter *cc)
+ {
+       struct igb_adapter *igb = container_of(cc, struct igb_adapter, cc);
+       struct e1000_hw *hw = &igb->hw;
+@@ -113,7 +113,7 @@ static cycle_t igb_ptp_read_82576(const struct cyclecounter *cc)
+  * SYSTIM read access for the 82580
+  */
+-static cycle_t igb_ptp_read_82580(const struct cyclecounter *cc)
++static u64 igb_ptp_read_82580(const struct cyclecounter *cc)
+ {
+       struct igb_adapter *igb = container_of(cc, struct igb_adapter, cc);
+       struct e1000_hw *hw = &igb->hw;
diff --git a/igb_4.10_max-mtu.patch b/igb_4.10_max-mtu.patch
new file mode 100644 (file)
index 0000000..d04ead5
--- /dev/null
@@ -0,0 +1,47 @@
+diff --git a/src/e1000_defines.h b/src/e1000_defines.h
+index 6de3988..d58e12f 100644
+--- a/src/e1000_defines.h
++++ b/src/e1000_defines.h
+@@ -423,7 +423,8 @@
+ #define ETHERNET_IEEE_VLAN_TYPE               0x8100  /* 802.3ac packet */
+ #define ETHERNET_FCS_SIZE             4
+-#define MAX_JUMBO_FRAME_SIZE          0x3F00
++#define MAX_JUMBO_FRAME_SIZE          0x2600
++#define MAX_STD_JUMBO_FRAME_SIZE      9216
+ /* The datasheet maximum supported RX size is 9.5KB (9728 bytes) */
+ #define MAX_RX_JUMBO_FRAME_SIZE               0x2600
+ #define E1000_TX_PTR_GAP              0x1F
+diff --git a/src/igb_main.c b/src/igb_main.c
+index 2dff0f4..bbfe87e 100644
+--- a/src/igb_main.c
++++ b/src/igb_main.c
+@@ -2852,6 +2852,10 @@ static int igb_probe(struct pci_dev *pdev,
+       if (pci_using_dac)
+               netdev->features |= NETIF_F_HIGHDMA;
++      /* MTU range: 68 - 9216 */
++      netdev->min_mtu = ETH_MIN_MTU;
++      netdev->max_mtu = MAX_STD_JUMBO_FRAME_SIZE;
++
+       adapter->en_mng_pt = e1000_enable_mng_pass_thru(hw);
+ #ifdef DEBUG
+       if (adapter->dmac != IGB_DMAC_DISABLE)
+@@ -5832,17 +5836,6 @@ static int igb_change_mtu(struct net_device *netdev, int new_mtu)
+       struct pci_dev *pdev = adapter->pdev;
+       int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN + VLAN_HLEN;
+-      if ((new_mtu < 68) || (max_frame > MAX_JUMBO_FRAME_SIZE)) {
+-              dev_err(pci_dev_to_dev(pdev), "Invalid MTU setting\n");
+-              return -EINVAL;
+-      }
+-
+-#define MAX_STD_JUMBO_FRAME_SIZE 9238
+-      if (max_frame > MAX_STD_JUMBO_FRAME_SIZE) {
+-              dev_err(pci_dev_to_dev(pdev), "MTU > 9216 not supported.\n");
+-              return -EINVAL;
+-      }
+-
+       /* adjust max frame to be at least the size of a standard frame */
+       if (max_frame < (ETH_FRAME_LEN + ETH_FCS_LEN))
+               max_frame = ETH_FRAME_LEN + ETH_FCS_LEN;
diff --git a/igb_4.9_compat.patch b/igb_4.9_compat.patch
new file mode 100644 (file)
index 0000000..1a453a3
--- /dev/null
@@ -0,0 +1,95 @@
+From 6445198f802d993c73f4b246353b2ceb2dfafc32 Mon Sep 17 00:00:00 2001
+From: Ferruh Yigit <ferruh.yigit@intel.com>
+Date: Mon, 17 Oct 2016 11:23:14 +0100
+Subject: kni: fix build with kernel 4.9
+
+compile error:
+  CC [M]  .../lib/librte_eal/linuxapp/kni/igb_main.o
+.../lib/librte_eal/linuxapp/kni/igb_main.c:2317:21:
+error: initialization from incompatible pointer type
+       [-Werror=incompatible-pointer-types]
+  .ndo_set_vf_vlan = igb_ndo_set_vf_vlan,
+                     ^~~~~~~~~~~~~~~~~~~
+
+Linux kernel 4.9 updates API for ndo_set_vf_vlan:
+Linux: 79aab093a0b5 ("net: Update API for VF vlan protocol 802.1ad support")
+
+Use new API for Linux kernels >= 4.9
+
+Signed-off-by: Ferruh Yigit <ferruh.yigit@intel.com>
+Tested-by: Pablo de Lara <pablo.de.lara.guarch@intel.com>
+---
+ src/igb_main.c | 19 +++++++++++++++++++
+ src/kcompat.h  |  4 ++++
+ 2 files changed, 23 insertions(+)
+
+diff --git a/src/igb_main.c b/src/igb_main.c
+index 23e2d64..f4dca5a 100644
+--- a/src/igb_main.c
++++ b/src/igb_main.c
+@@ -195,7 +195,11 @@ static void igb_process_mdd_event(struct igb_adapter *);
+ #ifdef IFLA_VF_MAX
+ 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,
++#ifdef HAVE_VF_VLAN_PROTO
++                             int vf, u16 vlan, u8 qos, __be16 vlan_proto);
++#else
+                              int vf, u16 vlan, u8 qos);
++#endif
+ #ifdef HAVE_VF_SPOOFCHK_CONFIGURE
+ static int igb_ndo_set_vf_spoofchk(struct net_device *netdev, int vf,
+                               bool setting);
+@@ -6412,7 +6416,11 @@ static void igb_set_vmvir(struct igb_adapter *adapter, u32 vid, u32 vf)
+ }
+ static int igb_ndo_set_vf_vlan(struct net_device *netdev,
++#ifdef HAVE_VF_VLAN_PROTO
++                             int vf, u16 vlan, u8 qos, __be16 vlan_proto)
++#else
+                              int vf, u16 vlan, u8 qos)
++#endif
+ {
+       int err = 0;
+       struct igb_adapter *adapter = netdev_priv(netdev);
+@@ -6420,6 +6428,12 @@ static int igb_ndo_set_vf_vlan(struct net_device *netdev,
+       /* VLAN IDs accepted range 0-4094 */
+       if ((vf >= adapter->vfs_allocated_count) || (vlan > VLAN_VID_MASK-1) || (qos > 7))
+               return -EINVAL;
++
++#ifdef HAVE_VF_VLAN_PROTO
++      if (vlan_proto != htons(ETH_P_8021Q))
++              return -EPROTONOSUPPORT;
++#endif
++
+       if (vlan || qos) {
+               err = igb_vlvf_set(adapter, vlan, !!vlan, vf);
+               if (err)
+@@ -6580,7 +6594,12 @@ static inline void igb_vf_reset(struct igb_adapter *adapter, u32 vf)
+       if (adapter->vf_data[vf].pf_vlan)
+               igb_ndo_set_vf_vlan(adapter->netdev, vf,
+                                   adapter->vf_data[vf].pf_vlan,
++#ifdef HAVE_VF_VLAN_PROTO
++                                  adapter->vf_data[vf].pf_qos,
++                                  htons(ETH_P_8021Q));
++#else
+                                   adapter->vf_data[vf].pf_qos);
++#endif
+       else
+               igb_clear_vf_vfta(adapter, vf);
+ #endif
+diff --git a/src/kcompat.h b/src/kcompat.h
+index 69e0e7a..84826b2 100644
+--- a/src/kcompat.h
++++ b/src/kcompat.h
+@@ -3929,4 +3929,8 @@ skb_set_hash(struct sk_buff *skb, __u32 hash, __always_unused int type)
+ #define vlan_tx_tag_present skb_vlan_tag_present
+ #endif
++#if ( LINUX_VERSION_CODE >= KERNEL_VERSION(4,9,0) )
++#define HAVE_VF_VLAN_PROTO
++#endif /* >= 4.9.0 */
++
+ #endif /* _KCOMPAT_H_ */
+-- 
+cgit v1.0
+
diff --git a/intel-module-gcc6-compat.patch b/intel-module-gcc6-compat.patch
new file mode 100644 (file)
index 0000000..9ccd2c5
--- /dev/null
@@ -0,0 +1,18 @@
+diff --git a/src/Makefile.orig b/src/Makefile
+index 8e962f7..50bcdcc 100644
+--- a/src/Makefile.orig
++++ b/src/Makefile
+@@ -123,6 +123,13 @@ ifeq (,$(CC))
+   $(error Compiler not found)
+ endif
++# workaround for GCC6's default PIE
++ifeq ($(CC),gcc)
++  PIE_TEST = [ -z "`$(CC) -fno-PIE -no-pie -x c -c /dev/null -o /dev/null 2>&1`" ]
++  PIE_FLAGS := $(shell $(PIE_TEST) && echo '-fno-PIE -no-pie')
++  EXTRA_CFLAGS += $(PIE_FLAGS)
++endif
++
+ # we need to know what platform the driver is being built on
+ # some additional features are only built on Intel platforms
+ ARCH := $(shell uname -m | sed 's/i.86/i386/')
diff --git a/ixgbe-5.0.4.tar.gz b/ixgbe-5.0.4.tar.gz
new file mode 100644 (file)
index 0000000..41f5f2d
Binary files /dev/null and b/ixgbe-5.0.4.tar.gz differ
diff --git a/ixgbe_4.10_compat.patch b/ixgbe_4.10_compat.patch
new file mode 100644 (file)
index 0000000..4518819
--- /dev/null
@@ -0,0 +1,25 @@
+ src/{ixgbe_ptp.c.orig => ixgbe_ptp.c} | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/src/ixgbe_ptp.c.orig b/src/ixgbe_ptp.c
+index fb832f0..b868c68 100644
+--- a/src/ixgbe_ptp.c.orig
++++ b/src/ixgbe_ptp.c
+@@ -244,7 +244,7 @@ static void ixgbe_ptp_setup_sdp_X540(struct ixgbe_adapter *adapter)
+  * result of SYSTIME is 32bits of "billions of cycles" and 32 bits of
+  * "cycles", rather than seconds and nanoseconds.
+  */
+-static cycle_t ixgbe_ptp_read_X550(const struct cyclecounter *hw_cc) {
++static u64 ixgbe_ptp_read_X550(const struct cyclecounter *hw_cc) {
+       struct ixgbe_adapter *adapter =
+               container_of(hw_cc, struct ixgbe_adapter, hw_cc);
+       struct ixgbe_hw *hw = &adapter->hw;
+@@ -280,7 +280,7 @@ static cycle_t ixgbe_ptp_read_X550(const struct cyclecounter *hw_cc) {
+  * cyclecounter structure used to construct a ns counter from the
+  * arbitrary fixed point registers
+  */
+-static cycle_t ixgbe_ptp_read_82599(const struct cyclecounter *hw_cc)
++static u64 ixgbe_ptp_read_82599(const struct cyclecounter *hw_cc)
+ {
+       struct ixgbe_adapter *adapter =
+               container_of(hw_cc, struct ixgbe_adapter, hw_cc);
diff --git a/ixgbe_4.10_max-mtu.patch b/ixgbe_4.10_max-mtu.patch
new file mode 100644 (file)
index 0000000..c25203e
--- /dev/null
@@ -0,0 +1,37 @@
+diff --git a/src/ixgbe_main.c b/src/ixgbe_main.c
+index 83c6250..fe226cd 100644
+--- a/src/ixgbe_main.c
++++ b/src/ixgbe_main.c
+@@ -6379,11 +6379,6 @@ static void ixgbe_free_all_rx_resources(struct ixgbe_adapter *adapter)
+ static int ixgbe_change_mtu(struct net_device *netdev, int new_mtu)
+ {
+       struct ixgbe_adapter *adapter = netdev_priv(netdev);
+-      int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
+-
+-      /* MTU < 68 is an error and causes problems on some kernels */
+-      if ((new_mtu < 68) || (max_frame > IXGBE_MAX_JUMBO_FRAME_SIZE))
+-              return -EINVAL;
+       /*
+        * For 82599EB we cannot allow legacy VFs to enable their receive
+@@ -6392,7 +6387,7 @@ static int ixgbe_change_mtu(struct net_device *netdev, int new_mtu)
+        */
+       if ((adapter->flags & IXGBE_FLAG_SRIOV_ENABLED) &&
+           (adapter->hw.mac.type == ixgbe_mac_82599EB) &&
+-          (max_frame > (ETH_FRAME_LEN + ETH_FCS_LEN)))
++          (new_mtu > ETH_DATA_LEN))
+               e_warn(probe, "Setting MTU > 1500 will disable legacy VFs\n");
+       e_info(probe, "changing MTU from %d to %d\n", netdev->mtu, new_mtu);
+@@ -10134,6 +10129,11 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
+ #ifdef IFF_SUPP_NOFCS
+       netdev->priv_flags |= IFF_SUPP_NOFCS;
+ #endif
++
++      /* MTU range: 68 - 9710 */
++      netdev->min_mtu = ETH_MIN_MTU;
++      netdev->max_mtu = IXGBE_MAX_JUMBO_FRAME_SIZE - (ETH_HLEN + ETH_FCS_LEN);
++
+ #if IS_ENABLED(CONFIG_DCB)
+       if (adapter->flags & IXGBE_FLAG_DCB_CAPABLE)
+               netdev->dcbnl_ops = &dcbnl_ops;