[kernel] r15368 - in dists/sid/linux-2.6/debian/patches: features/all series
Ben Hutchings
benh at alioth.debian.org
Sat Mar 13 20:54:13 UTC 2010
Author: benh
Date: Sat Mar 13 20:54:12 2010
New Revision: 15368
Log:
Apply new version of features/all/gro-Change-all-receive-functions-to-return-GRO-result.patch on top of 2.6.32.10
Added:
dists/sid/linux-2.6/debian/patches/features/all/gro-Change-all-receive-functions-to-return-GRO-result-2.patch
Modified:
dists/sid/linux-2.6/debian/patches/series/10
Added: dists/sid/linux-2.6/debian/patches/features/all/gro-Change-all-receive-functions-to-return-GRO-result-2.patch
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ dists/sid/linux-2.6/debian/patches/features/all/gro-Change-all-receive-functions-to-return-GRO-result-2.patch Sat Mar 13 20:54:12 2010 (r15368)
@@ -0,0 +1,242 @@
+From: Ben Hutchings <bhutchings at solarflare.com>
+Date: Thu, 29 Oct 2009 21:36:53 -0700
+Subject: [PATCH] gro: Change all receive functions to return GRO result codes
+
+This will allow drivers to adjust their receive path dynamically
+based on whether GRO is being applied successfully.
+
+Currently all in-tree callers ignore the return values of these
+functions and do not need to be changed.
+
+Signed-off-by: Ben Hutchings <bhutchings at solarflare.com>
+Acked-by: Herbert Xu <herbert at gondor.apana.org.au>
+Signed-off-by: David S. Miller <davem at davemloft.net>
+[bwh: adjusted to apply on top of the VLAN-GRO fix]
+---
+ include/linux/if_vlan.h | 25 ++++++++++++++-----------
+ include/linux/netdevice.h | 8 ++++----
+ net/8021q/vlan_core.c | 16 +++++++++-------
+ net/core/dev.c | 38 +++++++++++++++-----------------------
+ 4 files changed, 42 insertions(+), 45 deletions(-)
+
+diff --git a/include/linux/if_vlan.h b/include/linux/if_vlan.h
+index 71a4870..153f6b9 100644
+--- a/include/linux/if_vlan.h
++++ b/include/linux/if_vlan.h
+@@ -120,10 +120,12 @@ extern u16 vlan_dev_vlan_id(const struct net_device *dev);
+ extern int __vlan_hwaccel_rx(struct sk_buff *skb, struct vlan_group *grp,
+ u16 vlan_tci, int polling);
+ extern int vlan_hwaccel_do_receive(struct sk_buff *skb);
+-extern int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,
+- unsigned int vlan_tci, struct sk_buff *skb);
+-extern int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp,
+- unsigned int vlan_tci);
++extern gro_result_t
++vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,
++ unsigned int vlan_tci, struct sk_buff *skb);
++extern gro_result_t
++vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp,
++ unsigned int vlan_tci);
+
+ #else
+ static inline struct net_device *vlan_dev_real_dev(const struct net_device *dev)
+@@ -150,17 +152,18 @@ static inline int vlan_hwaccel_do_receive(struct sk_buff *skb)
+ return 0;
+ }
+
+-static inline int vlan_gro_receive(struct napi_struct *napi,
+- struct vlan_group *grp,
+- unsigned int vlan_tci, struct sk_buff *skb)
++static inline gro_result_t
++vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,
++ unsigned int vlan_tci, struct sk_buff *skb)
+ {
+- return NET_RX_DROP;
++ return GRO_DROP;
+ }
+
+-static inline int vlan_gro_frags(struct napi_struct *napi,
+- struct vlan_group *grp, unsigned int vlan_tci)
++static inline gro_result_t
++vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp,
++ unsigned int vlan_tci)
+ {
+- return NET_RX_DROP;
++ return GRO_DROP;
+ }
+ #endif
+
+diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
+index 6e777ef..193b637 100644
+--- a/include/linux/netdevice.h
++++ b/include/linux/netdevice.h
+@@ -1483,17 +1483,17 @@ extern int netif_receive_skb(struct sk_buff *skb);
+ extern void napi_gro_flush(struct napi_struct *napi);
+ extern gro_result_t dev_gro_receive(struct napi_struct *napi,
+ struct sk_buff *skb);
+-extern int napi_skb_finish(gro_result_t ret, struct sk_buff *skb);
+-extern int napi_gro_receive(struct napi_struct *napi,
++extern gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb);
++extern gro_result_t napi_gro_receive(struct napi_struct *napi,
+ struct sk_buff *skb);
+ extern void napi_reuse_skb(struct napi_struct *napi,
+ struct sk_buff *skb);
+ extern struct sk_buff * napi_get_frags(struct napi_struct *napi);
+-extern int napi_frags_finish(struct napi_struct *napi,
++extern gro_result_t napi_frags_finish(struct napi_struct *napi,
+ struct sk_buff *skb,
+ gro_result_t ret);
+ extern struct sk_buff * napi_frags_skb(struct napi_struct *napi);
+-extern int napi_gro_frags(struct napi_struct *napi);
++extern gro_result_t napi_gro_frags(struct napi_struct *napi);
+
+ static inline void napi_free_frags(struct napi_struct *napi)
+ {
+diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c
+index 47a80d6..8d5ca2a 100644
+--- a/net/8021q/vlan_core.c
++++ b/net/8021q/vlan_core.c
+@@ -102,11 +102,12 @@ drop:
+ return GRO_DROP;
+ }
+
+-int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,
+- unsigned int vlan_tci, struct sk_buff *skb)
++gro_result_t vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,
++ unsigned int vlan_tci, struct sk_buff *skb)
+ {
+ if (netpoll_rx_on(skb))
+- return vlan_hwaccel_receive_skb(skb, grp, vlan_tci);
++ return vlan_hwaccel_receive_skb(skb, grp, vlan_tci)
++ ? GRO_DROP : GRO_NORMAL;
+
+ skb_gro_reset_offset(skb);
+
+@@ -114,17 +115,18 @@ int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,
+ }
+ EXPORT_SYMBOL(vlan_gro_receive);
+
+-int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp,
+- unsigned int vlan_tci)
++gro_result_t vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp,
++ unsigned int vlan_tci)
+ {
+ struct sk_buff *skb = napi_frags_skb(napi);
+
+ if (!skb)
+- return NET_RX_DROP;
++ return GRO_DROP;
+
+ if (netpoll_rx_on(skb)) {
+ skb->protocol = eth_type_trans(skb, skb->dev);
+- return vlan_hwaccel_receive_skb(skb, grp, vlan_tci);
++ return vlan_hwaccel_receive_skb(skb, grp, vlan_tci)
++ ? GRO_DROP : GRO_NORMAL;
+ }
+
+ return napi_frags_finish(napi, skb,
+diff --git a/net/core/dev.c b/net/core/dev.c
+index 1dc1374..631cc40 100644
+--- a/net/core/dev.c
++++ b/net/core/dev.c
+@@ -2586,18 +2586,15 @@ __napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
+ return dev_gro_receive(napi, skb);
+ }
+
+-int napi_skb_finish(gro_result_t ret, struct sk_buff *skb)
++gro_result_t napi_skb_finish(gro_result_t ret, struct sk_buff *skb)
+ {
+- int err = NET_RX_SUCCESS;
+-
+ switch (ret) {
+ case GRO_NORMAL:
+- return netif_receive_skb(skb);
++ if (netif_receive_skb(skb))
++ ret = GRO_DROP;
++ break;
+
+ case GRO_DROP:
+- err = NET_RX_DROP;
+- /* fall through */
+-
+ case GRO_MERGED_FREE:
+ kfree_skb(skb);
+ break;
+@@ -2607,7 +2604,7 @@ int napi_skb_finish(gro_result_t ret, struct sk_buff *skb)
+ break;
+ }
+
+- return err;
++ return ret;
+ }
+ EXPORT_SYMBOL(napi_skb_finish);
+
+@@ -2627,7 +2624,7 @@ void skb_gro_reset_offset(struct sk_buff *skb)
+ }
+ EXPORT_SYMBOL(skb_gro_reset_offset);
+
+-int napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
++gro_result_t napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
+ {
+ skb_gro_reset_offset(skb);
+
+@@ -2657,26 +2654,21 @@ struct sk_buff *napi_get_frags(struct napi_struct *napi)
+ }
+ EXPORT_SYMBOL(napi_get_frags);
+
+-int napi_frags_finish(struct napi_struct *napi, struct sk_buff *skb,
+- gro_result_t ret)
++gro_result_t napi_frags_finish(struct napi_struct *napi, struct sk_buff *skb,
++ gro_result_t ret)
+ {
+- int err = NET_RX_SUCCESS;
+-
+ switch (ret) {
+ case GRO_NORMAL:
+ case GRO_HELD:
+ skb->protocol = eth_type_trans(skb, skb->dev);
+
+- if (ret == GRO_NORMAL)
+- return netif_receive_skb(skb);
+-
+- skb_gro_pull(skb, -ETH_HLEN);
++ if (ret == GRO_HELD)
++ skb_gro_pull(skb, -ETH_HLEN);
++ else if (netif_receive_skb(skb))
++ ret = GRO_DROP;
+ break;
+
+ case GRO_DROP:
+- err = NET_RX_DROP;
+- /* fall through */
+-
+ case GRO_MERGED_FREE:
+ napi_reuse_skb(napi, skb);
+ break;
+@@ -2685,7 +2677,7 @@ int napi_frags_finish(struct napi_struct *napi, struct sk_buff *skb,
+ break;
+ }
+
+- return err;
++ return ret;
+ }
+ EXPORT_SYMBOL(napi_frags_finish);
+
+@@ -2726,12 +2718,12 @@ out:
+ }
+ EXPORT_SYMBOL(napi_frags_skb);
+
+-int napi_gro_frags(struct napi_struct *napi)
++gro_result_t napi_gro_frags(struct napi_struct *napi)
+ {
+ struct sk_buff *skb = napi_frags_skb(napi);
+
+ if (!skb)
+- return NET_RX_DROP;
++ return GRO_DROP;
+
+ return napi_frags_finish(napi, skb, __napi_gro_receive(napi, skb));
+ }
+--
+1.6.5.4
+
Modified: dists/sid/linux-2.6/debian/patches/series/10
==============================================================================
--- dists/sid/linux-2.6/debian/patches/series/10 Sat Mar 13 20:48:17 2010 (r15367)
+++ dists/sid/linux-2.6/debian/patches/series/10 Sat Mar 13 20:54:12 2010 (r15368)
@@ -15,6 +15,7 @@
- bugfix/all/cxusb-select-lgs8gxx.patch
+ bugfix/all/stable/2.6.32.10-rc1.patch
+ bugfix/all/stable/2.6.32.10-reverts.patch
++ features/all/gro-Change-all-receive-functions-to-return-GRO-result-2.patch
+ features/all/drm-2.6.32.9-2.6.33.patch
+ debian/drm-staging-2.6.32.9-2.6.33.patch
+ debian/drm-restore-private-list_sort.patch
More information about the Kernel-svn-changes
mailing list