[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] [NET] front: Make netfront compile against kernels without the GSO patch.
# HG changeset patch # User kfraser@xxxxxxxxxxxxxxxxxxxxx # Node ID 8d5e6a78d51e1254ce36d86e5d800b37cc5c65f3 # Parent 28de3548c65f74a51b042291ba7fea1f503bfaae [NET] front: Make netfront compile against kernels without the GSO patch. Signed-off-by: Steven Smith <ssmith@xxxxxxxxxxxxx> --- linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c | 35 ++++++++++++++++--- 1 files changed, 31 insertions(+), 4 deletions(-) diff -r 28de3548c65f -r 8d5e6a78d51e linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c --- a/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c Thu Aug 17 16:57:16 2006 +0100 +++ b/linux-2.6-xen-sparse/drivers/xen/netfront/netfront.c Thu Aug 17 16:57:43 2006 +0100 @@ -64,6 +64,20 @@ #define RX_COPY_THRESHOLD 256 +/* If we don't have GSO, fake things up so that we never try to use it. */ +#ifndef NETIF_F_GSO +#define netif_needs_gso(dev, skb) 0 +#define dev_disable_gso_features(dev) ((void)0) +#else +#define HAVE_GSO 1 +static inline void dev_disable_gso_features(struct net_device *dev) +{ + /* Turn off all GSO bits except ROBUST. */ + dev->features &= (1 << NETIF_F_GSO_SHIFT) - 1; + dev->features |= NETIF_F_GSO_ROBUST; +} +#endif + #define GRANT_INVALID_REF 0 #define NET_TX_RING_SIZE __RING_SIZE((struct netif_tx_sring *)0, PAGE_SIZE) @@ -362,11 +376,13 @@ again: goto abort_transaction; } +#ifdef HAVE_GSO err = xenbus_printf(xbt, dev->nodename, "feature-gso-tcpv4", "%d", 1); if (err) { message = "writing feature-gso-tcpv4"; goto abort_transaction; } +#endif err = xenbus_transaction_end(xbt, 0); if (err) { @@ -887,6 +903,7 @@ static int network_start_xmit(struct sk_ if (skb->proto_data_valid) /* remote but checksummed? */ tx->flags |= NETTXF_data_validated; +#ifdef HAVE_GSO if (skb_shinfo(skb)->gso_size) { struct netif_extra_info *gso = (struct netif_extra_info *) RING_GET_REQUEST(&np->tx, ++i); @@ -905,6 +922,7 @@ static int network_start_xmit(struct sk_ gso->flags = 0; extra = gso; } +#endif np->tx.req_prod_pvt = i + 1; @@ -1151,7 +1169,8 @@ static RING_IDX xennet_fill_frags(struct return cons; } -static int xennet_set_skb_gso(struct sk_buff *skb, struct netif_extra_info *gso) +static int xennet_set_skb_gso(struct sk_buff *skb, + struct netif_extra_info *gso) { if (!gso->u.gso.size) { if (net_ratelimit()) @@ -1166,6 +1185,7 @@ static int xennet_set_skb_gso(struct sk_ return -EINVAL; } +#ifdef HAVE_GSO skb_shinfo(skb)->gso_size = gso->u.gso.size; skb_shinfo(skb)->gso_type = SKB_GSO_TCPV4; @@ -1174,6 +1194,11 @@ static int xennet_set_skb_gso(struct sk_ skb_shinfo(skb)->gso_segs = 0; return 0; +#else + if (net_ratelimit()) + WPRINTK("GSO unsupported by this kernel.\n"); + return -EINVAL; +#endif } static int netif_poll(struct net_device *dev, int *pbudget) @@ -1408,6 +1433,7 @@ static int xennet_set_sg(struct net_devi static int xennet_set_tso(struct net_device *dev, u32 data) { +#ifdef HAVE_GSO if (data) { struct netfront_info *np = netdev_priv(dev); int val; @@ -1420,13 +1446,14 @@ static int xennet_set_tso(struct net_dev } return ethtool_op_set_tso(dev, data); +#else + return -ENOSYS; +#endif } static void xennet_set_features(struct net_device *dev) { - /* Turn off all GSO bits except ROBUST. */ - dev->features &= (1 << NETIF_F_GSO_SHIFT) - 1; - dev->features |= NETIF_F_GSO_ROBUST; + dev_disable_gso_features(dev); xennet_set_sg(dev, 0); /* We need checksum offload to enable scatter/gather and TSO. */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |