From nobody Mon Dec 1 22:04:09 2025 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.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 A0F0C2FE563 for ; Sun, 30 Nov 2025 23:35:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545736; cv=none; b=qKS5Q1WKDEI+EhRhchnAekEl20quKf00UQxKd7clxMzzjPwxNamJw+7+BTjduhYDxOIpxFo3WtpmzvBE2n0ZWb4F1aU7UXn/MQXtZANYfNT2by3alXyhVOKKG81hFYStRK1qoSNqJv6tJgYME9rEzAZ4HgSJOKSXOUAOi6P/dhg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545736; c=relaxed/simple; bh=J+v78DVUuvU5F3kifckIxv2vG5fH2TZFf9LLLr3M6jQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BXH5ZPBdp9s6p/1D5vBGc+A9GaJokpo+jmHDu//bnvGFdMqx3w8MDm4WWe4i+J5dLOdEOhRRUyEjczKKjjkIp/QY2lJAr1j3O8Qr5YZejITycvySF1vSX2AiG8/lPg/WAgDQ4cs101QZf606IY2tecWGt9wpoavHIwxJs3DAOsA= 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=S+se13Sj; arc=none smtp.client-ip=209.85.128.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="S+se13Sj" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-47775fb6cb4so23735375e9.0 for ; Sun, 30 Nov 2025 15:35:34 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764545733; x=1765150533; 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=CGfI5v2bo8QpS6mN8gMlhUgE+Lz+xF251MkehL1RpaY=; b=S+se13SjkHj/Mp9LCNMSncllJh85+8gmEePKyT9QQ1FeU1NvA4/hKKHhtgxeY22vuA RezFwgh7Zx6Tvg0ocqgegG0eczuKVtH2u3dBoZV0GE86hPg6BOGNtEX4DHQJVlSHniIr rNaablOfsG333wImhegHcAcvHj+KnTDJiw0aFsWHNStAn6oXX50ViBNQ4iMAIgLqaxOM AhuwWCzFBZSgZJw14DjgVoa8icC/ZLgZAGsgAa4oZdx/vRpTJksBJWpriR1ABkAVL3Gx rwo7hR9F5GiAGeEJBhr/wqfzTqitjKfSqWIjJdL0iShISoRwma0XU4o0vdhkOkjnmJVK E37A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764545733; x=1765150533; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=CGfI5v2bo8QpS6mN8gMlhUgE+Lz+xF251MkehL1RpaY=; b=mRypO30KyfwLotk7aBrzOF6QJtJ3LSk5WeTjEIpYgriKWoZBBb2+Bb2k2N4gGzymeq wvogvlnzlKX6+B1y0sJAIJPdGhbWfb4Kts/5Vs9MbWQL66pZsdwp7juoHMqUFQOVdDEF na+6AuVl1EJulDDrSEZR5SLHGibmw/ZxO5D/CdKME1p3n8KMkRk/+C6n7qu5+JfZI9/d r1y29ZkGy4C3QKOhGIQFl/UEram045fOvNVTuU+txxpGwxDpRRbCaVeaCFfxZhFRc7W4 4Dhkv5x2a8uJZ33LNjHOIXbKA9ybnEsnLndCpEAi4y/HMx3udHBtZGZmmayMMVhy7d+5 UzPQ== X-Forwarded-Encrypted: i=1; AJvYcCUNnGIPx9P65j6I1/fuDn8kRhlSyUbfwIaj1P3nILIwwDyWgCMhl+gO1kTdbdV4Z0TnGBjyeovZ+TzAtEI=@vger.kernel.org X-Gm-Message-State: AOJu0YymUbpgzFskqOvqQUQ0LQiDZZPSOk6M6KQcnJCnZxo3MC1kJj3I XdAV1Qks4v4//dQaUdbF81/A53qM+VFc+G8mcT1EP2/TrNA6MMcZivVr X-Gm-Gg: ASbGncsUjbRiGPGF6qWRrNRKsdjZ+KWjeGzwzvGEEbejSB1ubnrIUGvqUYvaam2wXNX EzsKCqEQvhkg4hmfLZUdhRiBkUTcMzKtdKzRL874475qejAC1r/XSJ5B+mTtFwGx4MHrLW1Ey0x y/wkIrWcj/T2sS+Bjsue9lU6tc2gadOeM/HVax8lFY6y810vgTN36k+j16qYx5pTmFnbdXi6n9e 9B0Rx58B32139+abDSXSZV0UxyLZA9vAA5cF/u6gLtUNZp/zzSAFsVxfDU3ceRaaepjR2+VM5A5 Pszycxx5eaK/bSoV6Kj/t/y7KdYmGUhyw+71rsIho/iUfZUUCk37k+dth4gv+OkdLdxn8yugKZ/ np3RAp25+NMJDXsfZ6ABU0xNPwBnvOU1HuG3GiKk5ahb8bozK5xueNphTTNs7jCXT7AuuLRIJ7K rMQDB3BVkBpQmcBdlS8GrqoDzDq0yHliv2QCmlipm68Tab3BRh85Kph++RWPXzNN0t61Sx8qS63 1+RexO1o69lB9lOgnWz9AglvdI= X-Google-Smtp-Source: AGHT+IF67CntAQ/arhcWo5ytqV99C28dV2Q49OsMgdQEXfIMhJP+Hcig8yH6oHJJ/T2ZRfd3/soE3A== X-Received: by 2002:a05:600c:c490:b0:477:b734:8c41 with SMTP id 5b1f17b1804b1-477c10c8596mr322154935e9.1.1764545732812; Sun, 30 Nov 2025 15:35:32 -0800 (PST) Received: from 127.mynet ([2a01:4b00:bd21:4f00:7cc6:d3ca:494:116c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-479040b3092sm142722075e9.1.2025.11.30.15.35.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Nov 2025 15:35:30 -0800 (PST) From: Pavel Begunkov To: netdev@vger.kernel.org Cc: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jonathan Corbet , Michael Chan , Pavan Chebbi , Andrew Lunn , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Ilias Apalodimas , Shuah Khan , Mina Almasry , Stanislav Fomichev , Pavel Begunkov , Yue Haibing , David Wei , Haiyue Wang , Jens Axboe , Joe Damato , Simon Horman , Vishwanath Seshagiri , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, io-uring@vger.kernel.org, dtatulea@nvidia.com Subject: [PATCH net-next v7 1/9] net: page pool: xa init with destroy on pp init Date: Sun, 30 Nov 2025 23:35:16 +0000 Message-ID: <02904c6d83dbe5cc1c671106a5c97bd93ab31006.1764542851.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: References: 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" The free_ptr_ring label path initialises ->dma_mapped xarray but doesn't destroy it in case of an error. That's not a real problem since init itself doesn't do anything requiring destruction, but still match it with xa_destroy() to silence warnings. Signed-off-by: Pavel Begunkov --- net/core/page_pool.c | 1 + 1 file changed, 1 insertion(+) diff --git a/net/core/page_pool.c b/net/core/page_pool.c index 1a5edec485f1..a085fd199ff0 100644 --- a/net/core/page_pool.c +++ b/net/core/page_pool.c @@ -307,6 +307,7 @@ static int page_pool_init(struct page_pool *pool, =20 free_ptr_ring: ptr_ring_cleanup(&pool->ring, NULL); + xa_destroy(&pool->dma_mapped); #ifdef CONFIG_PAGE_POOL_STATS if (!pool->system) free_percpu(pool->recycle_stats); --=20 2.52.0 From nobody Mon Dec 1 22:04:09 2025 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.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 5DDFA2FF160 for ; Sun, 30 Nov 2025 23:35:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545738; cv=none; b=ej22C1FMT3F2wtO8dTA1y2UQ3dT+ELtatZuym25mJzPZKJiYh41/XGli+kKhA7lDpxUbBmyc+1Vsfcnp508zN2aVgejC4rntuWHvgZZJwQaa0VfI877WNQvUPzjhMuCIxJvecL68Hfxn+vDLZ7wq3Boy3fd3mCNrbqZbZVelqrI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545738; c=relaxed/simple; bh=G7RQvwuA5HOESStkbO7E13FYoPystOeEJRkdlljNekE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=i4qhOY2akYtZTUYRIGZjv67spyZV1nYc5NDo2erpZOVB+ep+UM8Vwz+KztJB3I9vyskr2TAv70Yq7nLKINe7GFwuxdd8zBw5K6ubu01ZdBt372LEPgkxlJKAi4PH35LpscgwuGEWZt6J6cuAFcb4PjIdkg1PW3b1lVdWbB0vapE= 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=PWPJXlyG; arc=none smtp.client-ip=209.85.128.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="PWPJXlyG" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-47775fb6c56so31106875e9.1 for ; Sun, 30 Nov 2025 15:35:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764545735; x=1765150535; 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=sqQYwi6yKkW0pXFhK5Fhz7jwEEb4HUCqJfGCd/MpDPo=; b=PWPJXlyGt4wao7lV6oiZY0rxvEb8bgtplIE237q+H4mxDYxj3xg0vcLxj7XidXCpmU Lvi5QQfarmRv5UKCd7OviYxXSpVaYeXR6/4cBy1r+sYwURl6ydLsuBa3tNEqcwhranPO CbmBRJvmSsdsP52OcGlwC/xVB49PUQ+zUJoEDBLpDMVtS0ih6tlBIlk0zNNlxJDV9ioL P94dYAmPleF6O0lQM5syKuOR+kfsjbjiAx58dzpTzKKxRgW8pM5mLBQ+eRO8ofsFA0L8 UsL1T7fG9mJOsg/TwyUEdclaUtmt2tTbsPzNawTJPjJCvHgxbx/ZHi2JaRiCMG9PWtBF 5Mfg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764545735; x=1765150535; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=sqQYwi6yKkW0pXFhK5Fhz7jwEEb4HUCqJfGCd/MpDPo=; b=fwmYOoWj81WIwQhWcWMZoxR8l+EVEcAIcggkW34nhigEYhAVj+Vo3+hXmPDHGj2odP zezoBL1Tyn0typpqFK6aPBWa+PL9zefxveoJEUochb5+II4uBHYDjvrW0l6M2i+UXRB8 HQcm8CcqU7iSr1NjZjKoiy9EzjIwh5vYi6p5pbxsvzKm4LOOjf5zTcIqbBP32Ee1M4tG HRNGVplMKIyDjWwm8O4XhKeKHb5pNmmPxoAboT0WSwwAWXnpTmzKGdxgNaEYMFRC3TUA aCaBwauZzO8vrkOUbcHhbqiaeTTzRaS4uVyqoUnra8WL5RKO2GCa/4BpNAbMBmq4iPT3 WyVg== X-Forwarded-Encrypted: i=1; AJvYcCWg8y1YH6ShCO7x7kKwrNH9sSycYNbQu4zEQtLuLusVilkzYf1qUyMyctEXv2QT65EeJ4qtxlxtM02GdtU=@vger.kernel.org X-Gm-Message-State: AOJu0YzfLlfcBddVxZsOL//XvedwuvU+/ti8iEv7h84vqJJRk8nYrBRh X+rAQvzzZeyEGSOkLAU/Lj7VtPr4q0MxvqelnPv96+P1TnYkURz2jUET X-Gm-Gg: ASbGncvzcSEHP5DH2+bsVcU6jxFOf9Duo4Dmb7ooGTU0aQ9PwAMbeaMxWVuJPBmll4x VxynMWRyrM9LT8VoZOHiwNQ1ynnimjHGRdsKBsVuz4gekab0S4rWkdlx+zCahPO6SVoCEOS3/18 3b2VWs1yi4L/K3CUc+a3UyaNwHjsQDG5Vg56dLcowQlfQhe1XX9wvVYv6EmgNqytFP2R5Xc6y3T iSpd7v6AHs35IJ8fcTrLTFmDoMtphc8K/x3Tux5PhTjnL6JFkjE1XmMesx1gdPsSil3fqiEtVds c3qalVcBhEqUzgxfcp1my6wBPVZ/dH+HbgIlER1nTi1v3c+Ms6GiuRLPzckGsnUOiG44vC9g/fH 22074bOVl4RQDx9uKnOqNySb5rOcbTt9sSpyu35UlGuw6OE4UgTGQfU5tWrlwXKqvpRNhXmeN8X LTZd/DoiJRWeiqXnVZ5XHL5XorvlIqUkTJQqfb92XEO0/ufjDdb2j6MoJUKkAat/f10vCd0dBkK 2Uf90IWNYhfZFY5BLij40DiNSc= X-Google-Smtp-Source: AGHT+IHgav/tPp3nDxDwQbNFJXjlN5z5JlpJjaWPnlbmKTfJs2yUPwa5uXWlHjxmsi5Gji90OcciDA== X-Received: by 2002:a05:600c:1c1b:b0:471:14b1:da13 with SMTP id 5b1f17b1804b1-47904aebebdmr257224195e9.14.1764545734689; Sun, 30 Nov 2025 15:35:34 -0800 (PST) Received: from 127.mynet ([2a01:4b00:bd21:4f00:7cc6:d3ca:494:116c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-479040b3092sm142722075e9.1.2025.11.30.15.35.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Nov 2025 15:35:33 -0800 (PST) From: Pavel Begunkov To: netdev@vger.kernel.org Cc: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jonathan Corbet , Michael Chan , Pavan Chebbi , Andrew Lunn , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Ilias Apalodimas , Shuah Khan , Mina Almasry , Stanislav Fomichev , Pavel Begunkov , Yue Haibing , David Wei , Haiyue Wang , Jens Axboe , Joe Damato , Simon Horman , Vishwanath Seshagiri , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, io-uring@vger.kernel.org, dtatulea@nvidia.com, Stanislav Fomichev Subject: [PATCH net-next v7 2/9] net: page_pool: sanitise allocation order Date: Sun, 30 Nov 2025 23:35:17 +0000 Message-ID: <77ad83c1aec66cbd00e7b3952f74bc3b7a988150.1764542851.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: References: 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" We're going to give more control over rx buffer sizes to user space, and since we can't always rely on driver validation, let's sanitise it in page_pool_init() as well. Note that we only need to reject over MAX_PAGE_ORDER allocations for normal page pools, as current memory providers don't need to use the buddy allocator and must check the order on init.i Suggested-by: Stanislav Fomichev Reviewed-by: Mina Almasry Signed-off-by: Pavel Begunkov --- net/core/page_pool.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/net/core/page_pool.c b/net/core/page_pool.c index a085fd199ff0..265a729431bb 100644 --- a/net/core/page_pool.c +++ b/net/core/page_pool.c @@ -301,6 +301,9 @@ static int page_pool_init(struct page_pool *pool, } =20 static_branch_inc(&page_pool_mem_providers); + } else if (pool->p.order > MAX_PAGE_ORDER) { + err =3D -EINVAL; + goto free_ptr_ring; } =20 return 0; --=20 2.52.0 From nobody Mon Dec 1 22:04:09 2025 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (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 CD9272FF65A for ; Sun, 30 Nov 2025 23:35:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545739; cv=none; b=MfxIRZukzDs5tovJUDdmEmgXzdDw/yyno9nAcY4PjkezqeEYBFNXmh0jAhguPU8V1lr2YoAFxr9/1jwJSExIam8FkOqN8OzzIuBw5JQn7NRWeBdqt8t0H8WHy4kBhTc8DmcbziJwcUGpoYItEfk3ZyhUjcp4oK5wIEikZWCxVxA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545739; c=relaxed/simple; bh=LSh5hLuiJCxDRwJ+BQ+Xc7tCZE16QA/b770rYhc+vp8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LkIQhqJh43x4G4a5lhDQvxXW7vn6miXRCIFdgs8K4zQ3Ikhn033epdw7tB9ycPIsFjdk/lj05d2Fi+WRPy74Mc33atMCDAnIKjB+kOaS7xXnTBLNnxenKvFQuiEXxUUeg4LPydeS03K5kRXjg/ZWOCcnbedAkVLtSboD/YM+EEc= 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=D7UypCOO; arc=none smtp.client-ip=209.85.128.45 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="D7UypCOO" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-47778b23f64so19530275e9.0 for ; Sun, 30 Nov 2025 15:35:37 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764545736; x=1765150536; 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=BopLoWIhKj7xpDJExutQghL/d96/x+rVfP3p1ohtywE=; b=D7UypCOOix839eTbKC/dmhlH6EbPRl2Q9K5FTyuaos0ra5SfgnRH67yxhdXonRzNE1 JLm/05xwKtxykCoPmzkttHKzOmVki1Jk1KIITlrwiebCDzkATqj3aa0lBfnszDQIwT8i ct5CkJNOqMBUydrm89AS2BFiomYcBjCX2G3YsZ3MSuE3aq/ps+ZtYJQxcjULM/Z81xPm hqjkAzibMOr0aVfM9a0KkPmay+GuLD7jQddO38eBauV6wOpy2qkK/5B9RIqXSr/PB6RZ W0IjlPfXngCtYQbDJzdtD1CA18rqtwJrrgmy1LKiYd9iwF0gqqaZhlRZv5MoKAlOlV0a F4SQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764545736; x=1765150536; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=BopLoWIhKj7xpDJExutQghL/d96/x+rVfP3p1ohtywE=; b=Agjy/hLMGnsu431MFYFaA6056eabKwo1Nc3rF+Yh1zqh2Kq4W9jWSPkLwdqpktdctA 82QHWFyie1caPpW4of8FC+JiW62gxEkmwgqAq0b+UssF3kypn6wWyqF6tSOIkxRSIg0s sajEOA8q/G8SVN+CM/mJ1NnHDvkrX2kcouJfKF8wa2IUcvqJ934DquUNzxegOqHIUqTv 13HnioMhbDkwuANXhaLN56lPmO/NTVS37YeqgS2Xa93OnH7maV2O31a0pktOtIY8x5uC b7WnSuWy56L607kgWWQcPf2EM3PSqNi3Jqb/5A1hghS8sjO6GKhWM9mF3xxOjMzeOaae e/Lg== X-Forwarded-Encrypted: i=1; AJvYcCWo9OGPHu1I/Sb/lYEQPgaSnm7SjS8PGjFJOt4gh4pk5fP84+82br55ZHtJ0dKEc7yR8NOz+rLB1rpuPa4=@vger.kernel.org X-Gm-Message-State: AOJu0Yx1mIGq3PGZMiuSXP3I+4yZZUHdsltUQLf/FnkjGrkLgBLng/G3 L1i3Hfq9SpukZ+isRlMg4tShfa1KjQg1g8qywUz8lySCeNL3CHJwuD6i X-Gm-Gg: ASbGncsLSvRDbQS16AvLYi7s/AC1kctPzEg2d5SXtm9nYkFCRbJTqZ04UEzdYiqjB3T GKPQgMjATvUnlkcVf3ZPqkUDL1wVaHOGhM1BcFg4IH97Q2+6HRSJx1YQA4tSMVO37To+FULMeCp Qv6NtulTe+2MnBcHtus2j5uQnyBQtazfwj+TvrnJSVde8ZtFVLne1yhq5eK3B/dMvz7g8IvubZ8 iERxeqv7nBOGhOeUiAOaPKN8ml6UJ1ppqbAfoZ2DA86QFzaGF+saMCBDQOPuQQv6PHABhXW4gfv 1JXrTdZGXdS4K7GIqSpmgLMNh3Ny49SEwHtesbi8h4JtXXD/nrydkLW/1HuGIfflZyalfW8YrjI 95pB3nDcUwc9ACjUA0im1dzudMI7i5FWi37hh6ohF3HIj7FEZTlZJ4A8yUY4GaXj0r7y1Bor6l3 MfHay8ZuhZ1LR5gXJ8OT24wGaHzUbGT7mV5KZVtqj3dbmpFy/Uyqm8+LvOg5UFSghcg++P3ZGof 8dpm9v65REGdtfPZYg3uAEb0jY= X-Google-Smtp-Source: AGHT+IHISYLGMcAbCVZNiKeY1dtZPkbvCAz/q8vqp6c82/yUdHZQKIhPMrYnHbV51FKqG4IwK4u77g== X-Received: by 2002:a05:600c:5252:b0:477:582e:7a81 with SMTP id 5b1f17b1804b1-477c110328amr358728235e9.4.1764545736071; Sun, 30 Nov 2025 15:35:36 -0800 (PST) Received: from 127.mynet ([2a01:4b00:bd21:4f00:7cc6:d3ca:494:116c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-479040b3092sm142722075e9.1.2025.11.30.15.35.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Nov 2025 15:35:35 -0800 (PST) From: Pavel Begunkov To: netdev@vger.kernel.org Cc: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jonathan Corbet , Michael Chan , Pavan Chebbi , Andrew Lunn , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Ilias Apalodimas , Shuah Khan , Mina Almasry , Stanislav Fomichev , Pavel Begunkov , Yue Haibing , David Wei , Haiyue Wang , Jens Axboe , Joe Damato , Simon Horman , Vishwanath Seshagiri , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, io-uring@vger.kernel.org, dtatulea@nvidia.com Subject: [PATCH net-next v7 3/9] net: memzero mp params when closing a queue Date: Sun, 30 Nov 2025 23:35:18 +0000 Message-ID: <374b055a2119076d43336008817248854774668e.1764542851.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: References: 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" Instead of resetting memory provider parameters one by one in __net_mp_{open,close}_rxq, memzero the entire structure. It'll be used to extend the structure. Signed-off-by: Pavel Begunkov --- net/core/netdev_rx_queue.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/net/core/netdev_rx_queue.c b/net/core/netdev_rx_queue.c index c7d9341b7630..a0083f176a9c 100644 --- a/net/core/netdev_rx_queue.c +++ b/net/core/netdev_rx_queue.c @@ -139,10 +139,9 @@ int __net_mp_open_rxq(struct net_device *dev, unsigned= int rxq_idx, =20 rxq->mp_params =3D *p; ret =3D netdev_rx_queue_restart(dev, rxq_idx); - if (ret) { - rxq->mp_params.mp_ops =3D NULL; - rxq->mp_params.mp_priv =3D NULL; - } + if (ret) + memset(&rxq->mp_params, 0, sizeof(rxq->mp_params)); + return ret; } =20 @@ -179,8 +178,7 @@ void __net_mp_close_rxq(struct net_device *dev, unsigne= d int ifq_idx, rxq->mp_params.mp_priv !=3D old_p->mp_priv)) return; =20 - rxq->mp_params.mp_ops =3D NULL; - rxq->mp_params.mp_priv =3D NULL; + memset(&rxq->mp_params, 0, sizeof(rxq->mp_params)); err =3D netdev_rx_queue_restart(dev, ifq_idx); WARN_ON(err && err !=3D -ENETDOWN); } --=20 2.52.0 From nobody Mon Dec 1 22:04:09 2025 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (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 971DC2FFF81 for ; Sun, 30 Nov 2025 23:35:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545741; cv=none; b=ftqPHfINrO9o1f2EAxpmp7lYPB91g/Mv9BOgHNSKAMrjen/tjFsz4Yd7D4MtYB1C3sAlrQmC07HGguEHm5wqdijv16IpkZMxWu+8aOAxSOUxmzsKCRgL7NUekUE2VwIMjyv0oEtO3DZfVZFyCvTIUdtp40/AplSwHzZ5x0W2c/o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545741; c=relaxed/simple; bh=OGKzBuKu9HnGjv3V2KIOUMpBLQDNN5wbAGzT3ICtN0w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OI/NLvD8cfhgpXr/Gvw9pX/AOn1ivp5TmFkkhi9jyCZkXNq2OVAw0J7PAdyikCYPNIObvUKXXntwu4b1WmokqJcFJAJUucgpjNygMYoY+MQyw2BQT975zO6id4jFRnllQe4pVA/cGwP+DBtAfedibxVHWYfUTFGvPfTmL579NvU= 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=QOK7YvSz; arc=none smtp.client-ip=209.85.128.51 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="QOK7YvSz" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-4779ce2a624so34854725e9.2 for ; Sun, 30 Nov 2025 15:35:39 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764545738; x=1765150538; 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=Etzl3qXtEXxRUk5ZEMYr8GzSvCBjbQ/vWysP4cG19PU=; b=QOK7YvSzRpIM3bmocDTZSTJZ+AT8aIuEJ68zb/9IfM3EH8n+V3khm6fZ54vC6Yeg/d k27s32TTV9aqixkwBGJzPzJAgPR5m+Ln06/MJXEfNWwAP2xsMAPJaPngIyRIbYmUhSoF yhqSGo5Yw/mUTf1bO0IsrT1NapU8git1uef7ourInA0Zjb56atcsEq7D2tRD1syPvo7V ZQIZ84sAONRc5byf3x4m5Vfkgjx76wb/k3cuP5/N/nhBS7thhug/gLRKyVycUBxiSjOm 67tCPQtPsZinagA6YJzGB5kInMI1PRxiTCe886LOiKyTD5xeniNRwhInzQnPKeVL6ei/ ZwnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764545738; x=1765150538; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=Etzl3qXtEXxRUk5ZEMYr8GzSvCBjbQ/vWysP4cG19PU=; b=ExMLGZHxgou1RnkIHuwoXXu4q8tVqFbS/pLXOk9VugDe5Ufm6jfG3kaglqrXXvLkQ6 jPjmboSJzj+KVxSqwICVmJy5TYgZuVWtNil1ZqEVLYPSvh3GGs1XnnfT4bC+bt2VbiHR feK/HkgvBDOrFAqsQ6HVVJMXAXSIl8s9g/EGBi7T8CdbvrMPfT9dcekueUHunwJewPcx bNQHgZWsdkrMNZfLmP8Xu0k6C33eTY7GISHRQzlJWHxGbFYxH6kYXWrY+T/cNfclOx+z lKTG36NxT1AQ0KuqjXImIkvZrX5rI+hC6EQcX00uNbBO+i17uUkhA/wbOy/tWNdIe6DG QLQg== X-Forwarded-Encrypted: i=1; AJvYcCVfvyO1k2PjT7eGGnC7S5AYF+URY2ZP1z1ot2KLX0vurq0Kw9mtmAAtqLSJVztPUFDVfuKck3mmroK/G04=@vger.kernel.org X-Gm-Message-State: AOJu0YwXlRJ8mOhAXEt/Owkb4COL4RwtR70cGEAQM8ldH1413MeBU1x6 P5Th2KMUNhghxqjn25szuijBaBXLjjOMra6mIiW1Qbk8kzKA22Bw3TXb X-Gm-Gg: ASbGnct1og+6sy0C9V1Ruas1J6OxJRON0AzN6UthzjRe/r1nh7T44sO3WuheBqbaaG4 I3nc0YyORlrYPZfiFNkHxdkaKLfBEUzd7dQIZkisgNxBkOLRRgQQVDpw1UB/rL9gLTYlA4guV09 CBOl+DhtHBEvaJh/kB3QuASY41MCuzsIlsueuU0LAUkrn7L8IfstfhrSB42JKspoTrI1CoyJEtQ AwouqYdQSZy6gnshbnp8uOOhOKM7Yq49tGIq6+zfPxvmpTY5oLwL3bPSiPfYpgA4CBdNmQX503m J5Qz3ShwoFoI6IdNhI6xkpDefp0i7KVP+DfUBRdHidGmUWXxyhtmM/DSo8s9uWTh/0mYalwITN3 3zCxuOmYqzMJ+jk8SZF3HAPPUq5QD9Gov+qmolA7sI/AfqphuarKT4cFiurZkgYyOIb3Rap7zg2 HKETQ09woG6ywlCJEuOAwTbXl7kZq1dszRTdJgeLszb03aYmdKTqpcdtsighcXm4PvTkOsegLpV zyfy1fr1Y9NqaUb X-Google-Smtp-Source: AGHT+IGIUBkKFTjVVCw8JO88WO04GjOPBXSs8x48lo+BhVoIg3ql1cUd33a7wo+Dz7e5cUTvz/0ZMw== X-Received: by 2002:a05:600c:1c1b:b0:471:14b1:da13 with SMTP id 5b1f17b1804b1-47904aebebdmr257224895e9.14.1764545737736; Sun, 30 Nov 2025 15:35:37 -0800 (PST) Received: from 127.mynet ([2a01:4b00:bd21:4f00:7cc6:d3ca:494:116c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-479040b3092sm142722075e9.1.2025.11.30.15.35.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Nov 2025 15:35:36 -0800 (PST) From: Pavel Begunkov To: netdev@vger.kernel.org Cc: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jonathan Corbet , Michael Chan , Pavan Chebbi , Andrew Lunn , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Ilias Apalodimas , Shuah Khan , Mina Almasry , Stanislav Fomichev , Pavel Begunkov , Yue Haibing , David Wei , Haiyue Wang , Jens Axboe , Joe Damato , Simon Horman , Vishwanath Seshagiri , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, io-uring@vger.kernel.org, dtatulea@nvidia.com Subject: [PATCH net-next v7 4/9] net: let pp memory provider to specify rx buf len Date: Sun, 30 Nov 2025 23:35:19 +0000 Message-ID: <0364ec97cc65b7b7b7376b98438c2630fa2e003c.1764542851.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: References: 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" Allow memory providers to configure rx queues with a specific receive buffer length. Pass it in struct pp_memory_provider_params, which is copied into the queue, so it's preserved across queue restarts. It's an opt-in feature for drivers, which they can enable by setting NDO_QUEUE_RX_BUF_SIZE to their struct netdev_queue_mgmt_ops. Signed-off-by: Pavel Begunkov --- include/net/netdev_queues.h | 9 +++++++++ include/net/page_pool/types.h | 1 + net/core/netdev_rx_queue.c | 4 ++++ 3 files changed, 14 insertions(+) diff --git a/include/net/netdev_queues.h b/include/net/netdev_queues.h index cd00e0406cf4..45c1d198f5bf 100644 --- a/include/net/netdev_queues.h +++ b/include/net/netdev_queues.h @@ -111,6 +111,11 @@ void netdev_stat_queue_sum(struct net_device *netdev, int tx_start, int tx_end, struct netdev_queue_stats_tx *tx_sum); =20 +enum { + /* queue restart support custom rx buffer sizes */ + NDO_QUEUE_RX_BUF_SIZE =3D 0x1, +}; + /** * struct netdev_queue_mgmt_ops - netdev ops for queue management * @@ -130,6 +135,8 @@ void netdev_stat_queue_sum(struct net_device *netdev, * @ndo_queue_get_dma_dev: Get dma device for zero-copy operations to be u= sed * for this queue. Return NULL on error. * + * @supported_params: bitmask of supported features, see NDO_QUEUE_* + * * Note that @ndo_queue_mem_alloc and @ndo_queue_mem_free may be called wh= ile * the interface is closed. @ndo_queue_start and @ndo_queue_stop will only * be called for an interface which is open. @@ -149,6 +156,8 @@ struct netdev_queue_mgmt_ops { int idx); struct device * (*ndo_queue_get_dma_dev)(struct net_device *dev, int idx); + + unsigned int supported_params; }; =20 bool netif_rxq_has_unreadable_mp(struct net_device *dev, int idx); diff --git a/include/net/page_pool/types.h b/include/net/page_pool/types.h index 1509a536cb85..be74e4aec7b5 100644 --- a/include/net/page_pool/types.h +++ b/include/net/page_pool/types.h @@ -161,6 +161,7 @@ struct memory_provider_ops; struct pp_memory_provider_params { void *mp_priv; const struct memory_provider_ops *mp_ops; + u32 rx_buf_len; }; =20 struct page_pool { diff --git a/net/core/netdev_rx_queue.c b/net/core/netdev_rx_queue.c index a0083f176a9c..09d6f97e910e 100644 --- a/net/core/netdev_rx_queue.c +++ b/net/core/netdev_rx_queue.c @@ -29,6 +29,10 @@ int netdev_rx_queue_restart(struct net_device *dev, unsi= gned int rxq_idx) !qops->ndo_queue_mem_alloc || !qops->ndo_queue_start) return -EOPNOTSUPP; =20 + if (!(qops->supported_params & NDO_QUEUE_RX_BUF_SIZE) && + rxq->mp_params.rx_buf_len) + return -EOPNOTSUPP; + netdev_assert_locked(dev); =20 new_mem =3D kvzalloc(qops->ndo_queue_mem_size, GFP_KERNEL); --=20 2.52.0 From nobody Mon Dec 1 22:04:09 2025 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.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 2DF9B3002C8 for ; Sun, 30 Nov 2025 23:35:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545745; cv=none; b=FqGbocH9ZTNukJnVciIfxqKPOVFXhPwCEoPQW9YeqL11gYA49APA8Mf/cmFxrwWUdmr6N9FlDqgxDJKQsgdjphRnWHr2ODRkDJ7vtObt1hLHd1MNObLMeH5vXn2VDwwMjIpp6Szmk7uMCUX/AvhPSi1F+1pgvbHmuWCIxuTmobY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545745; c=relaxed/simple; bh=DADAJ7mYPolx1XHOGjWWt4HhdgyF0N3s1YEOI+3uj4E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=U5rtd0BTqeqoLQ0B3FWrv3v8GnA26R3Y7U3S8e1UFV3cOvwwiphUKpSNIaHQaiwNmnt02tHe/OMxRjjTn0wMXt+DxRdFcUkyRixisMrxjj/LbDGk0vCv2/T2WE4cGkIIGY04w5USmhCJHSWTYrMN0z8QvjgFfpOYHYhMEqOD4c4= 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=eTmnmn6s; arc=none smtp.client-ip=209.85.128.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="eTmnmn6s" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-477a2ab455fso37851505e9.3 for ; Sun, 30 Nov 2025 15:35:41 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764545739; x=1765150539; 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=6sP54dh+F6PIs0vyhovcn5h3b0YQGVwBUXh1fM4Mmss=; b=eTmnmn6sQNgUuhv0hip/VQ022ONRcb6/F46pCi+6fBhA4pqvEKmzonQEBf6Y7A1dMn h7uJ0kvl7/wUnDZu9uVZ5ISKqwACP28bdCJxqIABi/Yn1uxXpNnxYJqa+ENleIEQn9QC mVPYqX7t9Nd0BCLKpOBrv4gLEMrmALcNSFBS2+wTisWwZozHUOJclQxNPBFwZTZP+AL5 jl/3kDlAP447rhvq8h8aLNhDsih8WyanmrbKxVRuK1SXTs1mVj+fF0a4TbF4q2pohEOm 7bW6uXQERtg5iFQo3jdertqvME8uvEOfb9tfKDbfjVLljgQhrDGniB9b58YtSl0L344d FTag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764545739; x=1765150539; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=6sP54dh+F6PIs0vyhovcn5h3b0YQGVwBUXh1fM4Mmss=; b=CkW97UNmElx0TRFnODzRopQIgwxjXAxyH/fXP5UrSUkxOvJ9yOLKT6q+QIHafR1fi7 gtGfj8Q58yoMsyNmlAD1ZEDfWJTW1QRkev3sPgKwBcFSSnsJ6b+cxvCzEr356lkHCe9w nCjr9LWZivqEGTqbgsRLCC5wPxcHVdq+/siqzfYvVpy6EyDBFh1dNxKxN5USA5mm78jt F3nIa5chVKMahjsE6Ratw1YZ1te5Fhj750eZV5KP3cBiilH43gsV65d7qnKSkKxMnVhs l7sLCgoE27ZsJH94Q0N/XaO767ZML5Ir8NjzRn5ZUjXSWdA/jl5dC5VcEmVkaCZOetMi /E/Q== X-Forwarded-Encrypted: i=1; AJvYcCUNQN7qa1he7O56M8sDvVbGZXpMmJF8JQCOg5+po+EEK0O8kPfXNZx9n5nLuIR8aNkmjBxSh2bxyobG490=@vger.kernel.org X-Gm-Message-State: AOJu0Yyz8gCEf8a1/bJgkYCI3GXb0Psj1o/6O4MygzuhkxM88lBVyrM7 5AONHxy96tDM5yW8q2imYXZ7yhdpbrtgfW6sES3SPOto1G4ts6mi61/+ X-Gm-Gg: ASbGncuZUF8vX21MOUs/meLIByPDO/ZwA/nMKBvraJluXAHgYqdPoIbf5RCQvmhkplL LJh91dz0Af7c1NhRvO9w00q/BWaXz+/DlQaA5HCXzEh201GuSyfNxvXkZ4lJc2MSduLT4FWEsmY YCluzawJGHEkP3l4D5QcjrRu4PWqeEoRxUl+H3cfdNncWQSrHU/URgNL3vubqsu8ymqK60fjiIC 6iTibxY5S3XOvBQpXFXzwlgQwYIaWob0B+niq+M7Fduy0pTMCzlAsbl6czmB0G14nDgidLF41jn V3Bz9FFWxN899d5AtTqIyD2tAl/PAz5UpZFp+I63bIEL7tqzG+bOH24y5iNnhuOEsp2hfhIvbFy b8Gg8VjfU9+2QM6OHDP+EytzJYYrUnGGG2oD4Up4ddENr5N31QOxI9mM/qiwiG55/OsCBDtak2z NNvnF/EcmhiX/9OW+XQq64GR9Xz2PENDMTIf3kSg+CSUxQVYtt5HtLQmKKer/ex/5A5lE/lSgnT WjtlG2J8zGNYs0x X-Google-Smtp-Source: AGHT+IFDTwEX3gNCDQ9kOhIXuTo1nTeuDb/alg6Ejs1hp+3N0DW7G41hHnD0oaZ+TBkyVu5TSXSR4Q== X-Received: by 2002:a05:600c:1ca5:b0:475:dde5:d91b with SMTP id 5b1f17b1804b1-477c1115ff6mr432598415e9.17.1764545739253; Sun, 30 Nov 2025 15:35:39 -0800 (PST) Received: from 127.mynet ([2a01:4b00:bd21:4f00:7cc6:d3ca:494:116c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-479040b3092sm142722075e9.1.2025.11.30.15.35.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Nov 2025 15:35:38 -0800 (PST) From: Pavel Begunkov To: netdev@vger.kernel.org Cc: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jonathan Corbet , Michael Chan , Pavan Chebbi , Andrew Lunn , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Ilias Apalodimas , Shuah Khan , Mina Almasry , Stanislav Fomichev , Pavel Begunkov , Yue Haibing , David Wei , Haiyue Wang , Jens Axboe , Joe Damato , Simon Horman , Vishwanath Seshagiri , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, io-uring@vger.kernel.org, dtatulea@nvidia.com Subject: [PATCH net-next v7 5/9] eth: bnxt: store rx buffer size per queue Date: Sun, 30 Nov 2025 23:35:20 +0000 Message-ID: X-Mailer: git-send-email 2.52.0 In-Reply-To: References: 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" Instead of using a constant buffer length, allow configuring the size for each queue separately. There is no way to change the length yet, and it'll be passed from memory providers in a later patch. Suggested-by: Jakub Kicinski Signed-off-by: Pavel Begunkov --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 56 +++++++++++-------- drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 + drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 6 +- drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h | 2 +- 4 files changed, 38 insertions(+), 27 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index d17d0ea89c36..f4c2ec243e9a 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -905,7 +905,7 @@ static void bnxt_tx_int(struct bnxt *bp, struct bnxt_na= pi *bnapi, int budget) =20 static bool bnxt_separate_head_pool(struct bnxt_rx_ring_info *rxr) { - return rxr->need_head_pool || PAGE_SIZE > BNXT_RX_PAGE_SIZE; + return rxr->need_head_pool || rxr->rx_page_size < PAGE_SIZE; } =20 static struct page *__bnxt_alloc_rx_page(struct bnxt *bp, dma_addr_t *mapp= ing, @@ -915,9 +915,9 @@ static struct page *__bnxt_alloc_rx_page(struct bnxt *b= p, dma_addr_t *mapping, { struct page *page; =20 - if (PAGE_SIZE > BNXT_RX_PAGE_SIZE) { + if (rxr->rx_page_size < PAGE_SIZE) { page =3D page_pool_dev_alloc_frag(rxr->page_pool, offset, - BNXT_RX_PAGE_SIZE); + rxr->rx_page_size); } else { page =3D page_pool_dev_alloc_pages(rxr->page_pool); *offset =3D 0; @@ -936,8 +936,9 @@ static netmem_ref __bnxt_alloc_rx_netmem(struct bnxt *b= p, dma_addr_t *mapping, { netmem_ref netmem; =20 - if (PAGE_SIZE > BNXT_RX_PAGE_SIZE) { - netmem =3D page_pool_alloc_frag_netmem(rxr->page_pool, offset, BNXT_RX_P= AGE_SIZE, gfp); + if (rxr->rx_page_size < PAGE_SIZE) { + netmem =3D page_pool_alloc_frag_netmem(rxr->page_pool, offset, + rxr->rx_page_size, gfp); } else { netmem =3D page_pool_alloc_netmems(rxr->page_pool, gfp); *offset =3D 0; @@ -1155,9 +1156,9 @@ static struct sk_buff *bnxt_rx_multi_page_skb(struct = bnxt *bp, return NULL; } dma_addr -=3D bp->rx_dma_offset; - dma_sync_single_for_cpu(&bp->pdev->dev, dma_addr, BNXT_RX_PAGE_SIZE, + dma_sync_single_for_cpu(&bp->pdev->dev, dma_addr, rxr->rx_page_size, bp->rx_dir); - skb =3D napi_build_skb(data_ptr - bp->rx_offset, BNXT_RX_PAGE_SIZE); + skb =3D napi_build_skb(data_ptr - bp->rx_offset, rxr->rx_page_size); if (!skb) { page_pool_recycle_direct(rxr->page_pool, page); return NULL; @@ -1189,7 +1190,7 @@ static struct sk_buff *bnxt_rx_page_skb(struct bnxt *= bp, return NULL; } dma_addr -=3D bp->rx_dma_offset; - dma_sync_single_for_cpu(&bp->pdev->dev, dma_addr, BNXT_RX_PAGE_SIZE, + dma_sync_single_for_cpu(&bp->pdev->dev, dma_addr, rxr->rx_page_size, bp->rx_dir); =20 if (unlikely(!payload)) @@ -1203,7 +1204,7 @@ static struct sk_buff *bnxt_rx_page_skb(struct bnxt *= bp, =20 skb_mark_for_recycle(skb); off =3D (void *)data_ptr - page_address(page); - skb_add_rx_frag(skb, 0, page, off, len, BNXT_RX_PAGE_SIZE); + skb_add_rx_frag(skb, 0, page, off, len, rxr->rx_page_size); memcpy(skb->data - NET_IP_ALIGN, data_ptr - NET_IP_ALIGN, payload + NET_IP_ALIGN); =20 @@ -1288,7 +1289,7 @@ static u32 __bnxt_rx_agg_netmems(struct bnxt *bp, if (skb) { skb_add_rx_frag_netmem(skb, i, cons_rx_buf->netmem, cons_rx_buf->offset, - frag_len, BNXT_RX_PAGE_SIZE); + frag_len, rxr->rx_page_size); } else { skb_frag_t *frag =3D &shinfo->frags[i]; =20 @@ -1313,7 +1314,7 @@ static u32 __bnxt_rx_agg_netmems(struct bnxt *bp, if (skb) { skb->len -=3D frag_len; skb->data_len -=3D frag_len; - skb->truesize -=3D BNXT_RX_PAGE_SIZE; + skb->truesize -=3D rxr->rx_page_size; } =20 --shinfo->nr_frags; @@ -1328,7 +1329,7 @@ static u32 __bnxt_rx_agg_netmems(struct bnxt *bp, } =20 page_pool_dma_sync_netmem_for_cpu(rxr->page_pool, netmem, 0, - BNXT_RX_PAGE_SIZE); + rxr->rx_page_size); =20 total_frag_len +=3D frag_len; prod =3D NEXT_RX_AGG(prod); @@ -2281,8 +2282,7 @@ static int bnxt_rx_pkt(struct bnxt *bp, struct bnxt_c= p_ring_info *cpr, if (!skb) goto oom_next_rx; } else { - skb =3D bnxt_xdp_build_skb(bp, skb, agg_bufs, - rxr->page_pool, &xdp); + skb =3D bnxt_xdp_build_skb(bp, skb, agg_bufs, rxr, &xdp); if (!skb) { /* we should be able to free the old skb here */ bnxt_xdp_buff_frags_free(rxr, &xdp); @@ -3828,11 +3828,13 @@ static int bnxt_alloc_rx_page_pool(struct bnxt *bp, pp.pool_size =3D bp->rx_agg_ring_size / agg_size_fac; if (BNXT_RX_PAGE_MODE(bp)) pp.pool_size +=3D bp->rx_ring_size / rx_size_fac; + + pp.order =3D get_order(rxr->rx_page_size); pp.nid =3D numa_node; pp.netdev =3D bp->dev; pp.dev =3D &bp->pdev->dev; pp.dma_dir =3D bp->rx_dir; - pp.max_len =3D PAGE_SIZE; + pp.max_len =3D PAGE_SIZE << pp.order; pp.flags =3D PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV | PP_FLAG_ALLOW_UNREADABLE_NETMEM; pp.queue_idx =3D rxr->bnapi->index; @@ -3843,7 +3845,10 @@ static int bnxt_alloc_rx_page_pool(struct bnxt *bp, rxr->page_pool =3D pool; =20 rxr->need_head_pool =3D page_pool_is_unreadable(pool); + rxr->need_head_pool |=3D !!pp.order; if (bnxt_separate_head_pool(rxr)) { + pp.order =3D 0; + pp.max_len =3D PAGE_SIZE; pp.pool_size =3D min(bp->rx_ring_size / rx_size_fac, 1024); pp.flags =3D PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV; pool =3D page_pool_create(&pp); @@ -4319,6 +4324,8 @@ static void bnxt_init_ring_struct(struct bnxt *bp) if (!rxr) goto skip_rx; =20 + rxr->rx_page_size =3D BNXT_RX_PAGE_SIZE; + ring =3D &rxr->rx_ring_struct; rmem =3D &ring->ring_mem; rmem->nr_pages =3D bp->rx_nr_pages; @@ -4478,7 +4485,7 @@ static void bnxt_init_one_rx_agg_ring_rxbd(struct bnx= t *bp, ring =3D &rxr->rx_agg_ring_struct; ring->fw_ring_id =3D INVALID_HW_RING_ID; if ((bp->flags & BNXT_FLAG_AGG_RINGS)) { - type =3D ((u32)BNXT_RX_PAGE_SIZE << RX_BD_LEN_SHIFT) | + type =3D ((u32)(u32)rxr->rx_page_size << RX_BD_LEN_SHIFT) | RX_BD_TYPE_RX_AGG_BD; =20 /* On P7, setting EOP will cause the chip to disable @@ -7056,6 +7063,7 @@ static void bnxt_hwrm_ring_grp_free(struct bnxt *bp) =20 static void bnxt_set_rx_ring_params_p5(struct bnxt *bp, u32 ring_type, struct hwrm_ring_alloc_input *req, + struct bnxt_rx_ring_info *rxr, struct bnxt_ring_struct *ring) { struct bnxt_ring_grp_info *grp_info =3D &bp->grp_info[ring->grp_idx]; @@ -7065,7 +7073,7 @@ static void bnxt_set_rx_ring_params_p5(struct bnxt *b= p, u32 ring_type, if (ring_type =3D=3D HWRM_RING_ALLOC_AGG) { req->ring_type =3D RING_ALLOC_REQ_RING_TYPE_RX_AGG; req->rx_ring_id =3D cpu_to_le16(grp_info->rx_fw_ring_id); - req->rx_buf_size =3D cpu_to_le16(BNXT_RX_PAGE_SIZE); + req->rx_buf_size =3D cpu_to_le16(rxr->rx_page_size); enables |=3D RING_ALLOC_REQ_ENABLES_RX_RING_ID_VALID; } else { req->rx_buf_size =3D cpu_to_le16(bp->rx_buf_use_size); @@ -7079,6 +7087,7 @@ static void bnxt_set_rx_ring_params_p5(struct bnxt *b= p, u32 ring_type, } =20 static int hwrm_ring_alloc_send_msg(struct bnxt *bp, + struct bnxt_rx_ring_info *rxr, struct bnxt_ring_struct *ring, u32 ring_type, u32 map_index) { @@ -7135,7 +7144,8 @@ static int hwrm_ring_alloc_send_msg(struct bnxt *bp, cpu_to_le32(bp->rx_ring_mask + 1) : cpu_to_le32(bp->rx_agg_ring_mask + 1); if (bp->flags & BNXT_FLAG_CHIP_P5_PLUS) - bnxt_set_rx_ring_params_p5(bp, ring_type, req, ring); + bnxt_set_rx_ring_params_p5(bp, ring_type, req, + rxr, ring); break; case HWRM_RING_ALLOC_CMPL: req->ring_type =3D RING_ALLOC_REQ_RING_TYPE_L2_CMPL; @@ -7283,7 +7293,7 @@ static int bnxt_hwrm_rx_ring_alloc(struct bnxt *bp, u32 map_idx =3D bnapi->index; int rc; =20 - rc =3D hwrm_ring_alloc_send_msg(bp, ring, type, map_idx); + rc =3D hwrm_ring_alloc_send_msg(bp, rxr, ring, type, map_idx); if (rc) return rc; =20 @@ -7303,7 +7313,7 @@ static int bnxt_hwrm_rx_agg_ring_alloc(struct bnxt *b= p, int rc; =20 map_idx =3D grp_idx + bp->rx_nr_rings; - rc =3D hwrm_ring_alloc_send_msg(bp, ring, type, map_idx); + rc =3D hwrm_ring_alloc_send_msg(bp, rxr, ring, type, map_idx); if (rc) return rc; =20 @@ -7327,7 +7337,7 @@ static int bnxt_hwrm_cp_ring_alloc_p5(struct bnxt *bp, =20 ring =3D &cpr->cp_ring_struct; ring->handle =3D BNXT_SET_NQ_HDL(cpr); - rc =3D hwrm_ring_alloc_send_msg(bp, ring, type, map_idx); + rc =3D hwrm_ring_alloc_send_msg(bp, NULL, ring, type, map_idx); if (rc) return rc; bnxt_set_db(bp, &cpr->cp_db, type, map_idx, ring->fw_ring_id); @@ -7342,7 +7352,7 @@ static int bnxt_hwrm_tx_ring_alloc(struct bnxt *bp, const u32 type =3D HWRM_RING_ALLOC_TX; int rc; =20 - rc =3D hwrm_ring_alloc_send_msg(bp, ring, type, tx_idx); + rc =3D hwrm_ring_alloc_send_msg(bp, NULL, ring, type, tx_idx); if (rc) return rc; bnxt_set_db(bp, &txr->tx_db, type, tx_idx, ring->fw_ring_id); @@ -7368,7 +7378,7 @@ static int bnxt_hwrm_ring_alloc(struct bnxt *bp) =20 vector =3D bp->irq_tbl[map_idx].vector; disable_irq_nosync(vector); - rc =3D hwrm_ring_alloc_send_msg(bp, ring, type, map_idx); + rc =3D hwrm_ring_alloc_send_msg(bp, NULL, ring, type, map_idx); if (rc) { enable_irq(vector); goto err_out; diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethern= et/broadcom/bnxt/bnxt.h index f5f07a7e6b29..4c880a9fba92 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h @@ -1107,6 +1107,7 @@ struct bnxt_rx_ring_info { =20 unsigned long *rx_agg_bmap; u16 rx_agg_bmap_size; + u16 rx_page_size; bool need_head_pool; =20 dma_addr_t rx_desc_mapping[MAX_RX_PAGES]; diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c b/drivers/net/et= hernet/broadcom/bnxt/bnxt_xdp.c index 3e77a96e5a3e..619235b151a4 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c @@ -183,7 +183,7 @@ void bnxt_xdp_buff_init(struct bnxt *bp, struct bnxt_rx= _ring_info *rxr, u16 cons, u8 *data_ptr, unsigned int len, struct xdp_buff *xdp) { - u32 buflen =3D BNXT_RX_PAGE_SIZE; + u32 buflen =3D rxr->rx_page_size; struct bnxt_sw_rx_bd *rx_buf; struct pci_dev *pdev; dma_addr_t mapping; @@ -461,7 +461,7 @@ int bnxt_xdp(struct net_device *dev, struct netdev_bpf = *xdp) =20 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 bnxt_rx_ring_info *rxr, struct xdp_buff *xdp) { struct skb_shared_info *sinfo =3D xdp_get_shared_info_from_buff(xdp); =20 @@ -469,7 +469,7 @@ bnxt_xdp_build_skb(struct bnxt *bp, struct sk_buff *skb= , u8 num_frags, return NULL; =20 xdp_update_skb_frags_info(skb, num_frags, sinfo->xdp_frags_size, - BNXT_RX_PAGE_SIZE * num_frags, + rxr->rx_page_size * num_frags, xdp_buff_get_skb_flags(xdp)); return skb; } diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h b/drivers/net/et= hernet/broadcom/bnxt/bnxt_xdp.h index 220285e190fc..8933a0dec09a 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.h @@ -32,6 +32,6 @@ void bnxt_xdp_buff_init(struct bnxt *bp, struct bnxt_rx_r= ing_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, + u8 num_frags, struct bnxt_rx_ring_info *rxr, struct xdp_buff *xdp); #endif --=20 2.52.0 From nobody Mon Dec 1 22:04:09 2025 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (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 55B69301464 for ; Sun, 30 Nov 2025 23:35:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545745; cv=none; b=cZ3Gatz5m2rB65cJNdrD0sY1cV/HcoXskbvy2tF2Bmex1gpOWtpyCkAHACwzStUF+c+RYYOH9J/BWOzTOXH+ULzU6hGecXCGgpPzfyQ0X4hBg/uxc3woOJeuJXdl4dXKrGZvgcDa46dyJN9kZaK4vI0uXJsFlbr9XwI305nWtLY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545745; c=relaxed/simple; bh=o4iyw2832atNMAZQImPFBGA5yCK+ZgPjuVFT1OuNVO4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oefGenBKtabUugelVkBO4VEO7gLuaI7Ly2aeErBjuukauBdEN4ORge2GjMrYZZkOx/OwkSy8I7hU3GoFkuV5a6NbWktqb2Jv5vO6smBKqBPMxi+Cy/KwGMsRtJAvFano7DhHMf7y58NysnGT/dUgQ7lV2p5mZPnNcCk7ZZjqEWI= 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=VaXsnjVu; arc=none smtp.client-ip=209.85.128.45 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="VaXsnjVu" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-4775ae77516so36805305e9.1 for ; Sun, 30 Nov 2025 15:35:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764545742; x=1765150542; 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=WQMylrLW4Im9C3RrLyVskL4uzKLnQ4lYGDfbJ+ntA2k=; b=VaXsnjVufNs3gclDiScMqSFHNBjJVUDmV81FXsfFlmxopyAqW5eDl8ll1a/2R3De9B Rp4YRozymaxW3NV70+Gvvr2t6WdvDZlA8THrJ3tUp7Bc7JoK1xSGdUgUxbSZkxbtOBi2 yIUdh5zzbIYcvfLhKgc6B+ltCaNIOsxUsyZhDibKKENqENs5EEOHjAfj0APfKj8Rw2HL zYbzTZg7CWmWsOKMBVkohX1FOVMhM2qeVDEz3GU2DYNkqjO9NdySbyDvpsb9yp0YnAKe eE9sDC0B02Q4cUSHHZnIoM+3YPVuupTYV30DeabL4z4b30epxpDoDfKKl5eYgID8dzdy yQKQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764545742; x=1765150542; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=WQMylrLW4Im9C3RrLyVskL4uzKLnQ4lYGDfbJ+ntA2k=; b=Da8yGX0dJKwV7F8Fh8lVayUvcTPkLXJITg0gGV9jQUmkjSQDcoSUecK/pH/2RVW5hf Z8bWKgTHvgnGAFZ1GSm7fEMqj3M7n1OusnjJwJ5UyNP/341DN4EN5E3awt9PFRxwQ60v vq931StPal9kf5k6AQ8J3PDtth4ny7Rh/gXRlezgRg3r1UGsivGhqtq/j4icFJlN52Sk tP/jjLjgISD2RFzhrlVcyAceBvlSsWM29wlIgYHrT+yxj30x9WmsU6kkfot/MB4kHR5j QwbUFZwJneKBNoOzXL2zwtlFwmP31OeH2x/7Btc6Zq/CMlsCK8mb6SyWnu6pWkND9h15 yq8A== X-Forwarded-Encrypted: i=1; AJvYcCVO9Qq1SgwZGAD99sds0fRnvfpveuXIWuFDoEr9j7Vu2ewVXhlykHozOBtMEa1/hqq+1dYmN7EVv9aWmYg=@vger.kernel.org X-Gm-Message-State: AOJu0Yz+2EshH9KEhPMSHYnjoRcmBTbkTcW44j5HT8yeDOJ9DZ9HzFVK n5sJD7QU+Psk2m5ZS6tFrgOUPWwaLPPs1+PxS0t7pR3Im29f5hJrHrUx X-Gm-Gg: ASbGnctZ/VvDnxAtXzoIUjmUlhVVrv0STBN4RcqTJRV3nBlYIl4kc1H64Tcj0F9wKlf kjKC64Dsblv3PGLPkgL/5n7pm8HuCUjhwI1A/t234slJo4AHaWAp3p71F4AuatEKhFrIy9dnIOA e7eEH1XJN8tg01cWX3m1mVNFxhdn8nJi1zkUyepo90WhOPI0hQ+hib+ly3p53Leiw+QcIsMrOqQ KNgrFQ3kh34oMU0L7spbpJJge6NDlm+DdwFkGw3QedjcGpzcCaI7Gs1Pdx09WQFqKCYWsMwbBje y2ydzovuQVJAU+BkUAv3aS09s6Xvx+4R5ng4lfIHOBq0vjE89RarUlCILeCdkGMtAIxKWSopNYo rlg5EZqnVtchfVTAL/5kAwwxtkOfyp2DAtpQR3oVhZH44zVrth3K8OSdZaFsN1FqSPrbtl/Xr3r jg2SNk2O9FVKhL1IsZI5VuV4sEexny13Cb7qqvfOFjgiek+HIyyXNhkRlkXW+kWWml3tx5VqY7O YlgTHsEcr/ptTUY X-Google-Smtp-Source: AGHT+IFRNy69yAJEtLTkHqjePuEbcPuedCzCBZDYARz00zxMJbUrkfp5Acqq1qnoxF/x8wIlVCZ83w== X-Received: by 2002:a05:600c:1c29:b0:477:639d:bca2 with SMTP id 5b1f17b1804b1-477c10c85e2mr406364115e9.4.1764545741617; Sun, 30 Nov 2025 15:35:41 -0800 (PST) Received: from 127.mynet ([2a01:4b00:bd21:4f00:7cc6:d3ca:494:116c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-479040b3092sm142722075e9.1.2025.11.30.15.35.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Nov 2025 15:35:39 -0800 (PST) From: Pavel Begunkov To: netdev@vger.kernel.org Cc: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jonathan Corbet , Michael Chan , Pavan Chebbi , Andrew Lunn , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Ilias Apalodimas , Shuah Khan , Mina Almasry , Stanislav Fomichev , Pavel Begunkov , Yue Haibing , David Wei , Haiyue Wang , Jens Axboe , Joe Damato , Simon Horman , Vishwanath Seshagiri , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, io-uring@vger.kernel.org, dtatulea@nvidia.com Subject: [PATCH net-next v7 6/9] eth: bnxt: adjust the fill level of agg queues with larger buffers Date: Sun, 30 Nov 2025 23:35:21 +0000 Message-ID: X-Mailer: git-send-email 2.52.0 In-Reply-To: References: 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" From: Jakub Kicinski The driver tries to provision more agg buffers than header buffers since multiple agg segments can reuse the same header. The calculation / heuristic tries to provide enough pages for 65k of data for each header (or 4 frags per header if the result is too big). This calculation is currently global to the adapter. If we increase the buffer sizes 8x we don't want 8x the amount of memory sitting on the rings. Luckily we don't have to fill the rings completely, adjust the fill level dynamically in case particular queue has buffers larger than the global size. Signed-off-by: Jakub Kicinski [pavel: rebase on top of agg_size_fac, assert agg_size_fac] Signed-off-by: Pavel Begunkov --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 28 +++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index f4c2ec243e9a..e9840165c7d0 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -3816,16 +3816,34 @@ static void bnxt_free_rx_rings(struct bnxt *bp) } } =20 +static int bnxt_rx_agg_ring_fill_level(struct bnxt *bp, + struct bnxt_rx_ring_info *rxr) +{ + /* User may have chosen larger than default rx_page_size, + * we keep the ring sizes uniform and also want uniform amount + * of bytes consumed per ring, so cap how much of the rings we fill. + */ + int fill_level =3D bp->rx_agg_ring_size; + + if (rxr->rx_page_size > BNXT_RX_PAGE_SIZE) + fill_level /=3D rxr->rx_page_size / BNXT_RX_PAGE_SIZE; + + return fill_level; +} + static int bnxt_alloc_rx_page_pool(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, int numa_node) { - const unsigned int agg_size_fac =3D PAGE_SIZE / BNXT_RX_PAGE_SIZE; + unsigned int agg_size_fac =3D rxr->rx_page_size / BNXT_RX_PAGE_SIZE; const unsigned int rx_size_fac =3D PAGE_SIZE / SZ_4K; struct page_pool_params pp =3D { 0 }; struct page_pool *pool; =20 - pp.pool_size =3D bp->rx_agg_ring_size / agg_size_fac; + if (WARN_ON_ONCE(agg_size_fac =3D=3D 0)) + agg_size_fac =3D 1; + + pp.pool_size =3D bnxt_rx_agg_ring_fill_level(bp, rxr) / agg_size_fac; if (BNXT_RX_PAGE_MODE(bp)) pp.pool_size +=3D bp->rx_ring_size / rx_size_fac; =20 @@ -4403,11 +4421,13 @@ static void bnxt_alloc_one_rx_ring_netmem(struct bn= xt *bp, struct bnxt_rx_ring_info *rxr, int ring_nr) { + int fill_level, i; u32 prod; - int i; + + fill_level =3D bnxt_rx_agg_ring_fill_level(bp, rxr); =20 prod =3D rxr->rx_agg_prod; - for (i =3D 0; i < bp->rx_agg_ring_size; i++) { + for (i =3D 0; i < fill_level; i++) { if (bnxt_alloc_rx_netmem(bp, rxr, prod, GFP_KERNEL)) { netdev_warn(bp->dev, "init'ed rx ring %d with %d/%d pages only\n", ring_nr, i, bp->rx_agg_ring_size); --=20 2.52.0 From nobody Mon Dec 1 22:04:09 2025 Received: from mail-wm1-f45.google.com (mail-wm1-f45.google.com [209.85.128.45]) (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 D5C513016EC for ; Sun, 30 Nov 2025 23:35:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545746; cv=none; b=NUyUKYkQz9x/zOcWtmYIQjcl6MsVpvdUw5sOvnMTd8HJsQGkFMCkONHSCMYUmEtCQx7GCo48/Y1me/zB/8p9umO/F2oScUyuEEtLq/bt6k2CJaJUAHfK4ggLqOAX3Rnnu7mw65MOGEyf4F3iGw0lcen2YexmhMEZNpOQjXNYbVQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545746; c=relaxed/simple; bh=yKCm3JWX46w3TSeS1HDjGDEN8Lb+RgGnnDzf1hIzpyg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OKz1yOB6SUIn/YXOf8VBulMZpqpdPxOdqMS1CzapQSQgb55h6P1okEJ5H0ON4UMhNat3Q27QmlG/wnPdn9XNJeT70Obfr5ebDUbdmUEioMKFhgGpIGNFNG7X52eZRYk8pFRfMLaqPDt9IHF6u6UETQKlhtPrX+iAYL2wAdJ9MZs= 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=N+0soFpq; arc=none smtp.client-ip=209.85.128.45 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="N+0soFpq" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-47755de027eso23248255e9.0 for ; Sun, 30 Nov 2025 15:35:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764545743; x=1765150543; 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=HX9L7y9TUVKUZMrEe/EUsMICdbihgCRR79vdhXFo/qA=; b=N+0soFpqHul603HIj5zHoSIfWc5W9GiN6vklkHMVCs+W4/neQtP3pzS0yfITiq28bG 1izqBmz0Vq+fFKQ90rZEKWfeAmlDKPBAVTfnKXldC1ZylLjyioNEh0rQ6vIW6bjHxWwb dXc16NPNkz+eQ3kl80Ti+ATMzdbzHq/OZvtcgJ0eCzm3zsHw6eedbvvEogje1iB8l+oI inpqFusTXLkC/LWcYbmtLwuFDBKMJ/1tXQRoaDHMXWgrEEoHrkJjEig8DI316DClAjP5 5iNp8pL5Ib8wkKyjZvbfl27mruFlb4/Lv1r3nw4lqegb/2efQpLsdF6pEzuG6v8b2Pwv 13Kg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764545743; x=1765150543; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=HX9L7y9TUVKUZMrEe/EUsMICdbihgCRR79vdhXFo/qA=; b=CASwKlTwJ7nff42bl9aslfpXtSyc5jU3OfmK2VTc+XObrNM+Q9vURLmPoEmpPB6M64 CwzhJiPC6P0UYbL226sxXf4G1Ly2DH/sybfLWun60uiqu52N3oXD/dVp0D/O0OIl1bbK euMpxYqL41gijOZOJ0WcMUrs2WLVDFBBmsAs4EnrpJJAFXyQvxrrkjZw3iSwTAzGPwI/ dz+71wJ0pvwPQQTYCPxTmuGAgl4eQPBDuU+r+DNVHbuv1d7cM4FvEFImFOfN6LOEiuiR LeatLAX670YtFNWY0LeNmFzjinCwcuQJnfKSnx/Xwexvgmq93pxWKABtK9QV1KPPH0dZ cF+w== X-Forwarded-Encrypted: i=1; AJvYcCUUFI/Th6MNPX4LBUZWtA+3T8e/jJOl6kRJq6smqiYqhJ6wgJvBXYsB0kz3yt5INyJEKaWyWx8erRtlMa8=@vger.kernel.org X-Gm-Message-State: AOJu0YxviNCrYGRltdRkMvdaezNFbvLiGMy19KyfOZfn9ti1s3kThtIB Ly93fZIcLP2sfnxNoORzf/WRTmgLIH9pUuds7DvBjQLT4cx96Fge4fzC X-Gm-Gg: ASbGncsFyLAq8FDrmTeNl4+3rYHS7L17aHr2/GJFi1BO8QP7HVIDBkQ01iyTiV715N6 bb//KjvHKxE9+u68tMyPsEkJZ9VSfqeLWsW8AcYhWoDpJg0nB2Kkblx7XVnoCezp2tnSHr1Ug2O VlEEspIs52bIGzdofUjoDP5UtQeVBWYaTfR2IX5RHBPc4oCXlQvooxw8ccl7HxRXfzNbfPe+FwP pbXmJxLHx3WxCHNeHvkVhHhXCmUKUz+I/juTMVl5nyQMxRp7FWe8OCu+JPve4N6HWgMjhb9r1io ehcZOHUc/h7nE9UClh592m1VbSaDvcws2Rw4MtvNgx5Vf35eIPg5kIKnawiWI0EyDyeLgnGqLZW +8t+QqcythOrY1asypSrdDe/Ls8r7Omr5aB/ilL6yZbpMnbQn1zMEjAvKOIjQV8i2QO2U6KuE05 l5Lf4K/6FoFyUDhXgpfEY2ozu0iXru2ukJ99IDlyzzk5MrP5nOldzUypDs9h9r/RtAH03tON0pb y3xbvU73VITPTW7 X-Google-Smtp-Source: AGHT+IEXud9v2I+TjLUDj/xk+alqLhuWUdH7fEpxpL99N2ZrU2hz5Df/0YCDMBC9pg3l3cG4o9WBpg== X-Received: by 2002:a05:600c:4e91:b0:477:7a95:b971 with SMTP id 5b1f17b1804b1-47904b2c3dfmr250016755e9.31.1764545742979; Sun, 30 Nov 2025 15:35:42 -0800 (PST) Received: from 127.mynet ([2a01:4b00:bd21:4f00:7cc6:d3ca:494:116c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-479040b3092sm142722075e9.1.2025.11.30.15.35.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Nov 2025 15:35:42 -0800 (PST) From: Pavel Begunkov To: netdev@vger.kernel.org Cc: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jonathan Corbet , Michael Chan , Pavan Chebbi , Andrew Lunn , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Ilias Apalodimas , Shuah Khan , Mina Almasry , Stanislav Fomichev , Pavel Begunkov , Yue Haibing , David Wei , Haiyue Wang , Jens Axboe , Joe Damato , Simon Horman , Vishwanath Seshagiri , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, io-uring@vger.kernel.org, dtatulea@nvidia.com Subject: [PATCH net-next v7 7/9] eth: bnxt: allow providers to set rx buf size Date: Sun, 30 Nov 2025 23:35:22 +0000 Message-ID: <95566e5d1b75abcaefe3dca9a52015c2b5f04933.1764542851.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: References: 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" Implement NDO_QUEUE_RX_BUF_SIZE and take the rx buf size from the memory providers. Signed-off-by: Pavel Begunkov --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 34 +++++++++++++++++++++++ drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 + 2 files changed, 35 insertions(+) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index e9840165c7d0..0eff527c267b 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -15932,16 +15932,46 @@ static const struct netdev_stat_ops bnxt_stat_ops= =3D { .get_base_stats =3D bnxt_get_base_stats, }; =20 +static ssize_t bnxt_get_rx_buf_size(struct bnxt *bp, int rxq_idx) +{ + struct netdev_rx_queue *rxq =3D __netif_get_rx_queue(bp->dev, rxq_idx); + size_t rx_buf_size; + + rx_buf_size =3D rxq->mp_params.rx_buf_len; + if (!rx_buf_size) + return BNXT_RX_PAGE_SIZE; + + /* Older chips need MSS calc so rx_buf_len is not supported, + * but we don't set queue ops for them so we should never get here. + */ + if (!(bp->flags & BNXT_FLAG_CHIP_P5_PLUS)) + return -EINVAL; + + if (!is_power_of_2(rx_buf_size)) + return -ERANGE; + + if (rx_buf_size < BNXT_RX_PAGE_SIZE || + rx_buf_size > BNXT_MAX_RX_PAGE_SIZE) + return -ERANGE; + + return rx_buf_size; +} + static int bnxt_queue_mem_alloc(struct net_device *dev, void *qmem, int id= x) { struct bnxt_rx_ring_info *rxr, *clone; struct bnxt *bp =3D netdev_priv(dev); struct bnxt_ring_struct *ring; + ssize_t rx_buf_size; int rc; =20 if (!bp->rx_ring) return -ENETDOWN; =20 + rx_buf_size =3D bnxt_get_rx_buf_size(bp, idx); + if (rx_buf_size < 0) + return rx_buf_size; + rxr =3D &bp->rx_ring[idx]; clone =3D qmem; memcpy(clone, rxr, sizeof(*rxr)); @@ -15953,6 +15983,7 @@ static int bnxt_queue_mem_alloc(struct net_device *= dev, void *qmem, int idx) clone->rx_sw_agg_prod =3D 0; clone->rx_next_cons =3D 0; clone->need_head_pool =3D false; + clone->rx_page_size =3D rx_buf_size; =20 rc =3D bnxt_alloc_rx_page_pool(bp, clone, rxr->page_pool->p.nid); if (rc) @@ -16079,6 +16110,8 @@ static void bnxt_copy_rx_ring(struct bnxt *bp, src_ring =3D &src->rx_agg_ring_struct; src_rmem =3D &src_ring->ring_mem; =20 + dst->rx_page_size =3D src->rx_page_size; + WARN_ON(dst_rmem->nr_pages !=3D src_rmem->nr_pages); WARN_ON(dst_rmem->page_size !=3D src_rmem->page_size); WARN_ON(dst_rmem->flags !=3D src_rmem->flags); @@ -16231,6 +16264,7 @@ static const struct netdev_queue_mgmt_ops bnxt_queu= e_mgmt_ops =3D { .ndo_queue_mem_free =3D bnxt_queue_mem_free, .ndo_queue_start =3D bnxt_queue_start, .ndo_queue_stop =3D bnxt_queue_stop, + .supported_params =3D NDO_QUEUE_RX_BUF_SIZE, }; =20 static void bnxt_remove_one(struct pci_dev *pdev) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethern= et/broadcom/bnxt/bnxt.h index 4c880a9fba92..d245eefbbdda 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h @@ -760,6 +760,7 @@ struct nqe_cn { #endif =20 #define BNXT_RX_PAGE_SIZE (1 << BNXT_RX_PAGE_SHIFT) +#define BNXT_MAX_RX_PAGE_SIZE BIT(15) =20 #define BNXT_MAX_MTU 9500 =20 --=20 2.52.0 From nobody Mon Dec 1 22:04:09 2025 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (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 A0E8F3019CC for ; Sun, 30 Nov 2025 23:35:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545748; cv=none; b=Yz+XmbWywlp5yceWX2S/cGRGh9Lg0le75T7DxDboNEht7blSfP/TJocfJNhQb3MUFenfVElLEfmXMFMXtdvPVzHZeYmSbvn4FYBDHv+7Fb5rGxgxi+ocLSyHs3Z7OxsEAwlJAunKOEfWQBZN6HteHWg32ZAcrzCd37OyZy5Qjps= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545748; c=relaxed/simple; bh=axdc3q5KY7YeHULab/TvgzOYs0oof9ugiogriyYfhIs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=NsExkpN1gm0cmXi3454ctsarFgNK7eaw2eb5KWwzpXMt8EijHnLo9TMVYeuB9Ws3Z4OnbLIKxLJv+L6o18efOUa0WaFeI+wUaZ8+JVmTip1UB78zc7FcD5EtWYaHV4SkP4V9R/BZO+Gf8O2X11asgvPgZXtkhWkahNxlh+NKdIw= 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=hW2T56/9; arc=none smtp.client-ip=209.85.128.50 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="hW2T56/9" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-4779cb0a33fso36130585e9.0 for ; Sun, 30 Nov 2025 15:35:46 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764545745; x=1765150545; 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=kiBEtLY6CE0u/w5HMF7IyfpDPmY7qzN3np9POU+8r/k=; b=hW2T56/9lZoz5dDB2hbeMi10w+NI9hvUGF2tnpyqxzo0X6iZADY/x7OHvZnkU5Nae+ FrPn103TbQOJ1bByOrS+5fwUEA7diy7o6wVXGlGryAjH4EveU52tGsJT//A/4PBaXxFc RzWXfGJweKuYXf6ZEfxGu6n+i8e8xazeKTEVbElZvi1yi2TULJS3SPVtaE65/8XfwV5m oEMvTvP/0JEtJPz5vOptE+0bB0jBRM/K3vB4PSUOwcO6UDcE0O/dNRKw3WFG2Qmfx4Jt Fz462+2I7Wd00etw0jUBIUQmlMMYssZfWdt3XVjgqCPU+NCJqfFWb2vnhXM8MAoFDfD0 TkXg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764545745; x=1765150545; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=kiBEtLY6CE0u/w5HMF7IyfpDPmY7qzN3np9POU+8r/k=; b=ROKmCHmkvHvNig1ab4OGjOhnDckpQZ3pUnye8D9dEruoLmHUexrO9Wnz6d6zT1Xs70 HNQ2dkBt/6W+/NrvUyMDRuLEVe8JAxpnhh50zPaR/ZejdC7lAEku7SUOWhlanjW+JqC4 M41uboLnDXxdyrxpgAUwRgYIZ9CpoLpqRLbcT54GtgiEq1YxV9sM3Gz0lssrP93GGryd DnWKdl1/gCU9RXkMcTrkJhS4MscvYyp0vtpofXGDNu1yfPgjWvv2GpbBmPB5kNUQ+FTC BY8IPyBAWaTBX9LLF0PmInLBtfBViImR2labE28uSjnwwVCvM8k3RwacN9RuH7M1Zo/g 5L6w== X-Forwarded-Encrypted: i=1; AJvYcCWsMCP72RD9HUVyFLXaKCkBVjcEvP7cIPEu9ZdIcpn7UE2PxEuJJBcpzvZ505GIlAF7+gfNtVQwWqaXNJ0=@vger.kernel.org X-Gm-Message-State: AOJu0YzK+J8r4FJ4XWIDE06VIDLlu8Sx0ddS0+qEjLQpBSnqXmQjMq8T +0eokknyhKWC9ASqnyNMYAnsgXYvGX+84ROimaN8cIRbpHPJD679Sbg2 X-Gm-Gg: ASbGncuMaJHW2UUngF6Sl3w2Nk8L2sc/O1mHypMdVERt9Cp5cj102YKVl9zoDWgICJx Z5L31h1ns3Affy8TTlGrw3CwdfqaUwK0Uh8qRlHoKeGQUGtimiCE0JbLTtskwAC4FRHEbZaGCn8 JseJkpvs2n8yycIflyjNvEMyeAh04ItuJ8hgTjtyRLb6EAlnZfq0wECEbqrRZCs6zYqzXM9E+ii a0Kav03+RJxQvoALPiIntJModLQYDyR+79qjWtoxKVfDylofcB8Ti03gJkLxxE2VoO+cHP+m+ah dc9nd38fpasBBgoA/kkr/3iHPqZkL770edqz7kAcEo9xeNHvE9nzoQ+4jUGnJZ1FgT+RIodcqcE us+zWuse6FIDBDfegx8/8lzhGfiTsAq+LDinNOpvhSe7gqscEyN6zNKQHIOOi+PEe1OrCl2/8xT 4dnNhKWLVGW2/BnRjUSs/8i5+p890dDMyaS1LYTxb8kyQxawj2uk9i68MyyVerqYxvUoAEcgHrL MeBi5FgqWW/z2lV X-Google-Smtp-Source: AGHT+IFUzT8FPG5bXMl+et7+tgKZinOOAHIypttasPvwu7QxpymSGXEfBTXOVOEmLIwEs4nL6pXgEQ== X-Received: by 2002:a05:600c:4fcb:b0:477:557b:691d with SMTP id 5b1f17b1804b1-477c01eea7fmr324319555e9.25.1764545744807; Sun, 30 Nov 2025 15:35:44 -0800 (PST) Received: from 127.mynet ([2a01:4b00:bd21:4f00:7cc6:d3ca:494:116c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-479040b3092sm142722075e9.1.2025.11.30.15.35.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Nov 2025 15:35:43 -0800 (PST) From: Pavel Begunkov To: netdev@vger.kernel.org Cc: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jonathan Corbet , Michael Chan , Pavan Chebbi , Andrew Lunn , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Ilias Apalodimas , Shuah Khan , Mina Almasry , Stanislav Fomichev , Pavel Begunkov , Yue Haibing , David Wei , Haiyue Wang , Jens Axboe , Joe Damato , Simon Horman , Vishwanath Seshagiri , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, io-uring@vger.kernel.org, dtatulea@nvidia.com Subject: [PATCH net-next v7 8/9] io_uring/zcrx: document area chunking parameter Date: Sun, 30 Nov 2025 23:35:23 +0000 Message-ID: X-Mailer: git-send-email 2.52.0 In-Reply-To: References: 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" struct io_uring_zcrx_ifq_reg::rx_buf_len is used as a hint specifying the kernel what buffer size it should use. Document the API and limitations. Signed-off-by: Pavel Begunkov --- Documentation/networking/iou-zcrx.rst | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Documentation/networking/iou-zcrx.rst b/Documentation/networki= ng/iou-zcrx.rst index 54a72e172bdc..7f3f4b2e6cf2 100644 --- a/Documentation/networking/iou-zcrx.rst +++ b/Documentation/networking/iou-zcrx.rst @@ -196,6 +196,26 @@ Return buffers back to the kernel to be used again:: rqe->len =3D cqe->res; IO_URING_WRITE_ONCE(*refill_ring.ktail, ++refill_ring.rq_tail); =20 +Area chunking +------------- + +zcrx splits the memory area into fixed-length physically contiguous chunks. +This limits the maximum buffer size returned in a single io_uring CQE. Use= rs +can provide a hint to the kernel to use larger chunks by setting the +``rx_buf_len`` field of ``struct io_uring_zcrx_ifq_reg`` to the desired le= ngth +during registration. If this field is set to zero, the kernel defaults to +the system page size. + +To use larger sizes, the memory area must be backed by physically contiguo= us +ranges whose sizes are multiples of ``rx_buf_len``. It also requires kernel +and hardware support. If registration fails, users are generally expected = to +fall back to defaults by setting ``rx_buf_len`` to zero. + +Larger chunks don't give any additional guarantees about buffer sizes retu= rned +in CQEs, and they can vary depending on many factors like traffic pattern, +hardware offload, etc. It doesn't require any application changes beyond z= crx +registration. + Testing =3D=3D=3D=3D=3D=3D=3D =20 --=20 2.52.0 From nobody Mon Dec 1 22:04:09 2025 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (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 07987302775 for ; Sun, 30 Nov 2025 23:35:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545751; cv=none; b=V91W0CuqcAh9aQkMBhJlB2obtly/tIPitwXGN1StptSYWDvhxU477Jdfw5uNzxnX45ZI526+O3iez40BK6Q/MubNgcwftHxdGvNHZUp/WX5cD4tLoOllOM6Nc36hVPAqkwxJ3461YqdDirJ4U6xhCeoDQBQNCSa0YCQ2jaTT3s0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1764545751; c=relaxed/simple; bh=/jxCrpK8l6glGcqt49LNeHrXzbo3WZk9EY0AmmIwENo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=MYVfcGis4Hf2p/EfDyceg8nFc+3mW1IdpKNDjoY8bEKky2DdcylqkRNSWeMBcPOBKDhMJH/OKCYRfrd21cc7Xx2ZDCeG+4n8CqhxqZMYRuYF3B6CVBy56WjHeWEvMQg+AfH95sH8qgtiTTzyC4qy/3wKVkx4N2ynthTvUzWP3dI= 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=K4C57Jqn; arc=none smtp.client-ip=209.85.128.49 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="K4C57Jqn" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-477a2ab455fso37852385e9.3 for ; Sun, 30 Nov 2025 15:35:48 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1764545747; x=1765150547; 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=WJRC4dPidxMIa9vqar4Y3LK2OFHt6WzESXNCWKhLD0s=; b=K4C57JqneyOxdD+kcxOXNpAtHCFPZDZ4ziofb7b6ea+Y5GVoCFxSbm7+jof8fDJCPT RzLjLX3oitW4dXH7lTRxBco/3yQ8N2meGswMXf9aS/ZlylTtKbRiR/RlXsxTWjVj9tvy XLGC/dkShYW7RecqSdBQOiS7EXSzeWin1aNR9QvsQWQUGnqd9TXVNyOdnfn5JSMkF/z5 2iZN3vIe1zaaTbRws2GJIsdfvR4O8RSAzvLX63Eo20FNTa2w0Um66CwqSPj06w6F88Lw vOkBnHkWF6BuWnNxxwsKJfBDOlw6nUvkK44ZZyL7H+F79sl6FFu1v9j727Un1B3tyRle y6YA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1764545747; x=1765150547; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=WJRC4dPidxMIa9vqar4Y3LK2OFHt6WzESXNCWKhLD0s=; b=ZDHF0ZrKS6kKEQHSxJX18FX/4r0p9D346PWHgEybKN3xSuWyAyfdJhejeY04O4M5ct QbeqwFV2C641szQ5/6OfcnQCWwDrpO0pxThu5GuN1bL5gcwhf9pINv6OyeBu715F0xz/ CZFyBiUekEWDpJSrdpHgeykkVytILQ2/T/o8PfipWabZUS+prixPMa0OKtCLd7c/GCEP ALAYFgJtUSxMjKVkjgZIoyFqbPilrGTmu6KMStwSd2Glr/rdsYRNf7hW8xoW25Ax2Q8o tQnpXiA1eoursW6QPVa79azRG7RC44q5CAJWECKrrtaw7FjrSSB8eg8MS7es8hFFC0o4 AycQ== X-Forwarded-Encrypted: i=1; AJvYcCVT2j/VDGruGYR43soCP2FQtX76l2bdPu60oXiZJR1goBCbpeLUXmWomYhV1aCddhleLp+i4xgPDRFRwx0=@vger.kernel.org X-Gm-Message-State: AOJu0YzRx1EDXo4H7hE7zWOFP6AGQ4ezJwCTJgZwmXpTI0Z+Va5jnGTB xSorQIcuQbBpEkVJ0JmZgA/bxuc6UUk6lcQGtiRAXgV9Myi19wUua6ii X-Gm-Gg: ASbGncvb1IDhnvqpsUYjV4bnX8kGuYUYbsK19VKKUD48CEuBOwvprTH56PZN1u/XBKt zjrxEoUzmlQ5vA8Unr1xGbhJkq31Rq3++jYIOUxwPio4QwkfVis+IIK52bxBXrcuoZGHyXI6f0n SpRyXE0DFck0DLLrHdIB2ybfJTxCiXaUI4892CkRtqOzOJpiRBIlK8vfyqqXTFarxbW/EpJ4ZgW sStmMrhoThHrV+HlpDO3ImTLo10hLCQowL9SFHJwKj6W3yd3srDvVrtYnUFjvJzoHUmBfWTeMxE 5LWcNOmVZYt28mVTfvjynre4dCeKmWkMzatcTsksS6bpdLP2ZDpMn3AGYekHPioKx7N3wFht7RE 4h115wTFM53LKXe7b+S+13zLgu1C03meNL1VFAdWXTzOZzvKFmA6liDXb3xm7p5MibUfwl+fBUz VhnXPgTi/Fp3ZgwCZJMqjATbd9BTo/z71MzCtgR8fHOfM7p2JajLTTKaqh3XvU5LpnhnrDFY2IS ROzvB/Ub78Hros2 X-Google-Smtp-Source: AGHT+IF1C3BU+0TmVLhFFFLC7lJAEa9+OLBtLvpfXcpFjqpVlWK06cPRlsUJhKHpdqODVbDSNRV+FQ== X-Received: by 2002:a05:600c:8b35:b0:475:d8b3:a9d5 with SMTP id 5b1f17b1804b1-477c10d6fdamr359420355e9.10.1764545747159; Sun, 30 Nov 2025 15:35:47 -0800 (PST) Received: from 127.mynet ([2a01:4b00:bd21:4f00:7cc6:d3ca:494:116c]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-479040b3092sm142722075e9.1.2025.11.30.15.35.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 30 Nov 2025 15:35:46 -0800 (PST) From: Pavel Begunkov To: netdev@vger.kernel.org Cc: "David S . Miller" , Eric Dumazet , Jakub Kicinski , Paolo Abeni , Jonathan Corbet , Michael Chan , Pavan Chebbi , Andrew Lunn , Alexei Starovoitov , Daniel Borkmann , Jesper Dangaard Brouer , John Fastabend , Ilias Apalodimas , Shuah Khan , Mina Almasry , Stanislav Fomichev , Pavel Begunkov , Yue Haibing , David Wei , Haiyue Wang , Jens Axboe , Joe Damato , Simon Horman , Vishwanath Seshagiri , linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, bpf@vger.kernel.org, linux-kselftest@vger.kernel.org, io-uring@vger.kernel.org, dtatulea@nvidia.com Subject: [PATCH net-next v7 9/9] selftests: iou-zcrx: test large chunk sizes Date: Sun, 30 Nov 2025 23:35:24 +0000 Message-ID: <0339cb58a22925687ce66dbeb1efec7f13bdd7c3.1764542851.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.52.0 In-Reply-To: References: 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" Add a test using large chunks for zcrx memory area. Signed-off-by: Pavel Begunkov --- .../selftests/drivers/net/hw/iou-zcrx.c | 72 +++++++++++++++---- .../selftests/drivers/net/hw/iou-zcrx.py | 37 ++++++++++ 2 files changed, 97 insertions(+), 12 deletions(-) diff --git a/tools/testing/selftests/drivers/net/hw/iou-zcrx.c b/tools/test= ing/selftests/drivers/net/hw/iou-zcrx.c index 62456df947bc..0a19b573f4f5 100644 --- a/tools/testing/selftests/drivers/net/hw/iou-zcrx.c +++ b/tools/testing/selftests/drivers/net/hw/iou-zcrx.c @@ -12,6 +12,7 @@ #include =20 #include +#include #include #include #include @@ -37,6 +38,23 @@ =20 #include =20 +#define SKIP_CODE 42 + +struct t_io_uring_zcrx_ifq_reg { + __u32 if_idx; + __u32 if_rxq; + __u32 rq_entries; + __u32 flags; + + __u64 area_ptr; /* pointer to struct io_uring_zcrx_area_reg */ + __u64 region_ptr; /* struct io_uring_region_desc * */ + + struct io_uring_zcrx_offsets offsets; + __u32 zcrx_id; + __u32 rx_buf_len; + __u64 __resv[3]; +}; + static long page_size; #define AREA_SIZE (8192 * page_size) #define SEND_SIZE (512 * 4096) @@ -65,6 +83,8 @@ static bool cfg_oneshot; static int cfg_oneshot_recvs; static int cfg_send_size =3D SEND_SIZE; static struct sockaddr_in6 cfg_addr; +static unsigned cfg_rx_buf_len; +static bool cfg_dry_run; =20 static char *payload; static void *area_ptr; @@ -128,14 +148,28 @@ static void setup_zcrx(struct io_uring *ring) if (!ifindex) error(1, 0, "bad interface name: %s", cfg_ifname); =20 - area_ptr =3D mmap(NULL, - AREA_SIZE, - PROT_READ | PROT_WRITE, - MAP_ANONYMOUS | MAP_PRIVATE, - 0, - 0); - if (area_ptr =3D=3D MAP_FAILED) - error(1, 0, "mmap(): zero copy area"); + if (cfg_rx_buf_len && cfg_rx_buf_len !=3D page_size) { + area_ptr =3D mmap(NULL, + AREA_SIZE, + PROT_READ | PROT_WRITE, + MAP_ANONYMOUS | MAP_PRIVATE | + MAP_HUGETLB | MAP_HUGE_2MB, + -1, + 0); + if (area_ptr =3D=3D MAP_FAILED) { + printf("Can't allocate huge pages\n"); + exit(SKIP_CODE); + } + } else { + area_ptr =3D mmap(NULL, + AREA_SIZE, + PROT_READ | PROT_WRITE, + MAP_ANONYMOUS | MAP_PRIVATE, + 0, + 0); + if (area_ptr =3D=3D MAP_FAILED) + error(1, 0, "mmap(): zero copy area"); + } =20 ring_size =3D get_refill_ring_size(rq_entries); ring_ptr =3D mmap(NULL, @@ -157,17 +191,23 @@ static void setup_zcrx(struct io_uring *ring) .flags =3D 0, }; =20 - struct io_uring_zcrx_ifq_reg reg =3D { + struct t_io_uring_zcrx_ifq_reg reg =3D { .if_idx =3D ifindex, .if_rxq =3D cfg_queue_id, .rq_entries =3D rq_entries, .area_ptr =3D (__u64)(unsigned long)&area_reg, .region_ptr =3D (__u64)(unsigned long)®ion_reg, + .rx_buf_len =3D cfg_rx_buf_len, }; =20 - ret =3D io_uring_register_ifq(ring, ®); - if (ret) + ret =3D io_uring_register_ifq(ring, (void *)®); + if (cfg_rx_buf_len && (ret =3D=3D -EINVAL || ret =3D=3D -EOPNOTSUPP || + ret =3D=3D -ERANGE)) { + printf("Large chunks are not supported %i\n", ret); + exit(SKIP_CODE); + } else if (ret) { error(1, 0, "io_uring_register_ifq(): %d", ret); + } =20 rq_ring.khead =3D (unsigned int *)((char *)ring_ptr + reg.offsets.head); rq_ring.ktail =3D (unsigned int *)((char *)ring_ptr + reg.offsets.tail); @@ -323,6 +363,8 @@ static void run_server(void) io_uring_queue_init(512, &ring, flags); =20 setup_zcrx(&ring); + if (cfg_dry_run) + return; =20 add_accept(&ring, fd); =20 @@ -383,7 +425,7 @@ static void parse_opts(int argc, char **argv) usage(argv[0]); cfg_payload_len =3D max_payload_len; =20 - while ((c =3D getopt(argc, argv, "sch:p:l:i:q:o:z:")) !=3D -1) { + while ((c =3D getopt(argc, argv, "sch:p:l:i:q:o:z:x:d")) !=3D -1) { switch (c) { case 's': if (cfg_client) @@ -418,6 +460,12 @@ static void parse_opts(int argc, char **argv) case 'z': cfg_send_size =3D strtoul(optarg, NULL, 0); break; + case 'x': + cfg_rx_buf_len =3D page_size * strtoul(optarg, NULL, 0); + break; + case 'd': + cfg_dry_run =3D true; + break; } } =20 diff --git a/tools/testing/selftests/drivers/net/hw/iou-zcrx.py b/tools/tes= ting/selftests/drivers/net/hw/iou-zcrx.py index 712c806508b5..83061b27f2f2 100755 --- a/tools/testing/selftests/drivers/net/hw/iou-zcrx.py +++ b/tools/testing/selftests/drivers/net/hw/iou-zcrx.py @@ -7,6 +7,7 @@ from lib.py import ksft_run, ksft_exit, KsftSkipEx from lib.py import NetDrvEpEnv from lib.py import bkg, cmd, defer, ethtool, rand_port, wait_port_listen =20 +SKIP_CODE =3D 42 =20 def _get_current_settings(cfg): output =3D ethtool(f"-g {cfg.ifname}", json=3DTrue)[0] @@ -132,6 +133,42 @@ def test_zcrx_rss(cfg) -> None: cmd(tx_cmd, host=3Dcfg.remote) =20 =20 +def test_zcrx_large_chunks(cfg) -> None: + cfg.require_ipver('6') + + combined_chans =3D _get_combined_channels(cfg) + if combined_chans < 2: + raise KsftSkipEx('at least 2 combined channels required') + (rx_ring, hds_thresh) =3D _get_current_settings(cfg) + port =3D rand_port() + + ethtool(f"-G {cfg.ifname} tcp-data-split on") + defer(ethtool, f"-G {cfg.ifname} tcp-data-split auto") + + ethtool(f"-G {cfg.ifname} hds-thresh 0") + defer(ethtool, f"-G {cfg.ifname} hds-thresh {hds_thresh}") + + ethtool(f"-G {cfg.ifname} rx 64") + defer(ethtool, f"-G {cfg.ifname} rx {rx_ring}") + + ethtool(f"-X {cfg.ifname} equal {combined_chans - 1}") + defer(ethtool, f"-X {cfg.ifname} default") + + flow_rule_id =3D _set_flow_rule(cfg, port, combined_chans - 1) + defer(ethtool, f"-N {cfg.ifname} delete {flow_rule_id}") + + rx_cmd =3D f"{cfg.bin_local} -s -p {port} -i {cfg.ifname} -q {combined= _chans - 1} -x 2" + tx_cmd =3D f"{cfg.bin_remote} -c -h {cfg.addr_v['6']} -p {port} -l 128= 40" + + probe =3D cmd(rx_cmd + " -d", fail=3DFalse) + if probe.ret =3D=3D SKIP_CODE: + raise KsftSkipEx(probe.stdout) + + with bkg(rx_cmd, exit_wait=3DTrue): + wait_port_listen(port, proto=3D"tcp") + cmd(tx_cmd, host=3Dcfg.remote) + + def main() -> None: with NetDrvEpEnv(__file__) as cfg: cfg.bin_local =3D path.abspath(path.dirname(__file__) + "/../../..= /drivers/net/hw/iou-zcrx") --=20 2.52.0