From nobody Mon Dec 1 22:04:00 2025 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B51DF3C17 for ; Sun, 30 Nov 2025 19:51:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764532322; cv=none; b=CdmdikRDFJ5mgwCzn8EJMVKCoLBha8Ro6WA4v1oPmtPBlswzT599FE+u+QYxk2rgkMVxq1j0QZkg21Qiu1BPx/nLk6EusykyCzc2ZDBxiE4zSVbMh4GnFzo0M7hEG6FUyPWuQ5+euHp1kz7fAZpozfyS+lyfeJDoLf9aoXm3m30= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764532322; c=relaxed/simple; bh=KWBzc2p2M9xed8ruLMYJXFllVygEW9BBNPyn4AcpHr4=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version; b=crb+QXzI1kuozvgLq4XLAUW2BIAEzqw4NRUVH+zdakO7hpqpmj4mi6Rj6+lkKdGBulYBMMsXlCxMRzgD0K91YXbCLVhqAU3wl7oiINxEE3JI10d1hKmmZEo4OYBg+cc2FdVh9MidK87L6riMfXUHUf83JaAcNybFauVhuJ9UA9Q= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=Jfg32BGk; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Jfg32BGk" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-4779cc419b2so34014035e9.3 for ; Sun, 30 Nov 2025 11:51:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764532318; x=1765137118; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=/DEo1+0Da+YijlU/Zfn1c1EqlK38ud5yDKP0+nxdYn8=; b=Jfg32BGkgJ3QMmZqakk/Wk8k5stJxzOBT+yONlGIbIv6Ni55sTg3XTLuask0oIVv2o aivIOOpj8J9842jYO+JggrtETRBctS/RFU3ufrIQp+jqj/qiFUQ+dJSRyVHNz1wIayOp Dd2g09/XjH/C7OvUpk+tfMMbpcah93B/3b46qBt0yjkZhNmI7IZaie4EdgOmu9YR4Js4 YkWkaBzObrKLUau3L4xRfOpemHaM7VUSWS6YxP9cf2JGS6ro2uLmRi6Z3jlXnLNVgDCV IXPHXqX3gY6fMnzZ9xoLSE3oYJ+j4NQNrmqnDDX0NI2GQYIKdEvaZuvT+LIExHqL6cDo +4Qw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764532318; x=1765137118; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=/DEo1+0Da+YijlU/Zfn1c1EqlK38ud5yDKP0+nxdYn8=; b=Mz47BaTB6hNjJISp+Ab2cvgR1XTI9g0N4LxDXKlJqxPn943m5MJvKDieJBPD7KAgVY Q47VFSrHc0/8KeaFtb+DKktFv2r5FmZzoRhPgGCke9eiE6aWMrXWv8y3ctWXlaxT43O0 qJxbhnKYL1aSIAavVUO9H7AyBYvRSTi3josUvMRCO5mUEnlXbW2lAnekkIvZvPZsmfKL l3e0pKY0dmraD3OfmYZZTMkw6H1B3QY8QylcBNu0ZuBtAieVeEvasDJr6P9GmB965wMj m69ED3oGstyRCrNI3vV3aMgIYwQCVBr9GvvKd5ABTqJWAJXWaQPmxC+G7W+qLSCxJHNf ANWg== X-Forwarded-Encrypted: i=1; AJvYcCXUoIPO/eFIu25UAHW+3/YLI6sOSr3c89GkBdC1vRmgWH6sUqYuIDsAVHcENR9K4Ulul4Sn5I6e01QZ2dk=@vger.kernel.org X-Gm-Message-State: AOJu0YydDy/XbEERTWjQUkV6R6DPFKeMoNsCyjypH6Q/rrmhdPqHELnD fdsl1w4kLSqzw4SKF7fyfmOjM5yevDlj/aIUE7M2V5JUTZI2J12ZAY0= X-Gm-Gg: ASbGncs22pXC+mDeomnU1M+eWbrINZWJbVQVZ6UM2UxtI6xFhGgplHWp1lBBvT5jtBN Katup7BS/2PmzrsG9MY5+qBGjDUe9wrhlgiV3Xk98Ah3SUWkdEQPaP2CN9q6OXS6ZqL8BxG+31q Gf2Wj1Nsd2GrxBf6QOA7bWWNUHdsSVs62KxTF2TD/SD9WOCy8hOZvXTgTJtbHUDyEyvfez+AB/G UmF0H9oKkBTGtkV4+9N11OQKO25SgjgdUlRyMdQm/zA/NweCBC+1BahBhN+9s67h63PZAqtdAf7 yJQ6Z0Jylg8W2tZlKr2OuMResbcKL0zhsMUwdHLpdcGBDiEbfi59Fx3JO0e8Fk9azNxb6GsZHZk zkVr5UuX65/wffp0lLx8gtFyrV9bDojVVImR5Seq4WBWsXP2LqbkQUCusgWbN3h2IygLyfs5k7O w9cvYLkXk20mlb9CU04JAWdzX85UlASMWE9bGeCCrT8MnPGm65/v9wFdW7vp6D6W4a9Ykb X-Google-Smtp-Source: AGHT+IHpMEnKorixDu8qIt6p2z3sKWM6DYKhdWytPD6KeENQCqF5f7FvWF1BtO+epXxKsRq5U6IKMw== X-Received: by 2002:a05:600c:3543:b0:477:1ae1:fa5d with SMTP id 5b1f17b1804b1-477c1142268mr303410735e9.20.1764532317801; Sun, 30 Nov 2025 11:51:57 -0800 (PST) Received: from localhost ([2a02:810d:4a94:b300:c379:32d5:1107:4f59]) by smtp.gmail.com with UTF8SMTPSA id 5b1f17b1804b1-4790b0cc1d6sm258597365e9.12.2025.11.30.11.51.57 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 30 Nov 2025 11:51:57 -0800 (PST) From: Florian Fuchs To: Geoff Levand , netdev@vger.kernel.org, Jakub Kicinski Cc: Andrew Lunn , "David S . Miller" , Eric Dumazet , Paolo Abeni , Madhavan Srinivasan , Michael Ellerman , Nicholas Piggin , Christophe Leroy , linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, fuchsfl@gmail.com Subject: [PATCH net-next] net: ps3_gelic_net: Use napi_alloc_skb() and napi_gro_receive() Date: Sun, 30 Nov 2025 20:41:55 +0100 Message-ID: <20251130194155.1950980-1-fuchsfl@gmail.com> X-Mailer: git-send-email 2.43.0 Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use the napi functions napi_alloc_skb() and napi_gro_receive() instead of netdev_alloc_skb() and netif_receive_skb() for more efficient packet receiving. The switch to napi aware functions increases the RX throughput, reduces the occurrence of retransmissions and improves the resilience against SKB allocation failures. Signed-off-by: Florian Fuchs Reviewed-by: Eric Dumazet Reviewed-by: Simon Horman --- Note: This change has been tested on real hardware Sony PS3 (CECHL04 PAL), the patch was tested for many hours, with continuous system load, high network transfer load and injected failslab errors. In my tests, the RX throughput increased up to 100% and reduced the occurrence of retransmissions drastically, with GRO enabled: iperf3 before and after the commit, where PS3 (with this driver) is on the receiving side: Before: [ 5] 0.00-10.00 sec 551 MBytes 462 Mbits/sec receiver After: [ 5] 0.00-10.00 sec 1.09 GBytes 939 Mbits/sec receiver stats from the sending client to the PS3: Before: [ 5] 0.00-10.00 sec 552 MBytes 463 Mbits/sec 3151 sender After: [ 5] 0.00-10.00 sec 1.09 GBytes 940 Mbits/sec 37 sender drivers/net/ethernet/toshiba/ps3_gelic_net.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/drivers/net/ethernet/toshiba/ps3_gelic_net.c b/drivers/net/eth= ernet/toshiba/ps3_gelic_net.c index 591866fc9055..d35d1f3c10a1 100644 --- a/drivers/net/ethernet/toshiba/ps3_gelic_net.c +++ b/drivers/net/ethernet/toshiba/ps3_gelic_net.c @@ -364,6 +364,7 @@ static int gelic_card_init_chain(struct gelic_card *car= d, * gelic_descr_prepare_rx - reinitializes a rx descriptor * @card: card structure * @descr: descriptor to re-init + * @napi_mode: is it running in napi poll * * return 0 on success, <0 on failure * @@ -374,7 +375,8 @@ static int gelic_card_init_chain(struct gelic_card *car= d, * must be a multiple of GELIC_NET_RXBUF_ALIGN. */ static int gelic_descr_prepare_rx(struct gelic_card *card, - struct gelic_descr *descr) + struct gelic_descr *descr, + bool napi_mode) { static const unsigned int rx_skb_size =3D ALIGN(GELIC_NET_MAX_FRAME, GELIC_NET_RXBUF_ALIGN) + @@ -392,7 +394,10 @@ static int gelic_descr_prepare_rx(struct gelic_card *c= ard, descr->hw_regs.payload.dev_addr =3D 0; descr->hw_regs.payload.size =3D 0; =20 - descr->skb =3D netdev_alloc_skb(*card->netdev, rx_skb_size); + if (napi_mode) + descr->skb =3D napi_alloc_skb(&card->napi, rx_skb_size); + else + descr->skb =3D netdev_alloc_skb(*card->netdev, rx_skb_size); if (!descr->skb) { descr->hw_regs.payload.dev_addr =3D 0; /* tell DMAC don't touch memory */ return -ENOMEM; @@ -464,7 +469,7 @@ static int gelic_card_fill_rx_chain(struct gelic_card *= card) =20 do { if (!descr->skb) { - ret =3D gelic_descr_prepare_rx(card, descr); + ret =3D gelic_descr_prepare_rx(card, descr, false); if (ret) goto rewind; } @@ -964,7 +969,7 @@ static void gelic_net_pass_skb_up(struct gelic_descr *d= escr, netdev->stats.rx_bytes +=3D skb->len; =20 /* pass skb up to stack */ - netif_receive_skb(skb); + napi_gro_receive(&card->napi, skb); } =20 /** @@ -1069,7 +1074,7 @@ static int gelic_card_decode_one_descr(struct gelic_c= ard *card) /* * this call can fail, propagate the error */ - prepare_rx_ret =3D gelic_descr_prepare_rx(card, descr); + prepare_rx_ret =3D gelic_descr_prepare_rx(card, descr, true); if (prepare_rx_ret) return prepare_rx_ret; =20 base-commit: ff736a286116d462a4067ba258fa351bc0b4ed80 --=20 2.43.0