From patchwork Thu Mar 6 07:24:17 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taehee Yoo X-Patchwork-Id: 14003924 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-pl1-f169.google.com (mail-pl1-f169.google.com [209.85.214.169]) (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 461681AAE13; Thu, 6 Mar 2025 07:24:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.169 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741245882; cv=none; b=HRvJbV93Ju578eDBdnxPuddUpeYPJ/OUuSyXbyOfGv34d1MeNEr67K7y0ifS9N7pGJYgubQKmKOtWBibSCpquu/VgVK5s2nvMfJPuyEeTd93v+e/dOkM4HM6J+pTilQ8K1FTYJbukzmGuzO8XyH0yYQJQyo2zr7RL5dSgWSaIIY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741245882; c=relaxed/simple; bh=+y2aXwV7UTJBcjzTbWApLJwHMo8fcKGd7y3+BzfQYuA=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=UBNvaJVectYybiKa+mwbXJtwqigWbImTVZQsBFk8+90EhaP5+9tyEiNRqi2UbBoFliBCQefoGNTbTaclzn2wi0zvVQ5SCp2FWDipSGBus6I8yWEvoqmQn3T/U2IYahIuJNSiMQwMghK/8aYFt8CvU3woBlJKd0pQSB2vhDX7S0Q= 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=Ti9ndI1C; arc=none smtp.client-ip=209.85.214.169 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="Ti9ndI1C" Received: by mail-pl1-f169.google.com with SMTP id d9443c01a7336-224171d6826so1970095ad.3; Wed, 05 Mar 2025 23:24:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741245880; x=1741850680; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=83XMbtOL5LByRzjzK01BpeLwcGaWu+fCQ2zgxi8L7H4=; b=Ti9ndI1CUzXcAxlCmTEN4XWrdTq3nKh7++ZXKuHKGLKFWYEYScLtJgS8wJ0SJSQWjL 3bHvKYpvBO9OdSuBXYZrdge5DeaEbEeZx0OTEzWyET1SpLc3x1IKMRFClogJ/dAdBRtA 1YhmWF1usDtEJ4nKa2405MpcKHVST5WWN09qP5mMT/HW6BABW4HfafUrv4kLoX0Nxzme VvjRL3kesiWIz/Ltdm6ST1L+Xvf7oJZv2EznopuewN7KhqB7mYhWFqwwmqOvbPtR3DzP b5jE2PmXiCDvePMfvu1MYzltMFO916J/Y+mqpfiRKyfET0GZhYEaQXWWHOhAuG9xRnKj zgLw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741245880; x=1741850680; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=83XMbtOL5LByRzjzK01BpeLwcGaWu+fCQ2zgxi8L7H4=; b=DEUOTLdLIfKvxrJqKtujiyazrivQs4MPhBYZEAMBHb/KgkTlGgn/PHyF7SLi0uOrXi 6/CxCO6sgQQo1tpgEDVNlGjBjrF8HyWwmxtxo33b5JFCp1HspqKTjMl2N1Wey3daqzRf 154mkWHe6cyCqFvLf7ryhmctWmeSsvIWc47m68YmSO+uW6/GTYzgpWUHeqUndXIZWF4j 5vV5pmQ8g8xUxgRbcuqOLgedPnYaFg+RDQUjZ5ToNb1y5ygm53ykKfjzSU1W+MncOUQC rhfQynTiozn8trE55HF+iPlOG7/thSR2VKqm+VrsSbE4M1Ki+Ttwd22bvTTzNFfC2dvA Cwiw== X-Forwarded-Encrypted: i=1; AJvYcCVSikYac/fVvRDaEYXQhxqkZGyvNehelKjdGTvJS56yhKTRe4EWrwdrc+AvtggCndz0tdLsfZ/h@vger.kernel.org, AJvYcCX2rAUBih5QMpU4idUVgB0Yh9uxVTaSYvM9iCDLUqup2Q2S/3o6R4LfSZrefhSv2osuRY8Fq9TUwmLMqtLJ5os=@vger.kernel.org X-Gm-Message-State: AOJu0Yxs9UFe6MvoorwRj8nBJPPbfuClnS+78Y9GR9HfHN4CV4IuJVi8 J8aIWeG/n0m600nmeu6epwgwrmc5JK8V3TnrmaakRS6U+heFWrx5 X-Gm-Gg: ASbGncu1myKWvP8ejLkedKO/M0ww9sk0JWLUd8XMn+oC/nvxz8tkUX6SXNdRXElFiUj cXraWSpAxlZuZhifVxDyj8JscFxDzOn1c8FyEhEGevobYkrC5cWKUf3c0Yrvo+t6HEPqA/uy0ZY aeJW0vSW/wzaSn2KiZ6QaCeFJY+J7dkSuUaR0YH71vpN615njb1MEXYvxROM7SgTdjDMXeJtcF6 81UrHEAtd8IoDXaw1pCGL3O7IK3skB9m1NJPBbyjk4b+VY3Ks6l9oypWxKVGqpFJBllR3w3Vsik HkeSntLsAJ+60MxINpz9O9RxGJjGXIv6Dg== X-Google-Smtp-Source: AGHT+IHcAFmtseJ/CR4dBSepFD7CYRdnRxAf3W5T5D6eVMux0uUQpSgt+8KiKqJj5iJbYZG+ea3wrg== X-Received: by 2002:a17:902:ec82:b0:223:5c33:56a8 with SMTP id d9443c01a7336-223f1d26109mr106987765ad.35.1741245880494; Wed, 05 Mar 2025 23:24:40 -0800 (PST) Received: from ap.. ([182.213.254.91]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ff693534f8sm567196a91.17.2025.03.05.23.24.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Mar 2025 23:24:39 -0800 (PST) From: Taehee Yoo To: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, andrew+netdev@lunn.ch, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, horms@kernel.org, shuah@kernel.org, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: almasrymina@google.com, asml.silence@gmail.com, willemb@google.com, kaiyuanz@google.com, skhawaja@google.com, sdf@fomichev.me, gospo@broadcom.com, somnath.kotur@broadcom.com, dw@davidwei.uk, ap420073@gmail.com Subject: [PATCH v2 net 1/6] eth: bnxt: fix truesize for mb-xdp-pass case Date: Thu, 6 Mar 2025 07:24:17 +0000 Message-Id: <20250306072422.3303386-2-ap420073@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250306072422.3303386-1-ap420073@gmail.com> References: <20250306072422.3303386-1-ap420073@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org When mb-xdp is set and return is XDP_PASS, packet is converted from xdp_buff to sk_buff with xdp_update_skb_shared_info() in bnxt_xdp_build_skb(). bnxt_xdp_build_skb() passes incorrect truesize argument to xdp_update_skb_shared_info(). The truesize is calculated as BNXT_RX_PAGE_SIZE * sinfo->nr_frags but the skb_shared_info was wiped by napi_build_skb() before. So it stores skb_shared_info before bnxt_xdp_build_skb() and use it instead of getting skb_shared_info from xdp_get_shared_info_from_buff(). Splat looks like: ------------[ cut here ]------------ WARNING: CPU: 2 PID: 0 at net/core/skbuff.c:6072 skb_try_coalesce+0x504/0x590 Modules linked in: xt_nat xt_tcpudp veth af_packet xt_conntrack nft_chain_nat xt_MASQUERADE nf_conntrack_netlink xfrm_user xt_addrtype nft_coms CPU: 2 UID: 0 PID: 0 Comm: swapper/2 Not tainted 6.14.0-rc2+ #3 RIP: 0010:skb_try_coalesce+0x504/0x590 Code: 4b fd ff ff 49 8b 34 24 40 80 e6 40 0f 84 3d fd ff ff 49 8b 74 24 48 40 f6 c6 01 0f 84 2e fd ff ff 48 8d 4e ff e9 25 fd ff ff <0f> 0b e99 RSP: 0018:ffffb62c4120caa8 EFLAGS: 00010287 RAX: 0000000000000003 RBX: ffffb62c4120cb14 RCX: 0000000000000ec0 RDX: 0000000000001000 RSI: ffffa06e5d7dc000 RDI: 0000000000000003 RBP: ffffa06e5d7ddec0 R08: ffffa06e6120a800 R09: ffffa06e7a119900 R10: 0000000000002310 R11: ffffa06e5d7dcec0 R12: ffffe4360575f740 R13: ffffe43600000000 R14: 0000000000000002 R15: 0000000000000002 FS: 0000000000000000(0000) GS:ffffa0755f700000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007f147b76b0f8 CR3: 00000001615d4000 CR4: 00000000007506f0 PKRU: 55555554 Call Trace: ? __warn+0x84/0x130 ? skb_try_coalesce+0x504/0x590 ? report_bug+0x18a/0x1a0 ? handle_bug+0x53/0x90 ? exc_invalid_op+0x14/0x70 ? asm_exc_invalid_op+0x16/0x20 ? skb_try_coalesce+0x504/0x590 inet_frag_reasm_finish+0x11f/0x2e0 ip_defrag+0x37a/0x900 ip_local_deliver+0x51/0x120 ip_sublist_rcv_finish+0x64/0x70 ip_sublist_rcv+0x179/0x210 ip_list_rcv+0xf9/0x130 How to reproduce: ip link set $interface1 xdp obj xdp_pass.o ip link set $interface1 mtu 9000 up ip a a 10.0.0.1/24 dev $interface1 ip link set $interfac2 mtu 9000 up ip a a 10.0.0.2/24 dev $interface2 ping 10.0.0.1 -s 65000 Following ping.py patch adds xdp-mb-pass case. so ping.py is going to be able to reproduce this issue. Fixes: 1dc4c557bfed ("bnxt: adding bnxt_xdp_build_skb to build skb from multibuffer xdp_buff") Signed-off-by: Taehee Yoo --- v2: - Do not use num_frags in the bnxt_xdp_build_skb(). drivers/net/ethernet/broadcom/bnxt/bnxt.c | 30 +++++++++---------- drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 7 ++--- drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h | 4 +-- 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index 7b8b5b39c7bb..13c9be49216a 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -2040,6 +2040,7 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, u16 cons, prod, cp_cons = RING_CMP(tmp_raw_cons); struct bnxt_sw_rx_bd *rx_buf; unsigned int len; + struct skb_shared_info sinfo = {0}; u8 *data_ptr, agg_bufs, cmp_type; bool xdp_active = false; dma_addr_t dma_addr; @@ -2166,13 +2167,12 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, goto oom_next_rx; } xdp_active = true; - } - - if (xdp_active) { if (bnxt_rx_xdp(bp, rxr, cons, &xdp, data, &data_ptr, &len, event)) { rc = 1; goto next_rx; } + memcpy(&sinfo, xdp_get_shared_info_from_buff(&xdp), + sizeof(struct skb_shared_info)); } if (len <= bp->rx_copybreak) { @@ -2204,18 +2204,18 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, goto oom_next_rx; } - if (agg_bufs) { - if (!xdp_active) { - skb = bnxt_rx_agg_pages_skb(bp, cpr, skb, cp_cons, agg_bufs, false); - if (!skb) - goto oom_next_rx; - } else { - skb = bnxt_xdp_build_skb(bp, skb, agg_bufs, rxr->page_pool, &xdp, rxcmp1); - if (!skb) { - /* we should be able to free the old skb here */ - bnxt_xdp_buff_frags_free(rxr, &xdp); - goto oom_next_rx; - } + if (!xdp_active && agg_bufs) { + skb = bnxt_rx_agg_pages_skb(bp, cpr, skb, cp_cons, agg_bufs, + false); + if (!skb) + goto oom_next_rx; + } else if (xdp_active && xdp_buff_has_frags(&xdp)) { + skb = bnxt_xdp_build_skb(bp, skb, &sinfo, rxr->page_pool, &xdp, + rxcmp1); + if (!skb) { + /* we should be able to free the old skb here */ + bnxt_xdp_buff_frags_free(rxr, &xdp); + goto oom_next_rx; } } diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c index e6c64e4bd66c..77860848e4f9 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c @@ -459,12 +459,11 @@ int bnxt_xdp(struct net_device *dev, struct netdev_bpf *xdp) } struct sk_buff * -bnxt_xdp_build_skb(struct bnxt *bp, struct sk_buff *skb, u8 num_frags, +bnxt_xdp_build_skb(struct bnxt *bp, struct sk_buff *skb, + struct skb_shared_info *sinfo, struct page_pool *pool, struct xdp_buff *xdp, struct rx_cmp_ext *rxcmp1) { - struct skb_shared_info *sinfo = xdp_get_shared_info_from_buff(xdp); - if (!skb) return NULL; skb_checksum_none_assert(skb); @@ -474,7 +473,7 @@ bnxt_xdp_build_skb(struct bnxt *bp, struct sk_buff *skb, u8 num_frags, skb->csum_level = RX_CMP_ENCAP(rxcmp1); } } - xdp_update_skb_shared_info(skb, num_frags, + xdp_update_skb_shared_info(skb, sinfo->nr_frags, sinfo->xdp_frags_size, BNXT_RX_PAGE_SIZE * sinfo->nr_frags, xdp_buff_is_frag_pfmemalloc(xdp)); diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h index 0122782400b8..c1974bffafe5 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h @@ -32,7 +32,7 @@ void bnxt_xdp_buff_init(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, void bnxt_xdp_buff_frags_free(struct bnxt_rx_ring_info *rxr, struct xdp_buff *xdp); struct sk_buff *bnxt_xdp_build_skb(struct bnxt *bp, struct sk_buff *skb, - u8 num_frags, struct page_pool *pool, - struct xdp_buff *xdp, + struct skb_shared_info *sinfo, + struct page_pool *pool, struct xdp_buff *xdp, struct rx_cmp_ext *rxcmp1); #endif From patchwork Thu Mar 6 07:24:18 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taehee Yoo X-Patchwork-Id: 14003925 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) (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 CB5FC1AAE13; Thu, 6 Mar 2025 07:24:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.175 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741245888; cv=none; b=uoqp+riLarjZIJlBInmQecJV8NqDMt9pu5nrlEep/caEI3PL7pqhvjd1wt4b9OLYEiRm3hgNoEh9PK6PDVhzOMCeYoOZTumEHFl3S7e/O5A+UCgpVLPAUJgEVCBi8/zbM/HZLAq0sC2G06lYCidKqOQugqR8waGEgY29AYTJH4E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741245888; c=relaxed/simple; bh=Z2ETR43ylZDR0RBddM+Y1lYe4yswzdRikYrd0jwrORs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=V0Y/bU0tJx2o+YDdcwqis1ZlKJDSgqY5I/IB7klH5uS8vGTMN9XKKuuLqDwu6kgCf01t/y2PCsQYvoYif6C3/wk5Touqm3J+5vfAXFRddfCKyzo82kgToqO8NtrXuJwhLHbQoouF/qxY161YmFEy1L4Or3zyMbDLX9tTmxR+pQg= 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=FpcwdVY/; arc=none smtp.client-ip=209.85.214.175 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="FpcwdVY/" Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-22403cbb47fso5056685ad.0; Wed, 05 Mar 2025 23:24:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741245886; x=1741850686; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=NQ/0erzSCMLzRBlOUFeUjQifuFitK73RY3yKfbDyQds=; b=FpcwdVY/e/zMEklFLrycC/N3XAtco+/eUdolSKXFHD7zGWaNd/SYNEQ9RwEUWdljMb TodZf8E/fl2xZdVVHIKDF6lRiSk9gXSHZX5BdSGok5HhjlF6obBhAFU46udZpc+vza6C 3piNNz+GI88V6H1QWypY8eQHGzgynKChiWsgg3JsQZQcKKEUdqEYPVoHC17vnvpvVPks qMZotTbdiuw5/okgbAUJgoHD2Gu0NyyH8104jOFvqBfEvdKFcBfEOb1gsU+cvmWD+DmH 5q15Sa6jTYpQ5Gv0CtiFfb9SpHfPsTKlqHPy35cuu54TmguNOkprg60vBr2z15g5M+D/ DXnQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741245886; x=1741850686; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=NQ/0erzSCMLzRBlOUFeUjQifuFitK73RY3yKfbDyQds=; b=KmwNqnMNz+mOgsZOX+qToi59FVLTAf/5eZHGFKFb6UaffvVL/wOx4PXiRo9EsxNHvC YRxostEBNeUJIFpCA5XRZ0Ccvifg1SFSmHcK1wjkMXd15MTbdgtt5yPYJ+wJbAtaIl6l yQWFcLuyP82FNg51rS3P4WtGNgboDVptE7HhOuUUx37klV3LZTaKo3h+nP6x6C5jhrtX 8J5MdD5sGsixTcQ0Hc3IN686ZlAkZi2c6eozwwOqkmRo+kVOU2H+qYLftjqobY5bYUXH XE55UL3fTGDpHuhTyAdg3QGGLuyr553Rh6UUYWPbuIBFt0Rja0ephibWrFbvtvCvl+zB 55sg== X-Forwarded-Encrypted: i=1; AJvYcCULScgwnY27I6mLbAglZyffhnrR+drHtcgwKVsJsCs/IQ79ooZYJ9ypyF/KsQZO3LBsNVQRmAlJpFiv4YjR/Dc=@vger.kernel.org, AJvYcCXzDZkJsqOp+BGIEFsZSyLgbWL3uDPBDkMZlYYM/sI+97M2XDoP1fEV/NWfhz9xKBIGFi9HGHZB@vger.kernel.org X-Gm-Message-State: AOJu0YyHxLUhkNTv+E0FiJvow7ye1ttM2exIub2BbbN61wnCtOjUa6FI DUmEyehZfbKXkP8cXJTy17WnrDtF5v6NEkIp9tExJUv899aRjsfy X-Gm-Gg: ASbGncvfeI4u2zT1D7/fsmaTcsN7A8O9L/x6CW6nEiLWzdQPtHtPoWp1assjicHZDS5 EinaYMMbtbayZCD+hX7Sgwn+ve0FGzDcspvbgC4ec3blr92PQ+jP/JpSBAkKqlGiTutdi6UkjKu GpQXygBGlwd3n4JmmXtxMvPfFL7DvqYWQM7AQxxUijCNK6TVjM0CljonleT0YoU10/mucKbYHyu jPu3McuIIEE5/ZYy8nCMYvfoiP1pYWoNCQOQmUhQXxKIc3ZOlMpVgeMRvxIAsSAbeWAkS+9oDnn Fu+JusHM4T3UhHqXvR/GjpD4URhmO9phmA== X-Google-Smtp-Source: AGHT+IH30tdh1mFBoNOaWnm5OHmx7GCo8DHs3aF70WDcbZYLFc0l9o+eLfxY0MIfVYzmLCdauVYZpA== X-Received: by 2002:a17:903:230a:b0:21f:bd66:cafa with SMTP id d9443c01a7336-223f1c805fcmr100512355ad.17.1741245885896; Wed, 05 Mar 2025 23:24:45 -0800 (PST) Received: from ap.. ([182.213.254.91]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ff693534f8sm567196a91.17.2025.03.05.23.24.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Mar 2025 23:24:45 -0800 (PST) From: Taehee Yoo To: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, andrew+netdev@lunn.ch, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, horms@kernel.org, shuah@kernel.org, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: almasrymina@google.com, asml.silence@gmail.com, willemb@google.com, kaiyuanz@google.com, skhawaja@google.com, sdf@fomichev.me, gospo@broadcom.com, somnath.kotur@broadcom.com, dw@davidwei.uk, ap420073@gmail.com Subject: [PATCH v2 net 2/6] eth: bnxt: return fail if interface is down in bnxt_queue_mem_alloc() Date: Thu, 6 Mar 2025 07:24:18 +0000 Message-Id: <20250306072422.3303386-3-ap420073@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250306072422.3303386-1-ap420073@gmail.com> References: <20250306072422.3303386-1-ap420073@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org The bnxt_queue_mem_alloc() is called to allocate new queue memory when a queue is restarted. It internally accesses rx buffer descriptor corresponding to the index. The rx buffer descriptor is allocated and set when the interface is up and it's freed when the interface is down. So, if queue is restarted if interface is down, kernel panic occurs. Splat looks like: BUG: unable to handle page fault for address: 000000000000b240 #PF: supervisor read access in kernel mode #PF: error_code(0x0000) - not-present page PGD 0 P4D 0 Oops: Oops: 0000 [#1] PREEMPT SMP NOPTI CPU: 3 UID: 0 PID: 1563 Comm: ncdevmem2 Not tainted 6.14.0-rc2+ #9 844ddba6e7c459cafd0bf4db9a3198e Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021 RIP: 0010:bnxt_queue_mem_alloc+0x3f/0x4e0 [bnxt_en] Code: 41 54 4d 89 c4 4d 69 c0 c0 05 00 00 55 48 89 f5 53 48 89 fb 4c 8d b5 40 05 00 00 48 83 ec 15 RSP: 0018:ffff9dcc83fef9e8 EFLAGS: 00010202 RAX: ffffffffc0457720 RBX: ffff934ed8d40000 RCX: 0000000000000000 RDX: 000000000000001f RSI: ffff934ea508f800 RDI: ffff934ea508f808 RBP: ffff934ea508f800 R08: 000000000000b240 R09: ffff934e84f4b000 R10: ffff9dcc83fefa30 R11: ffff934e84f4b000 R12: 000000000000001f R13: ffff934ed8d40ac0 R14: ffff934ea508fd40 R15: ffff934e84f4b000 FS: 00007fa73888c740(0000) GS:ffff93559f780000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 000000000000b240 CR3: 0000000145a2e000 CR4: 00000000007506f0 PKRU: 55555554 Call Trace: ? __die+0x20/0x70 ? page_fault_oops+0x15a/0x460 ? exc_page_fault+0x6e/0x180 ? asm_exc_page_fault+0x22/0x30 ? __pfx_bnxt_queue_mem_alloc+0x10/0x10 [bnxt_en 7f85e76f4d724ba07471d7e39d9e773aea6597b7] ? bnxt_queue_mem_alloc+0x3f/0x4e0 [bnxt_en 7f85e76f4d724ba07471d7e39d9e773aea6597b7] netdev_rx_queue_restart+0xc5/0x240 net_devmem_bind_dmabuf_to_queue+0xf8/0x200 netdev_nl_bind_rx_doit+0x3a7/0x450 genl_family_rcv_msg_doit+0xd9/0x130 genl_rcv_msg+0x184/0x2b0 ? __pfx_netdev_nl_bind_rx_doit+0x10/0x10 ? __pfx_genl_rcv_msg+0x10/0x10 netlink_rcv_skb+0x54/0x100 genl_rcv+0x24/0x40 ... Reviewed-by: Somnath Kotur Reviewed-by: Jakub Kicinski Fixes: 2d694c27d32e ("bnxt_en: implement netdev_queue_mgmt_ops") Signed-off-by: Taehee Yoo --- v2: - Add Review tags from Somnath and Jakub. drivers/net/ethernet/broadcom/bnxt/bnxt.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index 13c9be49216a..d09986308582 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -15439,6 +15439,9 @@ static int bnxt_queue_mem_alloc(struct net_device *dev, void *qmem, int idx) struct bnxt_ring_struct *ring; int rc; + if (!bp->rx_ring) + return -ENETDOWN; + rxr = &bp->rx_ring[idx]; clone = qmem; memcpy(clone, rxr, sizeof(*rxr)); From patchwork Thu Mar 6 07:24:19 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taehee Yoo X-Patchwork-Id: 14003926 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-pj1-f42.google.com (mail-pj1-f42.google.com [209.85.216.42]) (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 2EFB51AAE13; Thu, 6 Mar 2025 07:24:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741245893; cv=none; b=Z6Fi2xxB8yNOt+S4wD4IJCS9xP5Yunz/7wJ41ZrkOxws9kFaYgYXpku1tbK/Ov9NEfBl4cBbmKQI1BSWSa9BCcb0OWs0LbOhvLk1c+bEmycio4uMgV08Z+Rd86wmGaM44YWwIsNLJNliNRb1SWZI7tUVMH92WUm8N0VtGC9vZRU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741245893; c=relaxed/simple; bh=hG3EeyU+2jUVdt0UYxVRAoTGkWF3x1HGzTV8wWrZGHQ=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=qXMQDiipmD+ZnHMfTeaf267BscZ8nDH2XqlRZ9PxMqtHygguPMtGpn4LcXXmr4zEo1GWWuBdFgemfafpt0hj4EDCdrv9mWm2v17dBmSS2IunAARS2erxhYdXjtRvD+rAGDDLjnRTzgh1GziErkF/mNEjx3V7wsnQf44k4g4zjTA= 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=FyMFoK9D; arc=none smtp.client-ip=209.85.216.42 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="FyMFoK9D" Received: by mail-pj1-f42.google.com with SMTP id 98e67ed59e1d1-2ff087762bbso512683a91.3; Wed, 05 Mar 2025 23:24:51 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741245891; x=1741850691; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=yqURfNYIou125uezA+EAYAmjHbHzvJtt6tWv7wqGDBE=; b=FyMFoK9DdP0p6glUSbVBUwPgQ70T0s2TB7/kAQRfVi7K173JdfKYyGC60IopV3TwMq Bid74IAXlx6v/iPpS85dLzYM2ckbeVmQSywRmUGrI7QeMMBdI6DYdWlz76M0UilLSqIL fB2cInBl9M9Zm09CL8/M3eqSj1EA4l6KDp0P02bUzdTJS40HnFCsV1Dt3mzOavZjRWNp T78raVTMRZLlI1WWRDNkRaT9ToiOnzEyGRP4fAfeQE7ifRhTp0brAeEUbh6CQxtMU1UH v74BD/7Pg/FKsVmN1Kdd+ONtQmnz88SU30v6iXLQFhwdpqtDXx//XunU9wnmrA1Zres6 zorw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741245891; x=1741850691; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=yqURfNYIou125uezA+EAYAmjHbHzvJtt6tWv7wqGDBE=; b=hrBYLzY9zOsW5XUbWD9VPXuy5FHpfTp0by1iPBhjngtUraBtziqmIr1F398/UlKeZT aysLsT6hXNDJDcuj1nTGe+R0lYaRPgYV4L0V9Cvk4wo8oVfPUqQa5efSGH9HBo+aK/uC 5wlOjFTK91QH4caHfgqRC9ylza8vuYLT9dEMWIzdLiY/BENmNbW1TFYBBh9m8TW7FoT7 BsgZ4GtWQKhJSE86zblmffSjRNieW5gLoJ8R9oHQt1zoPFresdDJ9rztdgew8wuIfKvS LtaG/uRfRz2iSAzmLqIYjUpIWKiU7KWbto3IfFEU9C8girI/55hUVHko9dgnv2iBvkkW fbWQ== X-Forwarded-Encrypted: i=1; AJvYcCUGiKFkzomZdwTKLmtI33GxCVzDnDMGAsMiJFL5Ydv4ex263qXxUu0rikMgXeb8hIcrHws1bkMZJQ8+H8zmO/Y=@vger.kernel.org, AJvYcCWsfIQOvHAKdtgdIKHAHVvRRJBelhnVFBFB7NyIafOIaz5WGZsZpa/ngxfdO/2JAyQ7aPiKOaff@vger.kernel.org X-Gm-Message-State: AOJu0YxfZi30DpBqAN4At0yZ0XAcQx2p+sGqbvhLiTp051p2lRwgxVDA hZu29k7PURxmzBoEzOXX8fu6Zla1mzozywhq8tJT3OyqxYFNTWYl X-Gm-Gg: ASbGncvVayWslXdWCZiFAnrV3JkM+dw003bNq4mg7AMz8JhA2yiEyyeufXGRaRXKdZV kkCJc2dx5wyNHV8D88Xgv0yv5E0AoVO0d/xZJHhmfZWsq5FUNFoJSm9TPTtQIxYxUGMQdNoLva+ kyK17WiIp5tslSv21a/FpTPW+se7MUcYrlVIr+1iHL+KD2w+OcUaLX2q+Y9bR00tmfjVBpWW4Rb XXTc0uKh/kpzpZ20Q9Crwi3jV7k0nO0FMw1D7qC5JxNaeRNO19A6fGN5qfUTWH693GVyskeawXD C7ZZyl+cvSRC3WwDZCQ9RMZ4xZ95MH08BA== X-Google-Smtp-Source: AGHT+IEcESA0lNK7cZlQN5XAUKQS4VzinPwSWxd7kuvGboUW6Js7LGvmRYndE2qTdOwAgUFVQWONtA== X-Received: by 2002:a17:90b:4f4e:b0:2ee:5edc:4b2 with SMTP id 98e67ed59e1d1-2ff497935c5mr10093487a91.20.1741245891339; Wed, 05 Mar 2025 23:24:51 -0800 (PST) Received: from ap.. ([182.213.254.91]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ff693534f8sm567196a91.17.2025.03.05.23.24.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Mar 2025 23:24:50 -0800 (PST) From: Taehee Yoo To: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, andrew+netdev@lunn.ch, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, horms@kernel.org, shuah@kernel.org, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: almasrymina@google.com, asml.silence@gmail.com, willemb@google.com, kaiyuanz@google.com, skhawaja@google.com, sdf@fomichev.me, gospo@broadcom.com, somnath.kotur@broadcom.com, dw@davidwei.uk, ap420073@gmail.com Subject: [PATCH v2 net 3/6] eth: bnxt: do not use BNXT_VNIC_NTUPLE unconditionally in queue restart logic Date: Thu, 6 Mar 2025 07:24:19 +0000 Message-Id: <20250306072422.3303386-4-ap420073@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250306072422.3303386-1-ap420073@gmail.com> References: <20250306072422.3303386-1-ap420073@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org When a queue is restarted, it sets MRU to 0 for stopping packet flow. MRU variable is a member of vnic_info[], the first vnic_info is default and the second is ntuple. Only when ntuple is enabled(ethtool -K eth0 ntuple on), vnic_info for ntuple is allocated in init logic. The bp->nr_vnics indicates how many vnic_info are allocated. However bnxt_queue_{start | stop}() accesses vnic_info[BNXT_VNIC_NTUPLE] regardless of ntuple state. Fixes: b9d2956e869c ("bnxt_en: stop packet flow during bnxt_queue_stop/start") Signed-off-by: Taehee Yoo Reviewed-by: Somnath Kotur --- v2: - No changes. drivers/net/ethernet/broadcom/bnxt/bnxt.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index d09986308582..c9d37fea5d32 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -15635,7 +15635,7 @@ static int bnxt_queue_start(struct net_device *dev, void *qmem, int idx) cpr = &rxr->bnapi->cp_ring; cpr->sw_stats->rx.rx_resets++; - for (i = 0; i <= BNXT_VNIC_NTUPLE; i++) { + for (i = 0; i <= bp->nr_vnics; i++) { vnic = &bp->vnic_info[i]; rc = bnxt_hwrm_vnic_set_rss_p5(bp, vnic, true); @@ -15663,7 +15663,7 @@ static int bnxt_queue_stop(struct net_device *dev, void *qmem, int idx) struct bnxt_vnic_info *vnic; int i; - for (i = 0; i <= BNXT_VNIC_NTUPLE; i++) { + for (i = 0; i <= bp->nr_vnics; i++) { vnic = &bp->vnic_info[i]; vnic->mru = 0; bnxt_hwrm_vnic_update(bp, vnic, From patchwork Thu Mar 6 07:24:20 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taehee Yoo X-Patchwork-Id: 14003927 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-pj1-f43.google.com (mail-pj1-f43.google.com [209.85.216.43]) (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 9CB5217C98; Thu, 6 Mar 2025 07:24:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741245899; cv=none; b=qOD3WbO4PH46ZraFTwzX4bDthoHQZQQcQcBckEUwoZaYC/ny0A+lDXyBMVbqfChxtsCXkq915JpctcBpsLRxMGEf9XhL87o2+fiHnaPipTXhH0GCf2d4Y1Iw8TP+I1gljCQ8e6Rv2sAe1SNwKd8v1HTfdABqZxsgvmX32NIC0zQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741245899; c=relaxed/simple; bh=vMrqLh+jKFHMAoIRCmhp69QOAPjybGa9MGF5KnhOajs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=NS2GN++O2oH7skkuNHfCzU1iFth5BbQU+zgbNAZH1rJCyUkNQrUIB6ivft4pMdlffSayanDkBFa79FT14nUKlZSihXlfMNYktgRgxdmgI3KLQAU+b8P7/sU7spgRxiGSfCRxWZ4ljD2n80Mpy3LH3L3/A/d5IhXtT05Q9W8qRn8= 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=Ccofh3DT; arc=none smtp.client-ip=209.85.216.43 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="Ccofh3DT" Received: by mail-pj1-f43.google.com with SMTP id 98e67ed59e1d1-2feb9078888so772746a91.3; Wed, 05 Mar 2025 23:24:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741245897; x=1741850697; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1ZM0yYMpenaP6tGtTGt3yQo0mTDU64awuLWDXCIaVKQ=; b=Ccofh3DT9gSj/vq3RgJ/N7aOYOK3pwPM6pjvD9dDcgFCo73vk+eBSC0zLrs4Y0CFzw Aw2gR8FwuYqmFAF8tO+H/sibip460vB/ddqxAIgZiy07QqUabIlF21+3DIOeSnRtAbg4 UJdG5vCjSUJZdfEKENUsBlMMKvwJBwJyGjAXy9tLoRKoNTqBh/c9DofZFh+pBnxlsCYW /uOAiLmFvt4JZvF5HpLhoIfDulfB5FBU6vSPaLQ8xM8a9YMhBaERoMu9Jf8F0Lnx0L2K Q32AUsuiQiYt5zq9JM8CcWMbl3nYxrIWFKtbOe8VkJFt3E/I8pbvG0ZF5Bd4TzijNR7M AnIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741245897; x=1741850697; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1ZM0yYMpenaP6tGtTGt3yQo0mTDU64awuLWDXCIaVKQ=; b=K9OooTj0QgsgmHAw59VofzQmZTACs7MMuHoNwfrF3tS9mpAcuYMIPUq1TrvE1JTBO8 wA50p+WGOCQlJPPp7vuv5mXojJlMaH5aZaHI82JPQ7bgtDj2Zp/E7A95V9hMCva+vmnt v1AyvQdATR8q01XTfo0woikihfJQGNdQbI/lmsCqs92RZ//xEw5s9UQMVy+Z8tgH8f+z clXTFN6L156El+ifpMa+0qn2VGJ1hS3wTbtl7CrI1iutfFsQwPcVreZAZ319WY2APElk 2A9Kur6CGsPfqAINAkoHmB9YcHOGnvvUR0VJIlCDoHXA3wLRh3gKYwGalTD92xoMO9C5 G+oA== X-Forwarded-Encrypted: i=1; AJvYcCUc5Lys5RaR2AD9mjL9Auc30xoG9D+yMZjEwIP3Zw8t3d1kVlsiIqzit986ZpKmiR9oSWJIQdRrtHrL1+1csh8=@vger.kernel.org, AJvYcCUcMc9+NmZulurfsK5cWFQSaiF6h3m50sNVxSV/Dhi8NNDiKhRxKSCd4DAhdn/hsyF6xn4J1V5N@vger.kernel.org X-Gm-Message-State: AOJu0YzOhPtVu9EUOogKxxjIcK2MRV7M2oT1Di+XWc17jtnvsBBzxSp9 3GwvDXP0iWN3QwFO+pTAdPUdzB3X7x9sMSYQCh79YwXmbaVg1dzuLrpeFg== X-Gm-Gg: ASbGncuGFyyxPIfwQpHMwKOyz7lnqGspgjEa4L/ubNkIOIaQ8RQzKtWeFFigm2qgGsZ NwLs5WniMRahABC7L2nuImDPQwDbdR/MSlHxcP0XwNygpuyNaiCBI58ABvL605DVNHrPSHlYyrM 24rl+svYHP4bTyyXg49OKUUUGf4Qb6wz4/rusWAYbRJ7ZsP4FrSdapQQaidn7lYi75Yhh5FYcBc ES2YoAY4v0XnbjNilKUYOth+iXfc2CIxPNgafoAnRojNSly+ugj/c+EnGsBg5r1wa9RdETrI7H+ ZvUt+NVZeAoCEzAhDDBQS+r3HEX5V8LIWA== X-Google-Smtp-Source: AGHT+IGs3M/KsV5JlK2oBIFWJdTQjWH43nCdqrszgdHxElOa4qC2F+LKM0+bywK7g3PUvjaKJ6lpfQ== X-Received: by 2002:a17:90b:248a:b0:2ff:4f04:4261 with SMTP id 98e67ed59e1d1-2ff4f044962mr6559146a91.34.1741245896783; Wed, 05 Mar 2025 23:24:56 -0800 (PST) Received: from ap.. ([182.213.254.91]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ff693534f8sm567196a91.17.2025.03.05.23.24.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Mar 2025 23:24:56 -0800 (PST) From: Taehee Yoo To: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, andrew+netdev@lunn.ch, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, horms@kernel.org, shuah@kernel.org, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: almasrymina@google.com, asml.silence@gmail.com, willemb@google.com, kaiyuanz@google.com, skhawaja@google.com, sdf@fomichev.me, gospo@broadcom.com, somnath.kotur@broadcom.com, dw@davidwei.uk, ap420073@gmail.com Subject: [PATCH v2 net 4/6] eth: bnxt: do not update checksum in bnxt_xdp_build_skb() Date: Thu, 6 Mar 2025 07:24:20 +0000 Message-Id: <20250306072422.3303386-5-ap420073@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250306072422.3303386-1-ap420073@gmail.com> References: <20250306072422.3303386-1-ap420073@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org The bnxt_rx_pkt() updates ip_summed value at the end if checksum offload is enabled. When the XDP-MB program is attached and it returns XDP_PASS, the bnxt_xdp_build_skb() is called to update skb_shared_info. The main purpose of bnxt_xdp_build_skb() is to update skb_shared_info, but it updates ip_summed value too if checksum offload is enabled. This is actually duplicate work. When the bnxt_rx_pkt() updates ip_summed value, it checks if ip_summed is CHECKSUM_NONE or not. It means that ip_summed should be CHECKSUM_NONE at this moment. But ip_summed may already be updated to CHECKSUM_UNNECESSARY in the XDP-MB-PASS path. So the by skb_checksum_none_assert() WARNS about it. This is duplicate work and updating ip_summed in the bnxt_xdp_build_skb() is not needed. Splat looks like: WARNING: CPU: 3 PID: 5782 at ./include/linux/skbuff.h:5155 bnxt_rx_pkt+0x479b/0x7610 [bnxt_en] Modules linked in: bnxt_re bnxt_en rdma_ucm rdma_cm iw_cm ib_cm ib_uverbs veth xt_nat xt_tcpudp xt_conntrack nft_chain_nat xt_MASQUERADE nf_] CPU: 3 UID: 0 PID: 5782 Comm: socat Tainted: G W 6.14.0-rc4+ #27 Tainted: [W]=WARN Hardware name: ASUS System Product Name/PRIME Z690-P D4, BIOS 0603 11/01/2021 RIP: 0010:bnxt_rx_pkt+0x479b/0x7610 [bnxt_en] Code: 54 24 0c 4c 89 f1 4c 89 ff c1 ea 1f ff d3 0f 1f 00 49 89 c6 48 85 c0 0f 84 4c e5 ff ff 48 89 c7 e8 ca 3d a0 c8 e9 8f f4 ff ff <0f> 0b f RSP: 0018:ffff88881ba09928 EFLAGS: 00010202 RAX: 0000000000000000 RBX: 00000000c7590303 RCX: 0000000000000000 RDX: 1ffff1104e7d1610 RSI: 0000000000000001 RDI: ffff8881c91300b8 RBP: ffff88881ba09b28 R08: ffff888273e8b0d0 R09: ffff888273e8b070 R10: ffff888273e8b010 R11: ffff888278b0f000 R12: ffff888273e8b080 R13: ffff8881c9130e00 R14: ffff8881505d3800 R15: ffff888273e8b000 FS: 00007f5a2e7be080(0000) GS:ffff88881ba00000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00007fff2e708ff8 CR3: 000000013e3b0000 CR4: 00000000007506f0 PKRU: 55555554 Call Trace: ? __warn+0xcd/0x2f0 ? bnxt_rx_pkt+0x479b/0x7610 ? report_bug+0x326/0x3c0 ? handle_bug+0x53/0xa0 ? exc_invalid_op+0x14/0x50 ? asm_exc_invalid_op+0x16/0x20 ? bnxt_rx_pkt+0x479b/0x7610 ? bnxt_rx_pkt+0x3e41/0x7610 ? __pfx_bnxt_rx_pkt+0x10/0x10 ? napi_complete_done+0x2cf/0x7d0 __bnxt_poll_work+0x4e8/0x1220 ? __pfx___bnxt_poll_work+0x10/0x10 ? __pfx_mark_lock.part.0+0x10/0x10 bnxt_poll_p5+0x36a/0xfa0 ? __pfx_bnxt_poll_p5+0x10/0x10 __napi_poll.constprop.0+0xa0/0x440 net_rx_action+0x899/0xd00 ... Following ping.py patch adds xdp-mb-pass case. so ping.py is going to be able to reproduce this issue. Fixes: 1dc4c557bfed ("bnxt: adding bnxt_xdp_build_skb to build skb from multibuffer xdp_buff") Signed-off-by: Taehee Yoo --- v2: - Patch added. drivers/net/ethernet/broadcom/bnxt/bnxt.c | 3 +-- drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 11 ++--------- drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h | 4 ++-- 3 files changed, 5 insertions(+), 13 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c index c9d37fea5d32..f8bea233ef63 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -2210,8 +2210,7 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_cp_ring_info *cpr, if (!skb) goto oom_next_rx; } else if (xdp_active && xdp_buff_has_frags(&xdp)) { - skb = bnxt_xdp_build_skb(bp, skb, &sinfo, rxr->page_pool, &xdp, - rxcmp1); + skb = bnxt_xdp_build_skb(bp, skb, &sinfo, rxr->page_pool, &xdp); if (!skb) { /* we should be able to free the old skb here */ bnxt_xdp_buff_frags_free(rxr, &xdp); diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c index 77860848e4f9..e88c6f77522c 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c @@ -461,18 +461,11 @@ int bnxt_xdp(struct net_device *dev, struct netdev_bpf *xdp) struct sk_buff * bnxt_xdp_build_skb(struct bnxt *bp, struct sk_buff *skb, struct skb_shared_info *sinfo, - struct page_pool *pool, struct xdp_buff *xdp, - struct rx_cmp_ext *rxcmp1) + struct page_pool *pool, struct xdp_buff *xdp) { if (!skb) return NULL; - skb_checksum_none_assert(skb); - if (RX_CMP_L4_CS_OK(rxcmp1)) { - if (bp->dev->features & NETIF_F_RXCSUM) { - skb->ip_summed = CHECKSUM_UNNECESSARY; - skb->csum_level = RX_CMP_ENCAP(rxcmp1); - } - } + xdp_update_skb_shared_info(skb, sinfo->nr_frags, sinfo->xdp_frags_size, BNXT_RX_PAGE_SIZE * sinfo->nr_frags, diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h index c1974bffafe5..51c4255dffef 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h @@ -33,6 +33,6 @@ void bnxt_xdp_buff_frags_free(struct bnxt_rx_ring_info *rxr, struct xdp_buff *xdp); struct sk_buff *bnxt_xdp_build_skb(struct bnxt *bp, struct sk_buff *skb, struct skb_shared_info *sinfo, - struct page_pool *pool, struct xdp_buff *xdp, - struct rx_cmp_ext *rxcmp1); + struct page_pool *pool, + struct xdp_buff *xdp); #endif From patchwork Thu Mar 6 07:24:21 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taehee Yoo X-Patchwork-Id: 14003928 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-pj1-f44.google.com (mail-pj1-f44.google.com [209.85.216.44]) (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 1992817C98; Thu, 6 Mar 2025 07:25:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741245904; cv=none; b=kvbtn7n8tYnup9Cs5yp3zIN5DvT5BAvJZITnWpLjMGr2Fxdt8b9mUvv9aeQZqMIYdprrIGR3PiczaF4dGwDQGUhWJVNJWqdrdRzMH3V7lmi4jAL6MaWYPa7FWH/R1gn4kquVPkUQ29F3zNG/7RQS9AKYtSisxg8Cd+aZ8ebjweI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741245904; c=relaxed/simple; bh=k05e7Pnks9GT3qGU55+DUjdcK+iN42Qh4CESajk9aP4=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Dy62Z+jhGQjfdcvjrDOnuNlYYy1jl9wd9s8rH9gZDyCvKz3j5VxkolQ+iGkLcSThjn7QjZG43cmAKIAx/rBZwqBGJ9hHnHN+8vROpmyyBdIvwV6c+yf5f8Msazjblt+CEpIv1dKEcrE1E0TPVz8P/LHxg/Nvk9jTjYNv3oHh/Rs= 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=Ln7ogm24; arc=none smtp.client-ip=209.85.216.44 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="Ln7ogm24" Received: by mail-pj1-f44.google.com with SMTP id 98e67ed59e1d1-2fec13a4067so549679a91.2; Wed, 05 Mar 2025 23:25:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741245902; x=1741850702; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mIyxZ1JG3rdG0LAbrbn5O/IyfTxj4J52uMpC7PDQlEE=; b=Ln7ogm24OaPHoz4XQjVFV84s0GT9h8O6Xc8YTNxjTj0ykToLf7EzMbzPv5ULyk66sc QLf6oIlZgLz4qZqX5KzCM+Ej7Wd3TuUFsJqz/4PDV71HGU4dJAKhReGqaqUpFwju8UhU hqY7txjRS1E5WLGTv8V65fnU+fVv1+gol4Vp25eke+InglqsU07Tt/pFf3n/v/Ka32/i kC0WWKP0n9lCskU8r1OCfbKrNJxhk6vb3VKyVUa9xMHiFJPoATMx75O84Vpaw04Uxn53 4uxBlj/PZW2E544hs7BSuu+tWJn2VXD5yA6lDZ4XL6QWg0G5rOQF28SNpNJ8DzqWloD9 IJtQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741245902; x=1741850702; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mIyxZ1JG3rdG0LAbrbn5O/IyfTxj4J52uMpC7PDQlEE=; b=XRI/jdqJLWdZ9crsu0YHSl2GKCk5nRtDIoxl95KKx5p6KqDEXoB7mtZTE3hNE6WCzj cVoZ+Psa6uHuHn6DJVBRwThLLmkCO3OW5WvfCLAoEeHYEReGFdyirtvbpAU3SAURUuPu OBwnU2r6gnp3FM/dubQrvkH1K/OFETd0XYU9Bu5KAcEyKdjkQxzAs/S4w6NwyYfSWlXp N9tauiL8Na2sYpIXOOBhO5agdyfjoB5CIvVjRB8qp3w+vApasqWwEN9xpxwCzByxBBu+ m7ZSbg/kzlZU06JqivIGTl1GoEAGsDbyAreWY0ArGGpwb5D/QmdPTMkL83F6TzFJp9l6 BXUw== X-Forwarded-Encrypted: i=1; AJvYcCVGjqMM7T4wDwUQglLympOFHookKc6Uo99z3+xv3EVwRg9hNpIUZ1vdHrIGdsGxF3rXSqwPNF7sZfPPCyegg4s=@vger.kernel.org, AJvYcCWG1KBwozc1DwzMHLiua0Y6tcdkm/wHx6dykhI5MnLTJ0fbwQVokfe40kHKC1+m4/Vbe9gco1eW@vger.kernel.org X-Gm-Message-State: AOJu0YxVJcqfHikuZKu6pCOy0dgTLKvdx+8CMExeZ146K1RE0BL0+yQ1 aBHVy98iS/1J0NEEbXXTm59CdWBlnHqJawaLVtL5UqYcyAE+c3RL X-Gm-Gg: ASbGncsQuXsm/NwnMGLqIMHrg6osYqcf76/vqovWwCzZuFn4MEWOM1JQUfaHHivLqpf +sCBZBVXjVqNPsndXkVDTLLFwgf7esRQuvYKvlanM5HIT7Xp4OUPMvM17X/QWJmXSOv4GxIwz8A Wx9Cs4OI3VlJOLx0uhDNaoHjuFbXCTJj++Rhltl2INDAVOdbSlPo3t6czfoSKM4IGEyUZ8wfEzi CQTP8H+aJmuFMEawGR8Mn4wMtqxMOk00v8GRivpdxLoOrJkOaCIKOPmSddq35TgtaqMgu8JtNzQ V+HXBuEVB5sQ4oS0IDCzeLo03I4clYdU3w== X-Google-Smtp-Source: AGHT+IEysYDu9LietDyDtqKHdzeqcK7Oz8Yw7WfjsNGyqIi7IokeJ/1jQc7td6tewQPny8E9KTQ2zA== X-Received: by 2002:a17:90a:f94d:b0:2fe:afa7:eaf8 with SMTP id 98e67ed59e1d1-2ff4972725bmr9724313a91.13.1741245902231; Wed, 05 Mar 2025 23:25:02 -0800 (PST) Received: from ap.. ([182.213.254.91]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ff693534f8sm567196a91.17.2025.03.05.23.24.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Mar 2025 23:25:01 -0800 (PST) From: Taehee Yoo To: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, andrew+netdev@lunn.ch, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, horms@kernel.org, shuah@kernel.org, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: almasrymina@google.com, asml.silence@gmail.com, willemb@google.com, kaiyuanz@google.com, skhawaja@google.com, sdf@fomichev.me, gospo@broadcom.com, somnath.kotur@broadcom.com, dw@davidwei.uk, ap420073@gmail.com Subject: [PATCH v2 net 5/6] net: devmem: do not WARN conditionally after netdev_rx_queue_restart() Date: Thu, 6 Mar 2025 07:24:21 +0000 Message-Id: <20250306072422.3303386-6-ap420073@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250306072422.3303386-1-ap420073@gmail.com> References: <20250306072422.3303386-1-ap420073@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org When devmem socket is closed, netdev_rx_queue_restart() is called to reset queue by the net_devmem_unbind_dmabuf(). But callback may return -ENETDOWN if the interface is down because queues are already freed when the interface is down so queue reset is not needed. So, it should not warn if the return value is -ENETDOWN. Signed-off-by: Taehee Yoo --- v2: - Patch added. net/core/devmem.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/net/core/devmem.c b/net/core/devmem.c index 3bba3f018df0..0e5a2c672efd 100644 --- a/net/core/devmem.c +++ b/net/core/devmem.c @@ -109,6 +109,7 @@ void net_devmem_unbind_dmabuf(struct net_devmem_dmabuf_binding *binding) struct netdev_rx_queue *rxq; unsigned long xa_idx; unsigned int rxq_idx; + int err; if (binding->list.next) list_del(&binding->list); @@ -120,7 +121,8 @@ void net_devmem_unbind_dmabuf(struct net_devmem_dmabuf_binding *binding) rxq_idx = get_netdev_rx_queue_index(rxq); - WARN_ON(netdev_rx_queue_restart(binding->dev, rxq_idx)); + err = netdev_rx_queue_restart(binding->dev, rxq_idx); + WARN_ON(err && err != -ENETDOWN); } xa_erase(&net_devmem_dmabuf_bindings, binding->id); From patchwork Thu Mar 6 07:24:22 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Taehee Yoo X-Patchwork-Id: 14003929 X-Patchwork-Delegate: kuba@kernel.org Received: from mail-pl1-f178.google.com (mail-pl1-f178.google.com [209.85.214.178]) (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 8186717C98; Thu, 6 Mar 2025 07:25:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.178 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741245910; cv=none; b=brzMa0qg76Y8EagNAZMosMHrJFMOTSzG5YbE3DmcsedR1PZgRJj+P/QaDnH9Vrgegkp9iw3EPeRVAuaTrWGHCMz1Li5bSb/+hXmL01nF0EAunkLDAR5Ax1vi/dmRyuh96vppLoNZBnN6XM5djHpC8ziXN9F67pGBhYyEkWdW3WI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1741245910; c=relaxed/simple; bh=kufHmTRB++jZQY64ZMozQJ3Wbc9eALcrHlZIJBbmxK8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=CBrbhk6htbBaqeRDIlN+JFxiiRJMXdapdDALjXYX63JpjwvbalPEIYdkaQYskigOIrR/Fykk/5068iBzWh/Bu97SBzM6Q+oCdPIeBZc1MC5hBLdKhtlgtLciFhQIBHcoKMgmOsbvwgSoU8SHzpa7OCRxBulHrE71Pc+GRkcL02w= 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=jELIyqBH; arc=none smtp.client-ip=209.85.214.178 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="jELIyqBH" Received: by mail-pl1-f178.google.com with SMTP id d9443c01a7336-2239c066347so4372105ad.2; Wed, 05 Mar 2025 23:25:08 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741245908; x=1741850708; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=OsKO0nzseNJqKnkU34vflNea8Zesxh3zcsIa2WAI8VI=; b=jELIyqBHkw3v66z8MZ+ZE6caQWMraVWmg8MS7uNxvRyS7ilMSWjlGqUNUs/1PVTaEk nQncACAzgCCEU48SPo3mB7KvvWPLS1Px4kn9/N8tEy+UGcce696V0S3g0SkdHjkmlN85 HdjNMVrWZ5CNB9xU9Z0qn6cqS6IOpe+FE/MLG7+Kw3+N1v8EttsxAee5N1WLz84XV/2A YRYYd7WWcdM//JCuMy0r+DWhakt5dq795Tmub5PDjpzFhsBYq4nQC5slY9l8jE+/9IF7 PfgOXUjEeWYPyZz0emgwgmzYfQHtuC2I7pU1rp0RTT2njTjKD4AXqkUDyddma84t6JWx e6dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741245908; x=1741850708; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=OsKO0nzseNJqKnkU34vflNea8Zesxh3zcsIa2WAI8VI=; b=YXnfgA5ikcu5xeoVlRilJvbDh8u5tfWR78NZPoyt+1ndJPO8wbKuAqoHWUTCwrn0AN QffiwSogzN9ZRB4h5vxM02sfgVegwoDohr2ZwtVC8NqMSpxu7VIUVPsVOp6TS9QlvCA2 DrwFC2G7NPErWWDVVLqetviTW2uWt2WX5rnOGEtPP0ktufyyrPE+/gN6Aqpz627Yoaz0 mj6FWvAJS4YNjgQ+u/cL+DvVERzRY4zzSEchMoYMJFoiKtl6G12PS8mXbUU+nvbMy2Dt Nze84A0C3SxNBCXYww/WZ3jdeGEuiEqMfzlU1mWmmFsysYBdLQngPWiDEwpIIqFgkqNN tu/Q== X-Forwarded-Encrypted: i=1; AJvYcCVXnCQXs9D9AqtZayv8LJqHbEHeVWPR/20EZAg2ODHDatyzv2KRFN0fQc8bB8pIj2R17UvFnn/dN9egT5g/4Bw=@vger.kernel.org, AJvYcCXRBljGb97hQ7SWza9+RCppSqMCJ3i15lTO001g0lU7Ri30a4HIU3F8P4dCCwQBvjdgooLNHJMs@vger.kernel.org X-Gm-Message-State: AOJu0YxReqNvws4s59rmVXz6AgwnNRW6JyNgRXANLHzBWiy+SWs85aLk l0JlPf26JsBrCUlHIhsPxujfa3n0GIfyiocf0LbxYI2CDC4sFjy0 X-Gm-Gg: ASbGncs12icXZuOcBonailiHLA1YTQEBRbNsodQtxhA0Tq+7vzNw5Rm8Dm6wUW/eCfN zPPr+xFHH/d2i2GP2l8JCd8JAILCOoM4M48DoNMTHqnFV5qmORnx6He9488gSikP4iMMkO2HJAv isF4nGiPd3y/R6bJlPWV92lvUJ3DU+DMtdu701YBv+YP2rDn36hi0HnvBKwGru4PS5SWQvtUUrR wed+ho5/QU+9acnP6FmbtGNU7iLhR0P9XcEOMQ84jL14tMZo4fDmvUMUZeYxQ8XBBBGZSs4kc34 vtLvkf+iRUbOMvoaq+nSDcRw3tXV60fYMA== X-Google-Smtp-Source: AGHT+IE0tBICBW97zmbYjsCSFEvkmjp0kkAzkNWysxV3gfvI+A1Lsvn17an83iZMNzP1vaAj1An9bQ== X-Received: by 2002:a17:902:ebc4:b0:224:10b9:357a with SMTP id d9443c01a7336-22410c87c9emr16495845ad.32.1741245907691; Wed, 05 Mar 2025 23:25:07 -0800 (PST) Received: from ap.. ([182.213.254.91]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-2ff693534f8sm567196a91.17.2025.03.05.23.25.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 05 Mar 2025 23:25:06 -0800 (PST) From: Taehee Yoo To: davem@davemloft.net, kuba@kernel.org, pabeni@redhat.com, edumazet@google.com, andrew+netdev@lunn.ch, michael.chan@broadcom.com, pavan.chebbi@broadcom.com, horms@kernel.org, shuah@kernel.org, netdev@vger.kernel.org, linux-kselftest@vger.kernel.org Cc: almasrymina@google.com, asml.silence@gmail.com, willemb@google.com, kaiyuanz@google.com, skhawaja@google.com, sdf@fomichev.me, gospo@broadcom.com, somnath.kotur@broadcom.com, dw@davidwei.uk, ap420073@gmail.com Subject: [PATCH v2 net 6/6] selftests: drv-net: add xdp cases for ping.py Date: Thu, 6 Mar 2025 07:24:22 +0000 Message-Id: <20250306072422.3303386-7-ap420073@gmail.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250306072422.3303386-1-ap420073@gmail.com> References: <20250306072422.3303386-1-ap420073@gmail.com> Precedence: bulk X-Mailing-List: netdev@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Patchwork-Delegate: kuba@kernel.org ping.py has 3 cases, test_v4, test_v6 and test_tcp. But these cases are not executed on the XDP environment. So, it adds XDP environment, existing tests(test_v4, test_v6, and test_tcp) are executed too on the below XDP environment. So, it adds XDP cases. 1. xdp-generic + single-buffer 2. xdp-generic + multi-buffer 3. xdp-native + single-buffer 4. xdp-native + multi-buffer 5. xdp-offload It also makes test_{v4 | v6 | tcp} sending large size packets. this may help to check whether multi-buffer is working or not. Note that the physical interface may be down and then up when xdp is attached or detached. This takes some period to activate traffic. So sleep(10) is added if the test interface is the physical interface. netdevsim and veth type interfaces skip sleep. Signed-off-by: Taehee Yoo --- v2: - Patch added. tools/testing/selftests/drivers/net/ping.py | 200 ++++++++++++++++-- .../testing/selftests/net/lib/xdp_dummy.bpf.c | 6 + 2 files changed, 191 insertions(+), 15 deletions(-) diff --git a/tools/testing/selftests/drivers/net/ping.py b/tools/testing/selftests/drivers/net/ping.py index eb83e7b48797..93f4b411b378 100755 --- a/tools/testing/selftests/drivers/net/ping.py +++ b/tools/testing/selftests/drivers/net/ping.py @@ -1,49 +1,219 @@ #!/usr/bin/env python3 # SPDX-License-Identifier: GPL-2.0 +import os +import random, string, time from lib.py import ksft_run, ksft_exit -from lib.py import ksft_eq -from lib.py import NetDrvEpEnv +from lib.py import ksft_eq, KsftSkipEx, KsftFailEx +from lib.py import EthtoolFamily, NetDrvEpEnv from lib.py import bkg, cmd, wait_port_listen, rand_port +from lib.py import ethtool, ip +remote_ifname="" +no_sleep=False -def test_v4(cfg) -> None: +def _test_v4(cfg) -> None: cfg.require_v4() cmd(f"ping -c 1 -W0.5 {cfg.remote_v4}") cmd(f"ping -c 1 -W0.5 {cfg.v4}", host=cfg.remote) + cmd(f"ping -s 65000 -c 1 -W0.5 {cfg.remote_v4}") + cmd(f"ping -s 65000 -c 1 -W0.5 {cfg.v4}", host=cfg.remote) - -def test_v6(cfg) -> None: +def _test_v6(cfg) -> None: cfg.require_v6() - cmd(f"ping -c 1 -W0.5 {cfg.remote_v6}") - cmd(f"ping -c 1 -W0.5 {cfg.v6}", host=cfg.remote) - + cmd(f"ping -c 1 -W5 {cfg.remote_v6}") + cmd(f"ping -c 1 -W5 {cfg.v6}", host=cfg.remote) + cmd(f"ping -s 65000 -c 1 -W0.5 {cfg.remote_v6}") + cmd(f"ping -s 65000 -c 1 -W0.5 {cfg.v6}", host=cfg.remote) -def test_tcp(cfg) -> None: +def _test_tcp(cfg) -> None: cfg.require_cmd("socat", remote=True) port = rand_port() listen_cmd = f"socat -{cfg.addr_ipver} -t 2 -u TCP-LISTEN:{port},reuseport STDOUT" + test_string = ''.join(random.choice(string.ascii_lowercase) for _ in range(65536)) with bkg(listen_cmd, exit_wait=True) as nc: wait_port_listen(port) - cmd(f"echo ping | socat -t 2 -u STDIN TCP:{cfg.baddr}:{port}", + cmd(f"echo {test_string} | socat -t 2 -u STDIN TCP:{cfg.baddr}:{port}", shell=True, host=cfg.remote) - ksft_eq(nc.stdout.strip(), "ping") + ksft_eq(nc.stdout.strip(), test_string) + test_string = ''.join(random.choice(string.ascii_lowercase) for _ in range(65536)) with bkg(listen_cmd, host=cfg.remote, exit_wait=True) as nc: wait_port_listen(port, host=cfg.remote) - cmd(f"echo ping | socat -t 2 -u STDIN TCP:{cfg.remote_baddr}:{port}", shell=True) - ksft_eq(nc.stdout.strip(), "ping") - + cmd(f"echo {test_string} | socat -t 2 -u STDIN TCP:{cfg.remote_baddr}:{port}", shell=True) + ksft_eq(nc.stdout.strip(), test_string) + +def _set_offload_checksum(cfg, netnl, on) -> None: + try: + ethtool(f" -K {cfg.ifname} rx {on} tx {on} ") + except: + return + +def _set_xdp_generic_sb_on(cfg) -> None: + test_dir = os.path.dirname(os.path.realpath(__file__)) + prog = test_dir + "/../../net/lib/xdp_dummy.bpf.o" + cmd(f"ip link set dev {remote_ifname} mtu 1500", shell=True, host=cfg.remote) + cmd(f"ip link set dev {cfg.ifname} mtu 1500 xdpgeneric obj {prog} sec xdp", shell=True) + + if no_sleep != True: + time.sleep(10) + +def _set_xdp_generic_mb_on(cfg) -> None: + test_dir = os.path.dirname(os.path.realpath(__file__)) + prog = test_dir + "/../../net/lib/xdp_dummy.bpf.o" + cmd(f"ip link set dev {remote_ifname} mtu 9000", shell=True, host=cfg.remote) + ip("link set dev %s mtu 9000 xdpgeneric obj %s sec xdp.frags" % (cfg.ifname, prog)) + + if no_sleep != True: + time.sleep(10) + +def _set_xdp_native_sb_on(cfg) -> None: + test_dir = os.path.dirname(os.path.realpath(__file__)) + prog = test_dir + "/../../net/lib/xdp_dummy.bpf.o" + cmd(f"ip link set dev {remote_ifname} mtu 1500", shell=True, host=cfg.remote) + cmd(f"ip -j link set dev {cfg.ifname} mtu 1500 xdp obj {prog} sec xdp", shell=True) + xdp_info = ip("-d link show %s" % (cfg.ifname), json=True)[0] + if xdp_info['xdp']['mode'] != 1: + """ + If the interface doesn't support native-mode, it falls back to generic mode. + The mode value 1 is native and 2 is generic. + So it raises an exception if mode is not 1(native mode). + """ + raise KsftSkipEx('device does not support native-XDP') + + if no_sleep != True: + time.sleep(10) + +def _set_xdp_native_mb_on(cfg) -> None: + test_dir = os.path.dirname(os.path.realpath(__file__)) + prog = test_dir + "/../../net/lib/xdp_dummy.bpf.o" + cmd(f"ip link set dev {remote_ifname} mtu 9000", shell=True, host=cfg.remote) + try: + cmd(f"ip link set dev {cfg.ifname} mtu 9000 xdp obj {prog} sec xdp.frags", shell=True) + except Exception as e: + cmd(f"ip link set dev {remote_ifname} mtu 1500", shell=True, host=cfg.remote) + raise KsftSkipEx('device does not support native-multi-buffer XDP') + + if no_sleep != True: + time.sleep(10) + +def _set_xdp_offload_on(cfg) -> None: + test_dir = os.path.dirname(os.path.realpath(__file__)) + prog = test_dir + "/../../net/lib/xdp_dummy.bpf.o" + cmd(f"ip link set dev {cfg.ifname} mtu 1500", shell=True) + try: + cmd(f"ip link set dev {cfg.ifname} xdpoffload obj {prog} sec xdp", shell=True) + except Exception as e: + raise KsftSkipEx('device does not support offloaded XDP') + cmd(f"ip link set dev {remote_ifname} mtu 1500", shell=True, host=cfg.remote) + + if no_sleep != True: + time.sleep(10) + +def get_interface_info(cfg) -> None: + global remote_ifname + global no_sleep + + remote_info = cmd(f"ip -4 -o addr show to {cfg.remote_v4} | awk '{{print $2}}'", shell=True, host=cfg.remote).stdout + remote_ifname = remote_info.rstrip('\n') + if remote_ifname == "": + raise KsftFailEx('Can not get remote interface') + local_info = ip("-d link show %s" % (cfg.ifname), json=True)[0] + if 'parentbus' in local_info and local_info['parentbus'] == "netdevsim": + no_sleep=True + if 'linkinfo' in local_info and local_info['linkinfo']['info_kind'] == "veth": + no_sleep=True + +def set_interface_init(cfg) -> None: + cmd(f"ip link set dev {cfg.ifname} mtu 1500", shell=True) + cmd(f"ip link set dev {cfg.ifname} xdp off ", shell=True) + cmd(f"ip link set dev {cfg.ifname} xdpgeneric off ", shell=True) + cmd(f"ip link set dev {cfg.ifname} xdpoffload off", shell=True) + cmd(f"ip link set dev {remote_ifname} mtu 1500", shell=True, host=cfg.remote) + +def test_default(cfg, netnl) -> None: + _set_offload_checksum(cfg, netnl, "off") + _test_v4(cfg) + _test_v6(cfg) + _test_tcp(cfg) + _set_offload_checksum(cfg, netnl, "on") + _test_v4(cfg) + _test_v6(cfg) + _test_tcp(cfg) + +def test_xdp_generic_sb(cfg, netnl) -> None: + _set_xdp_generic_sb_on(cfg) + _set_offload_checksum(cfg, netnl, "off") + _test_v4(cfg) + _test_v6(cfg) + _test_tcp(cfg) + _set_offload_checksum(cfg, netnl, "on") + _test_v4(cfg) + _test_v6(cfg) + _test_tcp(cfg) + ip("link set dev %s xdpgeneric off" % cfg.ifname) + +def test_xdp_generic_mb(cfg, netnl) -> None: + _set_xdp_generic_mb_on(cfg) + _set_offload_checksum(cfg, netnl, "off") + _test_v4(cfg) + _test_v6(cfg) + _test_tcp(cfg) + _set_offload_checksum(cfg, netnl, "on") + _test_v4(cfg) + _test_v6(cfg) + _test_tcp(cfg) + ip("link set dev %s xdpgeneric off" % cfg.ifname) + +def test_xdp_native_sb(cfg, netnl) -> None: + _set_xdp_native_sb_on(cfg) + _set_offload_checksum(cfg, netnl, "off") + _test_v4(cfg) + _test_v6(cfg) + _test_tcp(cfg) + _set_offload_checksum(cfg, netnl, "on") + _test_v4(cfg) + _test_v6(cfg) + _test_tcp(cfg) + ip("link set dev %s xdp off" % cfg.ifname) + +def test_xdp_native_mb(cfg, netnl) -> None: + _set_xdp_native_mb_on(cfg) + _set_offload_checksum(cfg, netnl, "off") + _test_v4(cfg) + _test_v6(cfg) + _test_tcp(cfg) + _set_offload_checksum(cfg, netnl, "on") + _test_v4(cfg) + _test_v6(cfg) + _test_tcp(cfg) + ip("link set dev %s xdp off" % cfg.ifname) + +def test_xdp_offload(cfg, netnl) -> None: + _set_xdp_offload_on(cfg) + _test_v4(cfg) + _test_v6(cfg) + _test_tcp(cfg) + ip("link set dev %s xdpoffload off" % cfg.ifname) def main() -> None: with NetDrvEpEnv(__file__) as cfg: - ksft_run(globs=globals(), case_pfx={"test_"}, args=(cfg, )) + get_interface_info(cfg) + set_interface_init(cfg) + ksft_run([test_default, + test_xdp_generic_sb, + test_xdp_generic_mb, + test_xdp_native_sb, + test_xdp_native_mb, + test_xdp_offload], + args=(cfg, EthtoolFamily())) + set_interface_init(cfg) ksft_exit() diff --git a/tools/testing/selftests/net/lib/xdp_dummy.bpf.c b/tools/testing/selftests/net/lib/xdp_dummy.bpf.c index d988b2e0cee8..e73fab3edd9f 100644 --- a/tools/testing/selftests/net/lib/xdp_dummy.bpf.c +++ b/tools/testing/selftests/net/lib/xdp_dummy.bpf.c @@ -10,4 +10,10 @@ int xdp_dummy_prog(struct xdp_md *ctx) return XDP_PASS; } +SEC("xdp.frags") +int xdp_dummy_prog_frags(struct xdp_md *ctx) +{ + return XDP_PASS; +} + char _license[] SEC("license") = "GPL";