Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'convert-mlx5e-and-ipoib-to-ndo_hwtstamp_get-set'

Tariq Toukan says:

====================
Convert mlx5e and IPoIB to ndo_hwtstamp_get/set

This series by Carolina migrates mlx5e and IPoIB to the
ndo_hwtstamp_get/set interface and removes legacy hardware timestamp
ioctl handling. While doing so, it also cleans up naming and removes
redundant code.

No functional change in timestamp behavior.

Cleanup patches:
- net/mlx5e: Remove redundant tstamp pointer from channel structures
- net/mlx5e: Remove unnecessary tstamp local variable in mlx5i_complete_rx_cqe
- net/mlx5e: Rename hwstamp functions to hwtstamp
- net/mlx5e: Rename timestamp fields to hwtstamp_config

Add suppport in ipoib:
- IB/IPoIB: Add support for hwtstamp get/set ndos

Convert mlx5:
- net/mlx5e: Convert to new hwtstamp_get/set interface
====================

Link: https://patch.msgid.link/1761819910-1011051-1-git-send-email-tariqt@nvidia.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+106 -74
+29
drivers/infiniband/ulp/ipoib/ipoib_main.c
··· 1825 1825 return priv->rn_ops->ndo_eth_ioctl(dev, ifr, cmd); 1826 1826 } 1827 1827 1828 + static int ipoib_hwtstamp_get(struct net_device *dev, 1829 + struct kernel_hwtstamp_config *config) 1830 + { 1831 + struct ipoib_dev_priv *priv = ipoib_priv(dev); 1832 + 1833 + if (!priv->rn_ops->ndo_hwtstamp_get) 1834 + /* legacy */ 1835 + return dev_eth_ioctl(dev, config->ifr, SIOCGHWTSTAMP); 1836 + 1837 + return priv->rn_ops->ndo_hwtstamp_get(dev, config); 1838 + } 1839 + 1840 + static int ipoib_hwtstamp_set(struct net_device *dev, 1841 + struct kernel_hwtstamp_config *config, 1842 + struct netlink_ext_ack *extack) 1843 + { 1844 + struct ipoib_dev_priv *priv = ipoib_priv(dev); 1845 + 1846 + if (!priv->rn_ops->ndo_hwtstamp_set) 1847 + /* legacy */ 1848 + return dev_eth_ioctl(dev, config->ifr, SIOCSHWTSTAMP); 1849 + 1850 + return priv->rn_ops->ndo_hwtstamp_set(dev, config, extack); 1851 + } 1852 + 1828 1853 static int ipoib_dev_init(struct net_device *dev) 1829 1854 { 1830 1855 struct ipoib_dev_priv *priv = ipoib_priv(dev); ··· 2174 2149 .ndo_set_mac_address = ipoib_set_mac, 2175 2150 .ndo_get_stats64 = ipoib_get_stats, 2176 2151 .ndo_eth_ioctl = ipoib_ioctl, 2152 + .ndo_hwtstamp_get = ipoib_hwtstamp_get, 2153 + .ndo_hwtstamp_set = ipoib_hwtstamp_set, 2177 2154 }; 2178 2155 2179 2156 static const struct net_device_ops ipoib_netdev_ops_vf = { ··· 2191 2164 .ndo_get_iflink = ipoib_get_iflink, 2192 2165 .ndo_get_stats64 = ipoib_get_stats, 2193 2166 .ndo_eth_ioctl = ipoib_ioctl, 2167 + .ndo_hwtstamp_get = ipoib_hwtstamp_get, 2168 + .ndo_hwtstamp_set = ipoib_hwtstamp_set, 2194 2169 }; 2195 2170 2196 2171 static const struct net_device_ops ipoib_netdev_default_pf = {
+7 -5
drivers/net/ethernet/mellanox/mlx5/core/en.h
··· 696 696 struct mlx5e_rq_stats *stats; 697 697 struct mlx5e_cq cq; 698 698 struct mlx5e_cq_decomp cqd; 699 - struct hwtstamp_config *tstamp; 699 + struct kernel_hwtstamp_config *hwtstamp_config; 700 700 struct mlx5_clock *clock; 701 701 struct mlx5e_icosq *icosq; 702 702 struct mlx5e_priv *priv; ··· 784 784 /* control */ 785 785 struct mlx5e_priv *priv; 786 786 struct mlx5_core_dev *mdev; 787 - struct hwtstamp_config *tstamp; 788 787 DECLARE_BITMAP(state, MLX5E_CHANNEL_NUM_STATES); 789 788 int ix; 790 789 int vec_ix; ··· 917 918 u8 max_opened_tc; 918 919 bool tx_ptp_opened; 919 920 bool rx_ptp_opened; 920 - struct hwtstamp_config tstamp; 921 + struct kernel_hwtstamp_config hwtstamp_config; 921 922 u16 q_counter[MLX5_SD_MAX_GROUP_SZ]; 922 923 u16 drop_rq_q_counter; 923 924 struct notifier_block events_nb; ··· 1026 1027 u64 *buf); 1027 1028 void mlx5e_set_rx_mode_work(struct work_struct *work); 1028 1029 1029 - int mlx5e_hwstamp_set(struct mlx5e_priv *priv, struct ifreq *ifr); 1030 - int mlx5e_hwstamp_get(struct mlx5e_priv *priv, struct ifreq *ifr); 1030 + int mlx5e_hwtstamp_set(struct mlx5e_priv *priv, 1031 + struct kernel_hwtstamp_config *config, 1032 + struct netlink_ext_ack *extack); 1033 + int mlx5e_hwtstamp_get(struct mlx5e_priv *priv, 1034 + struct kernel_hwtstamp_config *config); 1031 1035 int mlx5e_modify_rx_cqe_compression_locked(struct mlx5e_priv *priv, bool val, bool rx_filter); 1032 1036 1033 1037 int mlx5e_vlan_rx_add_vid(struct net_device *dev, __always_unused __be16 proto,
+1 -2
drivers/net/ethernet/mellanox/mlx5/core/en/ptp.c
··· 713 713 rq->netdev = priv->netdev; 714 714 rq->priv = priv; 715 715 rq->clock = mdev->clock; 716 - rq->tstamp = &priv->tstamp; 716 + rq->hwtstamp_config = &priv->hwtstamp_config; 717 717 rq->mdev = mdev; 718 718 rq->hw_mtu = MLX5E_SW2HW_MTU(params, params->sw_mtu); 719 719 rq->stats = &c->priv->ptp_stats.rq; ··· 896 896 897 897 c->priv = priv; 898 898 c->mdev = priv->mdev; 899 - c->tstamp = &priv->tstamp; 900 899 c->pdev = mlx5_core_dma_dev(priv->mdev); 901 900 c->netdev = priv->netdev; 902 901 c->mkey_be = cpu_to_be32(priv->mdev->mlx5e_res.hw_objs.mkey);
-1
drivers/net/ethernet/mellanox/mlx5/core/en/ptp.h
··· 64 64 /* control */ 65 65 struct mlx5e_priv *priv; 66 66 struct mlx5_core_dev *mdev; 67 - struct hwtstamp_config *tstamp; 68 67 DECLARE_BITMAP(state, MLX5E_PTP_STATE_NUM_STATES); 69 68 struct mlx5_sq_bfreg *bfreg; 70 69 };
+2 -1
drivers/net/ethernet/mellanox/mlx5/core/en/reporter_rx.c
··· 318 318 struct devlink_fmsg *fmsg) 319 319 { 320 320 mlx5e_health_fmsg_named_obj_nest_start(fmsg, "PTP"); 321 - devlink_fmsg_u32_pair_put(fmsg, "filter_type", priv->tstamp.rx_filter); 321 + devlink_fmsg_u32_pair_put(fmsg, "filter_type", 322 + priv->hwtstamp_config.rx_filter); 322 323 mlx5e_rx_reporter_diagnose_generic_rq(&ptp_ch->rq, fmsg); 323 324 mlx5e_health_fmsg_named_obj_nest_end(fmsg); 324 325 }
+1 -2
drivers/net/ethernet/mellanox/mlx5/core/en/trap.c
··· 47 47 rq->netdev = priv->netdev; 48 48 rq->priv = priv; 49 49 rq->clock = mdev->clock; 50 - rq->tstamp = &priv->tstamp; 50 + rq->hwtstamp_config = &priv->hwtstamp_config; 51 51 rq->mdev = mdev; 52 52 rq->hw_mtu = MLX5E_SW2HW_MTU(params, params->sw_mtu); 53 53 rq->stats = &priv->trap_stats.rq; ··· 144 144 145 145 t->priv = priv; 146 146 t->mdev = priv->mdev; 147 - t->tstamp = &priv->tstamp; 148 147 t->pdev = mlx5_core_dma_dev(priv->mdev); 149 148 t->netdev = priv->netdev; 150 149 t->mkey_be = cpu_to_be32(priv->mdev->mlx5e_res.hw_objs.mkey);
-1
drivers/net/ethernet/mellanox/mlx5/core/en/trap.h
··· 22 22 /* control */ 23 23 struct mlx5e_priv *priv; 24 24 struct mlx5_core_dev *mdev; 25 - struct hwtstamp_config *tstamp; 26 25 DECLARE_BITMAP(state, MLX5E_CHANNEL_NUM_STATES); 27 26 28 27 struct mlx5e_params params;
+1 -1
drivers/net/ethernet/mellanox/mlx5/core/en/txrx.h
··· 92 92 void mlx5e_free_rx_descs(struct mlx5e_rq *rq); 93 93 void mlx5e_free_rx_missing_descs(struct mlx5e_rq *rq); 94 94 95 - static inline bool mlx5e_rx_hw_stamp(struct hwtstamp_config *config) 95 + static inline bool mlx5e_rx_hw_stamp(struct kernel_hwtstamp_config *config) 96 96 { 97 97 return config->rx_filter == HWTSTAMP_FILTER_ALL; 98 98 }
+1 -1
drivers/net/ethernet/mellanox/mlx5/core/en/xdp.c
··· 179 179 { 180 180 const struct mlx5e_xdp_buff *_ctx = (void *)ctx; 181 181 182 - if (unlikely(!mlx5e_rx_hw_stamp(_ctx->rq->tstamp))) 182 + if (unlikely(!mlx5e_rx_hw_stamp(_ctx->rq->hwtstamp_config))) 183 183 return -ENODATA; 184 184 185 185 *timestamp = mlx5e_cqe_ts_to_ns(_ctx->rq->ptp_cyc2time,
+1 -1
drivers/net/ethernet/mellanox/mlx5/core/en/xsk/setup.c
··· 71 71 rq->pdev = c->pdev; 72 72 rq->netdev = c->netdev; 73 73 rq->priv = c->priv; 74 - rq->tstamp = c->tstamp; 74 + rq->hwtstamp_config = &c->priv->hwtstamp_config; 75 75 rq->clock = mdev->clock; 76 76 rq->icosq = &c->icosq; 77 77 rq->ix = c->ix;
+1 -1
drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
··· 2273 2273 if (!MLX5_CAP_GEN(mdev, cqe_compression)) 2274 2274 return -EOPNOTSUPP; 2275 2275 2276 - rx_filter = priv->tstamp.rx_filter != HWTSTAMP_FILTER_NONE; 2276 + rx_filter = priv->hwtstamp_config.rx_filter != HWTSTAMP_FILTER_NONE; 2277 2277 err = mlx5e_modify_rx_cqe_compression_locked(priv, enable, rx_filter); 2278 2278 if (err) 2279 2279 return err;
+34 -30
drivers/net/ethernet/mellanox/mlx5/core/en_main.c
··· 735 735 rq->pdev = c->pdev; 736 736 rq->netdev = c->netdev; 737 737 rq->priv = c->priv; 738 - rq->tstamp = c->tstamp; 738 + rq->hwtstamp_config = &c->priv->hwtstamp_config; 739 739 rq->clock = mdev->clock; 740 740 rq->icosq = &c->icosq; 741 741 rq->ix = c->ix; ··· 2803 2803 2804 2804 c->priv = priv; 2805 2805 c->mdev = mdev; 2806 - c->tstamp = &priv->tstamp; 2807 2806 c->ix = ix; 2808 2807 c->vec_ix = vec_ix; 2809 2808 c->sd_ix = mlx5_sd_ch_ix_get_dev_ix(mdev, ix); ··· 3444 3445 3445 3446 void mlx5e_timestamp_init(struct mlx5e_priv *priv) 3446 3447 { 3447 - priv->tstamp.tx_type = HWTSTAMP_TX_OFF; 3448 - priv->tstamp.rx_filter = HWTSTAMP_FILTER_NONE; 3448 + priv->hwtstamp_config.tx_type = HWTSTAMP_TX_OFF; 3449 + priv->hwtstamp_config.rx_filter = HWTSTAMP_FILTER_NONE; 3449 3450 } 3450 3451 3451 3452 static void mlx5e_modify_admin_state(struct mlx5_core_dev *mdev, ··· 4740 4741 &new_params.ptp_rx, true); 4741 4742 } 4742 4743 4743 - int mlx5e_hwstamp_set(struct mlx5e_priv *priv, struct ifreq *ifr) 4744 + int mlx5e_hwtstamp_set(struct mlx5e_priv *priv, 4745 + struct kernel_hwtstamp_config *config, 4746 + struct netlink_ext_ack *extack) 4744 4747 { 4745 - struct hwtstamp_config config; 4746 4748 bool rx_cqe_compress_def; 4747 4749 bool ptp_rx; 4748 4750 int err; 4749 4751 4750 4752 if (!MLX5_CAP_GEN(priv->mdev, device_frequency_khz) || 4751 - (mlx5_clock_get_ptp_index(priv->mdev) == -1)) 4753 + (mlx5_clock_get_ptp_index(priv->mdev) == -1)) { 4754 + NL_SET_ERR_MSG_MOD(extack, 4755 + "Timestamps are not supported on this device"); 4752 4756 return -EOPNOTSUPP; 4753 - 4754 - if (copy_from_user(&config, ifr->ifr_data, sizeof(config))) 4755 - return -EFAULT; 4757 + } 4756 4758 4757 4759 /* TX HW timestamp */ 4758 - switch (config.tx_type) { 4760 + switch (config->tx_type) { 4759 4761 case HWTSTAMP_TX_OFF: 4760 4762 case HWTSTAMP_TX_ON: 4761 4763 break; ··· 4768 4768 rx_cqe_compress_def = priv->channels.params.rx_cqe_compress_def; 4769 4769 4770 4770 /* RX HW timestamp */ 4771 - switch (config.rx_filter) { 4771 + switch (config->rx_filter) { 4772 4772 case HWTSTAMP_FILTER_NONE: 4773 4773 ptp_rx = false; 4774 4774 break; ··· 4787 4787 case HWTSTAMP_FILTER_PTP_V2_SYNC: 4788 4788 case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ: 4789 4789 case HWTSTAMP_FILTER_NTP_ALL: 4790 - config.rx_filter = HWTSTAMP_FILTER_ALL; 4790 + config->rx_filter = HWTSTAMP_FILTER_ALL; 4791 4791 /* ptp_rx is set if both HW TS is set and CQE 4792 4792 * compression is set 4793 4793 */ ··· 4800 4800 4801 4801 if (!mlx5e_profile_feature_cap(priv->profile, PTP_RX)) 4802 4802 err = mlx5e_hwstamp_config_no_ptp_rx(priv, 4803 - config.rx_filter != HWTSTAMP_FILTER_NONE); 4803 + config->rx_filter != HWTSTAMP_FILTER_NONE); 4804 4804 else 4805 4805 err = mlx5e_hwstamp_config_ptp_rx(priv, ptp_rx); 4806 4806 if (err) 4807 4807 goto err_unlock; 4808 4808 4809 - memcpy(&priv->tstamp, &config, sizeof(config)); 4809 + priv->hwtstamp_config = *config; 4810 4810 mutex_unlock(&priv->state_lock); 4811 4811 4812 4812 /* might need to fix some features */ 4813 4813 netdev_update_features(priv->netdev); 4814 4814 4815 - return copy_to_user(ifr->ifr_data, &config, 4816 - sizeof(config)) ? -EFAULT : 0; 4815 + return 0; 4817 4816 err_unlock: 4818 4817 mutex_unlock(&priv->state_lock); 4819 4818 return err; 4820 4819 } 4821 4820 4822 - int mlx5e_hwstamp_get(struct mlx5e_priv *priv, struct ifreq *ifr) 4821 + static int mlx5e_hwtstamp_set_ndo(struct net_device *netdev, 4822 + struct kernel_hwtstamp_config *config, 4823 + struct netlink_ext_ack *extack) 4823 4824 { 4824 - struct hwtstamp_config *cfg = &priv->tstamp; 4825 + struct mlx5e_priv *priv = netdev_priv(netdev); 4825 4826 4827 + return mlx5e_hwtstamp_set(priv, config, extack); 4828 + } 4829 + 4830 + int mlx5e_hwtstamp_get(struct mlx5e_priv *priv, 4831 + struct kernel_hwtstamp_config *config) 4832 + { 4826 4833 if (!MLX5_CAP_GEN(priv->mdev, device_frequency_khz)) 4827 4834 return -EOPNOTSUPP; 4828 4835 4829 - return copy_to_user(ifr->ifr_data, cfg, sizeof(*cfg)) ? -EFAULT : 0; 4836 + *config = priv->hwtstamp_config; 4837 + 4838 + return 0; 4830 4839 } 4831 4840 4832 - static int mlx5e_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 4841 + static int mlx5e_hwtstamp_get_ndo(struct net_device *dev, 4842 + struct kernel_hwtstamp_config *config) 4833 4843 { 4834 4844 struct mlx5e_priv *priv = netdev_priv(dev); 4835 4845 4836 - switch (cmd) { 4837 - case SIOCSHWTSTAMP: 4838 - return mlx5e_hwstamp_set(priv, ifr); 4839 - case SIOCGHWTSTAMP: 4840 - return mlx5e_hwstamp_get(priv, ifr); 4841 - default: 4842 - return -EOPNOTSUPP; 4843 - } 4846 + return mlx5e_hwtstamp_get(priv, config); 4844 4847 } 4845 4848 4846 4849 #ifdef CONFIG_MLX5_ESWITCH ··· 5284 5281 .ndo_set_features = mlx5e_set_features, 5285 5282 .ndo_fix_features = mlx5e_fix_features, 5286 5283 .ndo_change_mtu = mlx5e_change_nic_mtu, 5287 - .ndo_eth_ioctl = mlx5e_ioctl, 5288 5284 .ndo_set_tx_maxrate = mlx5e_set_tx_maxrate, 5289 5285 .ndo_features_check = mlx5e_features_check, 5290 5286 .ndo_tx_timeout = mlx5e_tx_timeout, 5291 5287 .ndo_bpf = mlx5e_xdp, 5292 5288 .ndo_xdp_xmit = mlx5e_xdp_xmit, 5293 5289 .ndo_xsk_wakeup = mlx5e_xsk_wakeup, 5290 + .ndo_hwtstamp_get = mlx5e_hwtstamp_get_ndo, 5291 + .ndo_hwtstamp_set = mlx5e_hwtstamp_set_ndo, 5294 5292 #ifdef CONFIG_MLX5_EN_ARFS 5295 5293 .ndo_rx_flow_steer = mlx5e_rx_flow_steer, 5296 5294 #endif
+2 -4
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c
··· 1602 1602 stats->lro_bytes += cqe_bcnt; 1603 1603 } 1604 1604 1605 - if (unlikely(mlx5e_rx_hw_stamp(rq->tstamp))) 1605 + if (unlikely(mlx5e_rx_hw_stamp(rq->hwtstamp_config))) 1606 1606 skb_hwtstamps(skb)->hwtstamp = mlx5e_cqe_ts_to_ns(rq->ptp_cyc2time, 1607 1607 rq->clock, get_cqe_ts(cqe)); 1608 1608 skb_record_rx_queue(skb, rq->ix); ··· 2650 2650 u32 cqe_bcnt, 2651 2651 struct sk_buff *skb) 2652 2652 { 2653 - struct hwtstamp_config *tstamp; 2654 2653 struct mlx5e_rq_stats *stats; 2655 2654 struct net_device *netdev; 2656 2655 struct mlx5e_priv *priv; ··· 2673 2674 } 2674 2675 2675 2676 priv = mlx5i_epriv(netdev); 2676 - tstamp = &priv->tstamp; 2677 2677 stats = &priv->channel_stats[rq->ix]->rq; 2678 2678 2679 2679 flags_rqpn = be32_to_cpu(cqe->flags_rqpn); ··· 2708 2710 stats->csum_none++; 2709 2711 } 2710 2712 2711 - if (unlikely(mlx5e_rx_hw_stamp(tstamp))) 2713 + if (unlikely(mlx5e_rx_hw_stamp(&priv->hwtstamp_config))) 2712 2714 skb_hwtstamps(skb)->hwtstamp = mlx5e_cqe_ts_to_ns(rq->ptp_cyc2time, 2713 2715 rq->clock, get_cqe_ts(cqe)); 2714 2716 skb_record_rx_queue(skb, rq->ix);
+19 -15
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.c
··· 45 45 static int mlx5i_close(struct net_device *netdev); 46 46 static int mlx5i_change_mtu(struct net_device *netdev, int new_mtu); 47 47 48 + int mlx5i_hwtstamp_set(struct net_device *dev, 49 + struct kernel_hwtstamp_config *config, 50 + struct netlink_ext_ack *extack) 51 + { 52 + struct mlx5e_priv *epriv = mlx5i_epriv(dev); 53 + 54 + return mlx5e_hwtstamp_set(epriv, config, extack); 55 + } 56 + 57 + int mlx5i_hwtstamp_get(struct net_device *dev, 58 + struct kernel_hwtstamp_config *config) 59 + { 60 + struct mlx5e_priv *epriv = mlx5i_epriv(dev); 61 + 62 + return mlx5e_hwtstamp_get(epriv, config); 63 + } 64 + 48 65 static const struct net_device_ops mlx5i_netdev_ops = { 49 66 .ndo_open = mlx5i_open, 50 67 .ndo_stop = mlx5i_close, ··· 69 52 .ndo_init = mlx5i_dev_init, 70 53 .ndo_uninit = mlx5i_dev_cleanup, 71 54 .ndo_change_mtu = mlx5i_change_mtu, 72 - .ndo_eth_ioctl = mlx5i_ioctl, 55 + .ndo_hwtstamp_get = mlx5i_hwtstamp_get, 56 + .ndo_hwtstamp_set = mlx5i_hwtstamp_set, 73 57 }; 74 58 75 59 /* IPoIB mlx5 netdev profile */ ··· 573 555 mlx5i_pkey_add_qpn(dev, ipriv->qpn); 574 556 575 557 return 0; 576 - } 577 - 578 - int mlx5i_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 579 - { 580 - struct mlx5e_priv *priv = mlx5i_epriv(dev); 581 - 582 - switch (cmd) { 583 - case SIOCSHWTSTAMP: 584 - return mlx5e_hwstamp_set(priv, ifr); 585 - case SIOCGHWTSTAMP: 586 - return mlx5e_hwstamp_get(priv, ifr); 587 - default: 588 - return -EOPNOTSUPP; 589 - } 590 558 } 591 559 592 560 void mlx5i_dev_cleanup(struct net_device *dev)
+5 -1
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib.h
··· 88 88 /* Shared ndo functions */ 89 89 int mlx5i_dev_init(struct net_device *dev); 90 90 void mlx5i_dev_cleanup(struct net_device *dev); 91 - int mlx5i_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd); 91 + int mlx5i_hwtstamp_set(struct net_device *dev, 92 + struct kernel_hwtstamp_config *config, 93 + struct netlink_ext_ack *extack); 94 + int mlx5i_hwtstamp_get(struct net_device *dev, 95 + struct kernel_hwtstamp_config *config); 92 96 93 97 /* Parent profile functions */ 94 98 int mlx5i_init(struct mlx5_core_dev *mdev, struct net_device *netdev);
+2 -7
drivers/net/ethernet/mellanox/mlx5/core/ipoib/ipoib_vlan.c
··· 140 140 static int mlx5i_pkey_dev_init(struct net_device *dev); 141 141 static void mlx5i_pkey_dev_cleanup(struct net_device *netdev); 142 142 static int mlx5i_pkey_change_mtu(struct net_device *netdev, int new_mtu); 143 - static int mlx5i_pkey_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd); 144 143 145 144 static const struct net_device_ops mlx5i_pkey_netdev_ops = { 146 145 .ndo_open = mlx5i_pkey_open, ··· 148 149 .ndo_get_stats64 = mlx5i_get_stats, 149 150 .ndo_uninit = mlx5i_pkey_dev_cleanup, 150 151 .ndo_change_mtu = mlx5i_pkey_change_mtu, 151 - .ndo_eth_ioctl = mlx5i_pkey_ioctl, 152 + .ndo_hwtstamp_get = mlx5i_hwtstamp_get, 153 + .ndo_hwtstamp_set = mlx5i_hwtstamp_set, 152 154 }; 153 155 154 156 /* Child NDOs */ ··· 182 182 ipriv->qpn_htbl = parent_ipriv->qpn_htbl; 183 183 184 184 return mlx5i_dev_init(dev); 185 - } 186 - 187 - static int mlx5i_pkey_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) 188 - { 189 - return mlx5i_ioctl(dev, ifr, cmd); 190 185 } 191 186 192 187 static void mlx5i_pkey_dev_cleanup(struct net_device *netdev)
-1
drivers/net/ethernet/mellanox/mlx5/core/lib/clock.h
··· 54 54 55 55 struct mlx5_clock { 56 56 seqlock_t lock; 57 - struct hwtstamp_config hwtstamp_config; 58 57 struct ptp_clock *ptp; 59 58 struct ptp_clock_info ptp_info; 60 59 struct mlx5_pps pps_info;