sfc: Apply changes from 2.6.33-rc1 adding support for SFC9000 family
svn path=/dists/trunk/linux-2.6/; revision=14800
This commit is contained in:
parent
36c1397603
commit
1414f927eb
|
@ -8,6 +8,9 @@ linux-2.6 (2.6.32-3) UNRELEASED; urgency=high
|
|||
* Input: ALPS - add support for touchpads with 4-directional button
|
||||
* Input: ALPS - add interleaved protocol support (Dell E6x00 series)
|
||||
(Closes: #561589)
|
||||
|
||||
[ Ben Hutchings ]
|
||||
* sfc: Apply changes from 2.6.33-rc1 adding support for SFC9000 family
|
||||
|
||||
-- Martin Michlmayr <tbm@cyrius.com> Fri, 18 Dec 2009 15:34:01 +0000
|
||||
|
||||
|
|
|
@ -0,0 +1,122 @@
|
|||
From d73d3a8cb4723e161589864741d8528d70b350eb Mon Sep 17 00:00:00 2001
|
||||
From: Ben Hutchings <bhutchings@solarflare.com>
|
||||
Date: Mon, 5 Oct 2009 10:59:58 +0000
|
||||
Subject: [PATCH] ethtool: Add reset operation
|
||||
|
||||
After updating firmware stored in flash, users may wish to reset the
|
||||
relevant hardware and start the new firmware immediately. This should
|
||||
not be completely automatic as it may be disruptive.
|
||||
|
||||
A selective reset may also be useful for debugging or diagnostics.
|
||||
|
||||
This adds a separate reset operation which takes flags indicating the
|
||||
components to be reset. Drivers are allowed to reset only a subset of
|
||||
those requested, and must indicate the actual subset. This allows the
|
||||
use of generic component masks and some future expansion.
|
||||
|
||||
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
include/linux/ethtool.h | 32 ++++++++++++++++++++++++++++++++
|
||||
net/core/ethtool.c | 23 +++++++++++++++++++++++
|
||||
2 files changed, 55 insertions(+), 0 deletions(-)
|
||||
|
||||
diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
|
||||
index aa0dcb3..eb1a48d 100644
|
||||
--- a/include/linux/ethtool.h
|
||||
+++ b/include/linux/ethtool.h
|
||||
@@ -498,6 +498,7 @@ struct ethtool_ops {
|
||||
int (*get_rxnfc)(struct net_device *, struct ethtool_rxnfc *, void *);
|
||||
int (*set_rxnfc)(struct net_device *, struct ethtool_rxnfc *);
|
||||
int (*flash_device)(struct net_device *, struct ethtool_flash *);
|
||||
+ int (*reset)(struct net_device *, u32 *);
|
||||
};
|
||||
#endif /* __KERNEL__ */
|
||||
|
||||
@@ -555,6 +556,7 @@ struct ethtool_ops {
|
||||
#define ETHTOOL_SRXCLSRLDEL 0x00000031 /* Delete RX classification rule */
|
||||
#define ETHTOOL_SRXCLSRLINS 0x00000032 /* Insert RX classification rule */
|
||||
#define ETHTOOL_FLASHDEV 0x00000033 /* Flash firmware to device */
|
||||
+#define ETHTOOL_RESET 0x00000034 /* Reset hardware */
|
||||
|
||||
/* compatibility with older code */
|
||||
#define SPARC_ETH_GSET ETHTOOL_GSET
|
||||
@@ -685,4 +687,34 @@ struct ethtool_ops {
|
||||
|
||||
#define RX_CLS_FLOW_DISC 0xffffffffffffffffULL
|
||||
|
||||
+/* Reset flags */
|
||||
+/* The reset() operation must clear the flags for the components which
|
||||
+ * were actually reset. On successful return, the flags indicate the
|
||||
+ * components which were not reset, either because they do not exist
|
||||
+ * in the hardware or because they cannot be reset independently. The
|
||||
+ * driver must never reset any components that were not requested.
|
||||
+ */
|
||||
+enum ethtool_reset_flags {
|
||||
+ /* These flags represent components dedicated to the interface
|
||||
+ * the command is addressed to. Shift any flag left by
|
||||
+ * ETH_RESET_SHARED_SHIFT to reset a shared component of the
|
||||
+ * same type.
|
||||
+ */
|
||||
+ ETH_RESET_MGMT = 1 << 0, /* Management processor */
|
||||
+ ETH_RESET_IRQ = 1 << 1, /* Interrupt requester */
|
||||
+ ETH_RESET_DMA = 1 << 2, /* DMA engine */
|
||||
+ ETH_RESET_FILTER = 1 << 3, /* Filtering/flow direction */
|
||||
+ ETH_RESET_OFFLOAD = 1 << 4, /* Protocol offload */
|
||||
+ ETH_RESET_MAC = 1 << 5, /* Media access controller */
|
||||
+ ETH_RESET_PHY = 1 << 6, /* Transceiver/PHY */
|
||||
+ ETH_RESET_RAM = 1 << 7, /* RAM shared between
|
||||
+ * multiple components */
|
||||
+
|
||||
+ ETH_RESET_DEDICATED = 0x0000ffff, /* All components dedicated to
|
||||
+ * this interface */
|
||||
+ ETH_RESET_ALL = 0xffffffff, /* All components used by this
|
||||
+ * interface, even if shared */
|
||||
+};
|
||||
+#define ETH_RESET_SHARED_SHIFT 16
|
||||
+
|
||||
#endif /* _LINUX_ETHTOOL_H */
|
||||
diff --git a/net/core/ethtool.c b/net/core/ethtool.c
|
||||
index e195108..d8aee58 100644
|
||||
--- a/net/core/ethtool.c
|
||||
+++ b/net/core/ethtool.c
|
||||
@@ -302,6 +302,26 @@ static int ethtool_get_regs(struct net_device *dev, char __user *useraddr)
|
||||
return ret;
|
||||
}
|
||||
|
||||
+static int ethtool_reset(struct net_device *dev, char __user *useraddr)
|
||||
+{
|
||||
+ struct ethtool_value reset;
|
||||
+ int ret;
|
||||
+
|
||||
+ if (!dev->ethtool_ops->reset)
|
||||
+ return -EOPNOTSUPP;
|
||||
+
|
||||
+ if (copy_from_user(&reset, useraddr, sizeof(reset)))
|
||||
+ return -EFAULT;
|
||||
+
|
||||
+ ret = dev->ethtool_ops->reset(dev, &reset.data);
|
||||
+ if (ret)
|
||||
+ return ret;
|
||||
+
|
||||
+ if (copy_to_user(useraddr, &reset, sizeof(reset)))
|
||||
+ return -EFAULT;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static int ethtool_get_wol(struct net_device *dev, char __user *useraddr)
|
||||
{
|
||||
struct ethtool_wolinfo wol = { ETHTOOL_GWOL };
|
||||
@@ -1089,6 +1109,9 @@ int dev_ethtool(struct net *net, struct ifreq *ifr)
|
||||
case ETHTOOL_FLASHDEV:
|
||||
rc = ethtool_flash_device(dev, useraddr);
|
||||
break;
|
||||
+ case ETHTOOL_RESET:
|
||||
+ rc = ethtool_reset(dev, useraddr);
|
||||
+ break;
|
||||
default:
|
||||
rc = -EOPNOTSUPP;
|
||||
}
|
||||
--
|
||||
1.6.5.4
|
||||
|
242
debian/patches/features/all/gro-Change-all-receive-functions-to-return-GRO-result.patch
vendored
Normal file
242
debian/patches/features/all/gro-Change-all-receive-functions-to-return-GRO-result.patch
vendored
Normal file
|
@ -0,0 +1,242 @@
|
|||
From c7c4b3b6e976b95facbb723951bdcd554a3530a4 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Hutchings <bhutchings@solarflare.com>
|
||||
Date: Thu, 29 Oct 2009 21:36:53 -0700
|
||||
Subject: [PATCH 2/2] 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@solarflare.com>
|
||||
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
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, napi->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
|
||||
|
|
@ -0,0 +1,149 @@
|
|||
From 5b252f0c2f98df21fadf0f6cf189b87a0b938228 Mon Sep 17 00:00:00 2001
|
||||
From: Ben Hutchings <bhutchings@solarflare.com>
|
||||
Date: Thu, 29 Oct 2009 07:17:09 +0000
|
||||
Subject: [PATCH 1/2] gro: Name the GRO result enumeration type
|
||||
|
||||
This clarifies which return and parameter types are GRO result codes
|
||||
and not RX result codes.
|
||||
|
||||
Signed-off-by: Ben Hutchings <bhutchings@solarflare.com>
|
||||
Acked-by: Herbert Xu <herbert@gondor.apana.org.au>
|
||||
Signed-off-by: David S. Miller <davem@davemloft.net>
|
||||
---
|
||||
include/linux/netdevice.h | 10 ++++++----
|
||||
net/8021q/vlan_core.c | 5 +++--
|
||||
net/core/dev.c | 19 ++++++++++++++-----
|
||||
3 files changed, 23 insertions(+), 11 deletions(-)
|
||||
|
||||
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
|
||||
index ffc3106..6e777ef 100644
|
||||
--- a/include/linux/netdevice.h
|
||||
+++ b/include/linux/netdevice.h
|
||||
@@ -348,13 +348,14 @@ enum
|
||||
NAPI_STATE_NPSVC, /* Netpoll - don't dequeue from poll_list */
|
||||
};
|
||||
|
||||
-enum {
|
||||
+enum gro_result {
|
||||
GRO_MERGED,
|
||||
GRO_MERGED_FREE,
|
||||
GRO_HELD,
|
||||
GRO_NORMAL,
|
||||
GRO_DROP,
|
||||
};
|
||||
+typedef enum gro_result gro_result_t;
|
||||
|
||||
extern void __napi_schedule(struct napi_struct *n);
|
||||
|
||||
@@ -1480,16 +1481,17 @@ extern int netif_rx_ni(struct sk_buff *skb);
|
||||
#define HAVE_NETIF_RECEIVE_SKB 1
|
||||
extern int netif_receive_skb(struct sk_buff *skb);
|
||||
extern void napi_gro_flush(struct napi_struct *napi);
|
||||
-extern int dev_gro_receive(struct napi_struct *napi,
|
||||
+extern gro_result_t dev_gro_receive(struct napi_struct *napi,
|
||||
struct sk_buff *skb);
|
||||
-extern int napi_skb_finish(int ret, 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,
|
||||
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,
|
||||
- struct sk_buff *skb, int ret);
|
||||
+ 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);
|
||||
|
||||
diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c
|
||||
index 7f7de1a..47a80d6 100644
|
||||
--- a/net/8021q/vlan_core.c
|
||||
+++ b/net/8021q/vlan_core.c
|
||||
@@ -74,8 +74,9 @@ u16 vlan_dev_vlan_id(const struct net_device *dev)
|
||||
}
|
||||
EXPORT_SYMBOL(vlan_dev_vlan_id);
|
||||
|
||||
-static int vlan_gro_common(struct napi_struct *napi, struct vlan_group *grp,
|
||||
- unsigned int vlan_tci, struct sk_buff *skb)
|
||||
+static gro_result_t
|
||||
+vlan_gro_common(struct napi_struct *napi, struct vlan_group *grp,
|
||||
+ unsigned int vlan_tci, struct sk_buff *skb)
|
||||
{
|
||||
struct sk_buff *p;
|
||||
|
||||
diff --git a/net/core/dev.c b/net/core/dev.c
|
||||
index 68a1bb6..1dc1374 100644
|
||||
--- a/net/core/dev.c
|
||||
+++ b/net/core/dev.c
|
||||
@@ -2476,7 +2476,7 @@ void napi_gro_flush(struct napi_struct *napi)
|
||||
}
|
||||
EXPORT_SYMBOL(napi_gro_flush);
|
||||
|
||||
-int dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
|
||||
+enum gro_result dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
|
||||
{
|
||||
struct sk_buff **pp = NULL;
|
||||
struct packet_type *ptype;
|
||||
@@ -2484,7 +2484,7 @@ int dev_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
|
||||
struct list_head *head = &ptype_base[ntohs(type) & PTYPE_HASH_MASK];
|
||||
int same_flow;
|
||||
int mac_len;
|
||||
- int ret;
|
||||
+ enum gro_result ret;
|
||||
|
||||
if (!(skb->dev->features & NETIF_F_GRO))
|
||||
goto normal;
|
||||
@@ -2568,7 +2568,8 @@ normal:
|
||||
}
|
||||
EXPORT_SYMBOL(dev_gro_receive);
|
||||
|
||||
-static int __napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
|
||||
+static gro_result_t
|
||||
+__napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
|
||||
{
|
||||
struct sk_buff *p;
|
||||
|
||||
@@ -2585,7 +2586,7 @@ static int __napi_gro_receive(struct napi_struct *napi, struct sk_buff *skb)
|
||||
return dev_gro_receive(napi, skb);
|
||||
}
|
||||
|
||||
-int napi_skb_finish(int ret, struct sk_buff *skb)
|
||||
+int napi_skb_finish(gro_result_t ret, struct sk_buff *skb)
|
||||
{
|
||||
int err = NET_RX_SUCCESS;
|
||||
|
||||
@@ -2600,6 +2601,10 @@ int napi_skb_finish(int ret, struct sk_buff *skb)
|
||||
case GRO_MERGED_FREE:
|
||||
kfree_skb(skb);
|
||||
break;
|
||||
+
|
||||
+ case GRO_HELD:
|
||||
+ case GRO_MERGED:
|
||||
+ break;
|
||||
}
|
||||
|
||||
return err;
|
||||
@@ -2652,7 +2657,8 @@ 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, int ret)
|
||||
+int napi_frags_finish(struct napi_struct *napi, struct sk_buff *skb,
|
||||
+ gro_result_t ret)
|
||||
{
|
||||
int err = NET_RX_SUCCESS;
|
||||
|
||||
@@ -2674,6 +2680,9 @@ int napi_frags_finish(struct napi_struct *napi, struct sk_buff *skb, int ret)
|
||||
case GRO_MERGED_FREE:
|
||||
napi_reuse_skb(napi, skb);
|
||||
break;
|
||||
+
|
||||
+ case GRO_MERGED:
|
||||
+ break;
|
||||
}
|
||||
|
||||
return err;
|
||||
--
|
||||
1.6.5.4
|
||||
|
File diff suppressed because it is too large
Load Diff
|
@ -1,2 +1,6 @@
|
|||
+ features/all/input-alps-add-support-for-touchpads-with-4-directional-button.patch
|
||||
+ features/all/input-alps-add-interleaved-protocol-support.patch
|
||||
+ features/all/gro-Name-the-GRO-result-enumeration-type.patch
|
||||
+ features/all/gro-Change-all-receive-functions-to-return-GRO-result.patch
|
||||
+ features/all/ethtool-Add-reset-operation.patch
|
||||
+ features/all/sfc-2.6.33-rc1.patch
|
||||
|
|
Loading…
Reference in New Issue