[NET]: ethtool_perm_addr only has one implementation
All drivers implement ethtool get_perm_addr the same way -- by calling the generic function. So we can inline the generic function into the caller and avoid going through the drivers. Signed-off-by: Matthew Wilcox <matthew@wil.cx> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
61a44b9c4b
commit
313674afa8
@ -95,18 +95,6 @@ int ethtool_op_set_tso(struct net_device *dev, u32 data)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int ethtool_op_get_perm_addr(struct net_device *dev, struct ethtool_perm_addr *addr, u8 *data)
|
||||
{
|
||||
unsigned char len = dev->addr_len;
|
||||
if ( addr->size < len )
|
||||
return -ETOOSMALL;
|
||||
|
||||
addr->size = len;
|
||||
memcpy(data, dev->perm_addr, len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
u32 ethtool_op_get_ufo(struct net_device *dev)
|
||||
{
|
||||
return (dev->features & NETIF_F_UFO) != 0;
|
||||
@ -779,34 +767,20 @@ static int ethtool_get_stats(struct net_device *dev, void __user *useraddr)
|
||||
static int ethtool_get_perm_addr(struct net_device *dev, void __user *useraddr)
|
||||
{
|
||||
struct ethtool_perm_addr epaddr;
|
||||
u8 *data;
|
||||
int ret;
|
||||
|
||||
if (!dev->ethtool_ops->get_perm_addr)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
if (copy_from_user(&epaddr,useraddr,sizeof(epaddr)))
|
||||
if (copy_from_user(&epaddr, useraddr, sizeof(epaddr)))
|
||||
return -EFAULT;
|
||||
|
||||
data = kmalloc(epaddr.size, GFP_USER);
|
||||
if (!data)
|
||||
return -ENOMEM;
|
||||
if (epaddr.size < dev->addr_len)
|
||||
return -ETOOSMALL;
|
||||
epaddr.size = dev->addr_len;
|
||||
|
||||
ret = dev->ethtool_ops->get_perm_addr(dev,&epaddr,data);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = -EFAULT;
|
||||
if (copy_to_user(useraddr, &epaddr, sizeof(epaddr)))
|
||||
goto out;
|
||||
return -EFAULT;
|
||||
useraddr += sizeof(epaddr);
|
||||
if (copy_to_user(useraddr, data, epaddr.size))
|
||||
goto out;
|
||||
ret = 0;
|
||||
|
||||
out:
|
||||
kfree(data);
|
||||
return ret;
|
||||
if (copy_to_user(useraddr, dev->perm_addr, epaddr.size))
|
||||
return -EFAULT;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* The main entry point in this file. Called from net/core/dev.c */
|
||||
@ -976,7 +950,6 @@ int dev_ethtool(struct ifreq *ifr)
|
||||
|
||||
EXPORT_SYMBOL(dev_ethtool);
|
||||
EXPORT_SYMBOL(ethtool_op_get_link);
|
||||
EXPORT_SYMBOL_GPL(ethtool_op_get_perm_addr);
|
||||
EXPORT_SYMBOL(ethtool_op_get_sg);
|
||||
EXPORT_SYMBOL(ethtool_op_get_tso);
|
||||
EXPORT_SYMBOL(ethtool_op_get_tx_csum);
|
||||
|
Reference in New Issue
Block a user