From: Vadim Fedorenko <vadim.fedorenko@linux.dev>
To: Piotr Wejman <piotrwejman90@gmail.com>
Cc: Tony Nguyen <anthony.l.nguyen@intel.com>,
Przemek Kitszel <przemyslaw.kitszel@intel.com>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [Intel-wired-lan] [PATCH] net: e1000e: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set()
Date: Tue, 4 Feb 2025 15:20:13 +0000 [thread overview]
Message-ID: <0bf5e1db-8707-4039-81d7-2fe4530d705b@linux.dev> (raw)
In-Reply-To: <20250202170839.47375-1-piotrwejman90@gmail.com>
On 02/02/2025 17:08, Piotr Wejman wrote:
> Update the driver to the new hw timestamping API.
>
> Signed-off-by: Piotr Wejman <piotrwejman90@gmail.com>
> ---
> drivers/net/ethernet/intel/e1000e/e1000.h | 2 +-
> drivers/net/ethernet/intel/e1000e/netdev.c | 52 ++++++++--------------
> 2 files changed, 20 insertions(+), 34 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/e1000e/e1000.h b/drivers/net/ethernet/intel/e1000e/e1000.h
> index ba9c19e6994c..952898151565 100644
> --- a/drivers/net/ethernet/intel/e1000e/e1000.h
> +++ b/drivers/net/ethernet/intel/e1000e/e1000.h
> @@ -319,7 +319,7 @@ struct e1000_adapter {
> u16 tx_ring_count;
> u16 rx_ring_count;
>
> - struct hwtstamp_config hwtstamp_config;
> + struct kernel_hwtstamp_config hwtstamp_config;
> struct delayed_work systim_overflow_work;
> struct sk_buff *tx_hwtstamp_skb;
> unsigned long tx_hwtstamp_start;
> diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
> index 286155efcedf..15f0794afddd 100644
> --- a/drivers/net/ethernet/intel/e1000e/netdev.c
> +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
> @@ -3587,7 +3587,7 @@ s32 e1000e_get_base_timinca(struct e1000_adapter *adapter, u32 *timinca)
> * exception of "all V2 events regardless of level 2 or 4".
> **/
> static int e1000e_config_hwtstamp(struct e1000_adapter *adapter,
> - struct hwtstamp_config *config)
> + struct kernel_hwtstamp_config *config)
> {
> struct e1000_hw *hw = &adapter->hw;
> u32 tsync_tx_ctl = E1000_TSYNCTXCTL_ENABLED;
> @@ -6140,7 +6140,8 @@ static int e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr,
> /**
> * e1000e_hwtstamp_set - control hardware time stamping
> * @netdev: network interface device structure
> - * @ifr: interface request
> + * @config: timestamp configuration
> + * @extack: netlink extended ACK report
> *
> * Outgoing time stamping can be enabled and disabled. Play nice and
> * disable it when requested, although it shouldn't cause any overhead
> @@ -6153,20 +6154,18 @@ static int e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr,
> * specified. Matching the kind of event packet is not supported, with the
> * exception of "all V2 events regardless of level 2 or 4".
> **/
> -static int e1000e_hwtstamp_set(struct net_device *netdev, struct ifreq *ifr)
> +static int e1000e_hwtstamp_set(struct net_device *netdev,
> + struct kernel_hwtstamp_config *config,
> + struct netlink_ext_ack *extack)
> {
> struct e1000_adapter *adapter = netdev_priv(netdev);
> - struct hwtstamp_config config;
> int ret_val;
>
> - if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
> - return -EFAULT;
> -
> - ret_val = e1000e_config_hwtstamp(adapter, &config);
> + ret_val = e1000e_config_hwtstamp(adapter, config);
> if (ret_val)
> return ret_val;
it would be great to extend e1000e_config_hwtstamp() to provide some
information regarding error to extack - that's one of the benefits of
these new ndo's.
>
> - switch (config.rx_filter) {
> + switch (config->rx_filter) {
> case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
> case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
> case HWTSTAMP_FILTER_PTP_V2_SYNC:
> @@ -6178,38 +6177,23 @@ static int e1000e_hwtstamp_set(struct net_device *netdev, struct ifreq *ifr)
> * by hardware so notify the caller the requested packets plus
> * some others are time stamped.
> */
> - config.rx_filter = HWTSTAMP_FILTER_SOME;
> + config->rx_filter = HWTSTAMP_FILTER_SOME;
> break;
> default:
> break;
> }
>
> - return copy_to_user(ifr->ifr_data, &config,
> - sizeof(config)) ? -EFAULT : 0;
> + return 0;
> }
>
> -static int e1000e_hwtstamp_get(struct net_device *netdev, struct ifreq *ifr)
> +static int e1000e_hwtstamp_get(struct net_device *netdev,
> + struct kernel_hwtstamp_config *kernel_config)
> {
> struct e1000_adapter *adapter = netdev_priv(netdev);
>
> - return copy_to_user(ifr->ifr_data, &adapter->hwtstamp_config,
> - sizeof(adapter->hwtstamp_config)) ? -EFAULT : 0;
> -}
> + *kernel_config = adapter->hwtstamp_config;
>
> -static int e1000_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
> -{
> - switch (cmd) {
> - case SIOCGMIIPHY:
> - case SIOCGMIIREG:
> - case SIOCSMIIREG:
> - return e1000_mii_ioctl(netdev, ifr, cmd);
> - case SIOCSHWTSTAMP:
> - return e1000e_hwtstamp_set(netdev, ifr);
> - case SIOCGHWTSTAMP:
> - return e1000e_hwtstamp_get(netdev, ifr);
> - default:
> - return -EOPNOTSUPP;
> - }
> + return 0;
> }
>
> static int e1000_init_phy_wakeup(struct e1000_adapter *adapter, u32 wufc)
> @@ -7337,7 +7321,7 @@ static const struct net_device_ops e1000e_netdev_ops = {
> .ndo_set_rx_mode = e1000e_set_rx_mode,
> .ndo_set_mac_address = e1000_set_mac,
> .ndo_change_mtu = e1000_change_mtu,
> - .ndo_eth_ioctl = e1000_ioctl,
> + .ndo_eth_ioctl = e1000_mii_ioctl,
> .ndo_tx_timeout = e1000_tx_timeout,
> .ndo_validate_addr = eth_validate_addr,
>
> @@ -7346,9 +7330,11 @@ static const struct net_device_ops e1000e_netdev_ops = {
> #ifdef CONFIG_NET_POLL_CONTROLLER
> .ndo_poll_controller = e1000_netpoll,
> #endif
> - .ndo_set_features = e1000_set_features,
> - .ndo_fix_features = e1000_fix_features,
> + .ndo_set_features = e1000_set_features,
> + .ndo_fix_features = e1000_fix_features,
nit: If this alignment piece is intended then it worth mentioning in the
commit message.
> .ndo_features_check = passthru_features_check,
> + .ndo_hwtstamp_get = e1000e_hwtstamp_get,
> + .ndo_hwtstamp_set = e1000e_hwtstamp_set,
> };
>
> /**
WARNING: multiple messages have this Message-ID (diff)
From: Vadim Fedorenko <vadim.fedorenko@linux.dev>
To: Piotr Wejman <piotrwejman90@gmail.com>
Cc: Tony Nguyen <anthony.l.nguyen@intel.com>,
Przemek Kitszel <przemyslaw.kitszel@intel.com>,
Andrew Lunn <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
Eric Dumazet <edumazet@google.com>,
Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] net: e1000e: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set()
Date: Tue, 4 Feb 2025 15:20:13 +0000 [thread overview]
Message-ID: <0bf5e1db-8707-4039-81d7-2fe4530d705b@linux.dev> (raw)
In-Reply-To: <20250202170839.47375-1-piotrwejman90@gmail.com>
On 02/02/2025 17:08, Piotr Wejman wrote:
> Update the driver to the new hw timestamping API.
>
> Signed-off-by: Piotr Wejman <piotrwejman90@gmail.com>
> ---
> drivers/net/ethernet/intel/e1000e/e1000.h | 2 +-
> drivers/net/ethernet/intel/e1000e/netdev.c | 52 ++++++++--------------
> 2 files changed, 20 insertions(+), 34 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/e1000e/e1000.h b/drivers/net/ethernet/intel/e1000e/e1000.h
> index ba9c19e6994c..952898151565 100644
> --- a/drivers/net/ethernet/intel/e1000e/e1000.h
> +++ b/drivers/net/ethernet/intel/e1000e/e1000.h
> @@ -319,7 +319,7 @@ struct e1000_adapter {
> u16 tx_ring_count;
> u16 rx_ring_count;
>
> - struct hwtstamp_config hwtstamp_config;
> + struct kernel_hwtstamp_config hwtstamp_config;
> struct delayed_work systim_overflow_work;
> struct sk_buff *tx_hwtstamp_skb;
> unsigned long tx_hwtstamp_start;
> diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
> index 286155efcedf..15f0794afddd 100644
> --- a/drivers/net/ethernet/intel/e1000e/netdev.c
> +++ b/drivers/net/ethernet/intel/e1000e/netdev.c
> @@ -3587,7 +3587,7 @@ s32 e1000e_get_base_timinca(struct e1000_adapter *adapter, u32 *timinca)
> * exception of "all V2 events regardless of level 2 or 4".
> **/
> static int e1000e_config_hwtstamp(struct e1000_adapter *adapter,
> - struct hwtstamp_config *config)
> + struct kernel_hwtstamp_config *config)
> {
> struct e1000_hw *hw = &adapter->hw;
> u32 tsync_tx_ctl = E1000_TSYNCTXCTL_ENABLED;
> @@ -6140,7 +6140,8 @@ static int e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr,
> /**
> * e1000e_hwtstamp_set - control hardware time stamping
> * @netdev: network interface device structure
> - * @ifr: interface request
> + * @config: timestamp configuration
> + * @extack: netlink extended ACK report
> *
> * Outgoing time stamping can be enabled and disabled. Play nice and
> * disable it when requested, although it shouldn't cause any overhead
> @@ -6153,20 +6154,18 @@ static int e1000_mii_ioctl(struct net_device *netdev, struct ifreq *ifr,
> * specified. Matching the kind of event packet is not supported, with the
> * exception of "all V2 events regardless of level 2 or 4".
> **/
> -static int e1000e_hwtstamp_set(struct net_device *netdev, struct ifreq *ifr)
> +static int e1000e_hwtstamp_set(struct net_device *netdev,
> + struct kernel_hwtstamp_config *config,
> + struct netlink_ext_ack *extack)
> {
> struct e1000_adapter *adapter = netdev_priv(netdev);
> - struct hwtstamp_config config;
> int ret_val;
>
> - if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
> - return -EFAULT;
> -
> - ret_val = e1000e_config_hwtstamp(adapter, &config);
> + ret_val = e1000e_config_hwtstamp(adapter, config);
> if (ret_val)
> return ret_val;
it would be great to extend e1000e_config_hwtstamp() to provide some
information regarding error to extack - that's one of the benefits of
these new ndo's.
>
> - switch (config.rx_filter) {
> + switch (config->rx_filter) {
> case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
> case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
> case HWTSTAMP_FILTER_PTP_V2_SYNC:
> @@ -6178,38 +6177,23 @@ static int e1000e_hwtstamp_set(struct net_device *netdev, struct ifreq *ifr)
> * by hardware so notify the caller the requested packets plus
> * some others are time stamped.
> */
> - config.rx_filter = HWTSTAMP_FILTER_SOME;
> + config->rx_filter = HWTSTAMP_FILTER_SOME;
> break;
> default:
> break;
> }
>
> - return copy_to_user(ifr->ifr_data, &config,
> - sizeof(config)) ? -EFAULT : 0;
> + return 0;
> }
>
> -static int e1000e_hwtstamp_get(struct net_device *netdev, struct ifreq *ifr)
> +static int e1000e_hwtstamp_get(struct net_device *netdev,
> + struct kernel_hwtstamp_config *kernel_config)
> {
> struct e1000_adapter *adapter = netdev_priv(netdev);
>
> - return copy_to_user(ifr->ifr_data, &adapter->hwtstamp_config,
> - sizeof(adapter->hwtstamp_config)) ? -EFAULT : 0;
> -}
> + *kernel_config = adapter->hwtstamp_config;
>
> -static int e1000_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
> -{
> - switch (cmd) {
> - case SIOCGMIIPHY:
> - case SIOCGMIIREG:
> - case SIOCSMIIREG:
> - return e1000_mii_ioctl(netdev, ifr, cmd);
> - case SIOCSHWTSTAMP:
> - return e1000e_hwtstamp_set(netdev, ifr);
> - case SIOCGHWTSTAMP:
> - return e1000e_hwtstamp_get(netdev, ifr);
> - default:
> - return -EOPNOTSUPP;
> - }
> + return 0;
> }
>
> static int e1000_init_phy_wakeup(struct e1000_adapter *adapter, u32 wufc)
> @@ -7337,7 +7321,7 @@ static const struct net_device_ops e1000e_netdev_ops = {
> .ndo_set_rx_mode = e1000e_set_rx_mode,
> .ndo_set_mac_address = e1000_set_mac,
> .ndo_change_mtu = e1000_change_mtu,
> - .ndo_eth_ioctl = e1000_ioctl,
> + .ndo_eth_ioctl = e1000_mii_ioctl,
> .ndo_tx_timeout = e1000_tx_timeout,
> .ndo_validate_addr = eth_validate_addr,
>
> @@ -7346,9 +7330,11 @@ static const struct net_device_ops e1000e_netdev_ops = {
> #ifdef CONFIG_NET_POLL_CONTROLLER
> .ndo_poll_controller = e1000_netpoll,
> #endif
> - .ndo_set_features = e1000_set_features,
> - .ndo_fix_features = e1000_fix_features,
> + .ndo_set_features = e1000_set_features,
> + .ndo_fix_features = e1000_fix_features,
nit: If this alignment piece is intended then it worth mentioning in the
commit message.
> .ndo_features_check = passthru_features_check,
> + .ndo_hwtstamp_get = e1000e_hwtstamp_get,
> + .ndo_hwtstamp_set = e1000e_hwtstamp_set,
> };
>
> /**
next prev parent reply other threads:[~2025-02-04 15:25 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-02 17:08 [Intel-wired-lan] [PATCH] net: e1000e: convert to ndo_hwtstamp_get() and ndo_hwtstamp_set() Piotr Wejman
2025-02-02 17:08 ` Piotr Wejman
2025-02-03 16:41 ` [Intel-wired-lan] " Paul Menzel
2025-02-04 14:00 ` Vadim Fedorenko
2025-02-04 15:16 ` Lifshits, Vitaly
2025-02-04 15:20 ` Vadim Fedorenko [this message]
2025-02-04 15:20 ` Vadim Fedorenko
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=0bf5e1db-8707-4039-81d7-2fe4530d705b@linux.dev \
--to=vadim.fedorenko@linux.dev \
--cc=andrew+netdev@lunn.ch \
--cc=anthony.l.nguyen@intel.com \
--cc=davem@davemloft.net \
--cc=edumazet@google.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=pabeni@redhat.com \
--cc=piotrwejman90@gmail.com \
--cc=przemyslaw.kitszel@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.