From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from www2881.sakura.ne.jp (www2881.sakura.ne.jp [49.212.198.91]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 03A6813D638 for ; Sat, 7 Mar 2026 18:28:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=49.212.198.91 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772908104; cv=none; b=KicEbD826faXD2HkzntPBjvz9F7d6r8VvwFVPUjftIG1YRPsmjsnBKb8kZNDra/a2Nppu5usl2bhuR6PVvGVSbPSEzTFAAbf08tVIsWKXR98iQLEy1vChtAiTq8TSEVvOhB+R6bShY5XDFTTqJNzuYAbfAzC9U4Bdg60iNE03EI= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772908104; c=relaxed/simple; bh=qb4WndtCGtSLK0c3sWW11sQb7vCbm5nENwK5RPKhOZQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kr9YLWRfSzxvLz3AASbjmkhhqLrRnw0ZPmqmLFGWtfj0Aaeg+gXZZsRwX9X2/PN6VCpXT2Wc/UCFjsguSODR2Vm97wJDQg1d3AqXFpn9b8LMknTx11MtNkBr+SHci+DvwWL1LDub580vRZENNSCJ5r/9eqVNLNEiNbrWys88S7E= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=enjuk.jp; spf=pass smtp.mailfrom=enjuk.jp; dkim=pass (2048-bit key) header.d=enjuk.jp header.i=@enjuk.jp header.b=U0sMezoF; arc=none smtp.client-ip=49.212.198.91 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=enjuk.jp Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=enjuk.jp Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=enjuk.jp header.i=@enjuk.jp header.b="U0sMezoF" Received: from ms-a2 (79.25.31.150.dy.iij4u.or.jp [150.31.25.79]) (authenticated bits=0) by www2881.sakura.ne.jp (8.16.1/8.16.1) with ESMTPSA id 627ISK1U043213 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Sun, 8 Mar 2026 03:28:20 +0900 (JST) (envelope-from kohei@enjuk.jp) DKIM-Signature: a=rsa-sha256; bh=HQ8r0KD4toX/rc513azQPOVmYJYl5d5vX7tPVgX5kFk=; c=relaxed/relaxed; d=enjuk.jp; h=From:Message-ID:To:Subject:Date; s=rs20251215; t=1772908101; v=1; b=U0sMezoFkOQ9cAVyLHK4zpPnJ2qlY/uDJtDQYI+1cJEnBlmjrnANnkV/W6joGAfN BTRW5+olSpLpkRlMYyOspZbNKgk8HAdqXwwkobnKipPZPF/1guCi/A2Qb5ByLl0g BeiMl1lRSyFZxii0OBWD8GgX6QZnkusrji0Mm2YsY7dBH+7ja4CyMB9jXRQoT6sC qhBJOLfI2zIYAkHXNv3WiCTQkc9TEh2wKpRWWI9BafPN5VTaqiOIa45ToBuFdhDL cwOnJNCDF7ayFN1LxuNTCbgQnF5L+hGKwXCM5WIH/+0V+kfGaoctMrQnEe7OPjQQ zhktN2fOHXymaE6+JOVtxg== From: Kohei Enju To: intel-wired-lan@lists.osuosl.org, netdev@vger.kernel.org Cc: Tony Nguyen , Przemek Kitszel , Andrew Lunn , "David S. Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , kohei.enju@gmail.com, Kohei Enju Subject: [PATCH iwl-next v1 2/2] igc: enable build_skb on the non-XDP small-frame RX path Date: Sat, 7 Mar 2026 18:27:39 +0000 Message-ID: <20260307182808.155027-3-kohei@enjuk.jp> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20260307182808.155027-1-kohei@enjuk.jp> References: <20260307182808.155027-1-kohei@enjuk.jp> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit 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 --- 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