--- v1
+++ v4
@@ -1,26 +1,101 @@
From: David Decotigny <decot@googlers.com>
+
+replaced by __ethtool_get_ksettings.
Signed-off-by: David Decotigny <decot@googlers.com>
---
- drivers/net/ethernet/mellanox/mlx4/mlx4_en.h | 4 +++-
- 1 file changed, 3 insertions(+), 1 deletion(-)
+ include/linux/ethtool.h | 4 ----
+ net/core/ethtool.c | 45 ++++++++++++++-------------------------------
+ 2 files changed, 14 insertions(+), 35 deletions(-)
-diff --git a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-index 944a112..96bf728 100644
---- a/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-+++ b/drivers/net/ethernet/mellanox/mlx4/mlx4_en.h
-@@ -869,9 +869,11 @@ __printf(3, 4)
- void en_print(const char *level, const struct mlx4_en_priv *priv,
- const char *format, ...);
+diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h
+index 6077cbb..05d4f0e 100644
+--- a/include/linux/ethtool.h
++++ b/include/linux/ethtool.h
+@@ -148,10 +148,6 @@ struct ethtool_ksettings {
+ extern int __ethtool_get_ksettings(struct net_device *dev,
+ struct ethtool_ksettings *ksettings);
-+#define en_dbg_enabled(mlevel, priv) \
-+ (NETIF_MSG_##mlevel & (priv)->msg_enable)
- #define en_dbg(mlevel, priv, format, ...) \
- do { \
-- if (NETIF_MSG_##mlevel & (priv)->msg_enable) \
-+ if (en_dbg_enabled(mlevel, priv)) \
- en_print(KERN_DEBUG, priv, format, ##__VA_ARGS__); \
- } while (0)
- #define en_warn(priv, format, ...) \
+-/* DEPRECATED, use __ethtool_get_ksettings */
+-extern int __ethtool_get_settings(struct net_device *dev,
+- struct ethtool_cmd *cmd);
+-
+ /**
+ * struct ethtool_ops - optional netdev operations
+ * @get_settings: DEPRECATED, use %get_ksettings/%set_ksettings
+diff --git a/net/core/ethtool.c b/net/core/ethtool.c
+index 4865031..84dca87 100644
+--- a/net/core/ethtool.c
++++ b/net/core/ethtool.c
+@@ -495,7 +495,12 @@ int __ethtool_get_ksettings(struct net_device *dev,
+ * legacy %ethtool_cmd API, unless it's not supported either.
+ * TODO: remove when ethtool_ops::get_settings disappears internally
+ */
+- err = __ethtool_get_settings(dev, &cmd);
++ if (!dev->ethtool_ops->get_settings)
++ return -EOPNOTSUPP;
++
++ memset(&cmd, 0, sizeof(cmd));
++ cmd.cmd = ETHTOOL_GSET;
++ err = dev->ethtool_ops->get_settings(dev, &cmd);
+ if (err < 0)
+ return err;
+
+@@ -652,30 +657,6 @@ static int ethtool_set_ksettings(struct net_device *dev, void __user *useraddr)
+ return dev->ethtool_ops->set_ksettings(dev, &ksettings);
+ }
+
+-/* Internal kernel helper to query a device ethtool_cmd settings.
+- *
+- * Note about transition to ethtool_settings API: We do not need (or
+- * want) this function to support "dev" instances that implement the
+- * ethtool_settings API as we will update the drivers calling this
+- * function to call __ethtool_get_ksettings instead, before the first
+- * drivers implement ethtool_ops::get_ksettings.
+- *
+- * TODO 1: at least make this function static when no driver is using it
+- * TODO 2: remove when ethtool_ops::get_settings disappears internally
+- */
+-int __ethtool_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
+-{
+- ASSERT_RTNL();
+-
+- if (!dev->ethtool_ops->get_settings)
+- return -EOPNOTSUPP;
+-
+- memset(cmd, 0, sizeof(struct ethtool_cmd));
+- cmd->cmd = ETHTOOL_GSET;
+- return dev->ethtool_ops->get_settings(dev, cmd);
+-}
+-EXPORT_SYMBOL(__ethtool_get_settings);
+-
+ static void
+ warn_incomplete_ethtool_legacy_settings_conversion(const char *details)
+ {
+@@ -717,16 +698,18 @@ static int ethtool_get_settings(struct net_device *dev, void __user *useraddr)
+ /* send a sensible cmd tag back to user */
+ cmd.cmd = ETHTOOL_GSET;
+ } else {
+- int err;
+- /* TODO: return -EOPNOTSUPP when
+- * ethtool_ops::get_settings disappears internally
+- */
+-
+ /* driver doesn't support %ethtool_ksettings
+ * API. revert to legacy %ethtool_cmd API, unless it's
+ * not supported either.
+ */
+- err = __ethtool_get_settings(dev, &cmd);
++ int err;
++
++ if (!dev->ethtool_ops->get_settings)
++ return -EOPNOTSUPP;
++
++ memset(&cmd, 0, sizeof(cmd));
++ cmd.cmd = ETHTOOL_GSET;
++ err = dev->ethtool_ops->get_settings(dev, &cmd);
+ if (err < 0)
+ return err;
+ }
--
-2.2.0.rc0.207.ga3a616c
+2.6.0.rc2.230.g3dd15c0