mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH] net: mark skb NAPI IDs independently of busy polling
@ 2026-11-05  7:16 Ding Meng
  2026-11-05  8:04 ` bot+bpf-ci
  2026-11-05 22:29 ` Paul Moses
  0 siblings, 2 replies; 4+ messages in thread
From: Ding Meng @ 2026-11-05  7:16 UTC (permalink / raw)
  To: netdev, Willem de Bruijn, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Jonathan Corbet, Andrew Lunn,
	Tony Nguyen, Przemek Kitszel, Steven Rostedt, Masami Hiramatsu,
	Daniel Borkmann, Alexei Starovoitov, Andrii Nakryiko,
	Eduard Zingerman, Kumar Kartikeya Dwivedi, Richard Cochran
  Cc: florian.bezdeka, jan.kiszka, wq.wang, p, gerhard, Ding Meng,
	Jason Xing, Simon Horman, Shuah Khan, Randy Dunlap,
	Mathieu Desnoyers, Martin KaFai Lau, Song Liu, Yonghong Song,
	Jiri Olsa, Emil Tsalapatis, Ihor Solodrai, John Fastabend,
	Stanislav Fomichev, linux-doc, linux-kernel, intel-wired-lan,
	linux-trace-kernel, bpf

Commit 97dc7cd92ac6 ("ptp: Support late timestamp determination")
added support for deferring RX timestamp conversion to
ndo_get_tstamp(). When the timestamp is consumed, get_timestamp()
uses the skb's NAPI ID to find the device that owns the timestamp
cookie and invoke its callback.

Commit e68b6e50fa35 ("udp: enable busy polling for all sockets")
gated NAPI ID bookkeeping with CONFIG_NET_RX_BUSY_POLL. As a result,
when busy polling is disabled, the skb may not carry a usable NAPI ID.
The device lookup then fails, so the driver callback is not invoked.
get_timestamp() falls back to hwtstamp, which does not contain the
converted timestamp, resulting in an incorrect RX hardware timestamp.

Record skb NAPI IDs independently of busy-poll support to support
drivers that use deferred timestamp conversion and future driver
features that need to look up a device by its NAPI ID.

Signed-off-by: Ding Meng <meng.ding@siemens.com>
Reviewed-by: Florian Bezdeka <florian.bezdeka@siemens.com>
---
In the discussion of the issue reported at
https://lore.kernel.org/netdev/20260630112056.885071-1-meng.ding@siemens.com/
this previous patch added an igc-specific fallback for configurations
with CONFIG_NET_RX_BUSY_POLL disabled. It populated skb's hwtstamp
field with a timestamp converted using the default hardware timer,
allowing get_timestamp() to return it without invoking ndo_get_tstamp().
But Jakub Kicinski noted that the proposed fix appeared to be a
driver-specific workaround for a generic problem. The engleder driver
would also be affected by the same issue.

This patch introduces a new configuration option to enable NAPI ID
bookkeeping independently of busy polling. The option is enabled
whenever busy polling is enabled, preserving the existing behavior.
It is also selected by the igc and engleder drivers, ensuring that
skbs carry a NAPI ID even when busy polling is disabled.

Another approach considered was to require drivers using deferred
timestamp conversion, such as igc and engleder, to enable busy polling.
However, this would introduce an unnecessary dependency between two
independent features: hardware timestamp reporting should not require
busy polling to be enabled.

Timestamping has been tested only with igc; it has not been tested
with engleder.

 Documentation/networking/timestamping.rst | 11 ++++++++---
 drivers/net/ethernet/engleder/Kconfig     |  1 +
 drivers/net/ethernet/intel/Kconfig        |  1 +
 include/linux/skbuff.h                    |  4 ++--
 include/net/busy_poll.h                   |  2 +-
 include/trace/events/net.h                |  2 +-
 net/Kconfig                               |  4 ++++
 net/core/filter.c                         |  2 +-
 net/core/skbuff.c                         |  2 +-
 9 files changed, 20 insertions(+), 9 deletions(-)

