RE: [Intel-wired-lan] [PATCH iwl-next] ice: implement configurable header split for regular Rx

From: Loktionov, Aleksandr

Date: Thu Oct 30 2025 - 04:46:11 EST




> -----Original Message-----
> From: Intel-wired-lan <intel-wired-lan-bounces@xxxxxxxxxx> On Behalf
> Of Alexander Lobakin
> Sent: Monday, October 6, 2025 6:21 PM
> To: intel-wired-lan@xxxxxxxxxxxxxxxx
> Cc: Lobakin, Aleksander <aleksander.lobakin@xxxxxxxxx>; Nguyen,
> Anthony L <anthony.l.nguyen@xxxxxxxxx>; Kitszel, Przemyslaw
> <przemyslaw.kitszel@xxxxxxxxx>; Andrew Lunn <andrew+netdev@xxxxxxx>;
> David S. Miller <davem@xxxxxxxxxxxxx>; Eric Dumazet
> <edumazet@xxxxxxxxxx>; Jakub Kicinski <kuba@xxxxxxxxxx>; Paolo Abeni
> <pabeni@xxxxxxxxxx>; Simon Horman <horms@xxxxxxxxxx>; NXNE CNSE OSDT
> ITP Upstreaming <nxne.cnse.osdt.itp.upstreaming@xxxxxxxxx>;
> netdev@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx
> Subject: [Intel-wired-lan] [PATCH iwl-next] ice: implement
> configurable header split for regular Rx
>
> Add second page_pool for header buffers to each Rx queue and ability
> to toggle the header split on/off using Ethtool (default to off to
> match the current behaviour).
> Unlike idpf, all HW backed up by ice doesn't require any W/As and
> correctly splits all types of packets as configured: after L4 headers
> for TCP/UDP/SCTP, after L3 headers for other IPv4/IPv6 frames, after
> the Ethernet header otherwise (in case of tunneling, same as above,
> but after innermost headers).
> This doesn't affect the XSk path as there are no benefits of having it
> there.
>
> Signed-off-by: Alexander Lobakin <aleksander.lobakin@xxxxxxxxx>
> ---
> Applies on top of Tony's next-queue, depends on Michał's Page Pool
> conversion series.
>
> Sending for review and validation purposes.
>
> Testing hints: traffic testing with and without header split enabled.
> The header split can be turned on/off using Ethtool:
>
> sudo ethtool -G <iface> tcp-data-split on (or off)
> ---
> drivers/net/ethernet/intel/ice/ice.h | 1 +
> .../net/ethernet/intel/ice/ice_lan_tx_rx.h | 3 +
> drivers/net/ethernet/intel/ice/ice_txrx.h | 7 ++
> drivers/net/ethernet/intel/ice/ice_base.c | 89 +++++++++++++++---
> -
> drivers/net/ethernet/intel/ice/ice_ethtool.c | 15 +++-
> drivers/net/ethernet/intel/ice/ice_txrx.c | 89 +++++++++++++++---
> -
> 6 files changed, 168 insertions(+), 36 deletions(-)
>
> diff --git a/drivers/net/ethernet/intel/ice/ice.h
> b/drivers/net/ethernet/intel/ice/ice.h
> index d46ff9c97c86..bef3d6d8d491 100644
> --- a/drivers/net/ethernet/intel/ice/ice.h
> +++ b/drivers/net/ethernet/intel/ice/ice.h
> @@ -351,6 +351,7 @@ struct ice_vsi {
> u16 num_q_vectors;
> /* tell if only dynamic irq allocation is allowed */
> bool irq_dyn_alloc;
> + bool hsplit:1;

...

> --
> 2.51.0

Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@xxxxxxxxx>