Re: [PATCH] virtio_net: convert to hw_features

2011-04-01 Thread David Miller
From: Michał Mirosław mirq-li...@rere.qmqm.pl
Date: Thu, 31 Mar 2011 13:01:35 +0200 (CEST)

 Signed-off-by: Michał Mirosław mirq-li...@rere.qmqm.pl

Applied.
___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization

[PATCH] virtio_net: convert to hw_features

2011-03-31 Thread Michał Mirosław
Signed-off-by: Michał Mirosław mirq-li...@rere.qmqm.pl
---
 drivers/net/virtio_net.c |   46 +++---
 1 files changed, 19 insertions(+), 27 deletions(-)

This is an example conversion to hw_features when constraints are
constant and can be detected at init time.

Build tested only.

diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 82dba5a..0cb0b06 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -710,17 +710,6 @@ static int virtnet_close(struct net_device *dev)
return 0;
 }
 
-static int virtnet_set_tx_csum(struct net_device *dev, u32 data)
-{
-   struct virtnet_info *vi = netdev_priv(dev);
-   struct virtio_device *vdev = vi-vdev;
-
-   if (data  !virtio_has_feature(vdev, VIRTIO_NET_F_CSUM))
-   return -ENOSYS;
-
-   return ethtool_op_set_tx_hw_csum(dev, data);
-}
-
 static void virtnet_set_rx_mode(struct net_device *dev)
 {
struct virtnet_info *vi = netdev_priv(dev);
@@ -822,10 +811,6 @@ static void virtnet_vlan_rx_kill_vid(struct net_device 
*dev, u16 vid)
 }
 
 static const struct ethtool_ops virtnet_ethtool_ops = {
-   .set_tx_csum = virtnet_set_tx_csum,
-   .set_sg = ethtool_op_set_sg,
-   .set_tso = ethtool_op_set_tso,
-   .set_ufo = ethtool_op_set_ufo,
.get_link = ethtool_op_get_link,
 };
 
@@ -912,22 +897,29 @@ static int virtnet_probe(struct virtio_device *vdev)
SET_NETDEV_DEV(dev, vdev-dev);
 
/* Do we support hardware checksums? */
-   if (csum  virtio_has_feature(vdev, VIRTIO_NET_F_CSUM)) {
+   if (virtio_has_feature(vdev, VIRTIO_NET_F_CSUM)) {
/* This opens up the world of extra features. */
-   dev-features |= NETIF_F_HW_CSUM|NETIF_F_SG|NETIF_F_FRAGLIST;
-   if (gso  virtio_has_feature(vdev, VIRTIO_NET_F_GSO)) {
-   dev-features |= NETIF_F_TSO | NETIF_F_UFO
+   dev-hw_features |= NETIF_F_HW_CSUM|NETIF_F_SG|NETIF_F_FRAGLIST;
+   if (csum)
+   dev-features |= 
NETIF_F_HW_CSUM|NETIF_F_SG|NETIF_F_FRAGLIST;
+
+   if (virtio_has_feature(vdev, VIRTIO_NET_F_GSO)) {
+   dev-hw_features |= NETIF_F_TSO | NETIF_F_UFO
| NETIF_F_TSO_ECN | NETIF_F_TSO6;
}
/* Individual feature bits: what can host handle? */
-   if (gso  virtio_has_feature(vdev, VIRTIO_NET_F_HOST_TSO4))
-   dev-features |= NETIF_F_TSO;
-   if (gso  virtio_has_feature(vdev, VIRTIO_NET_F_HOST_TSO6))
-   dev-features |= NETIF_F_TSO6;
-   if (gso  virtio_has_feature(vdev, VIRTIO_NET_F_HOST_ECN))
-   dev-features |= NETIF_F_TSO_ECN;
-   if (gso  virtio_has_feature(vdev, VIRTIO_NET_F_HOST_UFO))
-   dev-features |= NETIF_F_UFO;
+   if (virtio_has_feature(vdev, VIRTIO_NET_F_HOST_TSO4))
+   dev-hw_features |= NETIF_F_TSO;
+   if (virtio_has_feature(vdev, VIRTIO_NET_F_HOST_TSO6))
+   dev-hw_features |= NETIF_F_TSO6;
+   if (virtio_has_feature(vdev, VIRTIO_NET_F_HOST_ECN))
+   dev-hw_features |= NETIF_F_TSO_ECN;
+   if (virtio_has_feature(vdev, VIRTIO_NET_F_HOST_UFO))
+   dev-hw_features |= NETIF_F_UFO;
+
+   if (gso)
+   dev-features |= dev-hw_features  
(NETIF_F_ALL_TSO|NETIF_F_UFO);
+   /* (!csum  gso) case will be fixed by register_netdev() */
}
 
/* Configuration may specify what MAC to use.  Otherwise random. */
-- 
1.7.2.5

___
Virtualization mailing list
Virtualization@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/virtualization