aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/layerscape/patches-4.9/601-net-readd-skb_recycle.patch
diff options
context:
space:
mode:
authorMathew McBride <matt@traverse.com.au>2017-10-24 11:49:00 +1100
committerHauke Mehrtens <hauke@hauke-m.de>2017-10-29 16:16:35 +0100
commit1c4415a679f9858f9de628b650cdef32a2abf9bb (patch)
treefeab6c9f2e0bb69d0dfc594904aa83fa3c6f11e0 /target/linux/layerscape/patches-4.9/601-net-readd-skb_recycle.patch
parent6a457749a46eaed82fef66d65bd6125eebf93aa0 (diff)
downloadupstream-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/601-net-readd-skb_recycle.patch')
-rw-r--r--target/linux/layerscape/patches-4.9/601-net-readd-skb_recycle.patch66
1 files changed, 66 insertions, 0 deletions
diff --git a/target/linux/layerscape/patches-4.9/601-net-readd-skb_recycle.patch b/target/linux/layerscape/patches-4.9/601-net-readd-skb_recycle.patch
new file mode 100644
index 0000000000..08aa2a0944
--- /dev/null
+++ b/target/linux/layerscape/patches-4.9/601-net-readd-skb_recycle.patch
@@ -0,0 +1,66 @@
+From 9527ee5eb436ad773acc7320b372a5f4825a920d Mon Sep 17 00:00:00 2001
+From: Madalin Bucur <madalin.bucur@freescale.com>
+Date: Tue, 5 Jan 2016 12:12:07 +0200
+Subject: [PATCH] net: readd skb_recycle()
+
+Adding back skb_recycle() as it's used by the DPAA Ethernet driver.
+This was removed from the upstream kernel because it was lacking users.
+
+Signed-off-by: Madalin Bucur <madalin.bucur@freescale.com>
+---
+ include/linux/skbuff.h | 1 +
+ net/core/skbuff.c | 26 ++++++++++++++++++++++++++
+ 2 files changed, 27 insertions(+)
+
+diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
+index 32810f279f8e..a52a6fb0ac2e 100644
+--- a/include/linux/skbuff.h
++++ b/include/linux/skbuff.h
+@@ -902,6 +902,7 @@ void kfree_skb(struct sk_buff *skb);
+ void kfree_skb_list(struct sk_buff *segs);
+ void skb_tx_error(struct sk_buff *skb);
+ void consume_skb(struct sk_buff *skb);
++void skb_recycle(struct sk_buff *skb);
+ void __kfree_skb(struct sk_buff *skb);
+ extern struct kmem_cache *skbuff_head_cache;
+
+diff --git a/net/core/skbuff.c b/net/core/skbuff.c
+index fe008f1bd930..ab1038083df2 100644
+--- a/net/core/skbuff.c
++++ b/net/core/skbuff.c
+@@ -825,6 +825,32 @@ void napi_consume_skb(struct sk_buff *skb, int budget)
+ }
+ EXPORT_SYMBOL(napi_consume_skb);
+
++/**
++ * skb_recycle - clean up an skb for reuse
++ * @skb: buffer
++ *
++ * Recycles the skb to be reused as a receive buffer. This
++ * function does any necessary reference count dropping, and
++ * cleans up the skbuff as if it just came from __alloc_skb().
++ */
++void skb_recycle(struct sk_buff *skb)
++{
++ struct skb_shared_info *shinfo;
++ u8 head_frag = skb->head_frag;
++
++ skb_release_head_state(skb);
++
++ shinfo = skb_shinfo(skb);
++ memset(shinfo, 0, offsetof(struct skb_shared_info, dataref));
++ atomic_set(&shinfo->dataref, 1);
++
++ memset(skb, 0, offsetof(struct sk_buff, tail));
++ skb->data = skb->head + NET_SKB_PAD;
++ skb->head_frag = head_frag;
++ skb_reset_tail_pointer(skb);
++}
++EXPORT_SYMBOL(skb_recycle);
++
+ /* Make sure a field is enclosed inside headers_start/headers_end section */
+ #define CHECK_SKB_FIELD(field) \
+ BUILD_BUG_ON(offsetof(struct sk_buff, field) < \
+--
+2.11.1
+