]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
mlx4: convert to ndo_hwtstamp API
authorVadim Fedorenko <vadim.fedorenko@linux.dev>
Thu, 23 Oct 2025 22:04:53 +0000 (22:04 +0000)
committerJakub Kicinski <kuba@kernel.org>
Tue, 28 Oct 2025 01:04:36 +0000 (18:04 -0700)
Convert driver to use .ndo_hwtstamp_get()/.ndo_hwtstamp_set() callbacks.
mlx4_en_ioctl() becomes empty, remove it.

Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Signed-off-by: Vadim Fedorenko <vadim.fedorenko@linux.dev>
Link: https://patch.msgid.link/20251023220457.3201122-3-vadim.fedorenko@linux.dev
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mellanox/mlx4/en_netdev.c
drivers/net/ethernet/mellanox/mlx4/mlx4_en.h

index 308b4458e0d445692a116d271fe9e5228414fdab..81bf8908b8974aee9211156f221fff76a98b4842 100644 (file)
@@ -2420,21 +2420,22 @@ static int mlx4_en_change_mtu(struct net_device *dev, int new_mtu)
        return 0;
 }
 
-static int mlx4_en_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
+static int mlx4_en_hwtstamp_set(struct net_device *dev,
+                               struct kernel_hwtstamp_config *config,
+                               struct netlink_ext_ack *extack)
 {
        struct mlx4_en_priv *priv = netdev_priv(dev);
        struct mlx4_en_dev *mdev = priv->mdev;
-       struct hwtstamp_config config;
-
-       if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
-               return -EFAULT;
 
        /* device doesn't support time stamping */
-       if (!(mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_TS))
+       if (!(mdev->dev->caps.flags2 & MLX4_DEV_CAP_FLAG2_TS)) {
+               NL_SET_ERR_MSG_MOD(extack,
+                                  "device doesn't support time stamping");
                return -EINVAL;
+       }
 
        /* TX HW timestamp */
-       switch (config.tx_type) {
+       switch (config->tx_type) {
        case HWTSTAMP_TX_OFF:
        case HWTSTAMP_TX_ON:
                break;
@@ -2443,7 +2444,7 @@ static int mlx4_en_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
        }
 
        /* RX HW timestamp */
-       switch (config.rx_filter) {
+       switch (config->rx_filter) {
        case HWTSTAMP_FILTER_NONE:
                break;
        case HWTSTAMP_FILTER_ALL:
@@ -2461,39 +2462,27 @@ static int mlx4_en_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
        case HWTSTAMP_FILTER_PTP_V2_SYNC:
        case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
        case HWTSTAMP_FILTER_NTP_ALL:
-               config.rx_filter = HWTSTAMP_FILTER_ALL;
+               config->rx_filter = HWTSTAMP_FILTER_ALL;
                break;
        default:
                return -ERANGE;
        }
 
        if (mlx4_en_reset_config(dev, config, dev->features)) {
-               config.tx_type = HWTSTAMP_TX_OFF;
-               config.rx_filter = HWTSTAMP_FILTER_NONE;
+               config->tx_type = HWTSTAMP_TX_OFF;
+               config->rx_filter = HWTSTAMP_FILTER_NONE;
        }
 
-       return copy_to_user(ifr->ifr_data, &config,
-                           sizeof(config)) ? -EFAULT : 0;
+       return 0;
 }
 
-static int mlx4_en_hwtstamp_get(struct net_device *dev, struct ifreq *ifr)
+static int mlx4_en_hwtstamp_get(struct net_device *dev,
+                               struct kernel_hwtstamp_config *config)
 {
        struct mlx4_en_priv *priv = netdev_priv(dev);
 
-       return copy_to_user(ifr->ifr_data, &priv->hwtstamp_config,
-                           sizeof(priv->hwtstamp_config)) ? -EFAULT : 0;
-}
-
-static int mlx4_en_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
-{
-       switch (cmd) {
-       case SIOCSHWTSTAMP:
-               return mlx4_en_hwtstamp_set(dev, ifr);
-       case SIOCGHWTSTAMP:
-               return mlx4_en_hwtstamp_get(dev, ifr);
-       default:
-               return -EOPNOTSUPP;
-       }
+       *config = priv->hwtstamp_config;
+       return 0;
 }
 
 static netdev_features_t mlx4_en_fix_features(struct net_device *netdev,
@@ -2560,7 +2549,7 @@ static int mlx4_en_set_features(struct net_device *netdev,
        }
 
        if (reset) {
-               ret = mlx4_en_reset_config(netdev, priv->hwtstamp_config,
+               ret = mlx4_en_reset_config(netdev, &priv->hwtstamp_config,
                                           features);
                if (ret)
                        return ret;
@@ -2844,7 +2833,6 @@ static const struct net_device_ops mlx4_netdev_ops = {
        .ndo_set_mac_address    = mlx4_en_set_mac,
        .ndo_validate_addr      = eth_validate_addr,
        .ndo_change_mtu         = mlx4_en_change_mtu,
-       .ndo_eth_ioctl          = mlx4_en_ioctl,
        .ndo_tx_timeout         = mlx4_en_tx_timeout,
        .ndo_vlan_rx_add_vid    = mlx4_en_vlan_rx_add_vid,
        .ndo_vlan_rx_kill_vid   = mlx4_en_vlan_rx_kill_vid,
@@ -2858,6 +2846,8 @@ static const struct net_device_ops mlx4_netdev_ops = {
        .ndo_features_check     = mlx4_en_features_check,
        .ndo_set_tx_maxrate     = mlx4_en_set_tx_maxrate,
        .ndo_bpf                = mlx4_xdp,
+       .ndo_hwtstamp_get       = mlx4_en_hwtstamp_get,
+       .ndo_hwtstamp_set       = mlx4_en_hwtstamp_set,
 };
 
 static const struct net_device_ops mlx4_netdev_ops_master = {
@@ -3512,7 +3502,7 @@ out:
 }
 
 int mlx4_en_reset_config(struct net_device *dev,
-                        struct hwtstamp_config ts_config,
+                        struct kernel_hwtstamp_config *ts_config,
                         netdev_features_t features)
 {
        struct mlx4_en_priv *priv = netdev_priv(dev);
@@ -3522,8 +3512,8 @@ int mlx4_en_reset_config(struct net_device *dev,
        int port_up = 0;
        int err = 0;
 
-       if (priv->hwtstamp_config.tx_type == ts_config.tx_type &&
-           priv->hwtstamp_config.rx_filter == ts_config.rx_filter &&
+       if (priv->hwtstamp_config.tx_type == ts_config->tx_type &&
+           priv->hwtstamp_config.rx_filter == ts_config->rx_filter &&
            !DEV_FEATURE_CHANGED(dev, features, NETIF_F_HW_VLAN_CTAG_RX) &&
            !DEV_FEATURE_CHANGED(dev, features, NETIF_F_RXFCS))
                return 0; /* Nothing to change */
@@ -3542,7 +3532,7 @@ int mlx4_en_reset_config(struct net_device *dev,
        mutex_lock(&mdev->state_lock);
 
        memcpy(&new_prof, priv->prof, sizeof(struct mlx4_en_port_profile));
-       memcpy(&new_prof.hwtstamp_config, &ts_config, sizeof(ts_config));
+       memcpy(&new_prof.hwtstamp_config, ts_config, sizeof(*ts_config));
 
        err = mlx4_en_try_alloc_resources(priv, tmp, &new_prof, true);
        if (err)
@@ -3560,7 +3550,7 @@ int mlx4_en_reset_config(struct net_device *dev,
                        dev->features |= NETIF_F_HW_VLAN_CTAG_RX;
                else
                        dev->features &= ~NETIF_F_HW_VLAN_CTAG_RX;
-       } else if (ts_config.rx_filter == HWTSTAMP_FILTER_NONE) {
+       } else if (ts_config->rx_filter == HWTSTAMP_FILTER_NONE) {
                /* RX time-stamping is OFF, update the RX vlan offload
                 * to the latest wanted state
                 */
@@ -3581,7 +3571,7 @@ int mlx4_en_reset_config(struct net_device *dev,
         * Regardless of the caller's choice,
         * Turn Off RX vlan offload in case of time-stamping is ON
         */
-       if (ts_config.rx_filter != HWTSTAMP_FILTER_NONE) {
+       if (ts_config->rx_filter != HWTSTAMP_FILTER_NONE) {
                if (dev->features & NETIF_F_HW_VLAN_CTAG_RX)
                        en_warn(priv, "Turning off RX vlan offload since RX time-stamping is ON\n");
                dev->features &= ~NETIF_F_HW_VLAN_CTAG_RX;
index ad0d91a7518480808af253b85c947f947a54a6cb..aab97694f86b375bef9853c6143951a9c876284c 100644 (file)
@@ -388,7 +388,7 @@ struct mlx4_en_port_profile {
        u8 num_up;
        int rss_rings;
        int inline_thold;
-       struct hwtstamp_config hwtstamp_config;
+       struct kernel_hwtstamp_config hwtstamp_config;
 };
 
 struct mlx4_en_profile {
@@ -612,7 +612,7 @@ struct mlx4_en_priv {
        bool wol;
        struct device *ddev;
        struct hlist_head mac_hash[MLX4_EN_MAC_HASH_SIZE];
-       struct hwtstamp_config hwtstamp_config;
+       struct kernel_hwtstamp_config hwtstamp_config;
        u32 counter_index;
 
 #ifdef CONFIG_MLX4_EN_DCB
@@ -780,7 +780,7 @@ void mlx4_en_ptp_overflow_check(struct mlx4_en_dev *mdev);
 
 int mlx4_en_moderation_update(struct mlx4_en_priv *priv);
 int mlx4_en_reset_config(struct net_device *dev,
-                        struct hwtstamp_config ts_config,
+                        struct kernel_hwtstamp_config *ts_config,
                         netdev_features_t new_features);
 void mlx4_en_update_pfc_stats_bitmap(struct mlx4_dev *dev,
                                     struct mlx4_en_stats_bitmap *stats_bitmap,