From: Jakub Sitnicki <jakub@cloudflare.com> Date: 2026-01-10 21:05:24
This series is split out of [1] following discussion with Jakub.
To copy XDP metadata into an skb extension when skb_metadata_set() is
called, we need to locate the metadata contents.
These patches establish a contract with the drivers: skb_metadata_set()
must be called only after skb->data has been advanced past the metadata
area.
[1] https://lore.kernel.org/r/20260107-skb-meta-safeproof-netdevs-rx-only-v3-0-0d461c5e4764@cloudflare.com
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
Jakub Sitnicki (10):
net: Document skb_metadata_set contract with the drivers
bnxt_en: Call skb_metadata_set when skb->data points past metadata
i40e: Call skb_metadata_set when skb->data points past metadata
igb: Call skb_metadata_set when skb->data points past metadata
igc: Call skb_metadata_set when skb->data points past metadata
ixgbe: Call skb_metadata_set when skb->data points past metadata
mlx5e: Call skb_metadata_set when skb->data points past metadata
veth: Call skb_metadata_set when skb->data points past metadata
xsk: Call skb_metadata_set when skb->data points past metadata
xdp: Call skb_metadata_set when skb->data points past metadata
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +-
drivers/net/ethernet/intel/i40e/i40e_xsk.c | 2 +-
drivers/net/ethernet/intel/igb/igb_xsk.c | 2 +-
drivers/net/ethernet/intel/igc/igc_main.c | 4 ++--
drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c | 2 +-
drivers/net/ethernet/mellanox/mlx5/core/en/xsk/rx.c | 2 +-
drivers/net/veth.c | 4 ++--
include/linux/skbuff.h | 7 +++++++
net/core/dev.c | 5 ++++-
net/core/xdp.c | 2 +-
10 files changed, 21 insertions(+), 11 deletions(-)
From: Jakub Sitnicki <jakub@cloudflare.com> Date: 2026-01-10 21:05:26
Prepare to copy XDP metadata into an skb extension chunk. To access the
metadata contents, we need to know where it is located. Document the
expectation - skb->data must point right past the metadata when
skb_metadata_set gets called.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
include/linux/skbuff.h | 7 +++++++
1 file changed, 7 insertions(+)
From: Jakub Sitnicki <jakub@cloudflare.com> Date: 2026-01-10 21:05:27
Prepare to copy the XDP metadata into an skb extension in skb_metadata_set.
Adjust the driver to pull from skb->data before calling skb_metadata_set.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Jakub Sitnicki <jakub@cloudflare.com> Date: 2026-01-10 21:05:28
Prepare to copy the XDP metadata into an skb extension in skb_metadata_set.
Adjust the driver to pull from skb->data before calling skb_metadata_set.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
drivers/net/ethernet/intel/i40e/i40e_xsk.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Jakub Sitnicki <jakub@cloudflare.com> Date: 2026-01-10 21:05:29
Prepare to copy the XDP metadata into an skb extension in skb_metadata_set.
Adjust the driver to pull from skb->data before calling skb_metadata_set.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
drivers/net/ethernet/intel/igb/igb_xsk.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Jakub Sitnicki <jakub@cloudflare.com> Date: 2026-01-10 21:05:31
Prepare to copy the XDP metadata into an skb extension in skb_metadata_set.
Adjust the driver to pull from skb->data before calling skb_metadata_set.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
drivers/net/ethernet/intel/igc/igc_main.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
From: Jakub Sitnicki <jakub@cloudflare.com> Date: 2026-01-10 21:05:32
Prepare to copy the XDP metadata into an skb extension in skb_metadata_set.
Adjust the driver to pull from skb->data before calling skb_metadata_set.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Jakub Sitnicki <jakub@cloudflare.com> Date: 2026-01-10 21:05:33
Prepare to copy the XDP metadata into an skb extension in skb_metadata_set.
Adjust the driver to pull from skb->data before calling skb_metadata_set.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
drivers/net/ethernet/mellanox/mlx5/core/en/xsk/rx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Jakub Sitnicki <jakub@cloudflare.com> Date: 2026-01-10 21:05:35
Prepare to copy the XDP metadata into an skb extension in skb_metadata_set.
Unlike other drivers, veth calls skb_metadata_set after eth_type_trans,
which pulls the Ethernet header and moves skb->data. This violates the
new contract with skb_metadata.
Adjust the driver to pull the MAC header after calling skb_metadata_set.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
drivers/net/veth.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
From: Jakub Sitnicki <jakub@cloudflare.com> Date: 2026-01-10 21:05:36
Prepare to copy the XDP metadata into an skb extension in skb_metadata_set.
Adjust AF_XDP to pull from skb->data before calling skb_metadata_set.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
net/core/xdp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Jakub Sitnicki <jakub@cloudflare.com> Date: 2026-01-10 21:05:39
Prepare to copy the XDP metadata into an skb extension in skb_metadata_set.
XDP generic mode runs after MAC header has been already pulled. Adjust
skb->data before calling skb_metadata_set to adhere to new contract.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
net/core/dev.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
From: Loktionov, Aleksandr <hidden> Date: 2026-01-12 11:29:00
quoted hunk
-----Original Message-----
From: Intel-wired-lan <redacted> On Behalf
Of Jakub Sitnicki via Intel-wired-lan
Sent: Saturday, January 10, 2026 10:05 PM
To: netdev@vger.kernel.org
Cc: David S. Miller <davem@davemloft.net>; Eric Dumazet
[off-list ref]; Jakub Kicinski [off-list ref]; Paolo Abeni
[off-list ref]; Simon Horman [off-list ref]; Michael Chan
[off-list ref]; Pavan Chebbi [off-list ref];
Andrew Lunn [off-list ref]; Nguyen, Anthony L
[off-list ref]; Kitszel, Przemyslaw
[off-list ref]; Saeed Mahameed [off-list ref];
Leon Romanovsky [off-list ref]; Tariq Toukan [off-list ref];
Mark Bloch [off-list ref]; Alexei Starovoitov [off-list ref];
Daniel Borkmann [off-list ref]; Jesper Dangaard Brouer
[off-list ref]; John Fastabend [off-list ref];
Stanislav Fomichev [off-list ref]; intel-wired-
lan@lists.osuosl.org; bpf@vger.kernel.org; kernel-team@cloudflare.com
Subject: [Intel-wired-lan] [PATCH net-next 01/10] net: Document
skb_metadata_set contract with the drivers
Prepare to copy XDP metadata into an skb extension chunk. To access
the metadata contents, we need to know where it is located. Document
the expectation - skb->data must point right past the metadata when
skb_metadata_set gets called.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
include/linux/skbuff.h | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/include/linux/skbuff.h b/include/linux/skbuff.h index
From: Loktionov, Aleksandr <hidden> Date: 2026-01-12 11:29:54
quoted hunk
-----Original Message-----
From: Intel-wired-lan <redacted> On Behalf
Of Jakub Sitnicki via Intel-wired-lan
Sent: Saturday, January 10, 2026 10:05 PM
To: netdev@vger.kernel.org
Cc: David S. Miller <davem@davemloft.net>; Eric Dumazet
[off-list ref]; Jakub Kicinski [off-list ref]; Paolo Abeni
[off-list ref]; Simon Horman [off-list ref]; Michael Chan
[off-list ref]; Pavan Chebbi [off-list ref];
Andrew Lunn [off-list ref]; Nguyen, Anthony L
[off-list ref]; Kitszel, Przemyslaw
[off-list ref]; Saeed Mahameed [off-list ref];
Leon Romanovsky [off-list ref]; Tariq Toukan [off-list ref];
Mark Bloch [off-list ref]; Alexei Starovoitov [off-list ref];
Daniel Borkmann [off-list ref]; Jesper Dangaard Brouer
[off-list ref]; John Fastabend [off-list ref];
Stanislav Fomichev [off-list ref]; intel-wired-
lan@lists.osuosl.org; bpf@vger.kernel.org; kernel-team@cloudflare.com
Subject: [Intel-wired-lan] [PATCH net-next 02/10] bnxt_en: Call
skb_metadata_set when skb->data points past metadata
Prepare to copy the XDP metadata into an skb extension in
skb_metadata_set.
Adjust the driver to pull from skb->data before calling
skb_metadata_set.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Loktionov, Aleksandr <hidden> Date: 2026-01-12 11:30:39
quoted hunk
-----Original Message-----
From: Intel-wired-lan <redacted> On Behalf
Of Jakub Sitnicki via Intel-wired-lan
Sent: Saturday, January 10, 2026 10:05 PM
To: netdev@vger.kernel.org
Cc: David S. Miller <davem@davemloft.net>; Eric Dumazet
[off-list ref]; Jakub Kicinski [off-list ref]; Paolo Abeni
[off-list ref]; Simon Horman [off-list ref]; Michael Chan
[off-list ref]; Pavan Chebbi [off-list ref];
Andrew Lunn [off-list ref]; Nguyen, Anthony L
[off-list ref]; Kitszel, Przemyslaw
[off-list ref]; Saeed Mahameed [off-list ref];
Leon Romanovsky [off-list ref]; Tariq Toukan [off-list ref];
Mark Bloch [off-list ref]; Alexei Starovoitov [off-list ref];
Daniel Borkmann [off-list ref]; Jesper Dangaard Brouer
[off-list ref]; John Fastabend [off-list ref];
Stanislav Fomichev [off-list ref]; intel-wired-
lan@lists.osuosl.org; bpf@vger.kernel.org; kernel-team@cloudflare.com
Subject: [Intel-wired-lan] [PATCH net-next 03/10] i40e: Call
skb_metadata_set when skb->data points past metadata
Prepare to copy the XDP metadata into an skb extension in
skb_metadata_set.
Adjust the driver to pull from skb->data before calling
skb_metadata_set.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
drivers/net/ethernet/intel/i40e/i40e_xsk.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Loktionov, Aleksandr <hidden> Date: 2026-01-12 11:31:17
quoted hunk
-----Original Message-----
From: Intel-wired-lan <redacted> On Behalf
Of Jakub Sitnicki via Intel-wired-lan
Sent: Saturday, January 10, 2026 10:05 PM
To: netdev@vger.kernel.org
Cc: David S. Miller <davem@davemloft.net>; Eric Dumazet
[off-list ref]; Jakub Kicinski [off-list ref]; Paolo Abeni
[off-list ref]; Simon Horman [off-list ref]; Michael Chan
[off-list ref]; Pavan Chebbi [off-list ref];
Andrew Lunn [off-list ref]; Nguyen, Anthony L
[off-list ref]; Kitszel, Przemyslaw
[off-list ref]; Saeed Mahameed [off-list ref];
Leon Romanovsky [off-list ref]; Tariq Toukan [off-list ref];
Mark Bloch [off-list ref]; Alexei Starovoitov [off-list ref];
Daniel Borkmann [off-list ref]; Jesper Dangaard Brouer
[off-list ref]; John Fastabend [off-list ref];
Stanislav Fomichev [off-list ref]; intel-wired-
lan@lists.osuosl.org; bpf@vger.kernel.org; kernel-team@cloudflare.com
Subject: [Intel-wired-lan] [PATCH net-next 04/10] igb: Call
skb_metadata_set when skb->data points past metadata
Prepare to copy the XDP metadata into an skb extension in
skb_metadata_set.
Adjust the driver to pull from skb->data before calling
skb_metadata_set.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
drivers/net/ethernet/intel/igb/igb_xsk.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Loktionov, Aleksandr <hidden> Date: 2026-01-12 11:31:45
quoted hunk
-----Original Message-----
From: Intel-wired-lan <redacted> On Behalf
Of Jakub Sitnicki via Intel-wired-lan
Sent: Saturday, January 10, 2026 10:05 PM
To: netdev@vger.kernel.org
Cc: David S. Miller <davem@davemloft.net>; Eric Dumazet
[off-list ref]; Jakub Kicinski [off-list ref]; Paolo Abeni
[off-list ref]; Simon Horman [off-list ref]; Michael Chan
[off-list ref]; Pavan Chebbi [off-list ref];
Andrew Lunn [off-list ref]; Nguyen, Anthony L
[off-list ref]; Kitszel, Przemyslaw
[off-list ref]; Saeed Mahameed [off-list ref];
Leon Romanovsky [off-list ref]; Tariq Toukan [off-list ref];
Mark Bloch [off-list ref]; Alexei Starovoitov [off-list ref];
Daniel Borkmann [off-list ref]; Jesper Dangaard Brouer
[off-list ref]; John Fastabend [off-list ref];
Stanislav Fomichev [off-list ref]; intel-wired-
lan@lists.osuosl.org; bpf@vger.kernel.org; kernel-team@cloudflare.com
Subject: [Intel-wired-lan] [PATCH net-next 05/10] igc: Call
skb_metadata_set when skb->data points past metadata
Prepare to copy the XDP metadata into an skb extension in
skb_metadata_set.
Adjust the driver to pull from skb->data before calling
skb_metadata_set.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
drivers/net/ethernet/intel/igc/igc_main.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
From: Loktionov, Aleksandr <hidden> Date: 2026-01-12 11:32:50
quoted hunk
-----Original Message-----
From: Intel-wired-lan <redacted> On Behalf
Of Jakub Sitnicki via Intel-wired-lan
Sent: Saturday, January 10, 2026 10:05 PM
To: netdev@vger.kernel.org
Cc: David S. Miller <davem@davemloft.net>; Eric Dumazet
[off-list ref]; Jakub Kicinski [off-list ref]; Paolo Abeni
[off-list ref]; Simon Horman [off-list ref]; Michael Chan
[off-list ref]; Pavan Chebbi [off-list ref];
Andrew Lunn [off-list ref]; Nguyen, Anthony L
[off-list ref]; Kitszel, Przemyslaw
[off-list ref]; Saeed Mahameed [off-list ref];
Leon Romanovsky [off-list ref]; Tariq Toukan [off-list ref];
Mark Bloch [off-list ref]; Alexei Starovoitov [off-list ref];
Daniel Borkmann [off-list ref]; Jesper Dangaard Brouer
[off-list ref]; John Fastabend [off-list ref];
Stanislav Fomichev [off-list ref]; intel-wired-
lan@lists.osuosl.org; bpf@vger.kernel.org; kernel-team@cloudflare.com
Subject: [Intel-wired-lan] [PATCH net-next 06/10] ixgbe: Call
skb_metadata_set when skb->data points past metadata
Prepare to copy the XDP metadata into an skb extension in
skb_metadata_set.
Adjust the driver to pull from skb->data before calling
skb_metadata_set.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
drivers/net/ethernet/intel/ixgbe/ixgbe_xsk.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Loktionov, Aleksandr <hidden> Date: 2026-01-12 11:33:02
quoted hunk
-----Original Message-----
From: Intel-wired-lan <redacted> On Behalf
Of Jakub Sitnicki via Intel-wired-lan
Sent: Saturday, January 10, 2026 10:05 PM
To: netdev@vger.kernel.org
Cc: David S. Miller <davem@davemloft.net>; Eric Dumazet
[off-list ref]; Jakub Kicinski [off-list ref]; Paolo Abeni
[off-list ref]; Simon Horman [off-list ref]; Michael Chan
[off-list ref]; Pavan Chebbi [off-list ref];
Andrew Lunn [off-list ref]; Nguyen, Anthony L
[off-list ref]; Kitszel, Przemyslaw
[off-list ref]; Saeed Mahameed [off-list ref];
Leon Romanovsky [off-list ref]; Tariq Toukan [off-list ref];
Mark Bloch [off-list ref]; Alexei Starovoitov [off-list ref];
Daniel Borkmann [off-list ref]; Jesper Dangaard Brouer
[off-list ref]; John Fastabend [off-list ref];
Stanislav Fomichev [off-list ref]; intel-wired-
lan@lists.osuosl.org; bpf@vger.kernel.org; kernel-team@cloudflare.com
Subject: [Intel-wired-lan] [PATCH net-next 07/10] mlx5e: Call
skb_metadata_set when skb->data points past metadata
Prepare to copy the XDP metadata into an skb extension in
skb_metadata_set.
Adjust the driver to pull from skb->data before calling
skb_metadata_set.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
drivers/net/ethernet/mellanox/mlx5/core/en/xsk/rx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Loktionov, Aleksandr <hidden> Date: 2026-01-12 11:33:14
quoted hunk
-----Original Message-----
From: Intel-wired-lan <redacted> On Behalf
Of Jakub Sitnicki via Intel-wired-lan
Sent: Saturday, January 10, 2026 10:05 PM
To: netdev@vger.kernel.org
Cc: David S. Miller <davem@davemloft.net>; Eric Dumazet
[off-list ref]; Jakub Kicinski [off-list ref]; Paolo Abeni
[off-list ref]; Simon Horman [off-list ref]; Michael Chan
[off-list ref]; Pavan Chebbi [off-list ref];
Andrew Lunn [off-list ref]; Nguyen, Anthony L
[off-list ref]; Kitszel, Przemyslaw
[off-list ref]; Saeed Mahameed [off-list ref];
Leon Romanovsky [off-list ref]; Tariq Toukan [off-list ref];
Mark Bloch [off-list ref]; Alexei Starovoitov [off-list ref];
Daniel Borkmann [off-list ref]; Jesper Dangaard Brouer
[off-list ref]; John Fastabend [off-list ref];
Stanislav Fomichev [off-list ref]; intel-wired-
lan@lists.osuosl.org; bpf@vger.kernel.org; kernel-team@cloudflare.com
Subject: [Intel-wired-lan] [PATCH net-next 08/10] veth: Call
skb_metadata_set when skb->data points past metadata
Prepare to copy the XDP metadata into an skb extension in
skb_metadata_set.
Unlike other drivers, veth calls skb_metadata_set after
eth_type_trans, which pulls the Ethernet header and moves skb->data.
This violates the new contract with skb_metadata.
Adjust the driver to pull the MAC header after calling
skb_metadata_set.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
drivers/net/veth.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/net/veth.c b/drivers/net/veth.c index
From: Loktionov, Aleksandr <hidden> Date: 2026-01-12 11:33:32
quoted hunk
-----Original Message-----
From: Intel-wired-lan <redacted> On Behalf
Of Jakub Sitnicki via Intel-wired-lan
Sent: Saturday, January 10, 2026 10:05 PM
To: netdev@vger.kernel.org
Cc: David S. Miller <davem@davemloft.net>; Eric Dumazet
[off-list ref]; Jakub Kicinski [off-list ref]; Paolo Abeni
[off-list ref]; Simon Horman [off-list ref]; Michael Chan
[off-list ref]; Pavan Chebbi [off-list ref];
Andrew Lunn [off-list ref]; Nguyen, Anthony L
[off-list ref]; Kitszel, Przemyslaw
[off-list ref]; Saeed Mahameed [off-list ref];
Leon Romanovsky [off-list ref]; Tariq Toukan [off-list ref];
Mark Bloch [off-list ref]; Alexei Starovoitov [off-list ref];
Daniel Borkmann [off-list ref]; Jesper Dangaard Brouer
[off-list ref]; John Fastabend [off-list ref];
Stanislav Fomichev [off-list ref]; intel-wired-
lan@lists.osuosl.org; bpf@vger.kernel.org; kernel-team@cloudflare.com
Subject: [Intel-wired-lan] [PATCH net-next 09/10] xsk: Call
skb_metadata_set when skb->data points past metadata
Prepare to copy the XDP metadata into an skb extension in
skb_metadata_set.
Adjust AF_XDP to pull from skb->data before calling skb_metadata_set.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
net/core/xdp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/core/xdp.c b/net/core/xdp.c index
From: Loktionov, Aleksandr <hidden> Date: 2026-01-12 11:33:37
quoted hunk
-----Original Message-----
From: Intel-wired-lan <redacted> On Behalf
Of Jakub Sitnicki via Intel-wired-lan
Sent: Saturday, January 10, 2026 10:05 PM
To: netdev@vger.kernel.org
Cc: David S. Miller <davem@davemloft.net>; Eric Dumazet
[off-list ref]; Jakub Kicinski [off-list ref]; Paolo Abeni
[off-list ref]; Simon Horman [off-list ref]; Michael Chan
[off-list ref]; Pavan Chebbi [off-list ref];
Andrew Lunn [off-list ref]; Nguyen, Anthony L
[off-list ref]; Kitszel, Przemyslaw
[off-list ref]; Saeed Mahameed [off-list ref];
Leon Romanovsky [off-list ref]; Tariq Toukan [off-list ref];
Mark Bloch [off-list ref]; Alexei Starovoitov [off-list ref];
Daniel Borkmann [off-list ref]; Jesper Dangaard Brouer
[off-list ref]; John Fastabend [off-list ref];
Stanislav Fomichev [off-list ref]; intel-wired-
lan@lists.osuosl.org; bpf@vger.kernel.org; kernel-team@cloudflare.com
Subject: [Intel-wired-lan] [PATCH net-next 10/10] xdp: Call
skb_metadata_set when skb->data points past metadata
Prepare to copy the XDP metadata into an skb extension in
skb_metadata_set.
XDP generic mode runs after MAC header has been already pulled. Adjust
skb->data before calling skb_metadata_set to adhere to new contract.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
net/core/dev.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/net/core/dev.c b/net/core/dev.c index
From: Jakub Kicinski <kuba@kernel.org> Date: 2026-01-13 03:08:58
On Sat, 10 Jan 2026 22:05:14 +0100 Jakub Sitnicki wrote:
This series is split out of [1] following discussion with Jakub.
To copy XDP metadata into an skb extension when skb_metadata_set() is
called, we need to locate the metadata contents.
"When skb_metadata_set() is called"? I think that may cause perf
regressions unless we merge major optimizations at the same time?
Should we defer touching the drivers until we have a PoC and some
idea whether allocating the extension right away is manageable or
we are better off doing it via a kfunc in TC (after GRO)?
To be clear putting the metadata in an extension right away would
indeed be much cleaner, just not sure how much of the perf hit we
can optimize away..
Prepare to copy the XDP metadata into an skb extension in skb_metadata_set.
Adjust the driver to pull from skb->data before calling skb_metadata_set.
Signed-off-by: Jakub Sitnicki <jakub@cloudflare.com>
---
drivers/net/ethernet/mellanox/mlx5/core/en/xsk/rx.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
From: Paolo Abeni <pabeni@redhat.com> Date: 2026-01-13 12:09:51
On 1/13/26 4:08 AM, Jakub Kicinski wrote:
On Sat, 10 Jan 2026 22:05:14 +0100 Jakub Sitnicki wrote:
quoted
This series is split out of [1] following discussion with Jakub.
To copy XDP metadata into an skb extension when skb_metadata_set() is
called, we need to locate the metadata contents.
"When skb_metadata_set() is called"? I think that may cause perf
regressions unless we merge major optimizations at the same time?
Should we defer touching the drivers until we have a PoC and some
idea whether allocating the extension right away is manageable or
we are better off doing it via a kfunc in TC (after GRO)?
To be clear putting the metadata in an extension right away would
indeed be much cleaner, just not sure how much of the perf hit we
can optimize away..
I agree it would be better deferring touching the driver before we have
proof there will not be significant regressions.
IIRC, at early MPTCP impl time, Eric suggested increasing struct sk_buff
size as an alternative to the mptcp skb extension, leaving the added
trailing part uninitialized when the sk_buff is allocated.
If skb extensions usage become so ubicuos they are basically allocated
for each packet, the total skb extension is kept under strict control
and remains reasonable (assuming it is :), perhaps we could consider
revisiting the above mentioned approach?
/P
On Sat, 10 Jan 2026 22:05:14 +0100 Jakub Sitnicki wrote:
quoted
This series is split out of [1] following discussion with Jakub.
To copy XDP metadata into an skb extension when skb_metadata_set() is
called, we need to locate the metadata contents.
"When skb_metadata_set() is called"? I think that may cause perf
regressions unless we merge major optimizations at the same time?
Should we defer touching the drivers until we have a PoC and some
idea whether allocating the extension right away is manageable or
we are better off doing it via a kfunc in TC (after GRO)?
To be clear putting the metadata in an extension right away would
indeed be much cleaner, just not sure how much of the perf hit we
can optimize away..
I agree it would be better deferring touching the driver before we have
proof there will not be significant regressions.
It will be a performance regression to (as cover-letter says):
"To copy XDP metadata into an skb extension when skb_metadata_set() is
called".
The XDP to TC-ingress code path is a fast-path IMHO.
*BUT* this patchset isn't doing that. To me it looks like a cleanup
patchset that simply makes it consistent when skb_metadata_set() called.
Selling it as a pre-requirement for doing copy later seems fishy.
IIRC, at early MPTCP impl time, Eric suggested increasing struct sk_buff
size as an alternative to the mptcp skb extension, leaving the added
trailing part uninitialized when the sk_buff is allocated.
If skb extensions usage become so ubicuos they are basically allocated
for each packet, the total skb extension is kept under strict control
and remains reasonable (assuming it is :), perhaps we could consider
revisiting the above mentioned approach?
I really like this idea. As using the uninitialized tail room in the
SKB (memory area) will make SKB extensions fast. Today SKBs are
allocated via SLUB-alloacator cache-aligned so the real size is 256
bytes. On my system the actual SKB (sk_buff) size is 232 bytes (already
leaving us 24 bytes). The area that gets zero-initialized is only 192
bytes (3 cache-lines). My experience with the SLUB allocator is that
increasing the object size doesn't increase the allocation cost (below
PAGE_SIZE). So, the suggestion of simply allocating a larger sk_buff is
valid as it doesn't cost more (if we don't touch those cache-lines). We
could even make it a CONFIG compile time option how big this area should be.
For Jakub this unfortunately challenge/breaks the design of keeping
data_meta area valid deeper into the netstack. With all the challenges
around encapsulation/decap it seems hard/infeasible to maintain this
area in-front of the packet data pointer deeper into the netstack.
Instead of blindly copying XDP data_meta area into a single SKB
extension. What if we make it the responsibility of the TC-ingress BPF-
hook to understand the data_meta format and via (kfunc) helpers
transfer/create the SKB extension that it deems relevant.
Would this be an acceptable approach that makes it easier to propagate
metadata deeper in netstack?
--Jesper
p.s. For compact storage of SKB extensions in the SKB tail-area, we
could revisit Arthur's "traits" (compact-KV storage).