From: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Date: Tue, 22 Feb 2011 16:52:28 +0000 (+0000)
Subject: net: Fix ETHTOOL_GFEATURES compatibility
X-Git-Tag: firefly_0821_release~7613^2~2196^2~278
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=4e4db200541d49404ff39ac482efee072dd72144;p=firefly-linux-kernel-4.4.55.git

net: Fix ETHTOOL_GFEATURES compatibility

Implement getting rx checksum state for not updated drivers.

Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
Signed-off-by: David S. Miller <davem@davemloft.net>
---

diff --git a/net/core/ethtool.c b/net/core/ethtool.c
index 66cdc76770ce..69a3edc182f9 100644
--- a/net/core/ethtool.c
+++ b/net/core/ethtool.c
@@ -168,6 +168,18 @@ EXPORT_SYMBOL(ethtool_ntuple_flush);
 
 #define ETHTOOL_DEV_FEATURE_WORDS	1
 
+static void ethtool_get_features_compat(struct net_device *dev,
+	struct ethtool_get_features_block *features)
+{
+	if (!dev->ethtool_ops)
+		return;
+
+	/* getting RX checksum */
+	if (dev->ethtool_ops->get_rx_csum)
+		if (dev->ethtool_ops->get_rx_csum(dev))
+			features[0].active |= NETIF_F_RXCSUM;
+}
+
 static int ethtool_get_features(struct net_device *dev, void __user *useraddr)
 {
 	struct ethtool_gfeatures cmd = {
@@ -185,6 +197,8 @@ static int ethtool_get_features(struct net_device *dev, void __user *useraddr)
 	u32 __user *sizeaddr;
 	u32 copy_size;
 
+	ethtool_get_features_compat(dev, features);
+
 	sizeaddr = useraddr + offsetof(struct ethtool_gfeatures, size);
 	if (get_user(copy_size, sizeaddr))
 		return -EFAULT;