Commit cfcad56b authored by Jakub Kicinski's avatar Jakub Kicinski

Merge branch 'net-define-new-hwtstamp-flag-and-return-it-to-userspace'

Hangbin Liu says:

====================
net: define new hwtstamp flag and return it to userspace

This patchset defined the new hwtstamp flag HWTSTAMP_FLAG_BONDED_PHC_INDEX
to make userspace program build pass with old kernel header by settting ifdef.

Let's also return the flag when do SIOC[G/S]HWTSTAMP to let userspace know
that it's necessary for a given netdev.
====================

Link: https://lore.kernel.org/r/20211229080938.231324-1-liuhangbin@gmail.comSigned-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 9ed319e4 cfe355c5
...@@ -4124,28 +4124,38 @@ static int bond_eth_ioctl(struct net_device *bond_dev, struct ifreq *ifr, int cm ...@@ -4124,28 +4124,38 @@ static int bond_eth_ioctl(struct net_device *bond_dev, struct ifreq *ifr, int cm
break; break;
case SIOCSHWTSTAMP: case SIOCSHWTSTAMP:
case SIOCGHWTSTAMP:
if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg))) if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
return -EFAULT; return -EFAULT;
if (cfg.flags & HWTSTAMP_FLAG_BONDED_PHC_INDEX) { if (!(cfg.flags & HWTSTAMP_FLAG_BONDED_PHC_INDEX))
return -EOPNOTSUPP;
fallthrough;
case SIOCGHWTSTAMP:
rcu_read_lock(); rcu_read_lock();
real_dev = bond_option_active_slave_get_rcu(bond); real_dev = bond_option_active_slave_get_rcu(bond);
rcu_read_unlock(); rcu_read_unlock();
if (real_dev) { if (!real_dev)
return -EOPNOTSUPP;
strscpy_pad(ifrr.ifr_name, real_dev->name, IFNAMSIZ); strscpy_pad(ifrr.ifr_name, real_dev->name, IFNAMSIZ);
ifrr.ifr_ifru = ifr->ifr_ifru; ifrr.ifr_ifru = ifr->ifr_ifru;
ops = real_dev->netdev_ops; ops = real_dev->netdev_ops;
if (netif_device_present(real_dev) && ops->ndo_eth_ioctl) { if (netif_device_present(real_dev) && ops->ndo_eth_ioctl) {
res = ops->ndo_eth_ioctl(real_dev, &ifrr, cmd); res = ops->ndo_eth_ioctl(real_dev, &ifrr, cmd);
if (res)
return res;
if (!res)
ifr->ifr_ifru = ifrr.ifr_ifru; ifr->ifr_ifru = ifrr.ifr_ifru;
if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
return -EFAULT;
return res; /* Set the BOND_PHC_INDEX flag to notify user space */
} cfg.flags |= HWTSTAMP_FLAG_BONDED_PHC_INDEX;
}
return copy_to_user(ifr->ifr_data, &cfg, sizeof(cfg)) ?
-EFAULT : 0;
} }
fallthrough; fallthrough;
default: default:
......
...@@ -87,6 +87,7 @@ enum hwtstamp_flags { ...@@ -87,6 +87,7 @@ enum hwtstamp_flags {
* will be the PHC index. * will be the PHC index.
*/ */
HWTSTAMP_FLAG_BONDED_PHC_INDEX = (1<<0), HWTSTAMP_FLAG_BONDED_PHC_INDEX = (1<<0),
#define HWTSTAMP_FLAG_BONDED_PHC_INDEX HWTSTAMP_FLAG_BONDED_PHC_INDEX
HWTSTAMP_FLAG_LAST = HWTSTAMP_FLAG_BONDED_PHC_INDEX, HWTSTAMP_FLAG_LAST = HWTSTAMP_FLAG_BONDED_PHC_INDEX,
HWTSTAMP_FLAG_MASK = (HWTSTAMP_FLAG_LAST - 1) | HWTSTAMP_FLAG_LAST HWTSTAMP_FLAG_MASK = (HWTSTAMP_FLAG_LAST - 1) | HWTSTAMP_FLAG_LAST
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment