mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-05 16:37:50 +00:00
net: macvlan: convert to ndo_hwtstamp_get() / ndo_hwtstamp_set()
macvlan is one of the stackable net devices which pass the hardware timestamping ops to the real device through ndo_eth_ioctl(). This prevents converting any device driver to the new hwtimestamping API without regressions. Remove that limitation in macvlan by using the newly introduced helpers for timestamping through lower devices, that handle both the new and the old driver API. macvlan only implements ndo_eth_ioctl() for these 2 operations, so delete that method. Signed-off-by: Maxim Georgiev <glipus@gmail.com> Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com> Reviewed-by: Jacob Keller <jacob.e.keller@intel.com> Link: https://lore.kernel.org/r/20230801142824.1772134-5-vladimir.oltean@nxp.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
65c9fde15a
commit
0bca3f7f9a
1 changed files with 14 additions and 20 deletions
|
@ -868,31 +868,24 @@ static int macvlan_change_mtu(struct net_device *dev, int new_mtu)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int macvlan_eth_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
||||
static int macvlan_hwtstamp_get(struct net_device *dev,
|
||||
struct kernel_hwtstamp_config *cfg)
|
||||
{
|
||||
struct net_device *real_dev = macvlan_dev_real_dev(dev);
|
||||
const struct net_device_ops *ops = real_dev->netdev_ops;
|
||||
struct ifreq ifrr;
|
||||
int err = -EOPNOTSUPP;
|
||||
|
||||
strscpy(ifrr.ifr_name, real_dev->name, IFNAMSIZ);
|
||||
ifrr.ifr_ifru = ifr->ifr_ifru;
|
||||
return generic_hwtstamp_get_lower(real_dev, cfg);
|
||||
}
|
||||
|
||||
switch (cmd) {
|
||||
case SIOCSHWTSTAMP:
|
||||
if (!net_eq(dev_net(dev), &init_net))
|
||||
break;
|
||||
fallthrough;
|
||||
case SIOCGHWTSTAMP:
|
||||
if (netif_device_present(real_dev) && ops->ndo_eth_ioctl)
|
||||
err = ops->ndo_eth_ioctl(real_dev, &ifrr, cmd);
|
||||
break;
|
||||
}
|
||||
static int macvlan_hwtstamp_set(struct net_device *dev,
|
||||
struct kernel_hwtstamp_config *cfg,
|
||||
struct netlink_ext_ack *extack)
|
||||
{
|
||||
struct net_device *real_dev = macvlan_dev_real_dev(dev);
|
||||
|
||||
if (!err)
|
||||
ifr->ifr_ifru = ifrr.ifr_ifru;
|
||||
if (!net_eq(dev_net(dev), &init_net))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
return err;
|
||||
return generic_hwtstamp_set_lower(real_dev, cfg, extack);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1193,7 +1186,6 @@ static const struct net_device_ops macvlan_netdev_ops = {
|
|||
.ndo_stop = macvlan_stop,
|
||||
.ndo_start_xmit = macvlan_start_xmit,
|
||||
.ndo_change_mtu = macvlan_change_mtu,
|
||||
.ndo_eth_ioctl = macvlan_eth_ioctl,
|
||||
.ndo_fix_features = macvlan_fix_features,
|
||||
.ndo_change_rx_flags = macvlan_change_rx_flags,
|
||||
.ndo_set_mac_address = macvlan_set_mac_address,
|
||||
|
@ -1212,6 +1204,8 @@ static const struct net_device_ops macvlan_netdev_ops = {
|
|||
#endif
|
||||
.ndo_get_iflink = macvlan_dev_get_iflink,
|
||||
.ndo_features_check = passthru_features_check,
|
||||
.ndo_hwtstamp_get = macvlan_hwtstamp_get,
|
||||
.ndo_hwtstamp_set = macvlan_hwtstamp_set,
|
||||
};
|
||||
|
||||
static void macvlan_dev_free(struct net_device *dev)
|
||||
|
|
Loading…
Reference in a new issue