Subject: Re: [PATCH net-next v2] wireguard: queuing: preserve napi_id on decapsulation

From: Miroslav Lichvar <[email-masked]>
Date: Tue, 4 Nov 2025 10:28:19 +0100

On Mon, Nov 03, 2025 at 05:00:19PM +0100, Jason A. Donenfeld wrote:
> On Mon, Nov 3, 2025 at 11:34 AM Miroslav Lichvar <[email-masked]> wrote:
> > +       } else {
> > +#ifdef CONFIG_NET_RX_BUSY_POLL
> > +               skb->napi_id = napi_id;
> > +#endif
> 
> It looks like io_uring has timestamping on tx, not just rx:
> SOCKET_URING_OP_TX_TIMESTAMP -> io_uring_cmd_timestamp ->
> io_process_timestamp_skb -> skb_get_tx_timestamp -> skb_napi_id

That doesn't seem to be reachable. skb_get_tx_timestamp() calls
get_timestamp()->skb_napi_id() only when the SKBTX_HW_TSTAMP_NETDEV
flag is set, which is done only by two drivers (tsnep, igc) and only
in the RX path. Using a tx_flags field for RX is slightly confusing.

> So are you sure this should be in an `else {` block?

Yes, at least for the use case with the timestamping option I'm trying
to fix. If it was outside of the else block, it would be copying the
sender_cpu field of the union (used by XPS). Maybe it would make sense
to do that too, I know nothing about XPS, but in that case the value
shouldn't be read by skb_napi_id(), which is enabled only by
CONFIG_NET_RX_BUSY_POLL.

-- 
Miroslav Lichvar