[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