[PATCH net-next] net: thunder: make tx software timestamp independent
Willem de Bruijn
willemdebruijn.kernel at gmail.com
Wed May 7 06:23:08 PDT 2025
Jason Xing wrote:
> From: Jason Xing <kernelxing at tencent.com>
>
> skb_tx_timestamp() is used for tx software timestamp enabled by
> SOF_TIMESTAMPING_TX_SOFTWARE while SKBTX_HW_TSTAMP is controlled by
> SOF_TIMESTAMPING_TX_HARDWARE. As it clearly shows they are different
> timestamps in two dimensions, this patch makes the software one
> standalone.
>
> Signed-off-by: Jason Xing <kernelxing at tencent.com>
> ---
> drivers/net/ethernet/cavium/thunder/nicvf_queues.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
> index 06397cc8bb36..d368f381b6de 100644
> --- a/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
> +++ b/drivers/net/ethernet/cavium/thunder/nicvf_queues.c
> @@ -1389,11 +1389,11 @@ nicvf_sq_add_hdr_subdesc(struct nicvf *nic, struct snd_queue *sq, int qentry,
> this_cpu_inc(nic->pnicvf->drv_stats->tx_tso);
> }
>
> + skb_tx_timestamp(skb);
> +
> /* Check if timestamp is requested */
Nit: check if hw timestamp is requested.
> - if (!(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP)) {
> - skb_tx_timestamp(skb);
> + if (!(skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP))
> return;
> - }
The SO_TIMESTAMPING behavior around both software and hardware
timestamps is a bit odd.
Unless SOF_TIMESTAMPING_OPT_TX_SWHW is set, by default a driver will
only return software if no hardware timestamp is also requested.
Through the following in __skb_tstamp_tx
if (!hwtstamps && !(tsflags & SOF_TIMESTAMPING_OPT_TX_SWHW) &&
skb_shinfo(orig_skb)->tx_flags & SKBTX_IN_PROGRESS)
return;
There really is no good reason to have this dependency. But it is
historical and all drivers should implement the same behavior.
This automatically happens if the software timestamp request
skb_tx_timestamp is called after the hardware timestamp request
is configured, i.e., after SKBTX_IN_PROGRESS is set. That usually
happens because the software timestamp is requests as close to kicking
the doorbell as possible.
In this driver, that would be not in nicvf_sq_add_hdr_subdesc, but
just before calling nicvf_sq_doorbell. Unfortunately, there are two
callers, TSO and non-TSO.
>
> /* Tx timestamping not supported along with TSO, so ignore request */
> if (skb_shinfo(skb)->gso_size)
> --
> 2.43.5
>
More information about the linux-arm-kernel
mailing list