Re: [PATCH net-next 3/7] idpf: support pacing offload
From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Date: 2026-07-11 20:13:08
Tony Nguyen wrote:
On 7/6/2026 6:34 AM, Willem de Bruijn wrote: ...quoted
+static void idpf_tx_splitq_set_txtime(const struct idpf_tx_queue *tx_q, + const struct sk_buff *skb, + struct idpf_tx_splitq_params *tx_params) +{ + const int ts_gran_pow2 = 9; + u64 ts, now; + + /* Skip if netpoll: not needed and not safe to call ktime helpers */ + if (netpoll_tx_running(skb->dev)) + return; + + switch (skb->tstamp_type) { + case SKB_CLOCK_REALTIME: + ts = ktime_to_ns(ktime_add(skb->tstamp, + ktime_mono_to_any(0, TK_OFFS_TAI) - + ktime_mono_to_any(0, TK_OFFS_REAL))); + break; + case SKB_CLOCK_MONOTONIC: + ts = ktime_to_ns(ktime_mono_to_any(skb->tstamp, TK_OFFS_TAI)); + break; + case SKB_CLOCK_TAI: + ts = ktime_to_ns(skb->tstamp); + break; + default: + WARN_ON_ONCE(1); + return; + } + + now = ktime_get_clocktai_ns(); + if (ts < now) + return; + + /* beyond offload horizon? set overflow bit only */ + if (ts > now + ((u64)skb->dev->pacing_offload_horizon * NSEC_PER_USEC)) { + tx_params->offload.desc_ts[2] = 1 << 7; + return; + } + + ts >>= ts_gran_pow2; + + tx_params->offload.desc_ts[0] = ts & 0xff; + tx_params->offload.desc_ts[1] = (ts >> 8) & 0xff; + tx_params->offload.desc_ts[2] = ((ts >> 16) & 0x7f); + + /* 0 is valid 24b timestamp, but also means field unset. + * Add 512 ns (ts_gran_pow2) to avoid this case + */ + if ((ts & 0x7fffff) == 0) + tx_params->offload.desc_ts[0] = 1; +}Slight nit but seems like this check can be moved before the assignments (and then return) as we don't need to assign the other 2 bytes in this situation?
Thanks for the reviews. I'll address this and Paolo's points in v2.