* [PATCH iwl-next v1 0/2] igc: enable build_skb path @ 2026-03-07 18:27 Kohei Enju 2026-03-07 18:27 ` [PATCH iwl-next v1 1/2] igc: set RX hardware timestamps in igc_build_skb() Kohei Enju 2026-03-07 18:27 ` [PATCH iwl-next v1 2/2] igc: enable build_skb on the non-XDP small-frame RX path Kohei Enju 0 siblings, 2 replies; 7+ messages in thread From: Kohei Enju @ 2026-03-07 18:27 UTC (permalink / raw) To: intel-wired-lan, netdev Cc: Tony Nguyen, Przemek Kitszel, Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, kohei.enju, Kohei Enju This series enables the build_skb RX path in igc, which is currently not enabled in any configuration. Patch 1/2 adds missing RX hardware timestamp handling in the build_skb path. Patch 2/2 enables the build_skb path when XDP is inactive and other conditions are met. Tested on Intel Corporation Ethernet Controller I226-V (rev 04). Kohei Enju (2): igc: set RX hardware timestamps in igc_build_skb() igc: enable build_skb on the non-XDP small-frame RX path drivers/net/ethernet/intel/igc/igc.h | 4 ++++ drivers/net/ethernet/intel/igc/igc_main.c | 22 +++++++++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) -- 2.51.0 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH iwl-next v1 1/2] igc: set RX hardware timestamps in igc_build_skb() 2026-03-07 18:27 [PATCH iwl-next v1 0/2] igc: enable build_skb path Kohei Enju @ 2026-03-07 18:27 ` Kohei Enju 2026-03-10 7:43 ` [Intel-wired-lan] " Loktionov, Aleksandr 2026-03-07 18:27 ` [PATCH iwl-next v1 2/2] igc: enable build_skb on the non-XDP small-frame RX path Kohei Enju 1 sibling, 1 reply; 7+ messages in thread From: Kohei Enju @ 2026-03-07 18:27 UTC (permalink / raw) To: intel-wired-lan, netdev Cc: Tony Nguyen, Przemek Kitszel, Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, kohei.enju, Kohei Enju igc_construct_skb() sets RX hardware timestamps, but igc_build_skb() does not. This has not been observable so far since igc currently does not enable the build_skb RX path. Set RX hardware timestamps in igc_build_skb() as well so that both skb construction paths provide the same behavior. Signed-off-by: Kohei Enju <kohei@enjuk.jp> --- drivers/net/ethernet/intel/igc/igc_main.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c index ebd831a4ff53..3a4c1ebe4faa 100644 --- a/drivers/net/ethernet/intel/igc/igc_main.c +++ b/drivers/net/ethernet/intel/igc/igc_main.c @@ -1964,13 +1964,16 @@ static void igc_add_rx_frag(struct igc_ring *rx_ring, static struct sk_buff *igc_build_skb(struct igc_ring *rx_ring, struct igc_rx_buffer *rx_buffer, - struct xdp_buff *xdp) + struct igc_xdp_buff *ctx) { - unsigned int size = xdp->data_end - xdp->data; - unsigned int truesize = igc_get_rx_frame_truesize(rx_ring, size); - unsigned int metasize = xdp->data - xdp->data_meta; + unsigned int size, truesize, metasize; + struct xdp_buff *xdp = &ctx->xdp; struct sk_buff *skb; + size = xdp->data_end - xdp->data; + truesize = igc_get_rx_frame_truesize(rx_ring, size); + metasize = xdp->data - xdp->data_meta; + /* prefetch first cache line of first page */ net_prefetch(xdp->data_meta); @@ -1979,6 +1982,11 @@ static struct sk_buff *igc_build_skb(struct igc_ring *rx_ring, if (unlikely(!skb)) return NULL; + if (ctx->rx_ts) { + skb_shinfo(skb)->tx_flags |= SKBTX_HW_TSTAMP_NETDEV; + skb_hwtstamps(skb)->netdev_data = ctx->rx_ts; + } + /* update pointers within the skb to store the data */ skb_reserve(skb, xdp->data - xdp->data_hard_start); __skb_put(skb, size); @@ -2681,7 +2689,7 @@ static int igc_clean_rx_irq(struct igc_q_vector *q_vector, const int budget) } else if (skb) igc_add_rx_frag(rx_ring, rx_buffer, skb, size); else if (ring_uses_build_skb(rx_ring)) - skb = igc_build_skb(rx_ring, rx_buffer, &ctx.xdp); + skb = igc_build_skb(rx_ring, rx_buffer, &ctx); else skb = igc_construct_skb(rx_ring, rx_buffer, &ctx); -- 2.51.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* RE: [Intel-wired-lan] [PATCH iwl-next v1 1/2] igc: set RX hardware timestamps in igc_build_skb() 2026-03-07 18:27 ` [PATCH iwl-next v1 1/2] igc: set RX hardware timestamps in igc_build_skb() Kohei Enju @ 2026-03-10 7:43 ` Loktionov, Aleksandr 2026-03-15 13:56 ` Ruinskiy, Dima 0 siblings, 1 reply; 7+ messages in thread From: Loktionov, Aleksandr @ 2026-03-10 7:43 UTC (permalink / raw) To: Kohei Enju, intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org Cc: Nguyen, Anthony L, Kitszel, Przemyslaw, Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, kohei.enju@gmail.com > -----Original Message----- > From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf > Of Kohei Enju > Sent: Saturday, March 7, 2026 7:28 PM > To: intel-wired-lan@lists.osuosl.org; netdev@vger.kernel.org > Cc: Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Kitszel, > Przemyslaw <przemyslaw.kitszel@intel.com>; Andrew Lunn > <andrew+netdev@lunn.ch>; David S. Miller <davem@davemloft.net>; Eric > Dumazet <edumazet@google.com>; Jakub Kicinski <kuba@kernel.org>; Paolo > Abeni <pabeni@redhat.com>; kohei.enju@gmail.com; Kohei Enju > <kohei@enjuk.jp> > Subject: [Intel-wired-lan] [PATCH iwl-next v1 1/2] igc: set RX > hardware timestamps in igc_build_skb() > > igc_construct_skb() sets RX hardware timestamps, but igc_build_skb() > does not. This has not been observable so far since igc currently does > not enable the build_skb RX path. > > Set RX hardware timestamps in igc_build_skb() as well so that both skb > construction paths provide the same behavior. > > Signed-off-by: Kohei Enju <kohei@enjuk.jp> > --- > drivers/net/ethernet/intel/igc/igc_main.c | 18 +++++++++++++----- > 1 file changed, 13 insertions(+), 5 deletions(-) > > diff --git a/drivers/net/ethernet/intel/igc/igc_main.c > b/drivers/net/ethernet/intel/igc/igc_main.c > index ebd831a4ff53..3a4c1ebe4faa 100644 > --- a/drivers/net/ethernet/intel/igc/igc_main.c > +++ b/drivers/net/ethernet/intel/igc/igc_main.c > @@ -1964,13 +1964,16 @@ static void igc_add_rx_frag(struct igc_ring > *rx_ring, > > static struct sk_buff *igc_build_skb(struct igc_ring *rx_ring, > struct igc_rx_buffer *rx_buffer, > - struct xdp_buff *xdp) > + struct igc_xdp_buff *ctx) > { > - unsigned int size = xdp->data_end - xdp->data; > - unsigned int truesize = igc_get_rx_frame_truesize(rx_ring, > size); > - unsigned int metasize = xdp->data - xdp->data_meta; > + unsigned int size, truesize, metasize; > + struct xdp_buff *xdp = &ctx->xdp; > struct sk_buff *skb; > > + size = xdp->data_end - xdp->data; > + truesize = igc_get_rx_frame_truesize(rx_ring, size); > + metasize = xdp->data - xdp->data_meta; > + > /* prefetch first cache line of first page */ > net_prefetch(xdp->data_meta); > > @@ -1979,6 +1982,11 @@ static struct sk_buff *igc_build_skb(struct > igc_ring *rx_ring, > if (unlikely(!skb)) > return NULL; > > + if (ctx->rx_ts) { > + skb_shinfo(skb)->tx_flags |= SKBTX_HW_TSTAMP_NETDEV; > + skb_hwtstamps(skb)->netdev_data = ctx->rx_ts; > + } > + > /* update pointers within the skb to store the data */ > skb_reserve(skb, xdp->data - xdp->data_hard_start); > __skb_put(skb, size); > @@ -2681,7 +2689,7 @@ static int igc_clean_rx_irq(struct igc_q_vector > *q_vector, const int budget) > } else if (skb) > igc_add_rx_frag(rx_ring, rx_buffer, skb, size); > else if (ring_uses_build_skb(rx_ring)) > - skb = igc_build_skb(rx_ring, rx_buffer, > &ctx.xdp); > + skb = igc_build_skb(rx_ring, rx_buffer, &ctx); > else > skb = igc_construct_skb(rx_ring, rx_buffer, > &ctx); > > -- > 2.51.0 Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com> ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Intel-wired-lan] [PATCH iwl-next v1 1/2] igc: set RX hardware timestamps in igc_build_skb() 2026-03-10 7:43 ` [Intel-wired-lan] " Loktionov, Aleksandr @ 2026-03-15 13:56 ` Ruinskiy, Dima 2026-03-15 14:09 ` Kohei Enju 0 siblings, 1 reply; 7+ messages in thread From: Ruinskiy, Dima @ 2026-03-15 13:56 UTC (permalink / raw) To: Loktionov, Aleksandr, Kohei Enju, intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org Cc: Nguyen, Anthony L, Kitszel, Przemyslaw, Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, kohei.enju@gmail.com On 10/03/2026 9:43, Loktionov, Aleksandr wrote: > > >> -----Original Message----- >> From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf >> Of Kohei Enju >> Sent: Saturday, March 7, 2026 7:28 PM >> To: intel-wired-lan@lists.osuosl.org; netdev@vger.kernel.org >> Cc: Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Kitszel, >> Przemyslaw <przemyslaw.kitszel@intel.com>; Andrew Lunn >> <andrew+netdev@lunn.ch>; David S. Miller <davem@davemloft.net>; Eric >> Dumazet <edumazet@google.com>; Jakub Kicinski <kuba@kernel.org>; Paolo >> Abeni <pabeni@redhat.com>; kohei.enju@gmail.com; Kohei Enju >> <kohei@enjuk.jp> >> Subject: [Intel-wired-lan] [PATCH iwl-next v1 1/2] igc: set RX >> hardware timestamps in igc_build_skb() >> >> igc_construct_skb() sets RX hardware timestamps, but igc_build_skb() >> does not. This has not been observable so far since igc currently does >> not enable the build_skb RX path. >> >> Set RX hardware timestamps in igc_build_skb() as well so that both skb >> construction paths provide the same behavior. Thank you for this patch, it is nice to have consistent behavior in both paths. :) >> >> Signed-off-by: Kohei Enju <kohei@enjuk.jp> >> --- >> drivers/net/ethernet/intel/igc/igc_main.c | 18 +++++++++++++----- >> 1 file changed, 13 insertions(+), 5 deletions(-) >> >> diff --git a/drivers/net/ethernet/intel/igc/igc_main.c >> b/drivers/net/ethernet/intel/igc/igc_main.c >> index ebd831a4ff53..3a4c1ebe4faa 100644 >> --- a/drivers/net/ethernet/intel/igc/igc_main.c >> +++ b/drivers/net/ethernet/intel/igc/igc_main.c >> @@ -1964,13 +1964,16 @@ static void igc_add_rx_frag(struct igc_ring >> *rx_ring, >> >> static struct sk_buff *igc_build_skb(struct igc_ring *rx_ring, >> struct igc_rx_buffer *rx_buffer, >> - struct xdp_buff *xdp) >> + struct igc_xdp_buff *ctx) >> { >> - unsigned int size = xdp->data_end - xdp->data; >> - unsigned int truesize = igc_get_rx_frame_truesize(rx_ring, >> size); >> - unsigned int metasize = xdp->data - xdp->data_meta; >> + unsigned int size, truesize, metasize; >> + struct xdp_buff *xdp = &ctx->xdp; >> struct sk_buff *skb; >> >> + size = xdp->data_end - xdp->data; >> + truesize = igc_get_rx_frame_truesize(rx_ring, size); >> + metasize = xdp->data - xdp->data_meta; >> + In the spirit of consistency, would it be possible to restructure the variable initialization to match that of igc_construct_skb()? Initialize xdp first, and then all the size variable inits can stay as they are. It would make the net change smaller. >> /* prefetch first cache line of first page */ >> net_prefetch(xdp->data_meta); >> >> @@ -1979,6 +1982,11 @@ static struct sk_buff *igc_build_skb(struct >> igc_ring *rx_ring, >> if (unlikely(!skb)) >> return NULL; >> >> + if (ctx->rx_ts) { >> + skb_shinfo(skb)->tx_flags |= SKBTX_HW_TSTAMP_NETDEV; >> + skb_hwtstamps(skb)->netdev_data = ctx->rx_ts; >> + } >> + >> /* update pointers within the skb to store the data */ >> skb_reserve(skb, xdp->data - xdp->data_hard_start); >> __skb_put(skb, size); >> @@ -2681,7 +2689,7 @@ static int igc_clean_rx_irq(struct igc_q_vector >> *q_vector, const int budget) >> } else if (skb) >> igc_add_rx_frag(rx_ring, rx_buffer, skb, size); >> else if (ring_uses_build_skb(rx_ring)) >> - skb = igc_build_skb(rx_ring, rx_buffer, >> &ctx.xdp); >> + skb = igc_build_skb(rx_ring, rx_buffer, &ctx); >> else >> skb = igc_construct_skb(rx_ring, rx_buffer, >> &ctx); >> >> -- >> 2.51.0 > > Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com> ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [Intel-wired-lan] [PATCH iwl-next v1 1/2] igc: set RX hardware timestamps in igc_build_skb() 2026-03-15 13:56 ` Ruinskiy, Dima @ 2026-03-15 14:09 ` Kohei Enju 0 siblings, 0 replies; 7+ messages in thread From: Kohei Enju @ 2026-03-15 14:09 UTC (permalink / raw) To: Ruinskiy, Dima Cc: Loktionov, Aleksandr, intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org, Nguyen, Anthony L, Kitszel, Przemyslaw, Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, kohei.enju@gmail.com On 03/15 15:56, Ruinskiy, Dima wrote: [...] > > > diff --git a/drivers/net/ethernet/intel/igc/igc_main.c > > > b/drivers/net/ethernet/intel/igc/igc_main.c > > > index ebd831a4ff53..3a4c1ebe4faa 100644 > > > --- a/drivers/net/ethernet/intel/igc/igc_main.c > > > +++ b/drivers/net/ethernet/intel/igc/igc_main.c > > > @@ -1964,13 +1964,16 @@ static void igc_add_rx_frag(struct igc_ring > > > *rx_ring, > > > > > > static struct sk_buff *igc_build_skb(struct igc_ring *rx_ring, > > > struct igc_rx_buffer *rx_buffer, > > > - struct xdp_buff *xdp) > > > + struct igc_xdp_buff *ctx) > > > { > > > - unsigned int size = xdp->data_end - xdp->data; > > > - unsigned int truesize = igc_get_rx_frame_truesize(rx_ring, > > > size); > > > - unsigned int metasize = xdp->data - xdp->data_meta; > > > + unsigned int size, truesize, metasize; > > > + struct xdp_buff *xdp = &ctx->xdp; > > > struct sk_buff *skb; > > > > > > + size = xdp->data_end - xdp->data; > > > + truesize = igc_get_rx_frame_truesize(rx_ring, size); > > > + metasize = xdp->data - xdp->data_meta; > > > + > In the spirit of consistency, would it be possible to restructure the > variable initialization to match that of igc_construct_skb()? Initialize xdp > first, and then all the size variable inits can stay as they are. It would > make the net change smaller. I followed the reverse christmas tree convention used in netdev, but your suggestion make sense as well. I'll make that change in v2. ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH iwl-next v1 2/2] igc: enable build_skb on the non-XDP small-frame RX path 2026-03-07 18:27 [PATCH iwl-next v1 0/2] igc: enable build_skb path Kohei Enju 2026-03-07 18:27 ` [PATCH iwl-next v1 1/2] igc: set RX hardware timestamps in igc_build_skb() Kohei Enju @ 2026-03-07 18:27 ` Kohei Enju 2026-03-10 7:44 ` [Intel-wired-lan] " Loktionov, Aleksandr 1 sibling, 1 reply; 7+ messages in thread From: Kohei Enju @ 2026-03-07 18:27 UTC (permalink / raw) To: intel-wired-lan, netdev Cc: Tony Nguyen, Przemek Kitszel, Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, kohei.enju, Kohei Enju igc implements igc_build_skb(), but it is currently unused because the IGC_RING_FLAG_RX_BUILD_SKB_ENABLED bit is never set. Enable the build_skb path when XDP is not active and the configured maximum frame size fits within IGC_MAX_FRAME_BUILD_SKB. In a single-queue small-packet (64-byte) RX microbenchmark on my setup, enabling build_skb improved the receive rate from about 3.11 Mpps to about 3.30 Mpps, while reducing missed packets from about 484 kpps to about 300 kpps. Keep the XDP path unchanged for now, since it uses a different RX buffer layout based on XDP_PACKET_HEADROOM, and enabling it there would need separate validation and buffer layout adjustments. Signed-off-by: Kohei Enju <kohei@enjuk.jp> --- drivers/net/ethernet/intel/igc/igc.h | 4 ++++ drivers/net/ethernet/intel/igc/igc_main.c | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/drivers/net/ethernet/intel/igc/igc.h b/drivers/net/ethernet/intel/igc/igc.h index e66799507f81..acbd2c237667 100644 --- a/drivers/net/ethernet/intel/igc/igc.h +++ b/drivers/net/ethernet/intel/igc/igc.h @@ -734,6 +734,10 @@ enum igc_ring_flags_t { #define ring_uses_build_skb(ring) \ test_bit(IGC_RING_FLAG_RX_BUILD_SKB_ENABLED, &(ring)->flags) +#define set_ring_uses_build_skb(ring) \ + set_bit(IGC_RING_FLAG_RX_BUILD_SKB_ENABLED, &(ring)->flags) +#define clear_ring_uses_build_skb(ring) \ + clear_bit(IGC_RING_FLAG_RX_BUILD_SKB_ENABLED, &(ring)->flags) static inline unsigned int igc_rx_bufsz(struct igc_ring *ring) { diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c index 3a4c1ebe4faa..1f3ed1e4db1b 100644 --- a/drivers/net/ethernet/intel/igc/igc_main.c +++ b/drivers/net/ethernet/intel/igc/igc_main.c @@ -474,6 +474,7 @@ static void igc_clean_rx_ring(struct igc_ring *ring) igc_clean_rx_ring_page_shared(ring); clear_ring_uses_large_buffer(ring); + clear_ring_uses_build_skb(ring); ring->next_to_alloc = 0; ring->next_to_clean = 0; @@ -654,6 +655,9 @@ static void igc_configure_rx_ring(struct igc_adapter *adapter, if (igc_xdp_is_enabled(adapter)) set_ring_uses_large_buffer(ring); + else if (!(adapter->flags & IGC_FLAG_RX_LEGACY) && + adapter->max_frame_size <= IGC_MAX_FRAME_BUILD_SKB) + set_ring_uses_build_skb(ring); /* disable the queue */ wr32(IGC_RXDCTL(reg_idx), 0); -- 2.51.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* RE: [Intel-wired-lan] [PATCH iwl-next v1 2/2] igc: enable build_skb on the non-XDP small-frame RX path 2026-03-07 18:27 ` [PATCH iwl-next v1 2/2] igc: enable build_skb on the non-XDP small-frame RX path Kohei Enju @ 2026-03-10 7:44 ` Loktionov, Aleksandr 0 siblings, 0 replies; 7+ messages in thread From: Loktionov, Aleksandr @ 2026-03-10 7:44 UTC (permalink / raw) To: Kohei Enju, intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org Cc: Nguyen, Anthony L, Kitszel, Przemyslaw, Andrew Lunn, David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni, kohei.enju@gmail.com > -----Original Message----- > From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf > Of Kohei Enju > Sent: Saturday, March 7, 2026 7:28 PM > To: intel-wired-lan@lists.osuosl.org; netdev@vger.kernel.org > Cc: Nguyen, Anthony L <anthony.l.nguyen@intel.com>; Kitszel, > Przemyslaw <przemyslaw.kitszel@intel.com>; Andrew Lunn > <andrew+netdev@lunn.ch>; David S. Miller <davem@davemloft.net>; Eric > Dumazet <edumazet@google.com>; Jakub Kicinski <kuba@kernel.org>; Paolo > Abeni <pabeni@redhat.com>; kohei.enju@gmail.com; Kohei Enju > <kohei@enjuk.jp> > Subject: [Intel-wired-lan] [PATCH iwl-next v1 2/2] igc: enable > build_skb on the non-XDP small-frame RX path > > igc implements igc_build_skb(), but it is currently unused because the > IGC_RING_FLAG_RX_BUILD_SKB_ENABLED bit is never set. Enable the > build_skb path when XDP is not active and the configured maximum frame > size fits within IGC_MAX_FRAME_BUILD_SKB. > > In a single-queue small-packet (64-byte) RX microbenchmark on my > setup, enabling build_skb improved the receive rate from about 3.11 > Mpps to about 3.30 Mpps, while reducing missed packets from about 484 > kpps to about 300 kpps. > > Keep the XDP path unchanged for now, since it uses a different RX > buffer layout based on XDP_PACKET_HEADROOM, and enabling it there > would need separate validation and buffer layout adjustments. > > Signed-off-by: Kohei Enju <kohei@enjuk.jp> > --- > drivers/net/ethernet/intel/igc/igc.h | 4 ++++ > drivers/net/ethernet/intel/igc/igc_main.c | 4 ++++ > 2 files changed, 8 insertions(+) > > diff --git a/drivers/net/ethernet/intel/igc/igc.h > b/drivers/net/ethernet/intel/igc/igc.h > index e66799507f81..acbd2c237667 100644 > --- a/drivers/net/ethernet/intel/igc/igc.h > +++ b/drivers/net/ethernet/intel/igc/igc.h > @@ -734,6 +734,10 @@ enum igc_ring_flags_t { > > #define ring_uses_build_skb(ring) \ > test_bit(IGC_RING_FLAG_RX_BUILD_SKB_ENABLED, &(ring)->flags) > +#define set_ring_uses_build_skb(ring) \ > + set_bit(IGC_RING_FLAG_RX_BUILD_SKB_ENABLED, &(ring)->flags) > #define > +clear_ring_uses_build_skb(ring) \ > + clear_bit(IGC_RING_FLAG_RX_BUILD_SKB_ENABLED, &(ring)->flags) > > static inline unsigned int igc_rx_bufsz(struct igc_ring *ring) { > diff --git a/drivers/net/ethernet/intel/igc/igc_main.c > b/drivers/net/ethernet/intel/igc/igc_main.c > index 3a4c1ebe4faa..1f3ed1e4db1b 100644 > --- a/drivers/net/ethernet/intel/igc/igc_main.c > +++ b/drivers/net/ethernet/intel/igc/igc_main.c > @@ -474,6 +474,7 @@ static void igc_clean_rx_ring(struct igc_ring > *ring) > igc_clean_rx_ring_page_shared(ring); > > clear_ring_uses_large_buffer(ring); > + clear_ring_uses_build_skb(ring); > > ring->next_to_alloc = 0; > ring->next_to_clean = 0; > @@ -654,6 +655,9 @@ static void igc_configure_rx_ring(struct > igc_adapter *adapter, > > if (igc_xdp_is_enabled(adapter)) > set_ring_uses_large_buffer(ring); > + else if (!(adapter->flags & IGC_FLAG_RX_LEGACY) && > + adapter->max_frame_size <= IGC_MAX_FRAME_BUILD_SKB) > + set_ring_uses_build_skb(ring); > > /* disable the queue */ > wr32(IGC_RXDCTL(reg_idx), 0); > -- > 2.51.0 Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com> ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-03-15 14:09 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-03-07 18:27 [PATCH iwl-next v1 0/2] igc: enable build_skb path Kohei Enju 2026-03-07 18:27 ` [PATCH iwl-next v1 1/2] igc: set RX hardware timestamps in igc_build_skb() Kohei Enju 2026-03-10 7:43 ` [Intel-wired-lan] " Loktionov, Aleksandr 2026-03-15 13:56 ` Ruinskiy, Dima 2026-03-15 14:09 ` Kohei Enju 2026-03-07 18:27 ` [PATCH iwl-next v1 2/2] igc: enable build_skb on the non-XDP small-frame RX path Kohei Enju 2026-03-10 7:44 ` [Intel-wired-lan] " Loktionov, Aleksandr
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox