From: Carolina Jubran Date: Thu, 30 Oct 2025 10:25:09 +0000 (+0200) Subject: IB/IPoIB: Add support for hwtstamp get/set ndos X-Git-Tag: v6.19-rc1~170^2~264^2~1 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=250da3c8fe811b14fd5e610760ed7469166fd0f7;p=thirdparty%2Fkernel%2Flinux.git IB/IPoIB: Add support for hwtstamp get/set ndos Add support for the ndo_hwtstamp_get and ndo_hwtstamp_set operations in IPoIB. This allows lower devices to handle hardware timestamp configuration through the new ndos instead of the legacy ioctls. Signed-off-by: Carolina Jubran Signed-off-by: Tariq Toukan Link: https://patch.msgid.link/1761819910-1011051-6-git-send-email-tariqt@nvidia.com Signed-off-by: Jakub Kicinski --- diff --git a/drivers/infiniband/ulp/ipoib/ipoib_main.c b/drivers/infiniband/ulp/ipoib/ipoib_main.c index 5b4d76e97437d..300afc27c5612 100644 --- a/drivers/infiniband/ulp/ipoib/ipoib_main.c +++ b/drivers/infiniband/ulp/ipoib/ipoib_main.c @@ -1825,6 +1825,31 @@ static int ipoib_ioctl(struct net_device *dev, struct ifreq *ifr, return priv->rn_ops->ndo_eth_ioctl(dev, ifr, cmd); } +static int ipoib_hwtstamp_get(struct net_device *dev, + struct kernel_hwtstamp_config *config) +{ + struct ipoib_dev_priv *priv = ipoib_priv(dev); + + if (!priv->rn_ops->ndo_hwtstamp_get) + /* legacy */ + return dev_eth_ioctl(dev, config->ifr, SIOCGHWTSTAMP); + + return priv->rn_ops->ndo_hwtstamp_get(dev, config); +} + +static int ipoib_hwtstamp_set(struct net_device *dev, + struct kernel_hwtstamp_config *config, + struct netlink_ext_ack *extack) +{ + struct ipoib_dev_priv *priv = ipoib_priv(dev); + + if (!priv->rn_ops->ndo_hwtstamp_set) + /* legacy */ + return dev_eth_ioctl(dev, config->ifr, SIOCSHWTSTAMP); + + return priv->rn_ops->ndo_hwtstamp_set(dev, config, extack); +} + static int ipoib_dev_init(struct net_device *dev) { struct ipoib_dev_priv *priv = ipoib_priv(dev); @@ -2149,6 +2174,8 @@ static const struct net_device_ops ipoib_netdev_ops_pf = { .ndo_set_mac_address = ipoib_set_mac, .ndo_get_stats64 = ipoib_get_stats, .ndo_eth_ioctl = ipoib_ioctl, + .ndo_hwtstamp_get = ipoib_hwtstamp_get, + .ndo_hwtstamp_set = ipoib_hwtstamp_set, }; static const struct net_device_ops ipoib_netdev_ops_vf = { @@ -2164,6 +2191,8 @@ static const struct net_device_ops ipoib_netdev_ops_vf = { .ndo_get_iflink = ipoib_get_iflink, .ndo_get_stats64 = ipoib_get_stats, .ndo_eth_ioctl = ipoib_ioctl, + .ndo_hwtstamp_get = ipoib_hwtstamp_get, + .ndo_hwtstamp_set = ipoib_hwtstamp_set, }; static const struct net_device_ops ipoib_netdev_default_pf = {