diff --git a/Documentation/networking/timestamping.rst b/Documentation/networking/timestamping.rst
index 2162c4f2b28a6..dbe40a1972639 100644
--- a/Documentation/networking/timestamping.rst
+++ b/Documentation/networking/timestamping.rst
@@ -278,9 +278,14 @@ SOF_TIMESTAMPING_OPT_PKTINFO:
   packets with hardware timestamps. The message contains struct
   scm_ts_pktinfo, which supplies the index of the real interface which
   received the packet and its length at layer 2. A valid (non-zero)
-  interface index will be returned only if CONFIG_NET_RX_BUSY_POLL is
-  enabled and the driver is using NAPI. The struct contains also two
-  other fields, but they are reserved and undefined.
+  interface index will be returned only if CONFIG_SKB_MARK_NAPI_ID is
+  enabled and the driver is using NAPI. This hidden configuration is
+  selected automatically by busy-poll support and by drivers that need
+  skb NAPI IDs to resolve deferred hardware timestamps. Drivers that
+  use deferred timestamp conversion must select it so the networking
+  stack can find the device and call its timestamp callback even when
+  busy polling is disabled. The struct contains also two other fields,
+  but they are reserved and undefined.
 
 SOF_TIMESTAMPING_OPT_TX_SWHW:
   Request both hardware and software timestamps for outgoing packets
diff --git a/drivers/net/ethernet/engleder/Kconfig b/drivers/net/ethernet/engleder/Kconfig
index 3df6bf476ae7e..9700a243bea11 100644
--- a/drivers/net/ethernet/engleder/Kconfig
+++ b/drivers/net/ethernet/engleder/Kconfig
@@ -22,6 +22,7 @@ config TSNEP
 	depends on PTP_1588_CLOCK_OPTIONAL
 	select PHYLIB
 	select PAGE_POOL
+	select SKB_MARK_NAPI_ID
 	help
 	  Support for the Engleder TSN endpoint Ethernet MAC IP Core.
 
diff --git a/drivers/net/ethernet/intel/Kconfig b/drivers/net/ethernet/intel/Kconfig
index 780f113986ea8..7fb63f351fc20 100644
--- a/drivers/net/ethernet/intel/Kconfig
+++ b/drivers/net/ethernet/intel/Kconfig
@@ -376,6 +376,7 @@ config IGC
 	depends on PCI
 	depends on PTP_1588_CLOCK_OPTIONAL
 	depends on ETHTOOL_NETLINK
+	select SKB_MARK_NAPI_ID
 	help
 	  This driver supports Intel(R) Ethernet Controller I225-LM/I225-V
 	  family of adapters.
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
index 6787fcf6ac3e4..164c862f7a403 100644
--- a/include/linux/skbuff.h
+++ b/include/linux/skbuff.h
@@ -1059,7 +1059,7 @@ struct sk_buff {
 			__u16	vlan_tci;
 		};
 	};
