|
@@ -198,13 +198,6 @@ static int ethtool_get_drvinfo(struct net_device *dev, void __user *useraddr)
|
|
|
rc = ops->get_sset_count(dev, ETH_SS_PRIV_FLAGS);
|
|
|
if (rc >= 0)
|
|
|
info.n_priv_flags = rc;
|
|
|
- } else {
|
|
|
- /* code path for obsolete hooks */
|
|
|
-
|
|
|
- if (ops->self_test_count)
|
|
|
- info.testinfo_len = ops->self_test_count(dev);
|
|
|
- if (ops->get_stats_count)
|
|
|
- info.n_stats = ops->get_stats_count(dev);
|
|
|
}
|
|
|
if (ops->get_regs_len)
|
|
|
info.regdump_len = ops->get_regs_len(dev);
|
|
@@ -684,16 +677,10 @@ static int ethtool_self_test(struct net_device *dev, char __user *useraddr)
|
|
|
u64 *data;
|
|
|
int ret, test_len;
|
|
|
|
|
|
- if (!ops->self_test)
|
|
|
- return -EOPNOTSUPP;
|
|
|
- if (!ops->get_sset_count && !ops->self_test_count)
|
|
|
+ if (!ops->self_test || !ops->get_sset_count)
|
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
- if (ops->get_sset_count)
|
|
|
- test_len = ops->get_sset_count(dev, ETH_SS_TEST);
|
|
|
- else
|
|
|
- /* code path for obsolete hook */
|
|
|
- test_len = ops->self_test_count(dev);
|
|
|
+ test_len = ops->get_sset_count(dev, ETH_SS_TEST);
|
|
|
if (test_len < 0)
|
|
|
return test_len;
|
|
|
WARN_ON(test_len == 0);
|
|
@@ -728,36 +715,17 @@ static int ethtool_get_strings(struct net_device *dev, void __user *useraddr)
|
|
|
u8 *data;
|
|
|
int ret;
|
|
|
|
|
|
- if (!ops->get_strings)
|
|
|
+ if (!ops->get_strings || !ops->get_sset_count)
|
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
if (copy_from_user(&gstrings, useraddr, sizeof(gstrings)))
|
|
|
return -EFAULT;
|
|
|
|
|
|
- if (ops->get_sset_count) {
|
|
|
- ret = ops->get_sset_count(dev, gstrings.string_set);
|
|
|
- if (ret < 0)
|
|
|
- return ret;
|
|
|
-
|
|
|
- gstrings.len = ret;
|
|
|
- } else {
|
|
|
- /* code path for obsolete hooks */
|
|
|
-
|
|
|
- switch (gstrings.string_set) {
|
|
|
- case ETH_SS_TEST:
|
|
|
- if (!ops->self_test_count)
|
|
|
- return -EOPNOTSUPP;
|
|
|
- gstrings.len = ops->self_test_count(dev);
|
|
|
- break;
|
|
|
- case ETH_SS_STATS:
|
|
|
- if (!ops->get_stats_count)
|
|
|
- return -EOPNOTSUPP;
|
|
|
- gstrings.len = ops->get_stats_count(dev);
|
|
|
- break;
|
|
|
- default:
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
- }
|
|
|
+ ret = ops->get_sset_count(dev, gstrings.string_set);
|
|
|
+ if (ret < 0)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ gstrings.len = ret;
|
|
|
|
|
|
data = kmalloc(gstrings.len * ETH_GSTRING_LEN, GFP_USER);
|
|
|
if (!data)
|
|
@@ -798,16 +766,10 @@ static int ethtool_get_stats(struct net_device *dev, void __user *useraddr)
|
|
|
u64 *data;
|
|
|
int ret, n_stats;
|
|
|
|
|
|
- if (!ops->get_ethtool_stats)
|
|
|
- return -EOPNOTSUPP;
|
|
|
- if (!ops->get_sset_count && !ops->get_stats_count)
|
|
|
+ if (!ops->get_ethtool_stats || !ops->get_sset_count)
|
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
- if (ops->get_sset_count)
|
|
|
- n_stats = ops->get_sset_count(dev, ETH_SS_STATS);
|
|
|
- else
|
|
|
- /* code path for obsolete hook */
|
|
|
- n_stats = ops->get_stats_count(dev);
|
|
|
+ n_stats = ops->get_sset_count(dev, ETH_SS_STATS);
|
|
|
if (n_stats < 0)
|
|
|
return n_stats;
|
|
|
WARN_ON(n_stats == 0);
|