lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Thu, 31 Mar 2011 12:13:30 +0100 From: Ian Campbell <Ian.Campbell@...citrix.com> To: Michał Mirosław <mirq-linux@...e.qmqm.pl> CC: "netdev@...r.kernel.org" <netdev@...r.kernel.org>, Jeremy Fitzhardinge <Jeremy.Fitzhardinge@...rix.com>, Konrad Rzeszutek Wilk <konrad.wilk@...cle.com>, "xen-devel@...ts.xensource.com" <xen-devel@...ts.xensource.com>, "virtualization@...ts.linux-foundation.org" <virtualization@...ts.linux-foundation.org> Subject: Re: [PATCH RESEND] net: convert xen-netfront to hw_features 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@...e.qmqm.pl> > --- > [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, -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@...r.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists