Re: [PATCH net-next 3/7] idpf: support pacing offload
From: Tony Nguyen <anthony.l.nguyen@intel.com>
Date: 2026-07-10 21:37:10
On 7/6/2026 6:34 AM, Willem de Bruijn wrote: ...
+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, Tony