WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-devel

[Xen-devel] Re: [PATCH RESEND] net: convert xen-netfront to hw_features

To: Michał Mirosław <mirq-linux@xxxxxxxxxxxx>
Subject: [Xen-devel] Re: [PATCH RESEND] net: convert xen-netfront to hw_features
From: Ian Campbell <Ian.Campbell@xxxxxxxxxxxxx>
Date: Thu, 31 Mar 2011 12:13:30 +0100
Cc: "netdev@xxxxxxxxxxxxxxx" <netdev@xxxxxxxxxxxxxxx>, Jeremy Fitzhardinge <Jeremy.Fitzhardinge@xxxxxxxxxx>, "virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx" <virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx>, "xen-devel@xxxxxxxxxxxxxxxxxxx" <xen-devel@xxxxxxxxxxxxxxxxxxx>, Konrad Rzeszutek Wilk <konrad.wilk@xxxxxxxxxx>
Delivery-date: Thu, 31 Mar 2011 04:18:54 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
In-reply-to: <20110331110136.03A1A13A6A@xxxxxxxxxxxx>
List-help: <mailto:xen-devel-request@lists.xensource.com?subject=help>
List-id: Xen developer discussion <xen-devel.lists.xensource.com>
List-post: <mailto:xen-devel@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-devel>, <mailto:xen-devel-request@lists.xensource.com?subject=unsubscribe>
Organization: Citrix Systems, Inc.
References: <20110331110136.03A1A13A6A@xxxxxxxxxxxx>
Sender: xen-devel-bounces@xxxxxxxxxxxxxxxxxxx
On Thu, 2011-03-31 at 12:01 +0100, Michał Mirosław wrote:
> Not tested in any way. The original code for offload setting seems broken
> as it resets the features on every netback reconnect.

Thanks, I've got a pending TODO item to test this and propagate similar
changes to netback. I hope to get to it soon...

Is this urgent (for 2.6.39) IYHO? I think it's been broken this way for
a long time now...

Ian.

> 
> This will set GSO_ROBUST at device creation time (earlier than connect time).
> 
> RX checksum offload is forced on - so advertise as it is.
> 
> Signed-off-by: Michał Mirosław <mirq-linux@xxxxxxxxxxxx>
> ---
> [I don't know Xen code enough to say this is correct. There is Xen netback
> driver coming in, that has similar changes to be made. Please match
> them up if you can.]
> 
>  drivers/net/xen-netfront.c |   57 +++++++++++++++++--------------------------
>  1 files changed, 23 insertions(+), 34 deletions(-)
> 
> diff --git a/drivers/net/xen-netfront.c b/drivers/net/xen-netfront.c
> index 5c8d9c3..2a71c9f 100644
> --- a/drivers/net/xen-netfront.c
> +++ b/drivers/net/xen-netfront.c
> @@ -1148,6 +1148,8 @@ static const struct net_device_ops xennet_netdev_ops = {
>       .ndo_change_mtu      = xennet_change_mtu,
>       .ndo_set_mac_address = eth_mac_addr,
>       .ndo_validate_addr   = eth_validate_addr,
> +     .ndo_fix_features    = xennet_fix_features,
> +     .ndo_set_features    = xennet_set_features,
>  };
>  
>  static struct net_device * __devinit xennet_create_dev(struct xenbus_device 
> *dev)
> @@ -1209,7 +1211,9 @@ static struct net_device * __devinit 
> xennet_create_dev(struct xenbus_device *dev
>       netdev->netdev_ops      = &xennet_netdev_ops;
>  
>       netif_napi_add(netdev, &np->napi, xennet_poll, 64);
> -     netdev->features        = NETIF_F_IP_CSUM;
> +     netdev->features        = NETIF_F_IP_CSUM | NETIF_F_RXCSUM |
> +                               NETIF_F_GSO_ROBUST;
> +     netdev->hw_features     = NETIF_F_IP_CSUM | NETIF_F_SG | NETIF_F_TSO;
>  
>       SET_ETHTOOL_OPS(netdev, &xennet_ethtool_ops);
>       SET_NETDEV_DEV(netdev, &dev->dev);
> @@ -1510,52 +1514,40 @@ again:
>       return err;
>  }
>  
> -static int xennet_set_sg(struct net_device *dev, u32 data)
> +static u32 xennet_fix_features(struct net_device *dev, u32 features)
>  {
> -     if (data) {
> -             struct netfront_info *np = netdev_priv(dev);
> -             int val;
> +     struct netfront_info *np = netdev_priv(dev);
> +     int val;
>  
> +     if (features & NETIF_F_SG) {
>               if (xenbus_scanf(XBT_NIL, np->xbdev->otherend, "feature-sg",
>                                "%d", &val) < 0)
>                       val = 0;
> +
>               if (!val)
> -                     return -ENOSYS;
> -     } else if (dev->mtu > ETH_DATA_LEN)
> -             dev->mtu = ETH_DATA_LEN;
> -
> -     return ethtool_op_set_sg(dev, data);
> -}
> -
> -static int xennet_set_tso(struct net_device *dev, u32 data)
> -{
> -     if (data) {
> -             struct netfront_info *np = netdev_priv(dev);
> -             int val;
> +                     features &= ~NETIF_F_SG;
> +     }
>  
> +     if (features & NETIF_F_TSO) {
>               if (xenbus_scanf(XBT_NIL, np->xbdev->otherend,
>                                "feature-gso-tcpv4", "%d", &val) < 0)
>                       val = 0;
> +
>               if (!val)
> -                     return -ENOSYS;
> +                     features &= ~NETIF_F_TSO;
>       }
>  
> -     return ethtool_op_set_tso(dev, data);
> +     return features;
>  }
>  
> -static void xennet_set_features(struct net_device *dev)
> +static int xennet_set_features(struct net_device *dev, u32 features)
>  {
> -     /* Turn off all GSO bits except ROBUST. */
> -     dev->features &= ~NETIF_F_GSO_MASK;
> -     dev->features |= NETIF_F_GSO_ROBUST;
> -     xennet_set_sg(dev, 0);
> +     if (!(features & NETIF_F_SG) && dev->mtu > ETH_DATA_LEN) {
> +             netdev_info(dev, "Reducing MTU because no SG offload");
> +             dev->mtu = ETH_DATA_LEN;
> +     }
>  
> -     /* We need checksum offload to enable scatter/gather and TSO. */
> -     if (!(dev->features & NETIF_F_IP_CSUM))
> -             return;
> -
> -     if (!xennet_set_sg(dev, 1))
> -             xennet_set_tso(dev, 1);
> +     return 0;
>  }
>  
>  static int xennet_connect(struct net_device *dev)
> @@ -1582,7 +1574,7 @@ static int xennet_connect(struct net_device *dev)
>       if (err)
>               return err;
>  
> -     xennet_set_features(dev);
> +     netdev_update_features(dev);
>  
>       spin_lock_bh(&np->rx_lock);
>       spin_lock_irq(&np->tx_lock);
> @@ -1710,9 +1702,6 @@ static void xennet_get_strings(struct net_device *dev, 
> u32 stringset, u8 * data)
>  
>  static const struct ethtool_ops xennet_ethtool_ops =
>  {
> -     .set_tx_csum = ethtool_op_set_tx_csum,
> -     .set_sg = xennet_set_sg,
> -     .set_tso = xennet_set_tso,
>       .get_link = ethtool_op_get_link,
>  
>       .get_sset_count = xennet_get_sset_count,



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-devel] Re: [PATCH RESEND] net: convert xen-netfront to hw_features, Ian Campbell <=