net: provide a default dev->ethtool_ops
Instead of forcing device drivers to provide empty ethtool_ops or tweak net/core/ethtool.c again, we could provide a generic ethtool_ops. This occurred to me when I wanted to add GSO support to GRE tunnels. ethtool -k support should be generic for all drivers. Signed-off-by: Eric Dumazet <edumazet@google.com> Cc: Ben Hutchings <bhutchings@solarflare.com> Cc: Maciej Żenczykowski <maze@google.com> Reviewed-by: Ben Hutchings <bhutchings@solarflare.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Родитель
828de4f6bf
Коммит
2c60db0370
|
@ -5974,6 +5974,8 @@ struct netdev_queue *dev_ingress_queue_create(struct net_device *dev)
|
|||
return queue;
|
||||
}
|
||||
|
||||
static const struct ethtool_ops default_ethtool_ops;
|
||||
|
||||
/**
|
||||
* alloc_netdev_mqs - allocate network device
|
||||
* @sizeof_priv: size of private data to allocate space for
|
||||
|
@ -6061,6 +6063,8 @@ struct net_device *alloc_netdev_mqs(int sizeof_priv, const char *name,
|
|||
|
||||
strcpy(dev->name, name);
|
||||
dev->group = INIT_NETDEV_GROUP;
|
||||
if (!dev->ethtool_ops)
|
||||
dev->ethtool_ops = &default_ethtool_ops;
|
||||
return dev;
|
||||
|
||||
free_all:
|
||||
|
|
|
@ -1426,18 +1426,6 @@ int dev_ethtool(struct net *net, struct ifreq *ifr)
|
|||
if (copy_from_user(ðcmd, useraddr, sizeof(ethcmd)))
|
||||
return -EFAULT;
|
||||
|
||||
if (!dev->ethtool_ops) {
|
||||
/* A few commands do not require any driver support,
|
||||
* are unprivileged, and do not change anything, so we
|
||||
* can take a shortcut to them. */
|
||||
if (ethcmd == ETHTOOL_GDRVINFO)
|
||||
return ethtool_get_drvinfo(dev, useraddr);
|
||||
else if (ethcmd == ETHTOOL_GET_TS_INFO)
|
||||
return ethtool_get_ts_info(dev, useraddr);
|
||||
else
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
|
||||
/* Allow some commands to be done by anyone */
|
||||
switch (ethcmd) {
|
||||
case ETHTOOL_GSET:
|
||||
|
|
Загрузка…
Ссылка в новой задаче