-#if defined(CONFIG_NET_RX_BUSY_POLL) || defined(CONFIG_XPS)
+#if defined(CONFIG_SKB_MARK_NAPI_ID) || defined(CONFIG_XPS)
 	union {
 		unsigned int	napi_id;
 		unsigned int	sender_cpu;
@@ -1267,7 +1267,7 @@ static inline bool skb_pkt_type_ok(u32 ptype)
  */
 static inline unsigned int skb_napi_id(const struct sk_buff *skb)
 {
-#ifdef CONFIG_NET_RX_BUSY_POLL
+#ifdef CONFIG_SKB_MARK_NAPI_ID
 	return skb->napi_id;
 #else
 	return 0;
diff --git a/include/net/busy_poll.h b/include/net/busy_poll.h
index 6e172d0f6ef5f..f7c0e62c6a7d7 100644
--- a/include/net/busy_poll.h
+++ b/include/net/busy_poll.h
@@ -130,7 +130,7 @@ static inline void sk_busy_loop(struct sock *sk, int nonblock)
 static inline void __skb_mark_napi_id(struct sk_buff *skb,
 				      const struct gro_node *gro)
 {
-#ifdef CONFIG_NET_RX_BUSY_POLL
+#ifdef CONFIG_SKB_MARK_NAPI_ID
 	/* If the skb was already marked with a valid NAPI ID, avoid overwriting
 	 * it.
 	 */
diff --git a/include/trace/events/net.h b/include/trace/events/net.h
index dbc2c5598e35a..99ed7645242eb 100644
--- a/include/trace/events/net.h
+++ b/include/trace/events/net.h
@@ -208,7 +208,7 @@ DECLARE_EVENT_CLASS(net_dev_rx_verbose_template,
 
 	TP_fast_assign(
 		__assign_str(name);
-#ifdef CONFIG_NET_RX_BUSY_POLL
+#ifdef CONFIG_SKB_MARK_NAPI_ID
 		__entry->napi_id = napi_id_valid(skb->napi_id) ?
 				   skb->napi_id : 0;
 #else
diff --git a/net/Kconfig b/net/Kconfig
index 76ab44aa439a6..8fa7586dc08ca 100644
--- a/net/Kconfig
+++ b/net/Kconfig
@@ -346,9 +346,13 @@ config CGROUP_NET_CLASSID
 	  Cgroup subsystem for use as general purpose socket classid marker that is
 	  being used in cls_cgroup and for netfilter matching.
 
+config SKB_MARK_NAPI_ID
+	bool
+
 config NET_RX_BUSY_POLL
 	bool
 	default y if !PREEMPT_RT || (PREEMPT_RT && !NETCONSOLE)
+	select SKB_MARK_NAPI_ID
 
 config BQL
 	bool
diff --git a/net/core/filter.c b/net/core/filter.c
index b7ac145b68b1f..e2218c18622b8 100644
--- a/net/core/filter.c
+++ b/net/core/filter.c
@@ -10274,7 +10274,7 @@ static u32 bpf_convert_ctx_access(enum bpf_access_type type,
 		break;
 
 	case offsetof(struct __sk_buff, napi_id):
-#if defined(CONFIG_NET_RX_BUSY_POLL)
+#if defined(CONFIG_SKB_MARK_NAPI_ID)
 		*insn++ = BPF_LDX_MEM(BPF_W, si->dst_reg, si->src_reg,
 				      bpf_target_off(struct sk_buff, napi_id, 4,
 						     target_size));
diff --git a/net/core/skbuff.c b/net/core/skbuff.c
index eb9fcc4b1fd1a..386a32cdc0cc8 100644
--- a/net/core/skbuff.c
+++ b/net/core/skbuff.c
@@ -1581,7 +1581,7 @@ static void __copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
 #ifdef CONFIG_NETWORK_SECMARK
 	CHECK_SKB_FIELD(secmark);
 #endif
-#ifdef CONFIG_NET_RX_BUSY_POLL
+#ifdef CONFIG_SKB_MARK_NAPI_ID
 	CHECK_SKB_FIELD(napi_id);
 #endif
 #ifdef CONFIG_XPS

base-commit: d135ab453a7400a34930bdda1ef4bdc8acfac80e
-- 
2.47.3


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] net: mark skb NAPI IDs independently of busy polling
  2026-11-05  7:16 [PATCH] net: mark skb NAPI IDs independently of busy polling Ding Meng
@ 2026-11-05  8:04 ` bot+bpf-ci
  2026-11-05 18:36   ` Jacob Keller
  2026-11-05 22:29 ` Paul Moses
  1 sibling, 1 reply; 4+ messages in thread
From: bot+bpf-ci @ 2026-11-05  8:04 UTC (permalink / raw)
  To: meng.ding, netdev, willemdebruijn.kernel, davem, edumazet, kuba,
	pabeni, corbet, andrew+netdev, anthony.l.nguyen,
	przemyslaw.kitszel, rostedt, mhiramat, daniel, ast, andrii,
	eddyz87, memxor, richardcochran
  Cc: florian.bezdeka, jan.kiszka, wq.wang, p, gerhard, meng.ding,
	kerneljasonxing, horms, skhan, rdunlap, mathieu.desnoyers,
	martin.lau, song, yonghong.song, jolsa, emil, ihor.solodrai,
	john.fastabend, sdf, linux-doc, linux-kernel, intel-wired-lan,
	linux-trace-kernel, bpf, ast, andrii, daniel, martin.lau,
	eddyz87, yonghong.song, mason, ihor.solodrai

[-- Attachment #1: Type: text/plain, Size: 2603 bytes --]

> net: mark skb NAPI IDs independently of busy polling

TL;DR: Commit message only: it blames e68b6e50fa35 for gating skb NAPI IDs on
busy polling, but that gating predates it; 97dc7cd92ac6 introduced the
dependency. Suggests rewording.

>     net: mark skb NAPI IDs independently of busy polling
>
>     Commit 97dc7cd92ac6 ("ptp: Support late timestamp determination")
>     added support for deferring RX timestamp conversion to
>     ndo_get_tstamp(). When the timestamp is consumed, get_timestamp()
>     uses the skb's NAPI ID to find the device that owns the timestamp
>     cookie and invoke its callback.
>     Commit e68b6e50fa35 ("udp: enable busy polling for all sockets")
>     gated NAPI ID bookkeeping with CONFIG_NET_RX_BUSY_POLL. As a result,
>     when busy polling is disabled, the skb may not carry a usable NAPI ID.
>     The device lookup then fails, so the driver callback is not invoked.
>     get_timestamp() falls back to hwtstamp, which does not contain the
>     converted timestamp, resulting in an incorrect RX hardware timestamp.
>     Record skb NAPI IDs independently of busy-poll support to support
>     drivers that use deferred timestamp conversion and future driver
>     features that need to look up a device by its NAPI ID.
>     Signed-off-by: Ding Meng <meng.ding@siemens.com>
>     Reviewed-by: Florian Bezdeka <florian.bezdeka@siemens.com>

This isn't a bug, but is e68b6e50fa35 the right commit to name here?

Before that commit, __skb_mark_napi_id() / skb_mark_napi_id() was already
inside '#ifdef CONFIG_NET_RX_BUSY_POLL' with an empty stub in the #else
branch, and struct sk_buff already had napi_id under
'#if defined(CONFIG_NET_RX_BUSY_POLL) || defined(CONFIG_XPS)'.  That gating
goes back to 8b80cda536ea ("net: rename ll methods to busy-poll").

e68b6e50fa35 only moved the socket-side sk_mark_napi_id() out of the ifdef
block and added sk_mark_napi_id_once().  Both act on sk->sk_napi_id, not on
the skb.

It is also about six years older than 97dc7cd92ac6, so the message reads as
if a later change broke the deferred-timestamp lookup.  In fact
get_timestamp() has depended on a busy-poll-only skb field (skb_napi_id()
returns 0 when CONFIG_NET_RX_BUSY_POLL=n) since 97dc7cd92ac6 added it.

Could the message say that the skb NAPI ID was always busy-poll-only and
that 97dc7cd92ac6 started depending on it?


---
AI reviewed your patch. Please fix the bug or email reply why it's not a bug.
See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md

CI run summary: https://github.com/kernel-patches/bpf/actions/runs/41989099174

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] net: mark skb NAPI IDs independently of busy polling
  2026-11-05  8:04 ` bot+bpf-ci
@ 2026-11-05 18:36   ` Jacob Keller
  0 siblings, 0 replies; 4+ messages in thread
From: Jacob Keller @ 2026-11-05 18:36 UTC (permalink / raw)
  To: bot+bpf-ci, meng.ding, netdev, willemdebruijn.kernel, davem,
	edumazet, kuba, pabeni, corbet, andrew+netdev, anthony.l.nguyen,
	przemyslaw.kitszel, rostedt, mhiramat, daniel, ast, andrii,
	eddyz87, memxor, richardcochran
  Cc: florian.bezdeka, jan.kiszka, wq.wang, p, gerhard,
	kerneljasonxing, horms, skhan, rdunlap, mathieu.desnoyers,
	martin.lau, song, yonghong.song, jolsa, emil, ihor.solodrai,
	john.fastabend, sdf, linux-doc, linux-kernel, intel-wired-lan,
	linux-trace-kernel, bpf, martin.lau, mason

On 11/5/2026 12:04 AM, bot+bpf-ci@kernel.org wrote:
>> net: mark skb NAPI IDs independently of busy polling
> 
> TL;DR: Commit message only: it blames e68b6e50fa35 for gating skb NAPI IDs on
> busy polling, but that gating predates it; 97dc7cd92ac6 introduced the
> dependency. Suggests rewording.
> 
>>     net: mark skb NAPI IDs independently of busy polling
>>
>>     Commit 97dc7cd92ac6 ("ptp: Support late timestamp determination")
>>     added support for deferring RX timestamp conversion to
>>     ndo_get_tstamp(). When the timestamp is consumed, get_timestamp()
>>     uses the skb's NAPI ID to find the device that owns the timestamp
>>     cookie and invoke its callback.
>>     Commit e68b6e50fa35 ("udp: enable busy polling for all sockets")
>>     gated NAPI ID bookkeeping with CONFIG_NET_RX_BUSY_POLL. As a result,
>>     when busy polling is disabled, the skb may not carry a usable NAPI ID.
>>     The device lookup then fails, so the driver callback is not invoked.
>>     get_timestamp() falls back to hwtstamp, which does not contain the
>>     converted timestamp, resulting in an incorrect RX hardware timestamp.
>>     Record skb NAPI IDs independently of busy-poll support to support
>>     drivers that use deferred timestamp conversion and future driver
>>     features that need to look up a device by its NAPI ID.
>>     Signed-off-by: Ding Meng <meng.ding@siemens.com>
>>     Reviewed-by: Florian Bezdeka <florian.bezdeka@siemens.com>
> 
> This isn't a bug, but is e68b6e50fa35 the right commit to name here?
> 
> Before that commit, __skb_mark_napi_id() / skb_mark_napi_id() was already
> inside '#ifdef CONFIG_NET_RX_BUSY_POLL' with an empty stub in the #else
> branch, and struct sk_buff already had napi_id under
> '#if defined(CONFIG_NET_RX_BUSY_POLL) || defined(CONFIG_XPS)'.  That gating
> goes back to 8b80cda536ea ("net: rename ll methods to busy-poll").
> 
> e68b6e50fa35 only moved the socket-side sk_mark_napi_id() out of the ifdef
> block and added sk_mark_napi_id_once().  Both act on sk->sk_napi_id, not on
> the skb.
> 
> It is also about six years older than 97dc7cd92ac6, so the message reads as
> if a later change broke the deferred-timestamp lookup.  In fact
> get_timestamp() has depended on a busy-poll-only skb field (skb_napi_id()
> returns 0 when CONFIG_NET_RX_BUSY_POLL=n) since 97dc7cd92ac6 added it.
> 
> Could the message say that the skb NAPI ID was always busy-poll-only and
> that 97dc7cd92ac6 started depending on it?
> 

I think the AI is reading a bit much into the commit message. Clearly
the bug is that 97dc7cd92ac6 depends on busy polling. The wording could
be slightly more precise to not imply that e68b6e50fa35 actually
introduced a problem, but I think that is a bit of a nitpick, and not
worth a reroll of this work unless something else needs to change.

Reviewed-by: Jacob Keller <jacob.e.keller@intel.com>

> 
> ---
> AI reviewed your patch. Please fix the bug or email reply why it's not a bug.
> See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md
> 
> CI run summary: https://github.com/kernel-patches/bpf/actions/runs/41989099174


^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] net: mark skb NAPI IDs independently of busy polling
  2026-11-05  7:16 [PATCH] net: mark skb NAPI IDs independently of busy polling Ding Meng
  2026-11-05  8:04 ` bot+bpf-ci
@ 2026-11-05 22:29 ` Paul Moses
  1 sibling, 0 replies; 4+ messages in thread
From: Paul Moses @ 2026-11-05 22:29 UTC (permalink / raw)
  To: Ding Meng
  Cc: netdev, Willem de Bruijn, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Jonathan Corbet, Andrew Lunn,
	Tony Nguyen, Przemek Kitszel, Steven Rostedt, Masami Hiramatsu,
	Daniel Borkmann, Alexei Starovoitov, Andrii Nakryiko,
	Eduard Zingerman, Kumar Kartikeya Dwivedi, Richard Cochran,
	florian.bezdeka, jan.kiszka, wq.wang, gerhard, Jason Xing,
	Simon Horman, Shuah Khan, Randy Dunlap, Mathieu Desnoyers,
	Martin KaFai Lau, Song Liu, Yonghong Song, Jiri Olsa,
	Emil Tsalapatis, Ihor Solodrai, John Fastabend,
	Stanislav Fomichev, linux-doc, linux-kernel, intel-wired-lan,
	linux-trace-kernel, bpf





On Thursday, November 5th, 2026 at 1:19 AM, Ding Meng <meng.ding@siemens.com> wrote:

> Commit 97dc7cd92ac6 ("ptp: Support late timestamp determination")
> added support for deferring RX timestamp conversion to
> ndo_get_tstamp(). When the timestamp is consumed, get_timestamp()
> uses the skb's NAPI ID to find the device that owns the timestamp
> cookie and invoke its callback.
> 
> Commit e68b6e50fa35 ("udp: enable busy polling for all sockets")
> gated NAPI ID bookkeeping with CONFIG_NET_RX_BUSY_POLL. As a result,
> when busy polling is disabled, the skb may not carry a usable NAPI ID.
> The device lookup then fails, so the driver callback is not invoked.
> get_timestamp() falls back to hwtstamp, which does not contain the
> converted timestamp, resulting in an incorrect RX hardware timestamp.
> 
> Record skb NAPI IDs independently of busy-poll support to support
> drivers that use deferred timestamp conversion and future driver
> features that need to look up a device by its NAPI ID.
> 
> Signed-off-by: Ding Meng <meng.ding@siemens.com>
> Reviewed-by: Florian Bezdeka <florian.bezdeka@siemens.com>
> ---
> In the discussion of the issue reported at
> https://lore.kernel.org/netdev/20260630112056.885071-1-meng.ding@siemens.com/
> this previous patch added an igc-specific fallback for configurations
> with CONFIG_NET_RX_BUSY_POLL disabled. It populated skb's hwtstamp
> field with a timestamp converted using the default hardware timer,
> allowing get_timestamp() to return it without invoking ndo_get_tstamp().
> But Jakub Kicinski noted that the proposed fix appeared to be a
> driver-specific workaround for a generic problem. The engleder driver
> would also be affected by the same issue.
> 
> This patch introduces a new configuration option to enable NAPI ID
> bookkeeping independently of busy polling. The option is enabled
> whenever busy polling is enabled, preserving the existing behavior.
> It is also selected by the igc and engleder drivers, ensuring that
> skbs carry a NAPI ID even when busy polling is disabled.
> 
> Another approach considered was to require drivers using deferred
> timestamp conversion, such as igc and engleder, to enable busy polling.
> However, this would introduce an unnecessary dependency between two
> independent features: hardware timestamp reporting should not require
> busy polling to be enabled.
> 
> Timestamping has been tested only with igc; it has not been tested
> with engleder.
> 
>  Documentation/networking/timestamping.rst | 11 ++++++++---
>  drivers/net/ethernet/engleder/Kconfig     |  1 +
>  drivers/net/ethernet/intel/Kconfig        |  1 +
>  include/linux/skbuff.h                    |  4 ++--
>  include/net/busy_poll.h                   |  2 +-
>  include/trace/events/net.h                |  2 +-
>  net/Kconfig                               |  4 ++++
>  net/core/filter.c                         |  2 +-
>  net/core/skbuff.c                         |  2 +-
>  9 files changed, 20 insertions(+), 9 deletions(-)
> 
> diff --git a/Documentation/networking/timestamping.rst b/Documentation/networking/timestamping.rst
> index 2162c4f2b28a6..dbe40a1972639 100644
> --- a/Documentation/networking/timestamping.rst
> +++ b/Documentation/networking/timestamping.rst
> @@ -278,9 +278,14 @@ SOF_TIMESTAMPING_OPT_PKTINFO:
>    packets with hardware timestamps. The message contains struct
>    scm_ts_pktinfo, which supplies the index of the real interface which
>    received the packet and its length at layer 2. A valid (non-zero)
> -  interface index will be returned only if CONFIG_NET_RX_BUSY_POLL is
> -  enabled and the driver is using NAPI. The struct contains also two
> -  other fields, but they are reserved and undefined.
> +  interface index will be returned only if CONFIG_SKB_MARK_NAPI_ID is
> +  enabled and the driver is using NAPI. This hidden configuration is
> +  selected automatically by busy-poll support and by drivers that need
> +  skb NAPI IDs to resolve deferred hardware timestamps. Drivers that
> +  use deferred timestamp conversion must select it so the networking
> +  stack can find the device and call its timestamp callback even when
> +  busy polling is disabled. The struct contains also two other fields,
> +  but they are reserved and undefined.
> 
>  SOF_TIMESTAMPING_OPT_TX_SWHW:
>    Request both hardware and software timestamps for outgoing packets
> diff --git a/drivers/net/ethernet/engleder/Kconfig b/drivers/net/ethernet/engleder/Kconfig
> index 3df6bf476ae7e..9700a243bea11 100644
> --- a/drivers/net/ethernet/engleder/Kconfig
> +++ b/drivers/net/ethernet/engleder/Kconfig
> @@ -22,6 +22,7 @@ config TSNEP
>  	depends on PTP_1588_CLOCK_OPTIONAL
>  	select PHYLIB
>  	select PAGE_POOL
> +	select SKB_MARK_NAPI_ID
>  	help
>  	  Support for the Engleder TSN endpoint Ethernet MAC IP Core.
> 
> diff --git a/drivers/net/ethernet/intel/Kconfig b/drivers/net/ethernet/intel/Kconfig
> index 780f113986ea8..7fb63f351fc20 100644
> --- a/drivers/net/ethernet/intel/Kconfig
> +++ b/drivers/net/ethernet/intel/Kconfig
> @@ -376,6 +376,7 @@ config IGC
>  	depends on PCI
>  	depends on PTP_1588_CLOCK_OPTIONAL
>  	depends on ETHTOOL_NETLINK
> +	select SKB_MARK_NAPI_ID
>  	help
>  	  This driver supports Intel(R) Ethernet Controller I225-LM/I225-V
>  	  family of adapters.
> diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h
> index 6787fcf6ac3e4..164c862f7a403 100644
> --- a/include/linux/skbuff.h
> +++ b/include/linux/skbuff.h
> @@ -1059,7 +1059,7 @@ struct sk_buff {
>  			__u16	vlan_tci;
>  		};
>  	};
> -#if defined(CONFIG_NET_RX_BUSY_POLL) || defined(CONFIG_XPS)
> +#if defined(CONFIG_SKB_MARK_NAPI_ID) || defined(CONFIG_XPS)
>  	union {
>  		unsigned int	napi_id;
>  		unsigned int	sender_cpu;
> @@ -1267,7 +1267,7 @@ static inline bool skb_pkt_type_ok(u32 ptype)
>   */
>  static inline unsigned int skb_napi_id(const struct sk_buff *skb)
>  {
> -#ifdef CONFIG_NET_RX_BUSY_POLL
> +#ifdef CONFIG_SKB_MARK_NAPI_ID
>  	return skb->napi_id;
>  #else
>  	return 0;
> diff --git a/include/net/busy_poll.h b/include/net/busy_poll.h
> index 6e172d0f6ef5f..f7c0e62c6a7d7 100644
> --- a/include/net/busy_poll.h
> +++ b/include/net/busy_poll.h
> @@ -130,7 +130,7 @@ static inline void sk_busy_loop(struct sock *sk, int nonblock)
>  static inline void __skb_mark_napi_id(struct sk_buff *skb,
>  				      const struct gro_node *gro)
>  {
> -#ifdef CONFIG_NET_RX_BUSY_POLL
> +#ifdef CONFIG_SKB_MARK_NAPI_ID
>  	/* If the skb was already marked with a valid NAPI ID, avoid overwriting
>  	 * it.
>  	 */
> diff --git a/include/trace/events/net.h b/include/trace/events/net.h
> index dbc2c5598e35a..99ed7645242eb 100644
> --- a/include/trace/events/net.h
> +++ b/include/trace/events/net.h
> @@ -208,7 +208,7 @@ DECLARE_EVENT_CLASS(net_dev_rx_verbose_template,
> 
>  	TP_fast_assign(
>  		__assign_str(name);
> -#ifdef CONFIG_NET_RX_BUSY_POLL
> +#ifdef CONFIG_SKB_MARK_NAPI_ID
>  		__entry->napi_id = napi_id_valid(skb->napi_id) ?
>  				   skb->napi_id : 0;
>  #else
> diff --git a/net/Kconfig b/net/Kconfig
> index 76ab44aa439a6..8fa7586dc08ca 100644
> --- a/net/Kconfig
> +++ b/net/Kconfig
> @@ -346,9 +346,13 @@ config CGROUP_NET_CLASSID
>  	  Cgroup subsystem for use as general purpose socket classid marker that is
>  	  being used in cls_cgroup and for netfilter matching.
> 
> +config SKB_MARK_NAPI_ID
> +	bool
> +
>  config NET_RX_BUSY_POLL
>  	bool
>  	default y if !PREEMPT_RT || (PREEMPT_RT && !NETCONSOLE)
> +	select SKB_MARK_NAPI_ID
> 
>  config BQL
>  	bool
> diff --git a/net/core/filter.c b/net/core/filter.c
> index b7ac145b68b1f..e2218c18622b8 100644
> --- a/net/core/filter.c
> +++ b/net/core/filter.c
> @@ -10274,7 +10274,7 @@ static u32 bpf_convert_ctx_access(enum bpf_access_type type,
>  		break;
> 
>  	case offsetof(struct __sk_buff, napi_id):
> -#if defined(CONFIG_NET_RX_BUSY_POLL)
> +#if defined(CONFIG_SKB_MARK_NAPI_ID)
>  		*insn++ = BPF_LDX_MEM(BPF_W, si->dst_reg, si->src_reg,
>  				      bpf_target_off(struct sk_buff, napi_id, 4,
>  						     target_size));
> diff --git a/net/core/skbuff.c b/net/core/skbuff.c
> index eb9fcc4b1fd1a..386a32cdc0cc8 100644
> --- a/net/core/skbuff.c
> +++ b/net/core/skbuff.c
> @@ -1581,7 +1581,7 @@ static void __copy_skb_header(struct sk_buff *new, const struct sk_buff *old)
>  #ifdef CONFIG_NETWORK_SECMARK
>  	CHECK_SKB_FIELD(secmark);
>  #endif
> -#ifdef CONFIG_NET_RX_BUSY_POLL
> +#ifdef CONFIG_SKB_MARK_NAPI_ID
>  	CHECK_SKB_FIELD(napi_id);
>  #endif
>  #ifdef CONFIG_XPS
> 
> base-commit: d135ab453a7400a34930bdda1ef4bdc8acfac80e
> --
> 2.47.3
> 
> 

Are you sure this does not make the preexisting timestamp lifetime
issue more pathological? I think it needs to be fixed now as well.
It was the last item mentioned by Sashiko in your review if I 
remember correctly.

Paul

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-11-05 22:30 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-05  7:16 [PATCH] net: mark skb NAPI IDs independently of busy polling Ding Meng
2026-11-05  8:04 ` bot+bpf-ci
2026-11-05 18:36   ` Jacob Keller
2026-11-05 22:29 ` Paul Moses

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®