diff options
author | Mathew McBride <matt@traverse.com.au> | 2017-10-24 11:49:00 +1100 |
---|---|---|
committer | Hauke Mehrtens <hauke@hauke-m.de> | 2017-10-29 16:16:35 +0100 |
commit | 1c4415a679f9858f9de628b650cdef32a2abf9bb (patch) | |
tree | feab6c9f2e0bb69d0dfc594904aa83fa3c6f11e0 /target/linux/layerscape/patches-4.9/001-net-centralize-net_device-min-max-MTU-checking.patch | |
parent | 6a457749a46eaed82fef66d65bd6125eebf93aa0 (diff) | |
download | upstream-1c4415a679f9858f9de628b650cdef32a2abf9bb.tar.gz upstream-1c4415a679f9858f9de628b650cdef32a2abf9bb.tar.bz2 upstream-1c4415a679f9858f9de628b650cdef32a2abf9bb.zip |
layerscape: reverse changes to ndo_get_stats64
The NXP LSDK kernel backported changes for interface ndo_get_stats64
functions from mainline, this causes a compile error with
backports/mac80211, which expects the original 4.9 defintion.
As reversing the ndo_get_stats64 change signifcantly reduces the size of
patch 601, the patches that were aggregated into it have been
disaggregated.
Signed-off-by: Mathew McBride <matt@traverse.com.au>
Diffstat (limited to 'target/linux/layerscape/patches-4.9/001-net-centralize-net_device-min-max-MTU-checking.patch')
-rw-r--r-- | target/linux/layerscape/patches-4.9/001-net-centralize-net_device-min-max-MTU-checking.patch | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/target/linux/layerscape/patches-4.9/001-net-centralize-net_device-min-max-MTU-checking.patch b/target/linux/layerscape/patches-4.9/001-net-centralize-net_device-min-max-MTU-checking.patch new file mode 100644 index 0000000000..fcabb62f5e --- /dev/null +++ b/target/linux/layerscape/patches-4.9/001-net-centralize-net_device-min-max-MTU-checking.patch @@ -0,0 +1,78 @@ +From 95b8bbff6ecf0692747622af16d917a67313f8cc Mon Sep 17 00:00:00 2001 +From: Jarod Wilson <jarod@redhat.com> +Date: Fri, 7 Oct 2016 22:04:33 -0400 +Subject: [PATCH] net: centralize net_device min/max MTU checking + +While looking into an MTU issue with sfc, I started noticing that almost +every NIC driver with an ndo_change_mtu function implemented almost +exactly the same range checks, and in many cases, that was the only +practical thing their ndo_change_mtu function was doing. Quite a few +drivers have either 68, 64, 60 or 46 as their minimum MTU value checked, +and then various sizes from 1500 to 65535 for their maximum MTU value. We +can remove a whole lot of redundant code here if we simple store min_mtu +and max_mtu in net_device, and check against those in net/core/dev.c's +dev_set_mtu(). + +In theory, there should be zero functional change with this patch, it just +puts the infrastructure in place. Subsequent patches will attempt to start +using said infrastructure, with theoretically zero change in +functionality. + +CC: netdev@vger.kernel.org +Signed-off-by: Jarod Wilson <jarod@redhat.com> +Signed-off-by: David S. Miller <davem@davemloft.net> +--- + include/linux/netdevice.h | 4 ++++ + net/core/dev.c | 13 +++++++++++-- + 2 files changed, 15 insertions(+), 2 deletions(-) + +diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h +index 780e7171f548..2082b7d02a77 100644 +--- a/include/linux/netdevice.h ++++ b/include/linux/netdevice.h +@@ -1507,6 +1507,8 @@ enum netdev_priv_flags { + * @if_port: Selectable AUI, TP, ... + * @dma: DMA channel + * @mtu: Interface MTU value ++ * @min_mtu: Interface Minimum MTU value ++ * @max_mtu: Interface Maximum MTU value + * @type: Interface hardware type + * @hard_header_len: Maximum hardware header length. + * @min_header_len: Minimum hardware header length +@@ -1728,6 +1730,8 @@ struct net_device { + unsigned char dma; + + unsigned int mtu; ++ unsigned int min_mtu; ++ unsigned int max_mtu; + unsigned short type; + unsigned short hard_header_len; + unsigned short min_header_len; +diff --git a/net/core/dev.c b/net/core/dev.c +index 2e04fd188081..c7ec56e8659a 100644 +--- a/net/core/dev.c ++++ b/net/core/dev.c +@@ -6524,9 +6524,18 @@ int dev_set_mtu(struct net_device *dev, int new_mtu) + if (new_mtu == dev->mtu) + return 0; + +- /* MTU must be positive. */ +- if (new_mtu < 0) ++ /* MTU must be positive, and in range */ ++ if (new_mtu < 0 || new_mtu < dev->min_mtu) { ++ net_err_ratelimited("%s: Invalid MTU %d requested, hw min %d\n", ++ dev->name, new_mtu, dev->min_mtu); + return -EINVAL; ++ } ++ ++ if (dev->max_mtu > 0 && new_mtu > dev->max_mtu) { ++ net_err_ratelimited("%s: Invalid MTU %d requested, hw max %d\n", ++ dev->name, new_mtu, dev->min_mtu); ++ return -EINVAL; ++ } + + if (!netif_device_present(dev)) + return -ENODEV; +-- +2.11.1 + |