Commit cfcad56b authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

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.com


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 9ed319e4 cfe355c5
Loading
Loading
Loading
Loading
+26 −16
Original line number Diff line number Diff line
@@ -4124,28 +4124,38 @@ static int bond_eth_ioctl(struct net_device *bond_dev, struct ifreq *ifr, int cm

		break;
	case SIOCSHWTSTAMP:
	case SIOCGHWTSTAMP:
		if (copy_from_user(&cfg, ifr->ifr_data, sizeof(cfg)))
			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();
		real_dev = bond_option_active_slave_get_rcu(bond);
		rcu_read_unlock();
			if (real_dev) {
		if (!real_dev)
			return -EOPNOTSUPP;

		strscpy_pad(ifrr.ifr_name, real_dev->name, IFNAMSIZ);
		ifrr.ifr_ifru = ifr->ifr_ifru;

		ops = real_dev->netdev_ops;
		if (netif_device_present(real_dev) && ops->ndo_eth_ioctl) {
			res = ops->ndo_eth_ioctl(real_dev, &ifrr, cmd);
			if (res)
				return res;

					if (!res)
			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;
	default:
+1 −0
Original line number Diff line number Diff line
@@ -87,6 +87,7 @@ enum hwtstamp_flags {
	 * will be the PHC index.
	 */
	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_MASK = (HWTSTAMP_FLAG_LAST - 1) | HWTSTAMP_FLAG_LAST