From nobody Sun Oct 5 05:24:22 2025 Received: from mail-wr1-f53.google.com (mail-wr1-f53.google.com [209.85.221.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B50832E36E0; Fri, 8 Aug 2025 14:53:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664815; cv=none; b=CeoCmNhlrmShzIGTdrRaZCexORaXk4qTogVU+AbpK4ZVRVbdamgkJVKePzwlCACDRq/RJpF4++uJxmFGutWbxRnWlf3BD0LzXC5zYa/T2sxZm/CJ42tOTTNAMWBZ9ucEpKjhNiCXp6h+vGxDkrMAlTUd6NefglFhG3q+ZXlb0Vk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664815; c=relaxed/simple; bh=1+wUor/D2lqqFvCOhRNyGAsT/G8fQkZ5gTKa4MaWBF8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jmcnOddghqfc8HtkNItlECJYYRbh+8MmnJxxDOOQ5mtQTAVEinVgaCQMb2hw3Yzh1VLYuj4EMC2NLt4l6VpuhkeCkBHGgnLbcqaiPcdEbRSYNpLil9RPmD+RNrh7X8UDzmh38CMU6HNdSoBnIMQsCpmOuhaAiBS7YmBbCBDKdQ0= 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=YdHwFY7R; arc=none smtp.client-ip=209.85.221.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="YdHwFY7R" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-3b79bddd604so1278372f8f.0; Fri, 08 Aug 2025 07:53:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664812; x=1755269612; 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=HXdUrvXZggtBih99tqlkb3hpG+7zX+VGvFiDFejRdWs=; b=YdHwFY7RZ0lEvg6yU6zLahXxjY5qJF3+hc07Y/+tsjYt3O3NbB5GZytaAJx5EEUbae 7brUOTEELbHbvcPqVhHIWm6OoeNpQlZJBMVOpZvL0BK/msemESeMupt0v1lpOuOKhrVI QRoZO/wDntJCafJ2WQqxCX6GUQh9WJ1df5S4TKUOxAcNvSo5x6KZzgYrdjzdQBgQyBid OrRxzLnKvFp/0DPoVN7WkfHepmvPSV69E2KlccuMpgAz/bPnF2w6RcloCbzbGFQ+jF2C PjvuzdUmhpgM5DGl2DKaUmhba+VL4S+xjryJGO1aYuQaBX9TB0aJ7Jb//wfmuFqHfy+S ISTQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664812; x=1755269612; 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=HXdUrvXZggtBih99tqlkb3hpG+7zX+VGvFiDFejRdWs=; b=VvgJNfBbSuehYYozJq8CS/lOh6rc/psR7m8/sb18YbuNNT+WBQ35QNhE5TnY/FRJuI rBHhBLlf4kt3iXgpxbEnAALnRn9VPkw34glyUWNKQYTCw4n8tuFpyVfrFSpxrkNvrhBX c4B9o/rGQXDD6Lb+IHSC2mbiXXp/GS1NNqn4idf6PAeaA5nLIkRKuxJxoKdkZQD6EaWI UgrvsxaY8lYyKHBXjMRxtB7iN/pCBsM/oJZwQmgsiBht5P0zOWFXaEVHvrbwlFnJS1gW fZNOuILXFCkvag6MpvQdAkVFbD9YqPNhP4/8W38f588zo3lTZLYRjZXCt/ZpJm1NDgYF S+7g== X-Forwarded-Encrypted: i=1; AJvYcCUCMjnmBDc494UPUwlstbP9QdslOiXrKGO0eq0LFG1gwWja3qQDorDZBBCBbDJ5i8tMXCApe8Qn@vger.kernel.org, AJvYcCUrXRDxcw+Pd9BXcR9U3DnQBBLmf6GfyVfYIvBB7xTqXWjHuajpLwwBqMFeI0QlGC2ozH9ti+QLYyzI61o=@vger.kernel.org X-Gm-Message-State: AOJu0YxDboemFPkWV5yUyeBXn3HylyB9vMt25cran/H1TEcdEBAtfZ6h qU38Xy12RKFBnCmDRcWSdmk6H4/FDN9BsZls0GsV+8DV1bj9QvKN3dD2 X-Gm-Gg: ASbGncuLyogaS4efzKuxMjKbezJwyRsOHktJRJSN6enbMvaHvKklf4wlvaLP2x935j7 HBsFwZ2fjQjQuiqq8CScKiO3XMS2+SsPWroXLuEjy5hk46v70l87JYBIgMq3knTW65JnYlSQ3fz pnclASXnk8XFaWtPtA7FhPaEEkCPZyENS9PFeLYtPYy5QI/eJUFrv1udPihJqwu7FUtCsAYgqqN H7rxgI/Rr29ZdmcdvMir1aUMs7rBpaEJD0aEL6z1umSXCc+P2BDu84Kh7A67yTS6K8G4tZVetpM riT4It8raWOfr1GRBpi2j6SaBL3ZvWOLQUpIoHb4DoHVnjcSsJAguIJgg+9CkXiq2lIbS62G9j8 pOKLZyA== X-Google-Smtp-Source: AGHT+IHjNhm6CAJvoHANi2GA7LUqSh9cFgFEyjqu6XVvcvHx4RaxKEOJr1vds09WkEXu3I3l7RBixg== X-Received: by 2002:a05:6000:25c7:b0:3b7:970d:a565 with SMTP id ffacd0b85a97d-3b900b551c7mr2907354f8f.46.1754664811758; Fri, 08 Aug 2025 07:53:31 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:30 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 01/24] net: page_pool: sanitise allocation order Date: Fri, 8 Aug 2025 15:54:24 +0100 Message-ID: <89ae559c57b8b8bc061c5942fd46a5bdd1f2989f.1754657711.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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. Suggested-by: Stanislav Fomichev 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 05e2e22a8f7c..f1373756cd0f 100644 --- a/net/core/page_pool.c +++ b/net/core/page_pool.c @@ -303,6 +303,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.49.0 From nobody Sun Oct 5 05:24:22 2025 Received: from mail-wm1-f44.google.com (mail-wm1-f44.google.com [209.85.128.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 1CCE1280CFB; Fri, 8 Aug 2025 14:53:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664816; cv=none; b=Ywg1kKg3Fo40Ce9BPcTb2Ao+A/P1qXsLRZNP+kaVuHuUXENm90++YKp0ViDoiSYYCk/A5+wuuVF8fAD5CNflTscQZ31+cCGMvogBiNJqAj62FsCn5494F55qrKW/WbmzFIZRhNHsT3g77OLSFfcj3zUKqSqzyQfHJOw6wHNzIB8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664816; c=relaxed/simple; bh=HrrAxyj61SLnsN3GJ6LjWToWuINFN/Kn5UpaU740itM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kDkZT7zuUyFlhnnodPq6TQTLFyNsfn62Oemdk5SjdD/XpIRXIXE0nQ3GSncKzqmkFD9LzdmsTPePk82HEReo9arvbPsZQkPavo1dPXjhRH2UXfezEKkvZL4X/J+njeQE5mVzppQm2DxI0JtL3cR2oFTIWH/lQbpWJ5x7hPuAj3E= 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=Bioy5tLK; arc=none smtp.client-ip=209.85.128.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="Bioy5tLK" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-45994a72356so17481565e9.0; Fri, 08 Aug 2025 07:53:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664813; x=1755269613; 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=hBAG0Fay451JgNwYj7hM+/kGoelDE4FVCawIWFGrRP8=; b=Bioy5tLK0G+/ooEjmnwi7W1RylWvm6Li1FC9I2Mag8RcAyleAQ1e1dm2etL77/Bx6X Cnf0M63Dt5ipOtKcUDyvNvJiQvsKCMibrz3jYxhzXQkFZ4HpD1he3YZvRIffz05XrlRi SZDA01JDNyJZBW0c8Pc9Nix88iHKVPpLNQPJXABpunrR4NHx9UsiLcHgsLAhocLkUiPF OZAhq3s37OysiC3t7nMqcgT7BfDFy4RzMjdsTjyRHqm73vkq+HhWOK6Pem167vXO++2X vp7TOMhMbffYOxNJeF/XortxyAietivcvODaSMtDkkry0RqpfeGHkw8uykL5YoJmT6JA VImw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664813; x=1755269613; 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=hBAG0Fay451JgNwYj7hM+/kGoelDE4FVCawIWFGrRP8=; b=lMfpG8xO0d9GOfPRcTlFiyMkVUxKCirsfWWoFyztrCXqbSHnn6H3nzr0fNca/ByCNn NaCsQrrEzp2tTEVypHoJ/ubBngakp+q4k41UZ05RaW+NYDsiAf/tiCz6rQ0oJaSKK94j JieOrvpqhuZGHtgm7G8QZ7mEtkn/H1EoQkrJ/U18PKwhKRu4I0I4c5EEaS69bRpjalWJ cSiji6DMcZCilyyqzIz2gtM0oQjMqolYHXwsG/TKfwtLM7pZg5ZmzwCOxpIYQFCqd1K6 6WXwS7u9IdGAKfEUwkj/gr5m3xkEALHks4Sk9Z2GQZsSGf9URzcM/2/W+tsI4WRj2Yrg jMyQ== X-Forwarded-Encrypted: i=1; AJvYcCUTqetzokDus/Tcbshq1uVCh8bjXMzxniNXRr8HnVRPThlMxv7sK+dLvJC/Kp7omAL2XnbIMLwu@vger.kernel.org, AJvYcCXYeAPqFHVcOZVquhcHI5H8NaugvaMDJ30pTqdQyE1aTsiBjaBW4tDeINe1Z83GE0ZqGfmP009UruPjRoU=@vger.kernel.org X-Gm-Message-State: AOJu0YzrBM5JOOiwjyLP4sWTXtpaZaCl6AI/JcekiT0wbB7xEXKTd5eN s4U6M2KWi/AwgjveiguuE3w7FcW7bdrdMZQOcTAH+j8UJOYdb9HbhXKc X-Gm-Gg: ASbGncuzGT/S2JMRBHj9MqhJ/EIwcwmzGZtzJdrG6a5nJB7tTEaoogCCFPR5jY9OVJ8 H012mUDXWfgSJ3c7ZYhw/JS4/bgRP5jplKhh8LkrzdaA7W3d5uikXPP+Wefz8gssdHSRAaAlpia RMg4v1p5piM5PBG0hJ7QsuWN5biygsLB3Sq9f6rjTnQyu8c7mLtrLvV9GLSSBcQ7VU0ip+sRoAS +RSQqAlUCJ/HsdoFW54x6/ymvEMcfQdHICti5Qm1hLZDyciQ1fmQnK9K5YSdMZEDkLlb979aHUX XzM2GYFT4EWAf295UvMEXTNObCEC3RvjqLat4ifwJ/clfeM6xQyppyozpqCyM9FsnNtQe7BAnxF StJFOuQ== X-Google-Smtp-Source: AGHT+IGIE/V2TFfwpLX9Kp68vXYpHcqhncYC0VGIT255SexcmlI4pvh7uyxY+NaPTEunv/QmvlvIjA== X-Received: by 2002:a05:600c:a111:b0:459:db88:c4ca with SMTP id 5b1f17b1804b1-459ede6c0aamr65385875e9.3.1754664813325; Fri, 08 Aug 2025 07:53:33 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:32 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 02/24] docs: ethtool: document that rx_buf_len must control payload lengths Date: Fri, 8 Aug 2025 15:54:25 +0100 Message-ID: <327e21d7afe67bbdf39d01b17aeab76a7d60fad1.1754657711.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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 Document the semantics of the rx_buf_len ethtool ring param. Clarify its meaning in case of HDS, where driver may have two separate buffer pools. The various zero-copy TCP Rx schemes we have suffer from memory management overhead. Specifically applications aren't too impressed with the number of 4kB buffers they have to juggle. Zero-copy TCP makes most sense with larger memory transfers so using 16kB or 32kB buffers (with the help of HW-GRO) feels more natural. Signed-off-by: Jakub Kicinski Signed-off-by: Pavel Begunkov --- Documentation/networking/ethtool-netlink.rst | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Documentation/networking/ethtool-netlink.rst b/Documentation/n= etworking/ethtool-netlink.rst index ab20c644af24..cae372f719d1 100644 --- a/Documentation/networking/ethtool-netlink.rst +++ b/Documentation/networking/ethtool-netlink.rst @@ -966,7 +966,6 @@ Kernel checks that requested ring sizes do not exceed l= imits reported by driver. Driver may impose additional constraints and may not support all attributes. =20 - ``ETHTOOL_A_RINGS_CQE_SIZE`` specifies the completion queue event size. Completion queue events (CQE) are the events posted by NIC to indicate the completion status of a packet when the packet is sent (like send success or @@ -980,6 +979,11 @@ completion queue size can be adjusted in the driver if= CQE size is modified. header / data split feature. If a received packet size is larger than this threshold value, header and data will be split. =20 +``ETHTOOL_A_RINGS_RX_BUF_LEN`` controls the size of the buffers driver +uses to receive packets. If the device uses different buffer pools for +headers and payload (due to HDS, HW-GRO etc.) this setting must +control the size of the payload buffers. + CHANNELS_GET =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =20 --=20 2.49.0 From nobody Sun Oct 5 05:24:22 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 D37CC2820B1; Fri, 8 Aug 2025 14:53:36 +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=1754664818; cv=none; b=bzKd7dsuNkrRegAm3YhEH01asVjhvXFMkmH/UN2PyV0gJfsbhwoMsAmkvv2fDZ6F3+j9dsblSKtb2hJ42NioNAbwhI7drDFBhH75EKAdLadtzfzjRsrEx7+BeHtWMnI7eovIOY2b6KWnpm0J3Z/oAzfb6LaMt1sQsNjR0unD1wM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664818; c=relaxed/simple; bh=HJznfjOPVIVAcdG/yijDgFSeUPzX9QrleFENOmhqLx4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bnJn6Po1eWYawPfT38LwoirHj0imCB2gRTx5W/+QTFBuNDrVL0liQpTQMuVkb/ifM2CpS6nUpUEOrVrDTGuPx1IBqqqZCbk7ZYTvagclid9lRcxWHxP2iS5bDT0TUHPvze26b6xBHT8FgIGRsNgWLC/7Mb9qudvnZent5BcubTA= 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=N2GY9zuk; 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="N2GY9zuk" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-454f428038eso19166735e9.2; Fri, 08 Aug 2025 07:53:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664815; x=1755269615; 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=1WCRZzjR9Y1U54BdRr9CdSntDYjrhBbPu4rgTyBmD0U=; b=N2GY9zukuTxqivSJuFKIJJsYnMQjrhB6MkFtPy5mPuDjj+8eqaPDIh5Doq3qvSFvCN 9gYHNI25Edt059Kt+WAIhLXAOrUwsW3/Uonio4jZN+1OzD+/FjHjOuZqvshkAKuYW4nB bOTVUk98sShF2VxcvkFau7VVrlVcOSYYJRPt2IiCLXDHFO9eUIIY8Yn1tqwbc3B8SKjX jIq9BqI1rtoZ0Sre9SZRtElYDw01JqQ2vU76thHxPcJyAb045F0IwHYL3I0LKQ3WBvK5 Et80v+8qXULkVEq2zVCSvJBgwkeVt0YMCq6tF0oWHhJGKsSlLnB7Xg9oVgUTMG94h0dx 5TaQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664815; x=1755269615; 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=1WCRZzjR9Y1U54BdRr9CdSntDYjrhBbPu4rgTyBmD0U=; b=ldyqnl9tcAS5TcWQgujHcog4qZe6to2g/Q69U5/RL0OaJhDkCvZ0EAubfGgXeGuMlf BVrIK0vfGtPPLE/IuMXOMm9kNJPko7yz+1Tf41+D60VWEU/gk9Gq19dmwToDfIuc37AV Nho0glhq/nZEGN74TbmEcsYPTidFWp8rS8ntB6eJp/y6mVlB9JYt+KBxfAU4i/aOwOV2 ZY7xc6Glsk380oomsrX0aqQEEN5hR6londhFBxFPcLyC+Xhx9jLJz/jeBSO5fRWFZ9lk pZNJ5RGOU9BsEQv97XQt8+3fXLxqSm0++l/Rv0vifoxrvc9FUyMPJH6lRJ0WX9JRi5WD Du4Q== X-Forwarded-Encrypted: i=1; AJvYcCVqod6Rw8MTg+gL/N4cqC+1LufLiH1AZYkRZlswfQ3sh0JOFi5qzqWHWwOayrQZUBf51+lX/or5RsH6aQs=@vger.kernel.org, AJvYcCX7cRtYEtghAcEwGCkApRmPuXceiG4yYJ9XqUP9Q1fJ2Tk/KNFNWJbHdSeXvAiXfoMe5U4cbL+f@vger.kernel.org X-Gm-Message-State: AOJu0Yx65gAQT0bVVj34wModgZKMnGhTdn3z9gc0qLBXRYXDk4ELmQpG p+gGEyOwa6tuFWejA3Y1fxDMGJCPXLKYU+1jy50SPPZwX6tJgeNH5oA1 X-Gm-Gg: ASbGnct4Wl1zYzYnC+DBXxTqLQVYcwkvombGH2dfY1zJGnaLls/ID068dSSz/fHkQFL xyK4ss/aKb/eaEeVCfj0no9gsEOhAVVlur4ZqHlvQQuNtw5UNBTxOb/0NBtmEicNmqXKo7cKDix bDU1dt80UDKEUIAJnO//qYsW0ogyf/+ZXNJ3i6o6TNlCasxQXUMWWMxS9QhaQCQubx5BtHa6/zr N6Crp9bVGbRVHIS289Ycm21bbg7PEu5yo4slDAibjuDC1Pp/dDbOK9JJz4iK+AiP/Fake2FE/fa MtN8XZ3zUytw/XvMSs+KGP9TkzOuvcLnU3Ed8p2SwnydvgqJm5yZtuovKSko7O0y9ONK+HeCQfy 9lIXDcg== X-Google-Smtp-Source: AGHT+IFvOLBbq0CtPJBCaK0yQcO0BYO8elt06NdTDE/CBSyGPSNYVuG9wWWZkyZGI+j18maNytSwDQ== X-Received: by 2002:a05:600c:8b4b:b0:456:1c4a:82ca with SMTP id 5b1f17b1804b1-459f4f3dc8emr30947185e9.32.1754664814661; Fri, 08 Aug 2025 07:53:34 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:33 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 03/24] net: ethtool: report max value for rx-buf-len Date: Fri, 8 Aug 2025 15:54:26 +0100 Message-ID: <25b5e549975f0af88183adb2712db147bcecfb2c.1754657711.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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 Unlike most of our APIs the rx-buf-len param does not have an associated max value. In theory user could set this value pretty high, but in practice most NICs have limits due to the width of the length fields in the descriptors. Signed-off-by: Jakub Kicinski Signed-off-by: Pavel Begunkov --- Documentation/netlink/specs/ethtool.yaml | 4 ++++ Documentation/networking/ethtool-netlink.rst | 1 + drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c | 3 ++- include/linux/ethtool.h | 2 ++ include/uapi/linux/ethtool_netlink_generated.h | 1 + net/ethtool/rings.c | 5 +++++ 6 files changed, 15 insertions(+), 1 deletion(-) diff --git a/Documentation/netlink/specs/ethtool.yaml b/Documentation/netli= nk/specs/ethtool.yaml index 1063d5d32fea..77627f1ec54e 100644 --- a/Documentation/netlink/specs/ethtool.yaml +++ b/Documentation/netlink/specs/ethtool.yaml @@ -449,6 +449,9 @@ attribute-sets: - name: hds-thresh-max type: u32 + - + name: rx-buf-len-max + type: u32 =20 - name: mm-stat @@ -2046,6 +2049,7 @@ operations: - rx-jumbo - tx - rx-buf-len + - rx-buf-len-max - tcp-data-split - cqe-size - tx-push diff --git a/Documentation/networking/ethtool-netlink.rst b/Documentation/n= etworking/ethtool-netlink.rst index cae372f719d1..05a7f6b3f945 100644 --- a/Documentation/networking/ethtool-netlink.rst +++ b/Documentation/networking/ethtool-netlink.rst @@ -902,6 +902,7 @@ Kernel response contents: ``ETHTOOL_A_RINGS_RX_JUMBO`` u32 size of RX jumbo ring ``ETHTOOL_A_RINGS_TX`` u32 size of TX ring ``ETHTOOL_A_RINGS_RX_BUF_LEN`` u32 size of buffers on the= ring + ``ETHTOOL_A_RINGS_RX_BUF_LEN_MAX`` u32 max size of rx buffers ``ETHTOOL_A_RINGS_TCP_DATA_SPLIT`` u8 TCP header / data split ``ETHTOOL_A_RINGS_CQE_SIZE`` u32 Size of TX/RX CQE ``ETHTOOL_A_RINGS_TX_PUSH`` u8 flag of TX Push mode diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c b/dr= ivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c index 998c734ff839..1c8a7ee2e459 100644 --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c @@ -377,6 +377,7 @@ static void otx2_get_ringparam(struct net_device *netde= v, ring->tx_max_pending =3D Q_COUNT(Q_SIZE_MAX); ring->tx_pending =3D qs->sqe_cnt ? qs->sqe_cnt : Q_COUNT(Q_SIZE_4K); kernel_ring->rx_buf_len =3D pfvf->hw.rbuf_len; + kernel_ring->rx_buf_len_max =3D 32768; kernel_ring->cqe_size =3D pfvf->hw.xqe_size; } =20 @@ -399,7 +400,7 @@ static int otx2_set_ringparam(struct net_device *netdev, /* Hardware supports max size of 32k for a receive buffer * and 1536 is typical ethernet frame size. */ - if (rx_buf_len && (rx_buf_len < 1536 || rx_buf_len > 32768)) { + if (rx_buf_len && (rx_buf_len < 1536)) { netdev_err(netdev, "Receive buffer range is 1536 - 32768"); return -EINVAL; diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index de5bd76a400c..9267bac16195 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h @@ -77,6 +77,7 @@ enum { /** * struct kernel_ethtool_ringparam - RX/TX ring configuration * @rx_buf_len: Current length of buffers on the rx ring. + * @rx_buf_len_max: Max length of buffers on the rx ring. * @tcp_data_split: Scatter packet headers and data to separate buffers * @tx_push: The flag of tx push mode * @rx_push: The flag of rx push mode @@ -89,6 +90,7 @@ enum { */ struct kernel_ethtool_ringparam { u32 rx_buf_len; + u32 rx_buf_len_max; u8 tcp_data_split; u8 tx_push; u8 rx_push; diff --git a/include/uapi/linux/ethtool_netlink_generated.h b/include/uapi/= linux/ethtool_netlink_generated.h index e3b8813465d7..8b293d3499f1 100644 --- a/include/uapi/linux/ethtool_netlink_generated.h +++ b/include/uapi/linux/ethtool_netlink_generated.h @@ -192,6 +192,7 @@ enum { ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN_MAX, ETHTOOL_A_RINGS_HDS_THRESH, ETHTOOL_A_RINGS_HDS_THRESH_MAX, + ETHTOOL_A_RINGS_RX_BUF_LEN_MAX, =20 __ETHTOOL_A_RINGS_CNT, ETHTOOL_A_RINGS_MAX =3D (__ETHTOOL_A_RINGS_CNT - 1) diff --git a/net/ethtool/rings.c b/net/ethtool/rings.c index aeedd5ec6b8c..5e872ceab5dd 100644 --- a/net/ethtool/rings.c +++ b/net/ethtool/rings.c @@ -105,6 +105,9 @@ static int rings_fill_reply(struct sk_buff *skb, ringparam->tx_pending))) || (kr->rx_buf_len && (nla_put_u32(skb, ETHTOOL_A_RINGS_RX_BUF_LEN, kr->rx_buf_len))) || + (kr->rx_buf_len_max && + (nla_put_u32(skb, ETHTOOL_A_RINGS_RX_BUF_LEN_MAX, + kr->rx_buf_len_max))) || (kr->tcp_data_split && (nla_put_u8(skb, ETHTOOL_A_RINGS_TCP_DATA_SPLIT, kr->tcp_data_split))) || @@ -281,6 +284,8 @@ ethnl_set_rings(struct ethnl_req_info *req_info, struct= genl_info *info) err_attr =3D tb[ETHTOOL_A_RINGS_TX]; else if (kernel_ringparam.hds_thresh > kernel_ringparam.hds_thresh_max) err_attr =3D tb[ETHTOOL_A_RINGS_HDS_THRESH]; + else if (kernel_ringparam.rx_buf_len > kernel_ringparam.rx_buf_len_max) + err_attr =3D tb[ETHTOOL_A_RINGS_RX_BUF_LEN]; else err_attr =3D NULL; if (err_attr) { --=20 2.49.0 From nobody Sun Oct 5 05:24:22 2025 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (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 18D89283153; Fri, 8 Aug 2025 14:53:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664819; cv=none; b=XTUfuvLiwMQO+ZuiSt/ahDtqyqVN2oJcUK1e4qznphzAtOrhS9XmnHjCZzmE9Uq8CmjgxT0RAJAnEYXsgF8/Y/IUSYFbzuJuXe7PrV6kxT3Cpd3P7uaiyJvXSHW8L7kFkfXByRpRtlwo9cAnsuE7x9zan0woY10s2m9yYDOdp0c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664819; c=relaxed/simple; bh=pQVryzCrqKahWsbuvWHxrlarAv7fIySFGod7Nm4agT8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=P/Vp/GYaSMU1HJ+MB0C8iSTrlJTohq1Pu8xmhrwl4Z1C80Wbg3HbkagFF1xb5hn5C4UXGmi81FTHczBKQ/ri560rRtmOcylcOkg8Sw4vjlKqMXzYJoDRW3xgy97/tfq2wDHOKh8rVyWRHWP7MVjTqzzdznGTdFUMvhlCU/VeOwY= 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=JYgh8cEn; arc=none smtp.client-ip=209.85.128.52 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="JYgh8cEn" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-458bc3ce3beso13876345e9.1; Fri, 08 Aug 2025 07:53:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664816; x=1755269616; 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=Wvt1QlZQQO31LYe7Ap6eWwat4ky5qPqLAGE0m10UM/8=; b=JYgh8cEn5vmbziMZ6hKei/T6sLHFQGEBqNUCRawPOZqsz7fSx5d+ahHyZWWHBKhbGY oxPnc0bojLe9n/ISJc0FAVVNNzyK3Az5D/zemWDa3B3LBOp0o90nysneg5k8JbcDoNuk ZfdGzluUMCxKgaHGPokv/vWzhSvGEYsB6SATV51ne6qNrwrQLF6P1F+mnyrGEz3iaMlj LfpePTk9af9cX5CG1ECzc4NoBIjHEcSqcz5GcrRH6uDZ2RdwbHGRgzX7z2Lx5vlqCp76 NhNRtZAfQVrPvLmnZOe5CpvAZolhAB6rI3nuvmMczfjfLT1aXMSOdDSqoxSeI34NMTtm 8U2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664816; x=1755269616; 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=Wvt1QlZQQO31LYe7Ap6eWwat4ky5qPqLAGE0m10UM/8=; b=NIBXfGVIKziMx1fPBus5X1ZQs+U94gg51zn1tugR8rpmXjOEVkr+BnOwMGseH8Kse3 FfauL2129K6m2Iu8d5mpnOh6jKf9RVVD4BvXKxLCWzRaJF/0fa3qhYz6eGTszxcVUnl/ uV2KmKIjWN5binBnw1h6fZaNjmJEo27zdOJETjAp2e6mdCqvh//2KKJsPAAapLGxZLMu jZECHda93q6kfZNM54iHFd9ZpAn8W4TuBsNxhSE+nfZYsN4yj8qfbzdAVu6ulUmgwbqU 4NVYVCwb7+oKJIx4Sev6F3uEwUJokxwHWvm8ISDw/HGZZ/nu5hXLxhjRwk4kIUhjQZy/ se1Q== X-Forwarded-Encrypted: i=1; AJvYcCWpHD4CEw4+ka3Ds0AZt/Hh3dMD1v0rdQy7iijxlbB1dBKFNMwWHxIpoKlKJC7+AcEK8fdMuGsRmEMvtsw=@vger.kernel.org, AJvYcCWrgtquWXVPtJSePTkFzaPXWhhbXLXlrGWGO09qLPtDUddyxF+H1jsRMETlug8Maw4Y+XduDXTV@vger.kernel.org X-Gm-Message-State: AOJu0YwCwpIuecv65+kz/H0/PoJvHYa7uK06kl4c+3+yfESHdO4GjAOu HhTmknrtfLfbR/EUnw+bT4/93Dx0l1Lmv/J/35yz+0MVLkD+IxpMu3rB X-Gm-Gg: ASbGncucFqG8WlJ+UIAHMZcGNEJUUdqUxG2H4wpes5xGP+/tij/Fj2e27vnHqwDU4Lv s6VjhjDDxHfjk8TOnXc5czaWSd9iHSOV8pJ1o9dv2VMygYi3Yd/DVjkY7d1/4SHT7TbqxCiRXkw LbFn8iwuABe5hPpwpCYTJPzwkcxHXwldNk8RDX3UNpuWA1uXCyLJrPQGzXJ+lUb54fK5bbGN2kE h7UwcVnXZSlx5edIIPkVYDESFjm9RZCFdl4sxPfZWrZB3E77S7FNq5YtZmjk3S4+cAtTnUZYSEz oCEzW08g7aI14PtwekMHAPAtm7LUUgTxcY+p2U9+8I3Q+2vPMg8qjV3XgxHM7Ua3QNirk5JjOCF oIlaYZg== X-Google-Smtp-Source: AGHT+IGnsotUMAXWQ9z6oBZguViBC9JRi+3dpda3wxbyXEJhPhYZPfjIhazyp7c+hU+dVoUHxploFQ== X-Received: by 2002:a05:600c:1c16:b0:459:d780:3602 with SMTP id 5b1f17b1804b1-459fa492ef8mr10650795e9.23.1754664816216; Fri, 08 Aug 2025 07:53:36 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:35 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 04/24] net: use zero value to restore rx_buf_len to default Date: Fri, 8 Aug 2025 15:54:27 +0100 Message-ID: X-Mailer: git-send-email 2.49.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 Distinguish between rx_buf_len being driver default vs user config. Use 0 as a special value meaning "unset" or "restore driver default". This will be necessary later on to configure it per-queue, but the ability to restore defaults may be useful in itself. Signed-off-by: Jakub Kicinski Signed-off-by: Pavel Begunkov --- Documentation/networking/ethtool-netlink.rst | 2 +- drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c | 3 +++ include/linux/ethtool.h | 1 + net/ethtool/rings.c | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/Documentation/networking/ethtool-netlink.rst b/Documentation/n= etworking/ethtool-netlink.rst index 05a7f6b3f945..83c6ac72549b 100644 --- a/Documentation/networking/ethtool-netlink.rst +++ b/Documentation/networking/ethtool-netlink.rst @@ -983,7 +983,7 @@ threshold value, header and data will be split. ``ETHTOOL_A_RINGS_RX_BUF_LEN`` controls the size of the buffers driver uses to receive packets. If the device uses different buffer pools for headers and payload (due to HDS, HW-GRO etc.) this setting must -control the size of the payload buffers. +control the size of the payload buffers. Setting to 0 restores driver defa= ult. =20 CHANNELS_GET =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c b/dr= ivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c index 1c8a7ee2e459..1d120b7825de 100644 --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c @@ -397,6 +397,9 @@ static int otx2_set_ringparam(struct net_device *netdev, if (ring->rx_mini_pending || ring->rx_jumbo_pending) return -EINVAL; =20 + if (!rx_buf_len) + rx_buf_len =3D OTX2_DEFAULT_RBUF_LEN; + /* Hardware supports max size of 32k for a receive buffer * and 1536 is typical ethernet frame size. */ diff --git a/include/linux/ethtool.h b/include/linux/ethtool.h index 9267bac16195..e65f04a64266 100644 --- a/include/linux/ethtool.h +++ b/include/linux/ethtool.h @@ -77,6 +77,7 @@ enum { /** * struct kernel_ethtool_ringparam - RX/TX ring configuration * @rx_buf_len: Current length of buffers on the rx ring. + * Setting to 0 means reset to driver default. * @rx_buf_len_max: Max length of buffers on the rx ring. * @tcp_data_split: Scatter packet headers and data to separate buffers * @tx_push: The flag of tx push mode diff --git a/net/ethtool/rings.c b/net/ethtool/rings.c index 5e872ceab5dd..628546a1827b 100644 --- a/net/ethtool/rings.c +++ b/net/ethtool/rings.c @@ -139,7 +139,7 @@ const struct nla_policy ethnl_rings_set_policy[] =3D { [ETHTOOL_A_RINGS_RX_MINI] =3D { .type =3D NLA_U32 }, [ETHTOOL_A_RINGS_RX_JUMBO] =3D { .type =3D NLA_U32 }, [ETHTOOL_A_RINGS_TX] =3D { .type =3D NLA_U32 }, - [ETHTOOL_A_RINGS_RX_BUF_LEN] =3D NLA_POLICY_MIN(NLA_U32, 1), + [ETHTOOL_A_RINGS_RX_BUF_LEN] =3D { .type =3D NLA_U32 }, [ETHTOOL_A_RINGS_TCP_DATA_SPLIT] =3D NLA_POLICY_MAX(NLA_U8, ETHTOOL_TCP_DATA_SPLIT_ENABLED), [ETHTOOL_A_RINGS_CQE_SIZE] =3D NLA_POLICY_MIN(NLA_U32, 1), --=20 2.49.0 From nobody Sun Oct 5 05:24:22 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 CCE8B283CAF; Fri, 8 Aug 2025 14:53:39 +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=1754664821; cv=none; b=cgAQWutX6EvYpJLIvW4Ui1zLt757k6l/JjtHVQNA8/aBtQjKmw250QSsZ73QguOOt1xRyqgcNZdSsYwjoq5U4/laWvkOeSrDqo4LmmGmQlQgCjT8hsbjD1bpatmJbu2jFSyy+hLOlsQNdZOmh95TqH9aMbbr0n304weFed0jNeA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664821; c=relaxed/simple; bh=gYb8YBi9GClyBnpN+21boWlLrjiO7+W2cPrK+FgitMo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CT6v8Go9LNj0/BPNltB5OU8MSsLRIdcZfOVJ01v17by/p17X1vOdlH4uqYP48edk5Hgf8b5SBR4WRmSdcJZDDk+57v9O5xPtmhNKSoKcxiK54vuQCOVAOzOY3TF+MnLLxMnKDy/oABdjD+dolLL36m7sjevPcksgm5uBzViHSi0= 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=GdnBrMlb; 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="GdnBrMlb" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-451d3f72391so18191795e9.3; Fri, 08 Aug 2025 07:53:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664818; x=1755269618; 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=pfQud3JQW5FBjJboy5AodeO9y125Lb1Qj1exFzfx7Sg=; b=GdnBrMlb/mrcOqfhvA3kwhndlj8bEs6sfP8X46sJnJtYQlN6hoZTebkCHV2FK0Y5jH PwJ05BY6sv0/JW4AVvro79sC4TZKMxD/TEtDtGIchSK0WDOQRxX2ptc1avnPO+Swnf+A Iwr73+CZRMSpqIQILjBGQEgagUCm2sLil3hmC/Q4YoCZNBMJsms6MA11JIek9lU/Akyf kyN46X0CM1NkqrEs/mgQAhhsIS0tt6JtfNH+UUoJwgYvGwe/vNFYthzbc5IWT8HzDtl/ I6dSqHwAcZ+hVLTzPdgOLTkgbXrjRRUJB1oQMx1XBTt+iD2ZKucFjimi87ngeDKVRj7t cW0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664818; x=1755269618; 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=pfQud3JQW5FBjJboy5AodeO9y125Lb1Qj1exFzfx7Sg=; b=MKtS6mD/jrGAZAPlzkOvMJBDloaZ9PJqv57FdXPKPaF8qy6yaAI2aJGGqGT0StDDBo Dpvk1YT7Fq0f8h0y1KIRWcMxVMdUTgIlh+E8AOIzLpdF/j4rK/zKZS2g8M+v6Us76RRr wxTSXg3rps7YDuwqiiu8hicNirnrtG1s9xQ5GajKcKwU3D7VvOs//33My/qTW1LFQlBt wxBmgzOG0DQVpsJxPUj4U528HQ1hErEw0fsUZal1FBKC9hDVEskPrqrkjoJhDlih15Di eBYMw97PIjoy8LwzV0OyB2VkvEAR9ZOyVTay1gtRLWywCqVK4ZeX0iq6pZE0GCDURV4V 9CBQ== X-Forwarded-Encrypted: i=1; AJvYcCWM1C/q8BNqpMbJoa/AZhStbZ+l0Fot0TnFqYb5w3M9HpWKE8lWVVAPkDJPYuXP5axu9dm/VExh@vger.kernel.org, AJvYcCWwsbc4ciwPPn+8P/XhbHv4kkQjNMJLNokNyC533NLJF8DCbhl7oPX/OK5NjbX95TkQfcoUkyNlK4e+XOA=@vger.kernel.org X-Gm-Message-State: AOJu0Yzt/S1dPR9lela1BtKeipct/kojcVGyk5WiuWcKkhO14BKv0bsv T5PWg7SZT70mm8zrNxIDCUCaFiQxbX0jVhvgDCfF/KoN4wNKATjOmp5p X-Gm-Gg: ASbGncuxs882LpcPDskdxzKQQkAlZrKmzmDnes1gg1MVeqtkIhroFeGVdGrA8nKa2jm qfhwftMEqP8pN6IhPhi6KpOsyY/PGcrtS4D66nAtA14NVaelo0JLjFIUNi8MXAqGufXl9a84l7I Gn86aItgueM8Mx4Mssfi70ntH/Ufk0Ywk0AcFmXDWQLToEYBsVRh20aOvM4nNO5LeO+04nuCI4k ea9irj61wkhyitYTk6rqgNOqDBXuJBLcXlYzmyyhcUCzCNDIg20AdiXnxRJdu8jdJFXms9ysl3j Pzp3yzd/YcJR6E7k4UtIxPFFyP+Hr+j4Hw+5spSaEyapwd1UNZHpEmr0wyr5SMkehtLq2icbEOt H1tvpIA== X-Google-Smtp-Source: AGHT+IGQjwfN16gVY9Mf1H2mvjT+KJXUdU0w+SvlhvmL6NT1hrJH0Dqvg9HvX7b6+VmSUc22Gj2hbg== X-Received: by 2002:a05:600c:45cd:b0:459:e025:8c40 with SMTP id 5b1f17b1804b1-459f4eb4004mr32289145e9.10.1754664817723; Fri, 08 Aug 2025 07:53:37 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:36 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 05/24] net: clarify the meaning of netdev_config members Date: Fri, 8 Aug 2025 15:54:28 +0100 Message-ID: <66b588eaea1a542e1929dd72671ae16fc6334c49.1754657711.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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 hds_thresh and hds_config are both inside struct netdev_config but have quite different semantics. hds_config is the user config with ternary semantics (on/off/unset). hds_thresh is a straight up value, populated by the driver at init and only modified by user space. We don't expect the drivers to have to pick a special hds_thresh value based on other configuration. The two approaches have different advantages and downsides. hds_thresh ("direct value") gives core easy access to current device settings, but there's no way to express whether the value comes from the user. It also requires the initialization by the driver. hds_config ("user config values") tells us what user wanted, but doesn't give us the current value in the core. Try to explain this a bit in the comments, so at we make a conscious choice for new values which semantics we expect. Move the init inside ethtool_ringparam_get_cfg() to reflect the semantics. Commit 216a61d33c07 ("net: ethtool: fix ethtool_ringparam_get_cfg() returns a hds_thresh value always as 0.") added the setting for the benefit of netdevsim which doesn't touch the value at all on get. Again, this is just to clarify the intention, shouldn't cause any functional change. Signed-off-by: Jakub Kicinski [pavel: applied clarification on relationship b/w HDS thresh and config] Signed-off-by: Pavel Begunkov --- include/net/netdev_queues.h | 20 ++++++++++++++++++-- net/ethtool/common.c | 3 ++- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/include/net/netdev_queues.h b/include/net/netdev_queues.h index 6e835972abd1..c8ce23e7c812 100644 --- a/include/net/netdev_queues.h +++ b/include/net/netdev_queues.h @@ -6,11 +6,27 @@ =20 /** * struct netdev_config - queue-related configuration for a netdev - * @hds_thresh: HDS Threshold value. - * @hds_config: HDS value from userspace. */ struct netdev_config { + /* Direct value + * + * Driver default is expected to be fixed, and set in this struct + * at init. From that point on user may change the value. There is + * no explicit way to "unset" / restore driver default. Used only + * when @hds_config is set. + */ + /** @hds_thresh: HDS Threshold value (ETHTOOL_A_RINGS_HDS_THRESH). + */ u32 hds_thresh; + + /* User config values + * + * Contain user configuration. If "set" driver must obey. + * If "unset" driver is free to decide, and may change its choice + * as other parameters change. + */ + /** @hds_config: HDS enabled (ETHTOOL_A_RINGS_TCP_DATA_SPLIT). + */ u8 hds_config; }; =20 diff --git a/net/ethtool/common.c b/net/ethtool/common.c index 4f58648a27ad..faa95f91efad 100644 --- a/net/ethtool/common.c +++ b/net/ethtool/common.c @@ -882,12 +882,13 @@ void ethtool_ringparam_get_cfg(struct net_device *dev, memset(param, 0, sizeof(*param)); memset(kparam, 0, sizeof(*kparam)); =20 + kparam->hds_thresh =3D dev->cfg->hds_thresh; + param->cmd =3D ETHTOOL_GRINGPARAM; dev->ethtool_ops->get_ringparam(dev, param, kparam, extack); =20 /* Driver gives us current state, we want to return current config */ kparam->tcp_data_split =3D dev->cfg->hds_config; - kparam->hds_thresh =3D dev->cfg->hds_thresh; } =20 static void ethtool_init_tsinfo(struct kernel_ethtool_ts_info *info) --=20 2.49.0 From nobody Sun Oct 5 05:24:22 2025 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (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 B2838283FF2; Fri, 8 Aug 2025 14:53:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664823; cv=none; b=pfaWfz5c8M7QKeabP1Rf9cUxEBe9xz8GGj+/PKUkYh7SMRvAJiYlnVQDVkgiMHVi07Lu/mPsU6A61qF5VVm7ETnnxszyYvtTgi6t7vt8HpLNYGfSiqeOrIogX/LeKww3b2ftzuuJvFJMyUDjyqhOMWnj5DjlFhFBiyTVSVHLH4Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664823; c=relaxed/simple; bh=FlAybfuKHbG6+a7ZbRKEB6/E7DbObThw5ayznKjijpQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=g7t5dA2XrYU4ev7vWUj5AMGKL0tfymK+sgLlMnlL9/j3hISWNdVrEIrKdQvT2y6kG4Axr+3kw/BnxucgPsJ8B38ZT/RfzYQ2KuMgrPDptMdBd7G+/UxnFfELmalMM5TZFcWDLyLvLxG9PgKKsZMvItm3p9QExNGjxVTjRjOQSX8= 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=bTO7Wjlq; arc=none smtp.client-ip=209.85.221.54 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="bTO7Wjlq" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-3b786421e36so1174697f8f.3; Fri, 08 Aug 2025 07:53:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664820; x=1755269620; 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=s6CWZWRRbyysTyJbo/8Elocwsz5g3qKnhCwDIxLbwp8=; b=bTO7WjlqozRZS6dGXuoW9SkMoOHgW2OrkciXMa/49tdOOHn33S8PZH99HA+MRHyLNQ K+8PscCsTLYrJEbT1G9FbkMR7lE5oNHSTTLI+neIYY9Lf9rfIcWwqSc6mqIb4wZ47hH5 9e2ePtcZvdHt0ueBw1Zzts7PI9PBUvFX3i8gcjrklCECKCV0IWUMXVT6afmy2euffw1+ xg3laygiyPDCEVEsBPCmm1Z2/0Z8E7jh6lPotC71dl6vLnsHcKYNqxCSkfhLqMpiQjPI WLDWNmswZptXWPiyTcJwWJLfmOIlC8TItayNZPlgD6UHVg8dN2248cV8wrXw2iVNULlV 6Lag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664820; x=1755269620; 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=s6CWZWRRbyysTyJbo/8Elocwsz5g3qKnhCwDIxLbwp8=; b=f2CdFC/YgcmC8RnnM9KOtVH/RbCBusRHRNSybFi9tm9a+BmUCJEovhHbFs2zoM36qC 88sUIP9xeZ5winQGjmuf3s88+Kwbh3eKRV3eft55jQ78yc7cjmz8almPyYgTnI/64Qvn GvJUN+N+MqDqlHhr4cmnYq8S3tUnhAcJxlf88dzJu8pqVo56BMUW+WTda80OiqOd+7Ea YrwxS9wFZ7VeAE12S3HrAJVTNLaKVYMCZ2ghDPBMQ/nYoKEXF22Mc1mcXmGg6K0ZCBkU 6uYIXDp1qYSS38GB7a87YPP0mH7o3cbUeeFhqaNTI17LSs7s+Cem7ZdIJVGnJq+CuZRC vxdQ== X-Forwarded-Encrypted: i=1; AJvYcCU6FbBHsx3nHNp22OSqyyUDT+Alfws1OGYwMecgM60Q0qeJYyvJ+KRQ03PciSI/Cik4Ka7cXpNN@vger.kernel.org, AJvYcCXAXcjcewigo5XMild/AgP7CX/3lKhhS77l+xqyGt5xOnGjxyL3cNy4I898FioxeAjr/udIpNz9apv44P0=@vger.kernel.org X-Gm-Message-State: AOJu0YxyOqXHPT4GiANUILgHTDAQxn+WpEYTs5HZCn7EcseUn2/PdS76 adSYVwy5azuEiXWWyYhJVvghQD0dlts/MuMfPWki6adsqQIbIm7lWVjt X-Gm-Gg: ASbGnctb4yK6dELBbiyn9QTYR94C+JIprm4+p8NJ8rzFFVXSTOs94GUfwujRSJx7ooF 2o1SPOcWIOkGdbn9DrnqmrSalK6fKCfdjMaPQdgtctvajMLfkYF5467dF8R+OdbSHf9wTOBVxfQ LUEJTKXg6CDmiNYEOEDNt+YKVaddOksJE5RaPcD25va/S1H642zSyq9H2A8XThVpNi52lSBedGF qfYwdMNmCqMQKJnua/M5kKiM0ZzxMIAcd5dt2BaNhEPCj8C/BPAou8BAmg4kGSQHywsMS0VB6ix MvmYti5uf1im16LpZrv6oq278HwunXZBdBPD3bT5U3V3TbQkanFnnCJcRZZfVAShY6gHF7JHO3w XM2gFGw== X-Google-Smtp-Source: AGHT+IGzB3AKdcal9ILqmqOI71qV29JNxR+xFS/mmxw9AnjF1rxQ34VTCXNHqPNDIeUpsAYgLqlEoQ== X-Received: by 2002:a05:6000:1ac7:b0:3b5:dd38:3523 with SMTP id ffacd0b85a97d-3b90092ca63mr2770273f8f.8.1754664819417; Fri, 08 Aug 2025 07:53:39 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:38 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 06/24] net: add rx_buf_len to netdev config Date: Fri, 8 Aug 2025 15:54:29 +0100 Message-ID: <852f27dc0a77625b55869445920cb2daab3f2cbf.1754657711.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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 Add rx_buf_len to configuration maintained by the core. Use "three-state" semantics where 0 means "driver default". Signed-off-by: Jakub Kicinski Signed-off-by: Pavel Begunkov --- include/net/netdev_queues.h | 4 ++++ net/ethtool/common.c | 1 + net/ethtool/rings.c | 2 ++ 3 files changed, 7 insertions(+) diff --git a/include/net/netdev_queues.h b/include/net/netdev_queues.h index c8ce23e7c812..8c21ea9b9515 100644 --- a/include/net/netdev_queues.h +++ b/include/net/netdev_queues.h @@ -25,6 +25,10 @@ struct netdev_config { * If "unset" driver is free to decide, and may change its choice * as other parameters change. */ + /** @rx_buf_len: Size of buffers on the Rx ring + * (ETHTOOL_A_RINGS_RX_BUF_LEN). + */ + u32 rx_buf_len; /** @hds_config: HDS enabled (ETHTOOL_A_RINGS_TCP_DATA_SPLIT). */ u8 hds_config; diff --git a/net/ethtool/common.c b/net/ethtool/common.c index faa95f91efad..44fd27480756 100644 --- a/net/ethtool/common.c +++ b/net/ethtool/common.c @@ -889,6 +889,7 @@ void ethtool_ringparam_get_cfg(struct net_device *dev, =20 /* Driver gives us current state, we want to return current config */ kparam->tcp_data_split =3D dev->cfg->hds_config; + kparam->rx_buf_len =3D dev->cfg->rx_buf_len; } =20 static void ethtool_init_tsinfo(struct kernel_ethtool_ts_info *info) diff --git a/net/ethtool/rings.c b/net/ethtool/rings.c index 628546a1827b..6a74e7e4064e 100644 --- a/net/ethtool/rings.c +++ b/net/ethtool/rings.c @@ -41,6 +41,7 @@ static int rings_prepare_data(const struct ethnl_req_info= *req_base, return ret; =20 data->kernel_ringparam.tcp_data_split =3D dev->cfg->hds_config; + data->kernel_ringparam.rx_buf_len =3D dev->cfg->rx_buf_len; data->kernel_ringparam.hds_thresh =3D dev->cfg->hds_thresh; =20 dev->ethtool_ops->get_ringparam(dev, &data->ringparam, @@ -302,6 +303,7 @@ ethnl_set_rings(struct ethnl_req_info *req_info, struct= genl_info *info) return -EINVAL; } =20 + dev->cfg_pending->rx_buf_len =3D kernel_ringparam.rx_buf_len; dev->cfg_pending->hds_config =3D kernel_ringparam.tcp_data_split; dev->cfg_pending->hds_thresh =3D kernel_ringparam.hds_thresh; =20 --=20 2.49.0 From nobody Sun Oct 5 05:24:22 2025 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (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 11394284689; Fri, 8 Aug 2025 14:53:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664824; cv=none; b=rtcg4l/KrCilBlYRJ2t+OTqd9dChIBhlma1aKSXG0GXFRd0d9AnTCGONXfJOstpvoE8L/Av9DhtiUFISo+T/eialNtG19M5e/PsuVSdxnHqiNLMvI8rkpTuxLE2NAHY9H3HT5WEhHWbu6OjoVuMFDpmvmHdjMDpS3yvpbZA8ONU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664824; c=relaxed/simple; bh=Fw+Uj1qwutPJeJyS7rAqSQ4inTZAJjhMA2CJRE1eyqU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ewKKXpijimJaVufKw8pqh4DcTgNH1FKR7fPUua0OVdpfaxIBaVms3n2j1SpbJ/O821u9R6GM3h0DTqJoXY62oXGQ3ufuhJqjJQW/fZN4wADWYjQWsthM6bqO+MQzPv5kalckkr4wAl8o/h6s4p5A9+ZL+X9tLFnTf2Gnab8dN2Q= 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=CTXTQfQ+; arc=none smtp.client-ip=209.85.221.47 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="CTXTQfQ+" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-3b786421e36so1174709f8f.3; Fri, 08 Aug 2025 07:53:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664821; x=1755269621; 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=479Iox4TpmoIuO339LLtQWyhZDh8hXMlcmQUcQNS1f0=; b=CTXTQfQ+NN890GeytngDbMbl2guFEeD9ZQKwNXeCepkGt6uYTdBTnxouWVvNiYpGr6 iLgsPlS9jiTQnWAL5hpwnsMj3mwRy+kzM/adJ/d1eF5owJDJXRbuFC5AMSX+594igPfL SM3eZ+olGS3zgiGE4rIKkh0FXecagEkDMDOp+KqJRhlcKdDfb+nHMn9hxbIvN0zTWbiR c5Je5WVQdTqOpaSPmTPHBCZH8njBmACHZ6Vc5W2z0bF280pmE3eWWdk9u803vqJmihZ7 Qb0q5MjbrF5+/QtdY/Zi2LQ45bAotRTfCbloIaoohlfCeZP9uyJ0+LTHnGFpohWrxRPL gcwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664821; x=1755269621; 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=479Iox4TpmoIuO339LLtQWyhZDh8hXMlcmQUcQNS1f0=; b=oLhaPgRfFvEomXo7D8R206uOtVLxUlOlEteFTXQwBE+eT4zLp+ZKWpSn6vL6nlqad6 a9DmKneBCfnOfz7kAJ0tCNFGLMVJrVyOrNhR6lvQcoKYX6l9UvynKrRxPtbT/0m1rD7i ZWOwf8FxKPSuVr2lLbVzRPMObiTXb2mQ13mQaLsry4vt36J/u5xcAOaXmnS1xjD9IeKA fFsnuaXipkW2IcGAuPhWJkmh/rArLDYDivUbtp6IZAgPrbPb35l7alAZlUbpxhIrwjCw Gn7rXWLKRLzDTwIxXfkEb9TkAvybtj2lyHnT0cp+j2pp+4EPGHPFgFqNQU5W5nIaHEZR PI4Q== X-Forwarded-Encrypted: i=1; AJvYcCWSekLaVxYXFRG6GKPlm1xrAnh7afUJf8KKfiM5R+bWLk3zYJgZAaRVopJNyJqIktEFonpDG601@vger.kernel.org, AJvYcCXO1YqLcwKxpZwt1Eb/1qEPVMbSLCvvxPcMpYetRunJDBhFv1nHNkE3UpxIMlJ316ddSA8XEOvYPzoyxDw=@vger.kernel.org X-Gm-Message-State: AOJu0YyGWeTsBd7wJZkS1evM145bGnpY0y8bMlEVz6ACZ3YL/Jwrk6Bs vobjbb19zrmSFI+3gKcRWbNp3Uh7khq7FoduztEBVubhywfB5D6UV1O3 X-Gm-Gg: ASbGncvTOrS6lEyYoEywzjDsipJBqlXwrn5lm5jyxo3ilJuXD3z2BXJtFxUEShr90wy nvmqw0BlonurabVdiAlDsyyZ7RsQ+Yj39ChhMgtd+tUajuxmUb74U5H67R1dwR/v+eMUR2oDD1x vr3qt+9XXKMUln05kdUouOp+8RHtxB904dtw2BTzpklDO2zaRK0nFRuJFzE8CdLuXFzhgnPU+N8 Vr7iEZ7nqXruCBSeAkZvkS6QMob3v+PYvMstjphVOzgMt0RM/RUxv2Mwv/PVvIIYhRSbDnCn5zA wSQ40yhAMZwvuVLhsWnzdARne4lRSK5PKmDGnYXevq3MKPcTy9H1hK4OUuI84y+E5rAvhp5lldg 22SZDq8ABSclkb3cV X-Google-Smtp-Source: AGHT+IFMqOBhikGjkJjXcilmTkuCIJ2f1yxNfg8htEmjawrBu2vVFHSZgFl8mz3pwetVK+bx7diUGA== X-Received: by 2002:a05:6000:310c:b0:3b8:fb9d:2482 with SMTP id ffacd0b85a97d-3b900b51015mr2463389f8f.42.1754664821157; Fri, 08 Aug 2025 07:53:41 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:40 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 07/24] eth: bnxt: read the page size from the adapter struct Date: Fri, 8 Aug 2025 15:54:30 +0100 Message-ID: <59e77953977aefbf0b0e869c5c97385f88c32d1f.1754657711.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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 Switch from using a constant to storing the BNXT_RX_PAGE_SIZE inside struct bnxt. This will allow configuring the page size at runtime in subsequent patches. The MSS size calculation for older chip continues to use the constant. I'm intending to support the configuration only on more recent HW, looks like on older chips setting this per queue won't work, and that's the ultimate goal. This patch should not change the current behavior as value read from the struct will always be BNXT_RX_PAGE_SIZE at this stage. Signed-off-by: Jakub Kicinski Signed-off-by: Pavel Begunkov --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 27 ++++++++++--------- drivers/net/ethernet/broadcom/bnxt/bnxt.h | 1 + drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 4 +-- 3 files changed, 17 insertions(+), 15 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index 5578ddcb465d..7d35e9a8869b 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -900,7 +900,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 || PAGE_SIZE > rxr->bnapi->bp->rx_page_size; } =20 static struct page *__bnxt_alloc_rx_page(struct bnxt *bp, dma_addr_t *mapp= ing, @@ -910,9 +910,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 (PAGE_SIZE > bp->rx_page_size) { page =3D page_pool_dev_alloc_frag(rxr->page_pool, offset, - BNXT_RX_PAGE_SIZE); + bp->rx_page_size); } else { page =3D page_pool_dev_alloc_pages(rxr->page_pool); *offset =3D 0; @@ -1144,9 +1144,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, bp->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, bp->rx_page_size); if (!skb) { page_pool_recycle_direct(rxr->page_pool, page); return NULL; @@ -1178,7 +1178,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, bp->rx_page_size, bp->rx_dir); =20 if (unlikely(!payload)) @@ -1192,7 +1192,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, bp->rx_page_size); memcpy(skb->data - NET_IP_ALIGN, data_ptr - NET_IP_ALIGN, payload + NET_IP_ALIGN); =20 @@ -1277,7 +1277,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, bp->rx_page_size); } else { skb_frag_t *frag =3D &shinfo->frags[i]; =20 @@ -1302,7 +1302,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 bp->rx_page_size; } =20 --shinfo->nr_frags; @@ -1317,7 +1317,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); + bp->rx_page_size); =20 total_frag_len +=3D frag_len; prod =3D NEXT_RX_AGG(prod); @@ -4460,7 +4460,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)bp->rx_page_size << RX_BD_LEN_SHIFT) | RX_BD_TYPE_RX_AGG_BD | RX_BD_FLAGS_SOP; =20 bnxt_init_rxbd_pages(ring, type); @@ -4722,7 +4722,7 @@ void bnxt_set_ring_params(struct bnxt *bp) bp->rx_agg_nr_pages =3D 0; =20 if (bp->flags & BNXT_FLAG_TPA || bp->flags & BNXT_FLAG_HDS) - agg_factor =3D min_t(u32, 4, 65536 / BNXT_RX_PAGE_SIZE); + agg_factor =3D min_t(u32, 4, 65536 / bp->rx_page_size); =20 bp->flags &=3D ~BNXT_FLAG_JUMBO; if (rx_space > PAGE_SIZE && !(bp->flags & BNXT_FLAG_NO_AGG_RINGS)) { @@ -7034,7 +7034,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(bp->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); @@ -16563,6 +16563,7 @@ static int bnxt_init_one(struct pci_dev *pdev, cons= t struct pci_device_id *ent) bp =3D netdev_priv(dev); bp->board_idx =3D ent->driver_data; bp->msg_enable =3D BNXT_DEF_MSG_ENABLE; + bp->rx_page_size =3D BNXT_RX_PAGE_SIZE; bnxt_set_max_func_irqs(bp, max_irqs); =20 if (bnxt_vf_pciid(bp->board_idx)) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethern= et/broadcom/bnxt/bnxt.h index fda0d3cc6227..ac841d02d7ad 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h @@ -2358,6 +2358,7 @@ struct bnxt { u16 max_tpa; u32 rx_buf_size; u32 rx_buf_use_size; /* useable size */ + u16 rx_page_size; u16 rx_offset; u16 rx_dma_offset; enum dma_data_direction rx_dir; diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c b/drivers/net/et= hernet/broadcom/bnxt/bnxt_xdp.c index 58d579dca3f1..41d3ba56ba41 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 bp->rx_page_size; struct bnxt_sw_rx_bd *rx_buf; struct pci_dev *pdev; dma_addr_t mapping; @@ -470,7 +470,7 @@ bnxt_xdp_build_skb(struct bnxt *bp, struct sk_buff *skb= , u8 num_frags, =20 xdp_update_skb_shared_info(skb, num_frags, sinfo->xdp_frags_size, - BNXT_RX_PAGE_SIZE * num_frags, + bp->rx_page_size * num_frags, xdp_buff_is_frag_pfmemalloc(xdp)); return skb; } --=20 2.49.0 From nobody Sun Oct 5 05:24:22 2025 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (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 C38BA284B58; Fri, 8 Aug 2025 14:53:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664826; cv=none; b=JfxmreYuMBP1QkF17XwHKSCU1M4aiWLWOtd2QV6FjMaA/f4SAJroloSrs4wJkLdznz1kMqnxDsM6vTelvJ5m5yORaQuNyMr19iydV79jr5tIhNaxxcrtoyhd4hbaycsleL4bPvgFEH/EC9zfsyDbfP9LE4iQrrDB674I0WmlRJs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664826; c=relaxed/simple; bh=8AuugD7u6Os9V9xHHyUWuEC+AJTO0va3/Wiv1hV7VKM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=i/86FL9xVD8JpHTu9ITdn6YuK5SSQr5+SNWHii0s3eWABL1pgO7dpAJHaY+eRMP6kywg1xMu2h3dAzUoX8hmHsq7iM5iDmAxxoVgKAaGARTM9wk0LMAJJw+fX26XdxeTU/dw4i8LBJq8siERmmg7mT3vG0UcE5Pk/BAUk2xthSg= 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=hlRWUihk; arc=none smtp.client-ip=209.85.128.41 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="hlRWUihk" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-459e72abdd2so13056735e9.2; Fri, 08 Aug 2025 07:53:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664823; x=1755269623; 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=63xAygkwf//ATk/Q/oVaQFbEFKUgcZEDqhwnsvHDxJ4=; b=hlRWUihkVylCU/EU4Sw5I6xahekfwO00trTZvNMIrX8+13XOYaL3gg2zB4HThObQ+G NCiySd2MkAqv0zhBbXxE/rdb+NBekQ2k/Y/SjJwfOA3uzDhw/oQ7PEN1uVbm99tq2jJx Vf4iFcV/khYv3AV3tBaKjopUSMIbwnED0uNbWsYGFhC+/NjU9sno3OC9t/sxEsmv5hgW ea4zWEKouM4dbfODQfNP/VnpnGvPgtRENX1eFW0IhlTIDtjSO7ZxBE3Zc5pJPss1uFUb mOAoRDxLiWxk7cjAIPvOsZBHCzgJRj4DJ5xNwaDfnO+jZTgnnGBgjg0U2i7XcO+7UXDW h+7w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664823; x=1755269623; 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=63xAygkwf//ATk/Q/oVaQFbEFKUgcZEDqhwnsvHDxJ4=; b=QdflT1gUU52+z1t9LiMPFtPEtRRoG+dDqlp9jcBkpGhO9ltMgrW8yj/zCg+E61v1ie MPDvmBJ3tP0+3zAoUqRhsQ0+B1BvK+WACDrIZKCFTYt/a9rvybfST5aeK1TqIAxY3S0n b2+r06Bsz9XXy8JrTrID9RKVmvnbDTiMEmArJmsCw7M2e18/iFRg5rQapTQx6p4nruxM KQV+V7d3YI9xiWnq85UELr2lzDHN2zElRtOlfuW/MnFYfD5Cb4VCuHGW+azAueAGnb83 AORHv4LNZQD462wk285YdkGL0nq4CT2DNSLVaZRU4foEWDHziT/Yq5PQBadJ0PLQq6nI amoQ== X-Forwarded-Encrypted: i=1; AJvYcCWRZXxi5HrXqJhc1y+chI2479Fe/XtJnjOK4j7fWQOMEaABo+PjDVWcP58uOqIHPjC0kz239zS0oY0eMIM=@vger.kernel.org, AJvYcCWt0R76HqY6wDE6l5989DRKTfTGHOKUkwFPkPdhmPieER1xRUhldZ4IQieYFuAOedhWDS59+nSD@vger.kernel.org X-Gm-Message-State: AOJu0YxDUMgALxefmSZEiioTWFp+qHvFh5LWCLTCAQ+L5ZOt1YNUeqKz mZFIx9umnSMJIMWCQ8OgHrZQA4NwkLew7OKQBYj3DNB3G8wnGsA/TyFW X-Gm-Gg: ASbGnctL87dKcIM/Kfkm2x95jx22FzuR9cnFmhVvEx0dYXW4gadiaYv7+iOqC81g+cs /7w1FX2nwigv2KfQ0s0UTMG2ZvHJpDBhnnU+gpF4hOQhKj4zCuiKpTqe1t0ul/U0gF4JK02HBii H+ShpqANOBhkOBIJ3UoEA3KlWX0OZ4+rRSkXrRtVn/g06R25N2UGsXH4faIdr8kSGWW3QD99t6h brSJhzLQEhHOv0Ez9kxIX1QeizEgNioRwXwh6vO30PFNszxmOtMmrYT9BhnRvjl/13x5JCK0jvV WG3yYf+0nMDgzqA/cZBj4NI9zF9vWQa+Bf6wIp7Kx4gz9b7gzSvEibxphpwgxLyJqIBNjkyfbz4 xZRPCPA== X-Google-Smtp-Source: AGHT+IHDNumAFn1S4he3FqucoQUqx+a6D7ePiLpnKlXz7dt8WLYPGcMLu+iZklYPsF82FyQ1RPXZRw== X-Received: by 2002:a05:600c:190c:b0:43c:ec4c:25b4 with SMTP id 5b1f17b1804b1-459f4f5292fmr32203115e9.10.1754664822771; Fri, 08 Aug 2025 07:53:42 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:42 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 08/24] eth: bnxt: set page pool page order based on rx_page_size Date: Fri, 8 Aug 2025 15:54:31 +0100 Message-ID: X-Mailer: git-send-email 2.49.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 If user decides to increase the buffer size for agg ring we need to ask the page pool for higher order pages. There is no need to use larger pages for header frags, if user increase the size of agg ring buffers switch to separate header page automatically. Signed-off-by: Jakub Kicinski [pavel: calculate adjust max_len] Signed-off-by: Pavel Begunkov --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index 7d35e9a8869b..869c15d4dc34 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -3818,12 +3818,14 @@ 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(bp->rx_page_size); pp.nid =3D numa_node; pp.napi =3D &rxr->bnapi->napi; 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; @@ -3834,7 +3836,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); --=20 2.49.0 From nobody Sun Oct 5 05:24:22 2025 Received: from mail-wm1-f48.google.com (mail-wm1-f48.google.com [209.85.128.48]) (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 AF0D7285073; Fri, 8 Aug 2025 14:53:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664828; cv=none; b=WkiUEylcGQZ+149D4TBWqMvYOvebpoDLhh0pqseOTMc1hRrHnWNpQbwulVNdxzSTOtdq5wIxkLByGZ9AnKrjh282bZZqsx1zJ/juLbn+BhZR2mDjG1pQf/jvNysTd42irk7SgnOlHeLDSOC2lRULTRvXWtigq1JzSXMkAdlpuyg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664828; c=relaxed/simple; bh=02ll7Hf0om4fnk8EYgvdpXG5XbOBZ69wid9PsjkjrbY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rNPXWcYPg1W+1ERbRb+s/DDqWQYF3fl3zUo8gMMfaU/IsWJHb6LSZRnRKPzlI8urUOQ7cSlJwmfKiglFMAVp9WwJEl8A6QApuK8IvGKsXrrIsb6OUVKdO0+/V/YVnZd3Jy2KiGvzIEpGoWM8o5xJ2q+LgItMkOQ6vBvstbfgiAM= 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=ieTOHJ/i; arc=none smtp.client-ip=209.85.128.48 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="ieTOHJ/i" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-458bdde7dedso15573635e9.0; Fri, 08 Aug 2025 07:53:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664825; x=1755269625; 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=9p9LD1mijTOfq8tIKHOFs1U4bUaxs+wWUrmPNl8XewU=; b=ieTOHJ/iFXHn2pPOwnTLtbd8UXHjM+DTnCZVeW6MNCUHJsWh36pJAyNSS5jMhUaSZc BikfVsO2iOBRphzI1ZtmvJ1ybZhZlVaLli/cS/DAxDzozOsaMASoLJ7zyCVyK1FnuyP4 +F0Rpm2QFjQyQcnCAj98e0tu7DJixKFZxWLwrDHHo/673lt8EhbCJsBWJVg2EWXO2IYX 4SiuAjGCO8z5LreCNUr1BwyMhqDWmdsNIdmA+swipWc74lQ9N0e4/DGt/8RThSHrb/Il Ot5ZltLT93qS53BNKPxmrXLNDQK76MhLa9bZMfeYT7oUf+UOdichfmoSD77WwUImQwyT bmIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664825; x=1755269625; 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=9p9LD1mijTOfq8tIKHOFs1U4bUaxs+wWUrmPNl8XewU=; b=CtFCUzcXyqqJ4gnakylpdeZsoxo6i4CbpcIAiMJKKizmkVOL089l/hv+1gARsUvTWz 6Z4pSv7Vpab/yj17BlyzpNWedems4P0mUhROEHgxrpgHV1x+RqT003BohvgmYeUQuWv6 +9kfUZcA7TUsrHED6LtRHDhQ6ZbXLptUIcVXi5t8PAcVApobYhaN73E9BTxw/+/PGpkG if2kgukRWrhP7dHZFrbIjQFsON32ik5dszAuFuWj1Yz4ApDI++bMybXB/5wNwJgQZau9 t6wc6j5MxmvrHsdcF9Woc16YKEdWoPEWAM0JOddEmeu04dmEnAo1M5fcVhqdOXrLSHKB ZIcg== X-Forwarded-Encrypted: i=1; AJvYcCUVTi2aeaBbkQ/Zcs8AqwSkxvPxUoWGhlSYFvgyowH1YbgPJIun+Ml9wv895NTSP2TQy05wyS9Cn13KFM8=@vger.kernel.org, AJvYcCXA4C8tSq5j1E/yXr3umpW/QSW9m1SXnWeYE/EhmZy6keTiEhxqzWzaYp/pCGPWdGKdXfThG2WF@vger.kernel.org X-Gm-Message-State: AOJu0Yx9ezDaQCoig9cSFQ1aBpnb42z/SIGvLIQHOGKjXPWZoUduXroV 4mqohntJPGSMp6NBQZ5gFyHpQ7zBYzMfe8Gs23L8mDqgGAhqERTyDoJ/ X-Gm-Gg: ASbGncuN8AM47tSSk51nsXY7Drk3CvLmR4gw40wgWRdnLQeNtYHQsbvWHvEXZOUWC9g kQw7sT43Hvgq67EuRbi1LQe8PAbQzvtzMILsizkG4XxD9DNUjGkZKRSarHycVkjJNYC+Qo7y/lT +WW0k50ta4zCDYVulnJriJG4r43bbKeuRDvJqulZxwK3BmzlJ7kGOn+NXvp/7Z9kiJomHwLf1vM XHLRrdKvP5IzQPMX2VLZ+ARwOs5a/WWwc2Q+scaItheGfOfWHbvwVPNTvEHrR+yuDhJAcFAeiNx oPxlCYkJx5qvz/kvY4wcnshI8HjEIFmcGcUt3nshQKwF8y+WCeLGoJV1P2V0sAk/q2ow/BcvK4Q zglEUvw== X-Google-Smtp-Source: AGHT+IGlgOMI6ZnPBkKmy8QhyHf1W8wbiTfYGljRndSxueqmSFD8PGJ7zTSBX7PrhPt1WOVvaRBF9g== X-Received: by 2002:a05:600c:46c7:b0:456:1a41:f932 with SMTP id 5b1f17b1804b1-459f4f048d7mr28240155e9.22.1754664824793; Fri, 08 Aug 2025 07:53:44 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:44 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 09/24] eth: bnxt: support setting size of agg buffers via ethtool Date: Fri, 8 Aug 2025 15:54:32 +0100 Message-ID: <9915abc33cd70b8fc14f35ada2f77a282aa666ba.1754657711.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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 bnxt seems to be able to aggregate data up to 32kB without any issue. The driver is already capable of doing this for systems with higher order pages. While for systems with 4k pages we historically preferred to stick to small buffers because they are easier to allocate, the zero-copy APIs remove the allocation problem. The ZC mem is pre-allocated and fixed size. Signed-off-by: Jakub Kicinski Signed-off-by: Pavel Begunkov --- drivers/net/ethernet/broadcom/bnxt/bnxt.h | 3 ++- .../net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 21 ++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.h b/drivers/net/ethern= et/broadcom/bnxt/bnxt.h index ac841d02d7ad..56aafae568f8 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.h +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.h @@ -758,7 +758,8 @@ struct nqe_cn { #define BNXT_RX_PAGE_SHIFT PAGE_SHIFT #endif =20 -#define BNXT_RX_PAGE_SIZE (1 << BNXT_RX_PAGE_SHIFT) +#define BNXT_MAX_RX_PAGE_SIZE (1 << 15) +#define BNXT_RX_PAGE_SIZE (1 << BNXT_RX_PAGE_SHIFT) =20 #define BNXT_MAX_MTU 9500 =20 diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/ne= t/ethernet/broadcom/bnxt/bnxt_ethtool.c index 1b37612b1c01..2e130eeeabe5 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c @@ -835,6 +835,8 @@ static void bnxt_get_ringparam(struct net_device *dev, ering->rx_jumbo_pending =3D bp->rx_agg_ring_size; ering->tx_pending =3D bp->tx_ring_size; =20 + kernel_ering->rx_buf_len_max =3D BNXT_MAX_RX_PAGE_SIZE; + kernel_ering->rx_buf_len =3D bp->rx_page_size; kernel_ering->hds_thresh_max =3D BNXT_HDS_THRESHOLD_MAX; } =20 @@ -862,6 +864,21 @@ static int bnxt_set_ringparam(struct net_device *dev, return -EINVAL; } =20 + if (!kernel_ering->rx_buf_len) /* Zero means restore default */ + kernel_ering->rx_buf_len =3D BNXT_RX_PAGE_SIZE; + + if (kernel_ering->rx_buf_len !=3D bp->rx_page_size && + !(bp->flags & BNXT_FLAG_CHIP_P5_PLUS)) { + NL_SET_ERR_MSG_MOD(extack, "changing rx-buf-len not supported"); + return -EINVAL; + } + if (!is_power_of_2(kernel_ering->rx_buf_len) || + kernel_ering->rx_buf_len < BNXT_RX_PAGE_SIZE || + kernel_ering->rx_buf_len > BNXT_MAX_RX_PAGE_SIZE) { + NL_SET_ERR_MSG_MOD(extack, "rx-buf-len out of range, or not power of 2"); + return -ERANGE; + } + if (netif_running(dev)) bnxt_close_nic(bp, false, false); =20 @@ -874,6 +891,7 @@ static int bnxt_set_ringparam(struct net_device *dev, =20 bp->rx_ring_size =3D ering->rx_pending; bp->tx_ring_size =3D ering->tx_pending; + bp->rx_page_size =3D kernel_ering->rx_buf_len; bnxt_set_ring_params(bp); =20 if (netif_running(dev)) @@ -5489,7 +5507,8 @@ const struct ethtool_ops bnxt_ethtool_ops =3D { ETHTOOL_COALESCE_STATS_BLOCK_USECS | ETHTOOL_COALESCE_USE_ADAPTIVE_RX | ETHTOOL_COALESCE_USE_CQE, - .supported_ring_params =3D ETHTOOL_RING_USE_TCP_DATA_SPLIT | + .supported_ring_params =3D ETHTOOL_RING_USE_RX_BUF_LEN | + ETHTOOL_RING_USE_TCP_DATA_SPLIT | ETHTOOL_RING_USE_HDS_THRS, .get_link_ksettings =3D bnxt_get_link_ksettings, .set_link_ksettings =3D bnxt_set_link_ksettings, --=20 2.49.0 From nobody Sun Oct 5 05:24:22 2025 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.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 4952B285417; Fri, 8 Aug 2025 14:53:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664830; cv=none; b=eTkOYxHLQj7Nbwcn97UyuQ2I/ZasLYRfnGMVn4hee4UDpQzoHG4+sHGd9HURl/lBH/3Viv/ZeC1ZVx3OmW9jMarAetpKvCXtN8qSZTevA0z3uEkp8kDuA1LUVYgqr8BUy2R8z0H/WrWRw74/2t1krXItpVK9iqgXDpO+p6usjkk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664830; c=relaxed/simple; bh=+ckgI/zM6jmpXwJuJ4fY05JDATE/HqQ6GzeOWdKmQFY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=uA53LG0LY1TX6coY65z8Ud2dHIMLDWz6Tm6OPknnVk2Iule0eEcI3i6ybLPVy60WgIxGHIUSVOix/s4ofKOJOY3OnTlMR0EAlKzb49EqTuHs8K1PhjCgQjmdEuRVP16MuUoivWrVz+rx3jnSZU89LOu+ecjiivLIWyAjfNl9PAg= 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=PU90pRUf; arc=none smtp.client-ip=209.85.128.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="PU90pRUf" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-4589b3e3820so23474125e9.3; Fri, 08 Aug 2025 07:53:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664826; x=1755269626; 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=JVVir1WbyHrmU0DR1Qfs1UzB17IGzDMfd4/CZ8EnHlk=; b=PU90pRUfNEyaXpJ1DpW2sSy9ejwBPsssWDBM3RR4+8xTA7xOayKolx/G5tkq/VpeNn NnhvaeOWEgsZGkeF0ZYkFPBq/2xYbPDd0ns3xo8wHqRaPNb2X+pqgiHzyue3Q7hpylW3 ZBgIYzMQwIXIWriKuTOqXuXGwonGPw2xjjrj8WIf6HuFfm5zkcn3OCDHVvlTu3aW6aC+ UGZqe5YxdHu42Smffx1CVGQ0PMdkq5YuZ2N6niZuGY9qRMj2WxX1fm8Usb+RLXUv37bW W4v3SZ5n0K5NwDedYqNnYcTlrdB/Ut3X6osoUSlyFQbvpWioP4glt7PIhzjggm5D/6IN X4/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664826; x=1755269626; 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=JVVir1WbyHrmU0DR1Qfs1UzB17IGzDMfd4/CZ8EnHlk=; b=dA+Ofwuf+4i0N/0M1M1Sggw+/GpQAEUL1zI4UeHdbswc5SjV99poJM5wtWuIFHJi7x cerlZvBN0l3Byg8GWWy6JIvnis1OIKOkJHXYDmvQIdP0kDvjMvutElgTncOfOjOFdAAW 9Xe35XNwzjM89kI5IA4zAMap1DGkfUXrX1/eBG7C7ImYcQ99+sdmCCes1vHYNdF4iPAR VCSxAeN2+VD06EGaetOt7ODqyw+b915clkyrYg0NKQneDnM9IvrfSBHBVR8atQZ5xIW9 Fk9Pduh8CmtGs9M8+LDF8vj16xrm1AV6JfNjsfv60RqlLMAX3HsfelYwRooTnMayoMbd WLXQ== X-Forwarded-Encrypted: i=1; AJvYcCVcKgjrqEc+p3JNEOcuu5JYm/3CzWE2uVZ0kzKSoKwePqVGpsK077pfDU2rKqsl094WUecNeo1Ik3FUgBI=@vger.kernel.org, AJvYcCWnzAb3uDZu0dvbIm3VUpbirf3Pu8xoCUBA9Yej5uMRozErQhBQgwfzFyMg9Y05BCG2U728f17Y@vger.kernel.org X-Gm-Message-State: AOJu0Yz+5ntTQH8AJIgJ8/H8+LXsIIOZTfmQ7Ux9QcJ1GANNGcfd7uG9 UVhbToS0deJ1oZCgBoxkjH18weRCWz1chO8rjN4chH61KzEtcJRgiJKf X-Gm-Gg: ASbGncuHBVa/iz1f/qJyBVls5MSJW3Z65nqMDaDIhZk/zXiCOz9JSkwm07dUmdAfktO LfYwrehphMt5/iVXfq84v6gNb+V7ED5nUpeE2jK4cO+c7EBYQhAOPz+k7w8CF1f3maVGKoa06JU W+LG+eYMrYuLyPJdIoVwxX/Ttyev9RgetzkoDAtZ9cFTG3k4kqJM/BCoibBf0rrigCWddaCqCG5 ia9uzxpQQhRLf5E3O1yMXc4V8j+bUpX2Kz/yXDuQ9hCRbn+AjBEjBjACtsf98UQFr2Y0b4duiti W4YA5uWbDxcAjY7sPHihG+iMbsfc06gYdLXWUGEcv5VLBBAghTFrHTr/O39C/081Ja+WIfzXeud 03E2PLQ== X-Google-Smtp-Source: AGHT+IFN1RIPOKRnzI/J9Rsw3v8IS8A1xx0GAZxIC5Ab3AnYKGKD9/IfabxP1RCSzBM0WswQ+MUSsQ== X-Received: by 2002:a05:600c:3508:b0:459:df48:3b19 with SMTP id 5b1f17b1804b1-459f4f9b87dmr31744695e9.18.1754664826407; Fri, 08 Aug 2025 07:53:46 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:45 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 10/24] net: move netdev_config manipulation to dedicated helpers Date: Fri, 8 Aug 2025 15:54:33 +0100 Message-ID: X-Mailer: git-send-email 2.49.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 netdev_config manipulation will become slightly more complicated soon and we will need to call if from ethtool as well as queue API. Encapsulate the logic into helper functions. Signed-off-by: Jakub Kicinski Signed-off-by: Pavel Begunkov --- net/core/Makefile | 2 +- net/core/dev.c | 7 ++----- net/core/dev.h | 5 +++++ net/core/netdev_config.c | 43 ++++++++++++++++++++++++++++++++++++++++ net/ethtool/netlink.c | 14 ++++++------- 5 files changed, 57 insertions(+), 14 deletions(-) create mode 100644 net/core/netdev_config.c diff --git a/net/core/Makefile b/net/core/Makefile index b2a76ce33932..4db487396094 100644 --- a/net/core/Makefile +++ b/net/core/Makefile @@ -19,7 +19,7 @@ obj-$(CONFIG_NETDEV_ADDR_LIST_TEST) +=3D dev_addr_lists_t= est.o =20 obj-y +=3D net-sysfs.o obj-y +=3D hotdata.o -obj-y +=3D netdev_rx_queue.o +obj-y +=3D netdev_config.o netdev_rx_queue.o obj-$(CONFIG_PAGE_POOL) +=3D page_pool.o page_pool_user.o obj-$(CONFIG_PROC_FS) +=3D net-procfs.o obj-$(CONFIG_NET_PKTGEN) +=3D pktgen.o diff --git a/net/core/dev.c b/net/core/dev.c index 1c6e755841ce..8e9af8469421 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -11875,10 +11875,8 @@ struct net_device *alloc_netdev_mqs(int sizeof_pri= v, const char *name, if (!dev->ethtool) goto free_all; =20 - dev->cfg =3D kzalloc(sizeof(*dev->cfg), GFP_KERNEL_ACCOUNT); - if (!dev->cfg) + if (netdev_alloc_config(dev)) goto free_all; - dev->cfg_pending =3D dev->cfg; =20 napi_config_sz =3D array_size(maxqs, sizeof(*dev->napi_config)); dev->napi_config =3D kvzalloc(napi_config_sz, GFP_KERNEL_ACCOUNT); @@ -11948,8 +11946,7 @@ void free_netdev(struct net_device *dev) return; } =20 - WARN_ON(dev->cfg !=3D dev->cfg_pending); - kfree(dev->cfg); + netdev_free_config(dev); kfree(dev->ethtool); netif_free_tx_queues(dev); netif_free_rx_queues(dev); diff --git a/net/core/dev.h b/net/core/dev.h index ab69edc0c3e3..5c9f43280eca 100644 --- a/net/core/dev.h +++ b/net/core/dev.h @@ -92,6 +92,11 @@ extern struct rw_semaphore dev_addr_sem; extern struct list_head net_todo_list; void netdev_run_todo(void); =20 +int netdev_alloc_config(struct net_device *dev); +void __netdev_free_config(struct netdev_config *cfg); +void netdev_free_config(struct net_device *dev); +int netdev_reconfig_start(struct net_device *dev); + /* netdev management, shared between various uAPI entry points */ struct netdev_name_node { struct hlist_node hlist; diff --git a/net/core/netdev_config.c b/net/core/netdev_config.c new file mode 100644 index 000000000000..270b7f10a192 --- /dev/null +++ b/net/core/netdev_config.c @@ -0,0 +1,43 @@ +// SPDX-License-Identifier: GPL-2.0-only + +#include +#include + +#include "dev.h" + +int netdev_alloc_config(struct net_device *dev) +{ + struct netdev_config *cfg; + + cfg =3D kzalloc(sizeof(*dev->cfg), GFP_KERNEL_ACCOUNT); + if (!cfg) + return -ENOMEM; + + dev->cfg =3D cfg; + dev->cfg_pending =3D cfg; + return 0; +} + +void __netdev_free_config(struct netdev_config *cfg) +{ + kfree(cfg); +} + +void netdev_free_config(struct net_device *dev) +{ + WARN_ON(dev->cfg !=3D dev->cfg_pending); + __netdev_free_config(dev->cfg); +} + +int netdev_reconfig_start(struct net_device *dev) +{ + struct netdev_config *cfg; + + WARN_ON(dev->cfg !=3D dev->cfg_pending); + cfg =3D kmemdup(dev->cfg, sizeof(*dev->cfg), GFP_KERNEL_ACCOUNT); + if (!cfg) + return -ENOMEM; + + dev->cfg_pending =3D cfg; + return 0; +} diff --git a/net/ethtool/netlink.c b/net/ethtool/netlink.c index 2f813f25f07e..d376d3043177 100644 --- a/net/ethtool/netlink.c +++ b/net/ethtool/netlink.c @@ -6,6 +6,7 @@ #include #include #include +#include "../core/dev.h" #include "netlink.h" #include "module_fw.h" =20 @@ -906,12 +907,9 @@ static int ethnl_default_set_doit(struct sk_buff *skb,= struct genl_info *info) =20 rtnl_lock(); netdev_lock_ops(dev); - dev->cfg_pending =3D kmemdup(dev->cfg, sizeof(*dev->cfg), - GFP_KERNEL_ACCOUNT); - if (!dev->cfg_pending) { - ret =3D -ENOMEM; - goto out_tie_cfg; - } + ret =3D netdev_reconfig_start(dev); + if (ret) + goto out_unlock; =20 ret =3D ethnl_ops_begin(dev); if (ret < 0) @@ -930,9 +928,9 @@ static int ethnl_default_set_doit(struct sk_buff *skb, = struct genl_info *info) out_ops: ethnl_ops_complete(dev); out_free_cfg: - kfree(dev->cfg_pending); -out_tie_cfg: + __netdev_free_config(dev->cfg_pending); dev->cfg_pending =3D dev->cfg; +out_unlock: netdev_unlock_ops(dev); rtnl_unlock(); out_dev: --=20 2.49.0 From nobody Sun Oct 5 05:24:22 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 BF8EF28136C; Fri, 8 Aug 2025 14:53:49 +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=1754664831; cv=none; b=dRTNWsSwWoyMuIydHfUz7FlDgksnoqzrOjXetzl6Gz8dFDYk1aAkqC/bSyTs408HVNx5XlzctSRtMH25k/s7TvKXodMYkKD10xz9mLgDJSzvk+6+pABH8HjyaqxmKiJaiWMwO8QW9LVXNyD6BkVADc5bZemLzO0grSJYxaobm1c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664831; c=relaxed/simple; bh=mGd5zTDnP8+6/R0d1mih7E5A9LE5XPZC1Y/OWMGdGH0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PKBryRXtbvy3R/XDh1aJwgTQxSrjqFsuZC/18s4GFywXY9oC7aqbVyTVGQ0n+EVxOBVl8/fO0Zmye9Iu0T1yskO3afIC/g57wDC4toX8Iu/lIcFeO5bjMOaVAT3e++/YuSDjbFHhQXmMGmXbifTbHtmosmbGMUqQIjSs5u6ChR4= 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=OW89p9Es; 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="OW89p9Es" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-4563cfac2d2so18754565e9.3; Fri, 08 Aug 2025 07:53:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664828; x=1755269628; 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=a0l1Q2AJy1H9F9FS1CSlvjw3MiwKgx+PXi31KVx/m80=; b=OW89p9Es/mNvocMtmtvcU1I6mnVHpM5Yyx/OxlGxvVb+CkfrMGwInv49cDoh3+mcOW u421eaNpOvmt6lCm1W6WM5UJgA8RItJWdbpu7tdM1PrzRtsjlZWWxVr9Rv4B1uG6FC79 lfc9OE27vTCh5O/38dxFHpn4yGVcp1jcxO1RTTeCMVZjzjHWQGdbJWZv9f1E+iPqQPm/ UBNoJuD2jSza+rWELBJrGQxYRHI4hAvyhj4EdKKpaQTr1JZvzg/JLQSkM/YgAcdZQJLd 0n48ryaqg/LTMo5P4zDmxmEHYzOtSpCfu1QYYaCWA1WF6Umn6foiLPKoZbQZ9XYItnid +hZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664828; x=1755269628; 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=a0l1Q2AJy1H9F9FS1CSlvjw3MiwKgx+PXi31KVx/m80=; b=Bafxv3UdfQMwqwGg3fsU1NLZyJUwNx0IHvJgBv804lIWUi4gBhCpgBZushnRYmrbIB Wfr8AA1uZU2JRRTlfMhTsuSUczMtrgFVy6cHD+5/XTUZm1XqsCj+pVpFSpacUKdSOM6E 7qPyAemebJoXwAeB9JJQKXQphBOydIn9dIcchhM30gB61OLP29qkf+r05uiUZ1DAWC6M vvLNd0ewN7frjSvJ0jEp2QHw37oqLYTErok/bxWJyhvqB9ye2muxAYnOzG7swjj4IYcC UHE6rC+rPpt8voiK4O1Bi0RcvrkowKa4RGeol551IXOsCWCj8WAp6DbCsIKhrwIFyBFF zv3A== X-Forwarded-Encrypted: i=1; AJvYcCUXfF6rzu4MconqKtVB/2MmvoSRsxegpPtzJtztClM7sWc6+NFxEcsZ+aV4kvy7BWM9jHlKUPWq@vger.kernel.org, AJvYcCWm/u2TCWB2zw099AKuSKTjlUwGYMWAQ33WlGqRaFlCFaaBh2t+9UwKJNEQaQiI1jMlXPi3sxbrmIRXJec=@vger.kernel.org X-Gm-Message-State: AOJu0Yw+p3Dk1PZn9NUuVzpJ3yiCGslMhn2PwxhemwAwHbVzk9ZZSpw2 DzfR/awPQCSZN6X+lSz8fmHzFWTe5j2EoUQJNSNdV+n/oOPAqwtshXfQ X-Gm-Gg: ASbGnctHft0isrjKrt6VFWlpJZRIkuiC5oDg09UpEiT/R7C3mx1CU2ZDZ+RKnyMbu34 D94o0MWCSrd/VCtrX6HJ4u91XQzS04RqATsnFkriY5PipMjDXKRT7Fn9On00qRDCIXgxuSX4WIM KHZvDlYNjnMgTRmCNo7Hmcfe18telsaTB85arR2pU8YMIaNFm7KVblNF44Qui+La1gor5v+E/8p XCVhKZxupTYaBgfmwWAjvPhYWYwpjZTOeuE8ZchAvbNSNaUP/drImABNHj+77x9ccTwqJFeTlhS 6lRuoGjsGjrFvuP8b7gF1cmPkf36p3yGKvbq63zWcoGQ6IW1kGFIdY7fgLgcnlOCpQXyUTbBDY1 bFQUxp3BFfq6pjbu7 X-Google-Smtp-Source: AGHT+IFq2NWxe4VMf33gzUN40GDxmfXoVWKHkUvzetZQqF3E/4Yf1kGafq28N9NKc3omas2o0qD40g== X-Received: by 2002:a05:600c:1c8b:b0:458:bfb1:1fb6 with SMTP id 5b1f17b1804b1-459fb811f48mr143315e9.2.1754664827972; Fri, 08 Aug 2025 07:53:47 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:47 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 11/24] net: reduce indent of struct netdev_queue_mgmt_ops members Date: Fri, 8 Aug 2025 15:54:34 +0100 Message-ID: X-Mailer: git-send-email 2.49.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 Trivial change, reduce the indent. I think the original is copied from real NDOs. It's unnecessarily deep, makes passing struct args problematic. Signed-off-by: Jakub Kicinski Reviewed-by: Mina Almasry Signed-off-by: Pavel Begunkov --- include/net/netdev_queues.h | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/include/net/netdev_queues.h b/include/net/netdev_queues.h index 8c21ea9b9515..d73f9023c96f 100644 --- a/include/net/netdev_queues.h +++ b/include/net/netdev_queues.h @@ -152,18 +152,18 @@ void netdev_stat_queue_sum(struct net_device *netdev, * be called for an interface which is open. */ struct netdev_queue_mgmt_ops { - size_t ndo_queue_mem_size; - int (*ndo_queue_mem_alloc)(struct net_device *dev, - void *per_queue_mem, - int idx); - void (*ndo_queue_mem_free)(struct net_device *dev, - void *per_queue_mem); - int (*ndo_queue_start)(struct net_device *dev, - void *per_queue_mem, - int idx); - int (*ndo_queue_stop)(struct net_device *dev, - void *per_queue_mem, - int idx); + size_t ndo_queue_mem_size; + int (*ndo_queue_mem_alloc)(struct net_device *dev, + void *per_queue_mem, + int idx); + void (*ndo_queue_mem_free)(struct net_device *dev, + void *per_queue_mem); + int (*ndo_queue_start)(struct net_device *dev, + void *per_queue_mem, + int idx); + int (*ndo_queue_stop)(struct net_device *dev, + void *per_queue_mem, + int idx); }; =20 /** --=20 2.49.0 From nobody Sun Oct 5 05:24:22 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 65ECB285C9B; Fri, 8 Aug 2025 14:53:51 +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=1754664833; cv=none; b=lqhwAAUx2F+mVciwuygv2l06e4lZKH+4bzjVUJBbpPtT0wMIyjN0xM2eV2scoCAbBPP8NUAgZK0ziqNC6lYZFcH9jlDnMQIVJCYjxPUxPEprZeXOUWKZmVIURyPjEtLxJzOSUx0IqFom6NVd+rXkVDYSvHVkD5GVlR6lGNSRtbI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664833; c=relaxed/simple; bh=tHqgRFnG9VZNjWW4qCMSl9mRruPCJCMFAqhqIXuqLjg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oLv5CoFUkXQQJHC779Fhx+WrBVPkHvD7nxvQLXriAeeUj5x5Fvjfu5fXWd57WdC1Cq2A2+NRS0YUFA3r/8/1ZSIhA1m49GjqmQUm3meWT4+O2SU2yvLF0Xe8nvWgC1sEgCIZkg+oIq85E+usN4QRXoFV4VzU2aA+ANHlFv8o9Pg= 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=WFfpMGJb; 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="WFfpMGJb" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-459d62184c9so13752555e9.1; Fri, 08 Aug 2025 07:53:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664830; x=1755269630; 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=Gb/oONA0Dehga0RDpnaZGL4vbthbdjxuVh7ggvbN3HY=; b=WFfpMGJb6iwYX9nOmlGceRCz8Zm5Vn5pkf+DAPCGFZcmJCYBrQve35islWHm8kly5a 12Khqm4XT0z3ZH5/6mDX6GiwTEB/G2TShtYhaI6cPVHPAG0B10eFM7XIlPCiUr/W/bv/ c+EWhJ7LXfRVmAt/j58ATGMNvRP/NrmuYTUPlebr6OP2tY+lnrKFKphoZGnCDCuuDH+4 4MmR5eMmwW0aC+17zGPaBZlEtHFwBBBakeqatvwo/wgwuIxCFkBGwG5GWv3EzNCTU8bY jZsKkas/fnEt3MbICFXxQYHm408xq4SmpXA5Y4+X9uWDKREK/K3Tq4x6VWvZ1+/3uk1E Ay3A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664830; x=1755269630; 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=Gb/oONA0Dehga0RDpnaZGL4vbthbdjxuVh7ggvbN3HY=; b=s2EoP1YK8QJgiGLSnkX7Z8aSaYPK8FOjIbKWIRZpQtVZ/NEQ20rkzWJ56MQ1Hm0WAI 0+woRcV1xKHlqlkWJh35c/6c8CTHPFraDNGpw2Ee6IR4xiiWokcNTnN0Tjc17FhA6J8C 9UNtkJhMbwxggOho+sEHN0leHXxtLm8Nt1p1zuFDF0S2YRYQZ4ml/1wz0Wx4mpjSmd5H ofCrDmWcwCeWNEK+m3O9HPxT3qjSOyKUbpM0eCDNH0Qu4sMBC5bZATTcS5cUD9PlEjpJ 3qIDkiHY2l2U1moJCz1c9BD+MOR6sgliCWwhKRPcBcAatrs1lTqsWlJozZjo2WBKPhPL soSA== X-Forwarded-Encrypted: i=1; AJvYcCUAswdjcELo2RxN4kRXpVbAjyCIAkbXvymooRIzbIewba6c92Tes9nHW0BadgnS2q0pqi19MfFg@vger.kernel.org, AJvYcCWtkqSxWweHcTaTTNOHjGOFV19OyWhJTHtDnMYb/xfOEwZPP6bnlqD+SR4TJrs4UjseT+ZzLMPYwlHhtj4=@vger.kernel.org X-Gm-Message-State: AOJu0YzuakQirHCR6Mb8cYR91D/iaE1ino6AxKRQ+THIPvfr+cLzhiTY NTlUhgNSslLo40JlJytzhPwETcZfWMqXFEH+2+6NWCwCoRi9FmOkDqtl X-Gm-Gg: ASbGncvXLpsFJmkiAh46zw8nfUTXyk3qtCnrJ9GIc/WA02agP1DIcfH/ocYpu2aBwLD 36tI4FlwFaqpbLdrVBin+IUuZanmlcUUj0+z7vTvJktVm3bFsNgGjpR3tElr331J6MdR9MTze9Y SEZsttL7M95jGEE1ixx7KnQBKwq32p7pBuFVJrTb8x6E1dY1tX4Aofi341CWgOi0AKxm5tdMhN7 7FRTpXuLXDxSa9DBFniGg3/YSRC90yTEXLWfRza6ba8ybM9iLIkuYWf/49OfsuzHO/BovCVYlq3 dxxBpb9JssJSagBOB3CYeb9gm3GSuQREUoOPRuL4engm4TsFWBHlFUULhC6l5Qg08XK45+vEodJ Gdf4aEA== X-Google-Smtp-Source: AGHT+IFoyrc4WFqqeLXYaZENTQI8sCv10hgM0FYRU0eZ+8bBzxO6igRsiUzMNGRL4jJkwem/YjUUTA== X-Received: by 2002:a05:600c:3b9f:b0:456:1a69:94fd with SMTP id 5b1f17b1804b1-459fb789f26mr742985e9.0.1754664829427; Fri, 08 Aug 2025 07:53:49 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:48 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 12/24] net: allocate per-queue config structs and pass them thru the queue API Date: Fri, 8 Aug 2025 15:54:35 +0100 Message-ID: <122bf9970a71ffecc77a68286e52e09d59a73cc5.1754657711.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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 Create an array of config structs to store per-queue config. Pass these structs in the queue API. Drivers can also retrieve the config for a single queue calling netdev_queue_config() directly. Signed-off-by: Jakub Kicinski [pavel: patch up mlx callbacks with unused qcfg] Signed-off-by: Pavel Begunkov --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 8 ++- drivers/net/ethernet/google/gve/gve_main.c | 9 ++- .../net/ethernet/mellanox/mlx5/core/en_main.c | 9 +-- drivers/net/netdevsim/netdev.c | 6 +- include/net/netdev_queues.h | 19 ++++++ net/core/dev.h | 3 + net/core/netdev_config.c | 58 +++++++++++++++++++ net/core/netdev_rx_queue.c | 11 +++- 8 files changed, 109 insertions(+), 14 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index 869c15d4dc34..96b6fa696247 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -15812,7 +15812,9 @@ static const struct netdev_stat_ops bnxt_stat_ops = =3D { .get_base_stats =3D bnxt_get_base_stats, }; =20 -static int bnxt_queue_mem_alloc(struct net_device *dev, void *qmem, int id= x) +static int bnxt_queue_mem_alloc(struct net_device *dev, + struct netdev_queue_config *qcfg, + void *qmem, int idx) { struct bnxt_rx_ring_info *rxr, *clone; struct bnxt *bp =3D netdev_priv(dev); @@ -15980,7 +15982,9 @@ static void bnxt_copy_rx_ring(struct bnxt *bp, dst->rx_agg_bmap =3D src->rx_agg_bmap; } =20 -static int bnxt_queue_start(struct net_device *dev, void *qmem, int idx) +static int bnxt_queue_start(struct net_device *dev, + struct netdev_queue_config *qcfg, + void *qmem, int idx) { struct bnxt *bp =3D netdev_priv(dev); struct bnxt_rx_ring_info *rxr, *clone; diff --git a/drivers/net/ethernet/google/gve/gve_main.c b/drivers/net/ether= net/google/gve/gve_main.c index 1f411d7c4373..f40edab616d8 100644 --- a/drivers/net/ethernet/google/gve/gve_main.c +++ b/drivers/net/ethernet/google/gve/gve_main.c @@ -2580,8 +2580,9 @@ static void gve_rx_queue_mem_free(struct net_device *= dev, void *per_q_mem) gve_rx_free_ring_dqo(priv, gve_per_q_mem, &cfg); } =20 -static int gve_rx_queue_mem_alloc(struct net_device *dev, void *per_q_mem, - int idx) +static int gve_rx_queue_mem_alloc(struct net_device *dev, + struct netdev_queue_config *qcfg, + void *per_q_mem, int idx) { struct gve_priv *priv =3D netdev_priv(dev); struct gve_rx_alloc_rings_cfg cfg =3D {0}; @@ -2602,7 +2603,9 @@ static int gve_rx_queue_mem_alloc(struct net_device *= dev, void *per_q_mem, return err; } =20 -static int gve_rx_queue_start(struct net_device *dev, void *per_q_mem, int= idx) +static int gve_rx_queue_start(struct net_device *dev, + struct netdev_queue_config *qcfg, + void *per_q_mem, int idx) { struct gve_priv *priv =3D netdev_priv(dev); struct gve_rx_ring *gve_per_q_mem; diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c b/drivers/ne= t/ethernet/mellanox/mlx5/core/en_main.c index 21bb88c5d3dc..83264c17a4f7 100644 --- a/drivers/net/ethernet/mellanox/mlx5/core/en_main.c +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_main.c @@ -5541,8 +5541,9 @@ struct mlx5_qmgmt_data { struct mlx5e_channel_param cparam; }; =20 -static int mlx5e_queue_mem_alloc(struct net_device *dev, void *newq, - int queue_index) +static int mlx5e_queue_mem_alloc(struct net_device *dev, + struct netdev_queue_config *qcfg, + void *newq, int queue_index) { struct mlx5_qmgmt_data *new =3D (struct mlx5_qmgmt_data *)newq; struct mlx5e_priv *priv =3D netdev_priv(dev); @@ -5603,8 +5604,8 @@ static int mlx5e_queue_stop(struct net_device *dev, v= oid *oldq, int queue_index) return 0; } =20 -static int mlx5e_queue_start(struct net_device *dev, void *newq, - int queue_index) +static int mlx5e_queue_start(struct net_device *dev, struct netdev_queue_c= onfig *qcfg, + void *newq, int queue_index) { struct mlx5_qmgmt_data *new =3D (struct mlx5_qmgmt_data *)newq; struct mlx5e_priv *priv =3D netdev_priv(dev); diff --git a/drivers/net/netdevsim/netdev.c b/drivers/net/netdevsim/netdev.c index 39fe28af48b9..46cdf31f0354 100644 --- a/drivers/net/netdevsim/netdev.c +++ b/drivers/net/netdevsim/netdev.c @@ -729,7 +729,8 @@ struct nsim_queue_mem { }; =20 static int -nsim_queue_mem_alloc(struct net_device *dev, void *per_queue_mem, int idx) +nsim_queue_mem_alloc(struct net_device *dev, struct netdev_queue_config *q= cfg, + void *per_queue_mem, int idx) { struct nsim_queue_mem *qmem =3D per_queue_mem; struct netdevsim *ns =3D netdev_priv(dev); @@ -778,7 +779,8 @@ static void nsim_queue_mem_free(struct net_device *dev,= void *per_queue_mem) } =20 static int -nsim_queue_start(struct net_device *dev, void *per_queue_mem, int idx) +nsim_queue_start(struct net_device *dev, struct netdev_queue_config *qcfg, + void *per_queue_mem, int idx) { struct nsim_queue_mem *qmem =3D per_queue_mem; struct netdevsim *ns =3D netdev_priv(dev); diff --git a/include/net/netdev_queues.h b/include/net/netdev_queues.h index d73f9023c96f..b850cff71d12 100644 --- a/include/net/netdev_queues.h +++ b/include/net/netdev_queues.h @@ -32,6 +32,13 @@ struct netdev_config { /** @hds_config: HDS enabled (ETHTOOL_A_RINGS_TCP_DATA_SPLIT). */ u8 hds_config; + + /** @qcfg: per-queue configuration */ + struct netdev_queue_config *qcfg; +}; + +/* Same semantics as fields in struct netdev_config */ +struct netdev_queue_config { }; =20 /* See the netdev.yaml spec for definition of each statistic */ @@ -136,6 +143,10 @@ void netdev_stat_queue_sum(struct net_device *netdev, * * @ndo_queue_mem_size: Size of the struct that describes a queue's memory. * + * @ndo_queue_cfg_defaults: (Optional) Populate queue config struct with + * defaults. Queue config structs are passed to this + * helper before the user-requested settings are applied. + * * @ndo_queue_mem_alloc: Allocate memory for an RX queue at the specified = index. * The new memory is written at the specified address. * @@ -153,12 +164,17 @@ void netdev_stat_queue_sum(struct net_device *netdev, */ struct netdev_queue_mgmt_ops { size_t ndo_queue_mem_size; + void (*ndo_queue_cfg_defaults)(struct net_device *dev, + int idx, + struct netdev_queue_config *qcfg); int (*ndo_queue_mem_alloc)(struct net_device *dev, + struct netdev_queue_config *qcfg, void *per_queue_mem, int idx); void (*ndo_queue_mem_free)(struct net_device *dev, void *per_queue_mem); int (*ndo_queue_start)(struct net_device *dev, + struct netdev_queue_config *qcfg, void *per_queue_mem, int idx); int (*ndo_queue_stop)(struct net_device *dev, @@ -166,6 +182,9 @@ struct netdev_queue_mgmt_ops { int idx); }; =20 +void netdev_queue_config(struct net_device *dev, int rxq, + struct netdev_queue_config *qcfg); + /** * DOC: Lockless queue stopping / waking helpers. * diff --git a/net/core/dev.h b/net/core/dev.h index 5c9f43280eca..5fdcf97149f9 100644 --- a/net/core/dev.h +++ b/net/core/dev.h @@ -9,6 +9,7 @@ #include =20 struct net; +struct netdev_queue_config; struct netlink_ext_ack; struct cpumask; =20 @@ -96,6 +97,8 @@ int netdev_alloc_config(struct net_device *dev); void __netdev_free_config(struct netdev_config *cfg); void netdev_free_config(struct net_device *dev); int netdev_reconfig_start(struct net_device *dev); +void __netdev_queue_config(struct net_device *dev, int rxq, + struct netdev_queue_config *qcfg, bool pending); =20 /* netdev management, shared between various uAPI entry points */ struct netdev_name_node { diff --git a/net/core/netdev_config.c b/net/core/netdev_config.c index 270b7f10a192..bad2d53522f0 100644 --- a/net/core/netdev_config.c +++ b/net/core/netdev_config.c @@ -8,18 +8,29 @@ int netdev_alloc_config(struct net_device *dev) { struct netdev_config *cfg; + unsigned int maxqs; =20 cfg =3D kzalloc(sizeof(*dev->cfg), GFP_KERNEL_ACCOUNT); if (!cfg) return -ENOMEM; =20 + maxqs =3D max(dev->num_rx_queues, dev->num_tx_queues); + cfg->qcfg =3D kcalloc(maxqs, sizeof(*cfg->qcfg), GFP_KERNEL_ACCOUNT); + if (!cfg->qcfg) + goto err_free_cfg; + dev->cfg =3D cfg; dev->cfg_pending =3D cfg; return 0; + +err_free_cfg: + kfree(cfg); + return -ENOMEM; } =20 void __netdev_free_config(struct netdev_config *cfg) { + kfree(cfg->qcfg); kfree(cfg); } =20 @@ -32,12 +43,59 @@ void netdev_free_config(struct net_device *dev) int netdev_reconfig_start(struct net_device *dev) { struct netdev_config *cfg; + unsigned int maxqs; =20 WARN_ON(dev->cfg !=3D dev->cfg_pending); cfg =3D kmemdup(dev->cfg, sizeof(*dev->cfg), GFP_KERNEL_ACCOUNT); if (!cfg) return -ENOMEM; =20 + maxqs =3D max(dev->num_rx_queues, dev->num_tx_queues); + cfg->qcfg =3D kmemdup_array(dev->cfg->qcfg, maxqs, sizeof(*cfg->qcfg), + GFP_KERNEL_ACCOUNT); + if (!cfg->qcfg) + goto err_free_cfg; + dev->cfg_pending =3D cfg; return 0; + +err_free_cfg: + kfree(cfg); + return -ENOMEM; +} + +void __netdev_queue_config(struct net_device *dev, int rxq, + struct netdev_queue_config *qcfg, bool pending) +{ + memset(qcfg, 0, sizeof(*qcfg)); + + /* Get defaults from the driver, in case user config not set */ + if (dev->queue_mgmt_ops->ndo_queue_cfg_defaults) + dev->queue_mgmt_ops->ndo_queue_cfg_defaults(dev, rxq, qcfg); +} + +/** + * netdev_queue_config() - get configuration for a given queue + * @dev: net_device instance + * @rxq: index of the queue of interest + * @qcfg: queue configuration struct (output) + * + * Render the configuration for a given queue. This helper should be used + * by drivers which support queue configuration to retrieve config for + * a particular queue. + * + * @qcfg is an output parameter and is always fully initialized by this + * function. Some values may not be set by the user, drivers may either + * deal with the "unset" values in @qcfg, or provide the callback + * to populate defaults in queue_management_ops. + * + * Note that this helper returns pending config, as it is expected that + * "old" queues are retained until config is successful so they can + * be restored directly without asking for the config. + */ +void netdev_queue_config(struct net_device *dev, int rxq, + struct netdev_queue_config *qcfg) +{ + __netdev_queue_config(dev, rxq, qcfg, true); } +EXPORT_SYMBOL(netdev_queue_config); diff --git a/net/core/netdev_rx_queue.c b/net/core/netdev_rx_queue.c index 3bf1151d8061..fb87ce219a8a 100644 --- a/net/core/netdev_rx_queue.c +++ b/net/core/netdev_rx_queue.c @@ -7,12 +7,14 @@ #include #include =20 +#include "dev.h" #include "page_pool_priv.h" =20 int netdev_rx_queue_restart(struct net_device *dev, unsigned int rxq_idx) { struct netdev_rx_queue *rxq =3D __netif_get_rx_queue(dev, rxq_idx); const struct netdev_queue_mgmt_ops *qops =3D dev->queue_mgmt_ops; + struct netdev_queue_config qcfg; void *new_mem, *old_mem; int err; =20 @@ -32,7 +34,9 @@ int netdev_rx_queue_restart(struct net_device *dev, unsig= ned int rxq_idx) goto err_free_new_mem; } =20 - err =3D qops->ndo_queue_mem_alloc(dev, new_mem, rxq_idx); + netdev_queue_config(dev, rxq_idx, &qcfg); + + err =3D qops->ndo_queue_mem_alloc(dev, &qcfg, new_mem, rxq_idx); if (err) goto err_free_old_mem; =20 @@ -45,7 +49,7 @@ int netdev_rx_queue_restart(struct net_device *dev, unsig= ned int rxq_idx) if (err) goto err_free_new_queue_mem; =20 - err =3D qops->ndo_queue_start(dev, new_mem, rxq_idx); + err =3D qops->ndo_queue_start(dev, &qcfg, new_mem, rxq_idx); if (err) goto err_start_queue; } else { @@ -60,6 +64,7 @@ int netdev_rx_queue_restart(struct net_device *dev, unsig= ned int rxq_idx) return 0; =20 err_start_queue: + __netdev_queue_config(dev, rxq_idx, &qcfg, false); /* Restarting the queue with old_mem should be successful as we haven't * changed any of the queue configuration, and there is not much we can * do to recover from a failure here. @@ -67,7 +72,7 @@ int netdev_rx_queue_restart(struct net_device *dev, unsig= ned int rxq_idx) * WARN if we fail to recover the old rx queue, and at least free * old_mem so we don't also leak that. */ - if (qops->ndo_queue_start(dev, old_mem, rxq_idx)) { + if (qops->ndo_queue_start(dev, &qcfg, old_mem, rxq_idx)) { WARN(1, "Failed to restart old queue in error path. RX queue %d may be unhe= althy.", rxq_idx); --=20 2.49.0 From nobody Sun Oct 5 05:24:22 2025 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (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 C7E2A286408; Fri, 8 Aug 2025 14:53:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664834; cv=none; b=U/vuPhC5hkYSMAd81cGgRrtURLN8eavLjRoHWr4WQI3AAe+VHQpO0ilrWVp2RLbFeC++fX3uW6xugEbI9RHs6oR1nk1pNfm3oIA4m8PTXxB4y5nqxTeJZbA4h6ABddSles5mgeN2DkGDa0Y4jPwkizucdYGhCDwSgc0WIAFR92c= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664834; c=relaxed/simple; bh=KsatO9EaPLT/XVXDGOduZZeF++z6wYaK1fVAl91qJYc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=U0SalCFJp2zktC4bdEXOW6i5xVAc4YIzP1y7T+6QBfIk5SRgJ6o243hq1XSAtflZ8VxrhNe5qMx6yT9hkMgeBUkwO5qNKfvX5xxYiyUg/uCDN2oifMoeeXe82CKCX5uJUqyOBTRuG7ULSQ+i5V9TS6WD0LK5CNit1HbObM6kwLc= 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=MAnRwcqH; arc=none smtp.client-ip=209.85.128.54 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="MAnRwcqH" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-455b00339c8so14562555e9.3; Fri, 08 Aug 2025 07:53:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664831; x=1755269631; 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=mjzjcrqzhcIMLHYIuIJFsQxhNzZVSTi3RrrhvwP/054=; b=MAnRwcqHMFd6h9tmx9NnvkylDVSUqHrk/71aRYIASgnVuW1DV2xhHXzc5t8xBWaThU C/Vs8ISW18bYoaSNqHDL7eTwcWB7aSWbWHg9XwhFOih30nIODZYWtaEC5Y7N0QIljtuj AatQPArQ6LyC/nnMrgjpZZfABVspTFU9f7rkfQTZrOIWYcw5Cz8G/K7LB4pJ6hGCTETS S3zznZQ9pJBZ5m1gNcg55oDcDwz4WqtSKbSTYl5OXLq2cGO7hB8RJERSUiUar4R5hXkW PbrlSIlBY+8ZI/e8vDG2xDp7MrxUsnHVjOoxK5VOdb1uMA7bohZp6EbvjGhksEy784Vk Z6fw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664831; x=1755269631; 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=mjzjcrqzhcIMLHYIuIJFsQxhNzZVSTi3RrrhvwP/054=; b=QGZMdmLJ8PQBWAISoY0sM0yvU9rSv07224lcrp6mMQeE/rl/YD6SwYUvNqHaAxoiFK eGntVBhlKPjFcn3pNEcxIPL9MRLCBX9s7p4pX90N5zFbqDETFUSrKuENjN8kRQsHVZ8Q AfrTgT+KDPcmbO8wH54p3KLzW4wXDWvMbkeN9FGONtp/wx3Dgc+xev2pirIzQyxIr1R2 CXAo3aGebCJfXglDQ5LY/yipAuBHxWxil8cArDtVMdUbSBfcS5LQkSeVJNjdOlHkeHk1 f1UUzKFeA3OL4DQSvSAOK1JNSTTOGm69XCllJI8xspdbaqGjKzWz6nSE6TPkai52bKH1 Vfxg== X-Forwarded-Encrypted: i=1; AJvYcCWeou8y1DeqfO7oo3GzOIENQBM8M2XBd4FkcpRrYSHV0/Asa2D3EXxI6Xn0PejWd3MW6rRnuwl57lRufWc=@vger.kernel.org, AJvYcCXxOY3GSNIqt9bH+iEdl+gG8oUCYU97XRsfuA70Mo+lWyTIChk8TXCCB5gVI0PsWcKhqxuS3ft6@vger.kernel.org X-Gm-Message-State: AOJu0YxqhLh8rdxWpm9NfQkrxv4gUslj6NEpG7FbPQYLIeoCC57wOiPY wTsbx6HiAP7djadKTVzsC1pS1XMFJb04Tt8VUmQ+S8H+DlaN/W+/s49a X-Gm-Gg: ASbGnct4fq41C86TZqeSdTLWMh2QvMOUDDHn5uzLBnKrkU7CQxByG3rtj9to2FTIQHP rwCKqjXk+X8pPmnXpBu5SyQYy3cs+jb5gHZGRduzDbWN199DygPffku7asQN44vihiPgD4LWPk0 goVxZU37/RC4a4QhtUaemJguIUx9tpEZkb0T6QTdoyX2ksj8Nvd/joGD34VXQv7uMBqBAvx6b9O Gim6paDtu2T2pYfb+tFEDz3kF8UOvHCIKquA70hgmb239LDE8y95H/xE/O72F0gZ4tdDGqkq+yX EKUeC/LoAMLrqpMOfFk8z+y44q9dnARa6Sct7PJDHM/ZH8RqD1qURmTJbz18+M9R4hNmHOhR3rl 3PNQcjw== X-Google-Smtp-Source: AGHT+IEGF3T3RZLN8y+Mvh3TSXwE+AbXUtlNFyXPSJ5Q7Op4TQjKy7T262iMP6W7Wk2kHU1oMTo8vw== X-Received: by 2002:a05:600c:4f94:b0:459:d494:faf9 with SMTP id 5b1f17b1804b1-459f4f3e51dmr34361025e9.10.1754664830934; Fri, 08 Aug 2025 07:53:50 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:50 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 13/24] net: pass extack to netdev_rx_queue_restart() Date: Fri, 8 Aug 2025 15:54:36 +0100 Message-ID: <96b167f57130cefd756f8cc228f6239b0e21111c.1754657711.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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 Pass extack to netdev_rx_queue_restart(). Subsequent change will need it. Signed-off-by: Jakub Kicinski Signed-off-by: Pavel Begunkov --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 2 +- drivers/net/netdevsim/netdev.c | 2 +- include/net/netdev_rx_queue.h | 3 ++- net/core/netdev_rx_queue.c | 7 ++++--- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index 96b6fa696247..e8e88782fdf1 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -11532,7 +11532,7 @@ static void bnxt_irq_affinity_notify(struct irq_aff= inity_notify *notify, =20 netdev_lock(irq->bp->dev); if (netif_running(irq->bp->dev)) { - err =3D netdev_rx_queue_restart(irq->bp->dev, irq->ring_nr); + err =3D netdev_rx_queue_restart(irq->bp->dev, irq->ring_nr, NULL); if (err) netdev_err(irq->bp->dev, "RX queue restart failed: err=3D%d\n", err); diff --git a/drivers/net/netdevsim/netdev.c b/drivers/net/netdevsim/netdev.c index 46cdf31f0354..74b2fe1b1cd3 100644 --- a/drivers/net/netdevsim/netdev.c +++ b/drivers/net/netdevsim/netdev.c @@ -865,7 +865,7 @@ nsim_qreset_write(struct file *file, const char __user = *data, } =20 ns->rq_reset_mode =3D mode; - ret =3D netdev_rx_queue_restart(ns->netdev, queue); + ret =3D netdev_rx_queue_restart(ns->netdev, queue, NULL); ns->rq_reset_mode =3D 0; if (ret) goto exit_unlock; diff --git a/include/net/netdev_rx_queue.h b/include/net/netdev_rx_queue.h index 8cdcd138b33f..a7def1f94823 100644 --- a/include/net/netdev_rx_queue.h +++ b/include/net/netdev_rx_queue.h @@ -56,6 +56,7 @@ get_netdev_rx_queue_index(struct netdev_rx_queue *queue) return index; } =20 -int netdev_rx_queue_restart(struct net_device *dev, unsigned int rxq); +int netdev_rx_queue_restart(struct net_device *dev, unsigned int rxq, + struct netlink_ext_ack *extack); =20 #endif diff --git a/net/core/netdev_rx_queue.c b/net/core/netdev_rx_queue.c index fb87ce219a8a..420b956a40e4 100644 --- a/net/core/netdev_rx_queue.c +++ b/net/core/netdev_rx_queue.c @@ -10,7 +10,8 @@ #include "dev.h" #include "page_pool_priv.h" =20 -int netdev_rx_queue_restart(struct net_device *dev, unsigned int rxq_idx) +int netdev_rx_queue_restart(struct net_device *dev, unsigned int rxq_idx, + struct netlink_ext_ack *extack) { struct netdev_rx_queue *rxq =3D __netif_get_rx_queue(dev, rxq_idx); const struct netdev_queue_mgmt_ops *qops =3D dev->queue_mgmt_ops; @@ -134,7 +135,7 @@ int __net_mp_open_rxq(struct net_device *dev, unsigned = int rxq_idx, #endif =20 rxq->mp_params =3D *p; - ret =3D netdev_rx_queue_restart(dev, rxq_idx); + ret =3D netdev_rx_queue_restart(dev, rxq_idx, extack); if (ret) { rxq->mp_params.mp_ops =3D NULL; rxq->mp_params.mp_priv =3D NULL; @@ -177,7 +178,7 @@ void __net_mp_close_rxq(struct net_device *dev, unsigne= d int ifq_idx, =20 rxq->mp_params.mp_ops =3D NULL; rxq->mp_params.mp_priv =3D NULL; - err =3D netdev_rx_queue_restart(dev, ifq_idx); + err =3D netdev_rx_queue_restart(dev, ifq_idx, NULL); WARN_ON(err && err !=3D -ENETDOWN); } =20 --=20 2.49.0 From nobody Sun Oct 5 05:24:22 2025 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.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 3C771286421; Fri, 8 Aug 2025 14:53:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664836; cv=none; b=GbDPwGunY+GBewGxgHyqiFwRyvtWUca0C8HDl64Y6wohhNJx4tlhQUTrBW03KN0khDIdkQl0mmqkg4UUGUTz9LotwKI8LAbqV63HuxyLPUt8lrrJhrvxB40SLXjy0bCpkfwCZyfhXjvrhKaXEeV/W0qZtOaCJXULnfXXAt/5+qI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664836; c=relaxed/simple; bh=+LpLnpVjrDeTmD270kLDO6EOtuHUGTpk7i/fA9+a4Y0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=S6VeoxGVDPc3pG3bdgXZd+AD/73AwpRrssJTcjEMbAMvKBjWCO/r682A4SyC8UqPgx+zvX8XbgUDc1EhalAVgREWNKljTSz8eptxd1iz7pO+7MGL3zOrlxD+us4RX/1fpLZsnBiSve3In+b2WN8zgsExrH/PjewWz8i/XgY3jc8= 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=OubdOrn1; arc=none smtp.client-ip=209.85.128.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="OubdOrn1" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-458aee6e86aso14094675e9.3; Fri, 08 Aug 2025 07:53:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664832; x=1755269632; 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=AT91pM79wAksHs/nHAf2EUUF510yylJAoTX0kDkhkqs=; b=OubdOrn1uOopdrmXLJmXDibmO5eK05LCnwgz4XcnmHEIYeo4iZGnOqbcso2vmmmjSh 4HTjEMGrO3PKxCLGija1J0RTrmDwmSpevPsd2Z1iANre7fugdJc9kWO7QECNtcWkHs3o PZdh8FePseC9tdd9vIDEK7cYtZYFcjy8y1pRIytFuTftBNeeSfa474nky3dZh9Zk0/w5 SYkcRWbNpZkk+w2Gj2eTddOurav36T+5Y/w3VAThqYMY5aKWoU4dIaGzxHO8Odrq5fMS sOwxQ0PA2fOYcLuvYdmFJ3yfZbTZkjyL/UHTm8cWk4sXef1codo4WljaMQLIEM/dDk/l YlVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664832; x=1755269632; 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=AT91pM79wAksHs/nHAf2EUUF510yylJAoTX0kDkhkqs=; b=X9yVdsUWFBgmayr4l2G9T9jvr1KYMjx3YHz7WJTz/9O5tJlJR2hAqQFMY/3hiY5+0D H8AmK/jpnGtWrR9+NkHxN2TLQXQQIJ0ff7q1zVU4tua6+HOz3QlI7NysSi2flsj90fdj Jhhjv9EiDfM112hbcsoniduQ1+LllZCioKQHwlwdjiIqLwXv76Q12MZTnMQk5wl2fqne 1tpjwP8pr9M7i3xeucNAr57A9VJzDFIWgrtdIJqGwqZfBJ26C346+9l/xpwcGvHscVCx zNX4Jm/90xuldFX0dGVIBJ4/t5k8HCMjJS0I4+x40E3Uz6Q/GHglga+sjZZpmzAQ1Kdi HEiw== X-Forwarded-Encrypted: i=1; AJvYcCV3+Gapn4RBAgykVw5BydHI44n+UQSgUpMY//IdcBkNlJqEAtYYyCbmqSFxsdVjr+CSs/Gel1VQ@vger.kernel.org, AJvYcCXVcFu4mkSmw+ZlXg+9tkUkNxv1BEJS3wqhlCCTROjKPqOjzAcUkMRRHkFH9PPwtPEhiTLy618XCePbIW0=@vger.kernel.org X-Gm-Message-State: AOJu0YwwgXoUkuMwwaFVE4pedtNCrP2OmkdiIIauphfkYGLV/OUnleul NlAxZOvFQF67mBaszY0RGSRz9qn+dDmLuMLQ4CX+cW8wI7QdJk8xAql4 X-Gm-Gg: ASbGnctRBTiCP2cNbOajmaTIqRiHqmxC+I4KhDt9FKvtMnTUMREXCfJddzVrye9k+zs Pzes4tXEdlCrIZGgBBOtqSnEIPFDuBoh2Gu0apVxCk4PvaQLblMcASN7SKIdfnh1Ip2afOkIVBi T/uE3Ey9lFhwigD7LWxbMIDV/vH3MJdCyT4uDmA+RkJPZPev0akVygzWfFIlZR9tduj71oELpmm YVEDQxU4UjfIH8+ItuVudQIxNECDGS1XFa+mb7PXDmZA0UuX12ToPi7TCgjnac5/Lm0q3Lv2MfZ 3JQLiUTwQd8pAK074VruWWprqEEbvP5Tex0pSOW+J0YYpjmQiNS9F/Jq+N9+G8M7mQM5PjjyuxB RZ4h/XQ== X-Google-Smtp-Source: AGHT+IHKatVcDToB3k+GJrPMFIYkMdnSCvCpUZsSQ51BQ24b1EkDZe6yzHMBZeifo1SX+Lmy/DDKAA== X-Received: by 2002:a05:600c:3589:b0:456:19b2:6aa8 with SMTP id 5b1f17b1804b1-459f4f0f380mr31736385e9.19.1754664832366; Fri, 08 Aug 2025 07:53:52 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:51 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 14/24] net: add queue config validation callback Date: Fri, 8 Aug 2025 15:54:37 +0100 Message-ID: X-Mailer: git-send-email 2.49.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 I imagine (tm) that as the number of per-queue configuration options grows some of them may conflict for certain drivers. While the drivers can obviously do all the validation locally doing so is fairly inconvenient as the config is fed to drivers piecemeal via different ops (for different params and NIC-wide vs per-queue). Add a centralized callback for validating the queue config in queue ops. The callback gets invoked before each queue restart and when ring params are modified. For NIC-wide changes the callback gets invoked for each active (or active to-be) queue, and additionally with a negative queue index for NIC-wide defaults. The NIC-wide check is needed in case all queues have an override active when NIC-wide setting is changed to an unsupported one. Alternatively we could check the settings when new queues are enabled (in the channel API), but accepting invalid config is a bad idea. Users may expect that resetting a queue override will always work. The "trick" of passing a negative index is a bit ugly, we may want to revisit if it causes confusion and bugs. Existing drivers don't care about the index so it "just works". Signed-off-by: Jakub Kicinski Signed-off-by: Pavel Begunkov --- include/net/netdev_queues.h | 12 ++++++++++++ net/core/dev.h | 2 ++ net/core/netdev_config.c | 20 ++++++++++++++++++++ net/core/netdev_rx_queue.c | 6 ++++++ net/ethtool/rings.c | 5 +++++ 5 files changed, 45 insertions(+) diff --git a/include/net/netdev_queues.h b/include/net/netdev_queues.h index b850cff71d12..d0cc475ec51e 100644 --- a/include/net/netdev_queues.h +++ b/include/net/netdev_queues.h @@ -147,6 +147,14 @@ void netdev_stat_queue_sum(struct net_device *netdev, * defaults. Queue config structs are passed to this * helper before the user-requested settings are applied. * + * @ndo_queue_cfg_validate: (Optional) Check if queue config is supported. + * Called when configuration affecting a queue may be + * changing, either due to NIC-wide config, or config + * scoped to the queue at a specified index. + * When NIC-wide config is changed the callback will + * be invoked for all queues, and in addition to that + * with a negative queue index for the base settings. + * * @ndo_queue_mem_alloc: Allocate memory for an RX queue at the specified = index. * The new memory is written at the specified address. * @@ -167,6 +175,10 @@ struct netdev_queue_mgmt_ops { void (*ndo_queue_cfg_defaults)(struct net_device *dev, int idx, struct netdev_queue_config *qcfg); + int (*ndo_queue_cfg_validate)(struct net_device *dev, + int idx, + struct netdev_queue_config *qcfg, + struct netlink_ext_ack *extack); int (*ndo_queue_mem_alloc)(struct net_device *dev, struct netdev_queue_config *qcfg, void *per_queue_mem, diff --git a/net/core/dev.h b/net/core/dev.h index 5fdcf97149f9..f51b66403466 100644 --- a/net/core/dev.h +++ b/net/core/dev.h @@ -99,6 +99,8 @@ void netdev_free_config(struct net_device *dev); int netdev_reconfig_start(struct net_device *dev); void __netdev_queue_config(struct net_device *dev, int rxq, struct netdev_queue_config *qcfg, bool pending); +int netdev_queue_config_revalidate(struct net_device *dev, + struct netlink_ext_ack *extack); =20 /* netdev management, shared between various uAPI entry points */ struct netdev_name_node { diff --git a/net/core/netdev_config.c b/net/core/netdev_config.c index bad2d53522f0..fc700b77e4eb 100644 --- a/net/core/netdev_config.c +++ b/net/core/netdev_config.c @@ -99,3 +99,23 @@ void netdev_queue_config(struct net_device *dev, int rxq, __netdev_queue_config(dev, rxq, qcfg, true); } EXPORT_SYMBOL(netdev_queue_config); + +int netdev_queue_config_revalidate(struct net_device *dev, + struct netlink_ext_ack *extack) +{ + const struct netdev_queue_mgmt_ops *qops =3D dev->queue_mgmt_ops; + struct netdev_queue_config qcfg; + int i, err; + + if (!qops || !qops->ndo_queue_cfg_validate) + return 0; + + for (i =3D -1; i < (int)dev->real_num_rx_queues; i++) { + netdev_queue_config(dev, i, &qcfg); + err =3D qops->ndo_queue_cfg_validate(dev, i, &qcfg, extack); + if (err) + return err; + } + + return 0; +} diff --git a/net/core/netdev_rx_queue.c b/net/core/netdev_rx_queue.c index 420b956a40e4..39834b196e95 100644 --- a/net/core/netdev_rx_queue.c +++ b/net/core/netdev_rx_queue.c @@ -37,6 +37,12 @@ int netdev_rx_queue_restart(struct net_device *dev, unsi= gned int rxq_idx, =20 netdev_queue_config(dev, rxq_idx, &qcfg); =20 + if (qops->ndo_queue_cfg_validate) { + err =3D qops->ndo_queue_cfg_validate(dev, rxq_idx, &qcfg, extack); + if (err) + goto err_free_old_mem; + } + err =3D qops->ndo_queue_mem_alloc(dev, &qcfg, new_mem, rxq_idx); if (err) goto err_free_old_mem; diff --git a/net/ethtool/rings.c b/net/ethtool/rings.c index 6a74e7e4064e..7884d10c090f 100644 --- a/net/ethtool/rings.c +++ b/net/ethtool/rings.c @@ -4,6 +4,7 @@ =20 #include "netlink.h" #include "common.h" +#include "../core/dev.h" =20 struct rings_req_info { struct ethnl_req_info base; @@ -307,6 +308,10 @@ ethnl_set_rings(struct ethnl_req_info *req_info, struc= t genl_info *info) dev->cfg_pending->hds_config =3D kernel_ringparam.tcp_data_split; dev->cfg_pending->hds_thresh =3D kernel_ringparam.hds_thresh; =20 + ret =3D netdev_queue_config_revalidate(dev, info->extack); + if (ret) + return ret; + ret =3D dev->ethtool_ops->set_ringparam(dev, &ringparam, &kernel_ringparam, info->extack); return ret < 0 ? ret : 1; --=20 2.49.0 From nobody Sun Oct 5 05:24:22 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 DDE57281525; Fri, 8 Aug 2025 14:53:55 +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=1754664837; cv=none; b=QYE0bwJEfoCPHk+maIbLEBNY2jkPtKbyR3UkQO4oDjs320ci+/RxAKs+qNSUXAsHHFbyvmcRnGriwA4+HMFN3OFC7EkBfb7T5DZf8TUWeKAzWgSBIVwFTkSH7FRAS8ksVIWDO8FmO4NEo1ejRWM2oSwYHWyG5n94jaKqPt0XsVE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664837; c=relaxed/simple; bh=3WUy0av+tGrLZwws0zMeXgY+WuB/iILuEK5qJwZ+2+Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KyO6duMpOp3TETT8BkC6JE68Xxsku2maFzVksdRe0UsF0B+kGScivr0y6azKUYMzJtF0U26QoL7JW2Pf/12dxC86GdKOiM/KD7owoCoTe9A4kdJ0xw4xMyMbUiBXzJNxybcgJwof6gnCGPLJjF6fyzQeRtrdqovadS3aT84ljqs= 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=b22oVVYv; 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="b22oVVYv" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-454f428038eso19169665e9.2; Fri, 08 Aug 2025 07:53:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664834; x=1755269634; 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=vzl+/yw2SoeEUSeRtFTbAhZhsO05Pma8ahiXaaydnis=; b=b22oVVYvIO7h720yOTie0HjrLjYuPZzE3KaLpGa0X1+EdAwNcNe4/iSMQXi7tO3oNq N2hsa5ZR1aDlkR8vyc5ktHSW6aXjGLLwU/FWXbSCsulfyOrpN2AQbu+FgNw19uybjOcZ PIg6ZRItCik2IxkJzJiP4Cyf6nO/2OQh/UnxXw7H0yyCKetejq2lCwvd06VIarbJDUMF l9KUckpXGUXHJPImod0pn4i3gTOuD7vlbEln8yvUwz7YYJCXHxq1S01xTzu4qa+6hGUJ /6mcHgXRFxev96LmPrCidt5Pkr+u/LzcbxtxIU5p8G79BviNNJCIiPqOqbkfS6pzZgoh 2T3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664834; x=1755269634; 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=vzl+/yw2SoeEUSeRtFTbAhZhsO05Pma8ahiXaaydnis=; b=JDjV360GAtg1Iug/5Ojmie//Bgch8IJWhFrAPs4HJyFr7T3+rgznRtuRT1GvsLzVcn I5x3yzRxFKIfIrFXAD1AWgLrvE5sMZ9eJBnTBSxUZqbiMsFxQ7gckdcdh5SykUEr3tWz mooau6+BHAajRRdppb1qmmMGEw+D/cAsA1jPx/kw0OFq9bL9qoK4FEobOgi/EauEFqQq UOOxG2IdVadFn/ApAClLxr0YFR/jwqwbOfZh9vFaceAhBCCw7slIge2Frb965eJHd9zL uJnYQ0rfnruYB3F3WcHy6v01HGhFRhcdiORLkoM6p84czxEvV+brkXMlz+MFKXKfDbik HRig== X-Forwarded-Encrypted: i=1; AJvYcCWVWr8SWI1qoFqkxHeUsd3mCIs9ev1vu5s2INlNyghrj3/AzV5gshzLfdhOq2z5caxRefOJCl3hSsoZHGQ=@vger.kernel.org, AJvYcCXKqR55j6LGzXp491Cic63efApNdCt2HAV4pyd75R7nkV7zFPDeBUe/DOXDmRhZ9JS/a6ZmtuRc@vger.kernel.org X-Gm-Message-State: AOJu0YzIibB9zokWz7C/PMvLX/abcipBOa2+g00sYAlyKxKD865A9WSb 0L8LM5a9vfi7eez9e88PginWiPV5+Cv2E8lo416Ma5CUEscUGMOtIVGV X-Gm-Gg: ASbGncvFXADHELhYaI7ZiaSLs4GTgjcMOrp/RdZUX+UaHYBXYZoWeL2CfITUpB1GVDD yxaoQutBlRR5NPDVSnAg0lVZjRzCZMus6mKYuDlAeK1ugQYsudhA8jNqIAev2w2IAQ6FlMHM9m9 k3Agvz5g7ugT9nU7spmQpMumqtBIMoy37tw8oHonHsaIlYOgazSPbgv7R0aA3AKVOFOAF7rFtbS 83QJwBHd0N9RgSzdUZKpOfaTm7YvvG5xuuT/b0Ia2/38QdrGFlZf/iWwAqKmiHpZZwKQJaDvBuV IBAAoFAAnPS2F5ZGOA+piahAtZo6d+BeE7ubo2VRTOdHHu3gGcCA8qh74ruvS0hNC203MzWw+W6 k3hm+he15OasoEXh6 X-Google-Smtp-Source: AGHT+IF0tcJ53xSLHaSv1PHGmbfAqJkCMqX/SXSe+zsI/JAM02VfOip/w8gRcmnplAGDo5Wv3LFqsQ== X-Received: by 2002:a05:600c:4f42:b0:450:d01f:de6f with SMTP id 5b1f17b1804b1-459f4ec6a99mr32141485e9.15.1754664834159; Fri, 08 Aug 2025 07:53:54 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:53 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 15/24] eth: bnxt: always set the queue mgmt ops Date: Fri, 8 Aug 2025 15:54:38 +0100 Message-ID: <13a344abdba73c39ba7a06dfb28909e5f3ee53ac.1754657711.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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 Core provides a centralized callback for validating per-queue settings but the callback is part of the queue management ops. Having the ops conditionally set complicates the parts of the driver which could otherwise lean on the core to feed it the correct settings. Always set the queue ops, but provide no restart-related callbacks if queue ops are not supported by the device. This should maintain current behavior, the check in netdev_rx_queue_restart() looks both at op struct and individual ops. Signed-off-by: Jakub Kicinski [pavel: reflow mgmt ops assignment] Signed-off-by: Pavel Begunkov --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index e8e88782fdf1..933815026899 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -16118,6 +16118,9 @@ static const struct netdev_queue_mgmt_ops bnxt_queu= e_mgmt_ops =3D { .ndo_queue_stop =3D bnxt_queue_stop, }; =20 +static const struct netdev_queue_mgmt_ops bnxt_queue_mgmt_ops_unsupp =3D { +}; + static void bnxt_remove_one(struct pci_dev *pdev) { struct net_device *dev =3D pci_get_drvdata(pdev); @@ -16771,6 +16774,8 @@ static int bnxt_init_one(struct pci_dev *pdev, cons= t struct pci_device_id *ent) =20 if (BNXT_SUPPORTS_NTUPLE_VNIC(bp)) bp->rss_cap |=3D BNXT_RSS_CAP_MULTI_RSS_CTX; + + dev->queue_mgmt_ops =3D &bnxt_queue_mgmt_ops_unsupp; if (BNXT_SUPPORTS_QUEUE_API(bp)) dev->queue_mgmt_ops =3D &bnxt_queue_mgmt_ops; dev->request_ops_lock =3D true; --=20 2.49.0 From nobody Sun Oct 5 05:24:22 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 A429728152D; Fri, 8 Aug 2025 14:53:57 +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=1754664839; cv=none; b=Nhfyu/mD9RWcJZN7Zf1W6CWDBZrKOdQqxAwjKZa3ojpTLlo6o+8GVq31ti7cHPp9JZ10dvmXD1wp5XPFVb10hBfITXC6WzUv+9vk6F35ibGzUQY/iIM+wHNz2FJF5CoueyRfSQfnXk8MHFFWKi8B7jG56lAKVwV3Z1Fh2B6SbiA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664839; c=relaxed/simple; bh=0/fZcf4VIZa8ttbza17p391nsLnbsvdEPd9A/ZzZmUM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=W9gDPSsHr8JGnaT8ikEq8LrxYmyWbHIlhaSW+JLJN9IsLoIQGCBYH0ewo+0CHddPpUiYuDH0mL/GWFVk7vXmvtpftyDJOsRFMnSw74/w+O8MX2VMkcocO0d5T20efipdC4A+8C0MnrzFj9hN+JLtCpKyvd2JOdTZOv/CHL/jirc= 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=GG+2mMrE; 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="GG+2mMrE" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-455b00339c8so14563255e9.3; Fri, 08 Aug 2025 07:53:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664836; x=1755269636; 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=CMS+E0U7h7jy6Zo9B78jzNadU1RCpy/dHkeuaorur/w=; b=GG+2mMrEadydqV0SM8cqRQAdeCOFzYXPrOfN+8CNYUfbgoYkxnrUkXTqikz3EEpMWI sNoDqhKR9PO0ZmJRZdgMwptXOPaBaf92PVoCBbnmAw85G9W2D9gzO5mADpSqc5J4UreV Ut3D6bB2+VeKoRINOtyXYxcZo3yVwUn93WQ52sZWFx9OyEgUkw3TEq650lbOxrJLzyPd aJDUTOlt5ITw5OFyauLRK5L1LDTvOMszerRfntozgC6B1hYLT0yyNJEqCezGppOApc/7 Hto7rhGu5tEtFIk6qyOkON8kyMC4CKVa7KT1ZiLdasxTCtMdttTKjC/hRDkGP3bmifKP r1kA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664836; x=1755269636; 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=CMS+E0U7h7jy6Zo9B78jzNadU1RCpy/dHkeuaorur/w=; b=ww8zenxkiU9Ls8IRgMH574clwNYHxhAI3flXGjOrh/L3Rk2FsZcKz4sSs04H5nPeIS F37T5nchx7FbYs82wRtiStMcfkOrIygmmJ5LTb2mJX+DbD+UT6qc7qGz4T+cgTgQ0VNg 7h4g2grgPAvTdKnANxSFwvLqxHPfJzU2CaRLcQ2Clm3PLZkHQC8WuO3BEoCDWnfickUY oYNlAnEElUyR9mB43wQvcZc/jV391E8DPhPuPmMnTLXLxfLAo2AS34ReqvZ0Hjtltqa1 9Et66mS4kC6EWFG8Ck006LtiBtrtpna8ySNOJyRJHl9wATSGJH05HZD8JAKBkkSHuR9c 8FCA== X-Forwarded-Encrypted: i=1; AJvYcCWHXgAcBGsuAurBKQzrcDDqlL1GYsIWKJhQ+NJCFQnqVb+KTMYbRTAL1Znf9iaS3F5Jt6j3cHupA4yEXHo=@vger.kernel.org, AJvYcCWcq7Pvsaiya0fdQa2HHFIt0oyGxT/0RNE5LldOZ+lUAoPHca5zhA6b6kVN1Fm/9Jot04KiVbWJ@vger.kernel.org X-Gm-Message-State: AOJu0Yyd1HzcX3TEhLA4FMb8AraC4OC813v1g6GG2+xPFWkINfdQE1Mk 4ZwAAwvh+5HdLDEc3eqfmBRlxOaTBEQtOooOTqXZ2hxfYixwI/gj+j7q X-Gm-Gg: ASbGnctUkf6Mk5IOG1vml6/1FFT0lvfmJgBwUH/2S2OELgZtCZ4d6A3CdtQUEZkn41d kbKKJS9Raz9xFH430fxuOmffaEQUZqM33lAb0GI/mAu8lEFuvRw8Z7eEx25pXy8nyGQy8cCFm0P vPkhhIsjqxkaulmzb8w6jyg/EVAo/eRISDE1OFD1BL1x84Ld1bR6IDZ2PAsqMCLXc67V6eQAH8A QUaNR86NMFfUShGzds0S62Zmd8TSAMij8OKVkJ/iAca9nRYSC1CixL4V7Ts0xkampR1AGz7dm4v 1XrFsGytgeR5LTrlPlWqdVFrXx8hkshbG9BqAFWaIu0snLshfBRFp7qPLBgDkyS3AzW6xtkhZ1k nQc3Gtu9ozcGH6IdL X-Google-Smtp-Source: AGHT+IGSY+p25BRgJJColDtAD4hVYN7+pRTbLP+9ItD6R9yUEaj9WCDfekOWBIsZa03X2FsYr1rSzg== X-Received: by 2002:a05:600c:468d:b0:456:fdd:6030 with SMTP id 5b1f17b1804b1-459f4f98174mr30497425e9.19.1754664835696; Fri, 08 Aug 2025 07:53:55 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:54 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 16/24] eth: bnxt: store the rx buf size per queue Date: Fri, 8 Aug 2025 15:54:39 +0100 Message-ID: <0515e1cc2180bbf6a1316714787bbff8e5364597.1754657711.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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 In normal operation only a subset of queues is configured for zero-copy. Since zero-copy is the main use for larger buffer sizes we need to configure the sizes per queue. Signed-off-by: Jakub Kicinski Signed-off-by: Pavel Begunkov --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 46 ++++++++++--------- 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, 30 insertions(+), 25 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index 933815026899..40cfc48cd439 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -900,7 +900,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 > rxr->bnapi->bp->rx_page_size; + return rxr->need_head_pool || PAGE_SIZE > rxr->rx_page_size; } =20 static struct page *__bnxt_alloc_rx_page(struct bnxt *bp, dma_addr_t *mapp= ing, @@ -910,9 +910,9 @@ static struct page *__bnxt_alloc_rx_page(struct bnxt *b= p, dma_addr_t *mapping, { struct page *page; =20 - if (PAGE_SIZE > bp->rx_page_size) { + if (PAGE_SIZE > rxr->rx_page_size) { page =3D page_pool_dev_alloc_frag(rxr->page_pool, offset, - bp->rx_page_size); + rxr->rx_page_size); } else { page =3D page_pool_dev_alloc_pages(rxr->page_pool); *offset =3D 0; @@ -1144,9 +1144,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, bp->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, bp->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; @@ -1178,7 +1178,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, bp->rx_page_size, + dma_sync_single_for_cpu(&bp->pdev->dev, dma_addr, rxr->rx_page_size, bp->rx_dir); =20 if (unlikely(!payload)) @@ -1192,7 +1192,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, bp->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 @@ -1277,7 +1277,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, bp->rx_page_size); + frag_len, rxr->rx_page_size); } else { skb_frag_t *frag =3D &shinfo->frags[i]; =20 @@ -1302,7 +1302,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 bp->rx_page_size; + skb->truesize -=3D rxr->rx_page_size; } =20 --shinfo->nr_frags; @@ -1317,7 +1317,7 @@ static u32 __bnxt_rx_agg_netmems(struct bnxt *bp, } =20 page_pool_dma_sync_netmem_for_cpu(rxr->page_pool, netmem, 0, - bp->rx_page_size); + rxr->rx_page_size); =20 total_frag_len +=3D frag_len; prod =3D NEXT_RX_AGG(prod); @@ -2270,8 +2270,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); @@ -3819,7 +3818,7 @@ static int bnxt_alloc_rx_page_pool(struct bnxt *bp, if (BNXT_RX_PAGE_MODE(bp)) pp.pool_size +=3D bp->rx_ring_size / rx_size_fac; =20 - pp.order =3D get_order(bp->rx_page_size); + pp.order =3D get_order(rxr->rx_page_size); pp.nid =3D numa_node; pp.napi =3D &rxr->bnapi->napi; pp.netdev =3D bp->dev; @@ -4306,6 +4305,8 @@ static void bnxt_init_ring_struct(struct bnxt *bp) if (!rxr) goto skip_rx; =20 + rxr->rx_page_size =3D bp->rx_page_size; + ring =3D &rxr->rx_ring_struct; rmem =3D &ring->ring_mem; rmem->nr_pages =3D bp->rx_nr_pages; @@ -4465,7 +4466,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)bp->rx_page_size << RX_BD_LEN_SHIFT) | + type =3D ((u32)rxr->rx_page_size << RX_BD_LEN_SHIFT) | RX_BD_TYPE_RX_AGG_BD | RX_BD_FLAGS_SOP; =20 bnxt_init_rxbd_pages(ring, type); @@ -7030,6 +7031,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]; @@ -7039,7 +7041,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(bp->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); @@ -7053,6 +7055,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) { @@ -7109,7 +7112,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; @@ -7257,7 +7261,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 @@ -7277,7 +7281,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 @@ -7301,7 +7305,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); @@ -7316,7 +7320,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); @@ -7342,7 +7346,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 56aafae568f8..4f9d4c71c0e2 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 41d3ba56ba41..19dda0201c69 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 bp->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 @@ -470,7 +470,7 @@ bnxt_xdp_build_skb(struct bnxt *bp, struct sk_buff *skb= , u8 num_frags, =20 xdp_update_skb_shared_info(skb, num_frags, sinfo->xdp_frags_size, - bp->rx_page_size * num_frags, + rxr->rx_page_size * num_frags, xdp_buff_is_frag_pfmemalloc(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.49.0 From nobody Sun Oct 5 05:24:22 2025 Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) (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 605D728727D; Fri, 8 Aug 2025 14:53:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664842; cv=none; b=ho7R5fDXRrPJYTrbdQ7+pbEByTpAAlhaw60Du4nC7WcNtzxG3oSyxTw/D2rtitlgAHWD4sgZmjmv8Y2CCfKMxX4DU1plthTYkdstK9WJ5yZIcE5rdlk3GKlFQ7oLjjKqhC/d49yX1BaPffscNSBCHoMJ1f2eTLuGZxigOfT4OL8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664842; c=relaxed/simple; bh=hU/n/C5hEtTRHv/Bx1kXLtULllo0SCYznPG0s9DeCKg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=lrMjf9fsvFc1+3jN9P/LznFWnHBp7G9F6SuGyZEVk6V4rLybAYromBKoTYb0GROTeq3nvhT+IBjZqVjR+HPMEbZo2017x+ohc5m02f1ETWIQYFRmODQJ+UHz5l3eIX693sH/ZN5EltlOi2yfkLpU4LvoDOja251KAVWXd3B2y3E= 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=aGXsSd1X; arc=none smtp.client-ip=209.85.221.54 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="aGXsSd1X" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-3b8de193b60so1308036f8f.0; Fri, 08 Aug 2025 07:53:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664837; x=1755269637; 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=Jil9mHgC7mEIc2j5EJkmS13NrtxehQKBSwC+k2OfBs4=; b=aGXsSd1XQD768GROlPisgAvs4ie5NlbAB5KQhNnVqS5+XNDq13EUI7XawH3PR5di2o Shqw4yQVfGUBBqk/PjVBcf05rIqhRpwqMn/FJFzEttQW0dOs1GYi9EwTWkJExjvGff68 aLh6kVFUNjvFUO2u+pAdnYkjeVgEzliLQQSwzPFaxzV488s51ry2orOJj6aVkkNSYgXC v82t4zcBydhtK8FT858K+3qLe+dlz5v3OVVrANg9y22usBW4HgTA0J8H+U4cT7YrPjSY 1VChcYZ9TubIslXFLX+B2XPMP8vfwuNXfxmEBBVOelu/cTbFW1rVLTha25faZ5z+ydR2 x+zA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664837; x=1755269637; 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=Jil9mHgC7mEIc2j5EJkmS13NrtxehQKBSwC+k2OfBs4=; b=gB2NgKA0+txxpboROy34fzMuyVL6ZgkJNKiX9kVhrpYeJF09eeZHjQOVFpJ/lksao2 QtEUjLvwzJIFEOCvY8L6VwGywzz/2Xn8khqGmoqh/fgZEbgoR+hJcTVlPtivK1FJ8/BR Iw+uPnU9eQhZ51oxqQxR86H4181VMUxJKyidXCkchTc2b3WpNF5tSoGLP+tWcPJu2nwC ANNFv4wtBmzd6YSCEeQM2V6mVnMx+uWqRMNr6M9lh89fiGhJItjVorjucKIKnvRlEVsf Z0oYTLED7OXpUfzFyNKKwaEDDLRD1O8QoydnGOpb/AtL1h0ul7+EEJXwBV0yTCwYmp5x 79lg== X-Forwarded-Encrypted: i=1; AJvYcCWid26nrKx1cSGmYn/zIEo+t30YwAXUI5yUaR3NB0Em+bxpTqY7xUwV5W65l6TYvKM5AMFzZNds@vger.kernel.org, AJvYcCXjDaBjh1MWzR5c4Rpv3c6EXh/dbwTfjFc7FjpM1WroM8JUOBWJ75vkkaOEnHth7ZeSWTugSlzDfvnzw/0=@vger.kernel.org X-Gm-Message-State: AOJu0YwU9kHAlxJNAAqgEIeyJo9LzbTdlzEEkvoqIK94ocfLEFsZXxx4 jXDBo6GQHC8QSs3AMQFqFist0SyRAibhQy0r6MoCiJAiJrU9R2bxXom6 X-Gm-Gg: ASbGncvDc2asWor3+0pKf3T/VszplCRSDHdj9IFXUqi5qigzO+/Q25Gejxl5RL6tSZe 0UYamHx9bZNgSf+R1SMTHblACqO07LMC9LC+LGRj6GSRC6BnB30SBCes+vdw8taWr/E/A6gMViU NNwLIpswoMtKlm/2A3K46RbqCnkis4w9Lj1u7CkArRp8vf/ZkTWKPmymKgJebSzCXLpWQ0x5sNo dQ9Gha+JaVTAi2jUz63oqcWOxh0IrOct6VYU9CsbvosOJ+4HLSMsQ03PQpIEZLLplvu8VpHaV7r tn5r8sopKSmYmqOAkWhxHk3dlNDzXed0S3rPJB6vmTA6wzW7YCm6L0ZMOxfH70o8JSn1ca/42RG Kvhp1OA== X-Google-Smtp-Source: AGHT+IEDIXRId+jzuDrvYhOv+oqA4vxPWex8ME0953a7G2wnDFYPfZn2fn8yxOTU0MEN69fp7fa67A== X-Received: by 2002:a05:6000:1ac7:b0:3b8:d3b4:2c4a with SMTP id ffacd0b85a97d-3b90094025dmr2776340f8f.17.1754664837234; Fri, 08 Aug 2025 07:53:57 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:56 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 17/24] eth: bnxt: adjust the fill level of agg queues with larger buffers Date: Fri, 8 Aug 2025 15:54:40 +0100 Message-ID: <0a4a4b58fa469dffea76535411c188429138cc81.1754657711.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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 | 27 +++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index 40cfc48cd439..a00c2a829b6b 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -3805,16 +3805,33 @@ 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 > bp->rx_page_size) + fill_level /=3D rxr->rx_page_size / bp->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; + const 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; + WARN_ON_ONCE(agg_size_fac =3D=3D 0); + + 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 @@ -4384,11 +4401,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_ring_size); --=20 2.49.0 From nobody Sun Oct 5 05:24:22 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 9E6742874E4; Fri, 8 Aug 2025 14:54:00 +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=1754664842; cv=none; b=E+2VEN0Ldn/a1+BenB/dx2z+wH0Z/RCMMIl9CNpBp2RRMWxE7WRU2FMgf0d7oA8aXlLNxlOuGagPVkMvvuVN1QqLmWAFkhHtfbgYISkFzglvqUXToe2dzT0FSJi2qt1vzmv5S2F0+KhVRuua6HIpogkeZbuXcBRNaNXMy8/DW3o= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664842; c=relaxed/simple; bh=dKemawYs6tmRpVp4P/ZJ5e8Z9CA9cpAAwsABO80XNsY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=obtP3qIMF1XYJzEH03dekS+U/Fp6epx6ukbYTih0IQBfcHUYG7XosNLTQdjaweK81OcrKrI2TzWMqXbJRPnR5guaXdIKMQh49IDSPord0dYGm+5bbDGNimEaHuRALtNhuTpBoMz2Ub2FT2lqH2e23CCvK5iQMFp9paK/aenFZq4= 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=cNI1i1++; 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="cNI1i1++" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-458ba079338so16624645e9.1; Fri, 08 Aug 2025 07:54:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664839; x=1755269639; 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=IaRoaXadLVFNZS0CAr8CbfPwOM7w7w9VFRM/7RWs6iY=; b=cNI1i1++EhY45Dz2ubHlETMDXOkRs7V5790/7yaEmdMarxoaKMu4+gdOvnVj5aTOKn 0Ddst35733+ljbuojCcVPfexxHykJH/5K5Y36Rc+1seu3YoD2hq7S8bTP/xGCbFRlYTI TyMjIfmmDndGlt7fNKnhnYx12MYgHWdxHsVKaqU/eI94xElxGWXFnJUP0RYNH+XKVgUj LlHb0Rz8YdKRExoyQVyk2FFUjjkf9r5GUwh5qNb09mbcyOLLKpJ5hqZrmJQ75BEuHxSV gWu3mz0kALUwAHVJ6rwo4kFKyrGRqa4E34ITzDjdCDlYg+l+cfDiDbdQYOkaW2+NzKQM iQow== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664839; x=1755269639; 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=IaRoaXadLVFNZS0CAr8CbfPwOM7w7w9VFRM/7RWs6iY=; b=bJtKcmwvOifUfFpJQ1DtAmL6blblK15uXlfxKMv2q1E7bQYSoOkhk3uxZdqHVswODq cRQbT8KsJv0T61bHGuVotU/nU31oL47GH1yFAyK6aqI3bKXghYFw2Qd/iLj9kjwpp7YO KXFzDlbDHVwVB9Ox4OLtrwT5pbFGsVNlAcHwbWyx4JlzXFyixj39Kjq5LNr07c9TNT4g DVGGwohMU5ACiqN7C6h6pdy2LyJTvn8g+k/Uj5Ap4aYlFFCblpd21iqVziCoqRYKAPxh AzpA/4MNEoQkGTZOU379R8w3j+3+FvhXz2+AWxxfzKeXHDEx9rptOWOdhUMH8vDOngWq E/vg== X-Forwarded-Encrypted: i=1; AJvYcCU5lyRmwNUEuw5dVTNWi/sXs1iTQyDtbJMNu+uwBdD0gaOiFJbxSpO2oOC6o4dHrDnPaWFcju+E@vger.kernel.org, AJvYcCWP5ptt1gI8Qk6ne+8CwZUpv14Y1ZPA9TwGXeFRb2M1nyqCrz1GctlSvPymQT2IDz9rHolIeHo9USbuu7w=@vger.kernel.org X-Gm-Message-State: AOJu0YzTFNx4CudagIONOE1hzUJJLHdb4CYo3Cw6xwyLzSDoM/hEsbMM eepwMzr9f+9OSkXKFoDQAE7v9Dua2GIn94huP0HzvY261ITDACnQSz/t X-Gm-Gg: ASbGncsYiVDOloZBjetBnckRYxRIB7BaqEIUfl43sTLS9/qJbNn9ehyl7/T0LDCGUxZ yMEPfxvSlOU6niJ5mwNyW+S/Xq7l8WnrhSj47Uur1uc9t23PIjyJB1o7ATwCyYes7F+iOIh6uy6 AEjsQXIhjUCgkkOiW3Wyo4LZiBU0F3dSJoFPGZAWKQ1xRgn463CnxDbBzz2L0ev3bAbQdIC9Z3J Cle5y0T8b6C+6T9AxsQvrdra80iVv2V087KJt/i8JLNqCjQ9AcYXl79flZ7yc5xc4Kw2H3j35an JAM9fOUYtjD+t/eIX+fIw8+6NhCtvYG/BBiOZ0HEQKrHiIkn9WWGkzyIFR2Xk/M7ttTdrPLKdQq 7vkY+OCc7lq37uUMv X-Google-Smtp-Source: AGHT+IGvhZcd1K9amZlJ96zBzrXAfsJ7l782fK/205ldAtINtslX18+6t5cM+KV3OJ2GGbN0Y/Dp/A== X-Received: by 2002:a05:600c:3149:b0:456:189e:223a with SMTP id 5b1f17b1804b1-459f51f361dmr29722475e9.10.1754664838799; Fri, 08 Aug 2025 07:53:58 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:58 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 18/24] netdev: add support for setting rx-buf-len per queue Date: Fri, 8 Aug 2025 15:54:41 +0100 Message-ID: X-Mailer: git-send-email 2.49.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 Zero-copy APIs increase the cost of buffer management. They also extend this cost to user space applications which may be used to dealing with much larger buffers. Allow setting rx-buf-len per queue, devices with HW-GRO support can commonly fill buffers up to 32k (or rather 64k - 1 but that's not a power of 2..) The implementation adds a new option to the netdev netlink, rather than ethtool. The NIC-wide setting lives in ethtool ringparams so one could argue that we should be extending the ethtool API. OTOH netdev API is where we already have queue-get, and it's how zero-copy applications bind memory providers. Signed-off-by: Jakub Kicinski Signed-off-by: Pavel Begunkov --- Documentation/netlink/specs/netdev.yaml | 15 ++++ include/net/netdev_queues.h | 5 ++ include/net/netlink.h | 19 +++++ include/uapi/linux/netdev.h | 2 + net/core/netdev-genl-gen.c | 15 ++++ net/core/netdev-genl-gen.h | 1 + net/core/netdev-genl.c | 92 +++++++++++++++++++++++++ net/core/netdev_config.c | 16 +++++ tools/include/uapi/linux/netdev.h | 2 + 9 files changed, 167 insertions(+) diff --git a/Documentation/netlink/specs/netdev.yaml b/Documentation/netlin= k/specs/netdev.yaml index c035dc0f64fd..498c4bcafdbd 100644 --- a/Documentation/netlink/specs/netdev.yaml +++ b/Documentation/netlink/specs/netdev.yaml @@ -338,6 +338,10 @@ attribute-sets: doc: XSK information for this queue, if any. type: nest nested-attributes: xsk-info + - + name: rx-buf-len + doc: Per-queue configuration of ETHTOOL_A_RINGS_RX_BUF_LEN. + type: u32 - name: qstats doc: | @@ -771,6 +775,17 @@ operations: reply: attributes: - id + - + name: queue-set + doc: Set per-queue configurable options. + attribute-set: queue + do: + request: + attributes: + - ifindex + - type + - id + - rx-buf-len =20 kernel-family: headers: ["net/netdev_netlink.h"] diff --git a/include/net/netdev_queues.h b/include/net/netdev_queues.h index d0cc475ec51e..b69b1d519dcb 100644 --- a/include/net/netdev_queues.h +++ b/include/net/netdev_queues.h @@ -39,6 +39,7 @@ struct netdev_config { =20 /* Same semantics as fields in struct netdev_config */ struct netdev_queue_config { + u32 rx_buf_len; }; =20 /* See the netdev.yaml spec for definition of each statistic */ @@ -141,6 +142,8 @@ void netdev_stat_queue_sum(struct net_device *netdev, /** * struct netdev_queue_mgmt_ops - netdev ops for queue management * + * @supported_ring_params: ring params supported per queue (ETHTOOL_RING_U= SE_*). + * * @ndo_queue_mem_size: Size of the struct that describes a queue's memory. * * @ndo_queue_cfg_defaults: (Optional) Populate queue config struct with @@ -171,6 +174,8 @@ void netdev_stat_queue_sum(struct net_device *netdev, * be called for an interface which is open. */ struct netdev_queue_mgmt_ops { + u32 supported_ring_params; + size_t ndo_queue_mem_size; void (*ndo_queue_cfg_defaults)(struct net_device *dev, int idx, diff --git a/include/net/netlink.h b/include/net/netlink.h index 1a8356ca4b78..29989ad81ddd 100644 --- a/include/net/netlink.h +++ b/include/net/netlink.h @@ -2200,6 +2200,25 @@ static inline struct nla_bitfield32 nla_get_bitfield= 32(const struct nlattr *nla) return tmp; } =20 +/** + * nla_update_u32() - update u32 value from NLA_U32 attribute + * @dst: value to update + * @attr: netlink attribute with new value or null + * + * Copy the u32 value from NLA_U32 netlink attribute @attr into variable + * pointed to by @dst; do nothing if @attr is null. + * + * Return: true if this function changed the value of @dst, otherwise fals= e. + */ +static inline bool nla_update_u32(u32 *dst, const struct nlattr *attr) +{ + u32 old_val =3D *dst; + + if (attr) + *dst =3D nla_get_u32(attr); + return *dst !=3D old_val; +} + /** * nla_memdup - duplicate attribute memory (kmemdup) * @src: netlink attribute to duplicate from diff --git a/include/uapi/linux/netdev.h b/include/uapi/linux/netdev.h index 48eb49aa03d4..820f89b67a72 100644 --- a/include/uapi/linux/netdev.h +++ b/include/uapi/linux/netdev.h @@ -158,6 +158,7 @@ enum { NETDEV_A_QUEUE_DMABUF, NETDEV_A_QUEUE_IO_URING, NETDEV_A_QUEUE_XSK, + NETDEV_A_QUEUE_RX_BUF_LEN, =20 __NETDEV_A_QUEUE_MAX, NETDEV_A_QUEUE_MAX =3D (__NETDEV_A_QUEUE_MAX - 1) @@ -226,6 +227,7 @@ enum { NETDEV_CMD_BIND_RX, NETDEV_CMD_NAPI_SET, NETDEV_CMD_BIND_TX, + NETDEV_CMD_QUEUE_SET, =20 __NETDEV_CMD_MAX, NETDEV_CMD_MAX =3D (__NETDEV_CMD_MAX - 1) diff --git a/net/core/netdev-genl-gen.c b/net/core/netdev-genl-gen.c index e9a2a6f26cb7..d053306a3af8 100644 --- a/net/core/netdev-genl-gen.c +++ b/net/core/netdev-genl-gen.c @@ -106,6 +106,14 @@ static const struct nla_policy netdev_bind_tx_nl_polic= y[NETDEV_A_DMABUF_FD + 1] [NETDEV_A_DMABUF_FD] =3D { .type =3D NLA_U32, }, }; =20 +/* NETDEV_CMD_QUEUE_SET - do */ +static const struct nla_policy netdev_queue_set_nl_policy[NETDEV_A_QUEUE_R= X_BUF_LEN + 1] =3D { + [NETDEV_A_QUEUE_IFINDEX] =3D NLA_POLICY_MIN(NLA_U32, 1), + [NETDEV_A_QUEUE_TYPE] =3D NLA_POLICY_MAX(NLA_U32, 1), + [NETDEV_A_QUEUE_ID] =3D { .type =3D NLA_U32, }, + [NETDEV_A_QUEUE_RX_BUF_LEN] =3D { .type =3D NLA_U32, }, +}; + /* Ops table for netdev */ static const struct genl_split_ops netdev_nl_ops[] =3D { { @@ -204,6 +212,13 @@ static const struct genl_split_ops netdev_nl_ops[] =3D= { .maxattr =3D NETDEV_A_DMABUF_FD, .flags =3D GENL_CMD_CAP_DO, }, + { + .cmd =3D NETDEV_CMD_QUEUE_SET, + .doit =3D netdev_nl_queue_set_doit, + .policy =3D netdev_queue_set_nl_policy, + .maxattr =3D NETDEV_A_QUEUE_RX_BUF_LEN, + .flags =3D GENL_CMD_CAP_DO, + }, }; =20 static const struct genl_multicast_group netdev_nl_mcgrps[] =3D { diff --git a/net/core/netdev-genl-gen.h b/net/core/netdev-genl-gen.h index cf3fad74511f..b7f5e5d9fca9 100644 --- a/net/core/netdev-genl-gen.h +++ b/net/core/netdev-genl-gen.h @@ -35,6 +35,7 @@ int netdev_nl_qstats_get_dumpit(struct sk_buff *skb, int netdev_nl_bind_rx_doit(struct sk_buff *skb, struct genl_info *info); int netdev_nl_napi_set_doit(struct sk_buff *skb, struct genl_info *info); int netdev_nl_bind_tx_doit(struct sk_buff *skb, struct genl_info *info); +int netdev_nl_queue_set_doit(struct sk_buff *skb, struct genl_info *info); =20 enum { NETDEV_NLGRP_MGMT, diff --git a/net/core/netdev-genl.c b/net/core/netdev-genl.c index 6314eb7bdf69..abb128e45fcf 100644 --- a/net/core/netdev-genl.c +++ b/net/core/netdev-genl.c @@ -386,6 +386,30 @@ static int nla_put_napi_id(struct sk_buff *skb, const = struct napi_struct *napi) return 0; } =20 +static int +netdev_nl_queue_fill_cfg(struct sk_buff *rsp, struct net_device *netdev, + u32 q_idx, u32 q_type) +{ + struct netdev_queue_config *qcfg; + + if (!netdev_need_ops_lock(netdev)) + return 0; + + qcfg =3D &netdev->cfg->qcfg[q_idx]; + switch (q_type) { + case NETDEV_QUEUE_TYPE_RX: + if (qcfg->rx_buf_len && + nla_put_u32(rsp, NETDEV_A_QUEUE_RX_BUF_LEN, + qcfg->rx_buf_len)) + return -EMSGSIZE; + break; + default: + break; + } + + return 0; +} + static int netdev_nl_queue_fill_one(struct sk_buff *rsp, struct net_device *netdev, u32 q_idx, u32 q_type, const struct genl_info *info) @@ -433,6 +457,9 @@ netdev_nl_queue_fill_one(struct sk_buff *rsp, struct ne= t_device *netdev, break; } =20 + if (netdev_nl_queue_fill_cfg(rsp, netdev, q_idx, q_type)) + goto nla_put_failure; + genlmsg_end(rsp, hdr); =20 return 0; @@ -572,6 +599,71 @@ int netdev_nl_queue_get_dumpit(struct sk_buff *skb, st= ruct netlink_callback *cb) return err; } =20 +int netdev_nl_queue_set_doit(struct sk_buff *skb, struct genl_info *info) +{ + struct nlattr * const *tb =3D info->attrs; + struct netdev_queue_config *qcfg; + u32 q_id, q_type, ifindex; + struct net_device *netdev; + bool mod; + int ret; + + if (GENL_REQ_ATTR_CHECK(info, NETDEV_A_QUEUE_ID) || + GENL_REQ_ATTR_CHECK(info, NETDEV_A_QUEUE_TYPE) || + GENL_REQ_ATTR_CHECK(info, NETDEV_A_QUEUE_IFINDEX)) + return -EINVAL; + + q_id =3D nla_get_u32(tb[NETDEV_A_QUEUE_ID]); + q_type =3D nla_get_u32(tb[NETDEV_A_QUEUE_TYPE]); + ifindex =3D nla_get_u32(tb[NETDEV_A_QUEUE_IFINDEX]); + + if (q_type !=3D NETDEV_QUEUE_TYPE_RX) { + /* Only Rx params exist right now */ + NL_SET_BAD_ATTR(info->extack, tb[NETDEV_A_QUEUE_TYPE]); + return -EINVAL; + } + + ret =3D 0; + netdev =3D netdev_get_by_index_lock(genl_info_net(info), ifindex); + if (!netdev || !netif_device_present(netdev)) + ret =3D -ENODEV; + else if (!netdev->queue_mgmt_ops) + ret =3D -EOPNOTSUPP; + if (ret) { + NL_SET_BAD_ATTR(info->extack, tb[NETDEV_A_QUEUE_IFINDEX]); + goto exit_unlock; + } + + ret =3D netdev_nl_queue_validate(netdev, q_id, q_type); + if (ret) { + NL_SET_BAD_ATTR(info->extack, tb[NETDEV_A_QUEUE_ID]); + goto exit_unlock; + } + + ret =3D netdev_reconfig_start(netdev); + if (ret) + goto exit_unlock; + + qcfg =3D &netdev->cfg_pending->qcfg[q_id]; + mod =3D nla_update_u32(&qcfg->rx_buf_len, tb[NETDEV_A_QUEUE_RX_BUF_LEN]); + if (!mod) + goto exit_free_cfg; + + ret =3D netdev_rx_queue_restart(netdev, q_id, info->extack); + if (ret) + goto exit_free_cfg; + + swap(netdev->cfg, netdev->cfg_pending); + +exit_free_cfg: + __netdev_free_config(netdev->cfg_pending); + netdev->cfg_pending =3D netdev->cfg; +exit_unlock: + if (netdev) + netdev_unlock(netdev); + return ret; +} + #define NETDEV_STAT_NOT_SET (~0ULL) =20 static void netdev_nl_stats_add(void *_sum, const void *_add, size_t size) diff --git a/net/core/netdev_config.c b/net/core/netdev_config.c index fc700b77e4eb..ede02b77470e 100644 --- a/net/core/netdev_config.c +++ b/net/core/netdev_config.c @@ -67,11 +67,27 @@ int netdev_reconfig_start(struct net_device *dev) void __netdev_queue_config(struct net_device *dev, int rxq, struct netdev_queue_config *qcfg, bool pending) { + const struct netdev_config *cfg; + + cfg =3D pending ? dev->cfg_pending : dev->cfg; + memset(qcfg, 0, sizeof(*qcfg)); =20 /* Get defaults from the driver, in case user config not set */ if (dev->queue_mgmt_ops->ndo_queue_cfg_defaults) dev->queue_mgmt_ops->ndo_queue_cfg_defaults(dev, rxq, qcfg); + + /* Set config based on device-level settings */ + if (cfg->rx_buf_len) + qcfg->rx_buf_len =3D cfg->rx_buf_len; + + /* Set config dedicated to this queue */ + if (rxq >=3D 0) { + const struct netdev_queue_config *user_cfg =3D &cfg->qcfg[rxq]; + + if (user_cfg->rx_buf_len) + qcfg->rx_buf_len =3D user_cfg->rx_buf_len; + } } =20 /** diff --git a/tools/include/uapi/linux/netdev.h b/tools/include/uapi/linux/n= etdev.h index 48eb49aa03d4..820f89b67a72 100644 --- a/tools/include/uapi/linux/netdev.h +++ b/tools/include/uapi/linux/netdev.h @@ -158,6 +158,7 @@ enum { NETDEV_A_QUEUE_DMABUF, NETDEV_A_QUEUE_IO_URING, NETDEV_A_QUEUE_XSK, + NETDEV_A_QUEUE_RX_BUF_LEN, =20 __NETDEV_A_QUEUE_MAX, NETDEV_A_QUEUE_MAX =3D (__NETDEV_A_QUEUE_MAX - 1) @@ -226,6 +227,7 @@ enum { NETDEV_CMD_BIND_RX, NETDEV_CMD_NAPI_SET, NETDEV_CMD_BIND_TX, + NETDEV_CMD_QUEUE_SET, =20 __NETDEV_CMD_MAX, NETDEV_CMD_MAX =3D (__NETDEV_CMD_MAX - 1) --=20 2.49.0 From nobody Sun Oct 5 05:24:22 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 DADB92874F2; Fri, 8 Aug 2025 14:54:01 +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=1754664843; cv=none; b=iNeX5fl8P8e3PG27hfe46WbMdPhqDA06oBiVRvln5HGDxRy0/uXqRskmQXFc3MFGnluK6PVqojFFwTgpVmYH0/+GW8ycXy0dgiLumtAIuuzzObCvfPZc6NGw8KRebuUpJ2KkojahlTt8dKGFShYdsvd++cr9YpmxCLLykdsu4zM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664843; c=relaxed/simple; bh=ADoALMUp7fRNmGA7whVIBu9VpV/nZGLKu0ACIB2JHMs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JQoElfm5LGOZbvESx2SoaORzLN1aqynJrAbzvDxQ0onDPBKy10ECVPpQ17j7G8fG7yk0The4zP48Enq4Q9w5zzdOTZHMcItQkH4zu7oiPPAfZMECVU1bMZLA6SEBiww4VBrHFfZmJ7MDiX9NNY0ltJW6KtHl4cXayLQAetz54R8= 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=DuE86wtA; 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="DuE86wtA" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-458bdde7dedso15575205e9.0; Fri, 08 Aug 2025 07:54:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664840; x=1755269640; 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=FaV3RdlXTe3r7U2reA57SXP5kTrJY9JzfyGOVcNFU1E=; b=DuE86wtAjdVcngRKZAcgZwNzkEeMWr1oT1SvoX/JIgmNnujsMR4O0fWLFzQtMk5FhU NZrBPXRI4Aejs0kPRu+M2J5lkgPcPJFYMQS9oG/fgWiINHd231Y8Wuq67sANcpTApedp gXVQcvU1MCEDt3/+eg2okWT8QclS7P1X/9CeEdt+VSJX8kD27SqkPjSGCepV1/9ZaU7t AI56aT/KcDo2lOxufh57+vxlBjOWYCW+ydnDWnomJVZZyoNfjsF1BTMYW0VpomPmztVB eQKwK8Cxy9gJZ1AJw2i1HRoP+UHb9rntBFwtTTV8ZTPvEuY+PeS3ELzGHy9nUqDTL9tf pX6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664840; x=1755269640; 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=FaV3RdlXTe3r7U2reA57SXP5kTrJY9JzfyGOVcNFU1E=; b=IbXXaiK7+gmkpJKxzgZDIq5w/VKAQCO37pV6GvTfJKvBq9X6TJbS26ZBSCdl2SdYYN +oC9xtm4XPCc8F5zOKnqzxo+M7qo8sH8g+BcOMa1YcWLhXNaa8tPyg5RPgfdVQVgpxaU enP25xNDJG4dGiPMr9xDGy7+qmzllthCo7xnDxn+3xeQcsc92/jlgZlGkqg0OeLvwExO an4kS4j91j+Oqgbucg+ZULvSm5dfR0/sordMqInREgMJbRhWDX9Ejs76ipp8VqvmTPtt udbQYgB2OQ3Ck0RiNE35h/6TQVqER7dWnUU3/yTHICpTkfohkmmigCXtzqFqLP51a3FM 0RAA== X-Forwarded-Encrypted: i=1; AJvYcCV+PQrt3e+HpXlgh598upRTWDpCNe16aXVzuNjP1XGmOh9vE3x4eeamJIrCfj2N9G03yZKXYHiot4vgjCM=@vger.kernel.org, AJvYcCXbAkVUUAeAunC2AwslH+yVXc+nb06h/LxZvW7FOJPk7IvKjZxIz82uUovA6IlQg44Itjo9+uS/@vger.kernel.org X-Gm-Message-State: AOJu0Yw/exygA0MbVUkdzo4jSFYWGYkKO5rFQ/3ktyl00IewoUni2ILA 0qKyuYaeNM3mFCW9Y+tZNhWMYa8jDAWquviDsKoSsIQsdkjZWDEjC5Ak X-Gm-Gg: ASbGncssvmGQ89yua0pYpwuK/fDjKMZNNsJVKfXpeIwZpUQZb0n2s3SOeqgZDPck62i xhkdNkHldWkWN8RhmoShHLQ75UY1/qfoQhXLjrNfoGNyeHZel/TT/C4QD0aAUOCCjtouutguNun 8vgo6Ddo/lnySP0olCh3oUGX8ZDBFqfla75uO7thywgkasdq7w/1XcpmHJyRjL+yXZo9plLhAaj RT5wMFHX2S8ehkw5yhLlTv0xyucP1kfXI6PJq2qVKT6JwoqfnEhmQnF5n8tp2Q3SihiZ0yGop/A lVSaq4MnTUR/aBM8Z3JVnowCSnoGtGmJtmeL96k3mtpAQQoXbdoj+4Z8kSo35ck65fo7oBJryjb QHTh/vg== X-Google-Smtp-Source: AGHT+IFD7ZsmtJWlFZtRBXjllQqaAnv6JmGIuTLPYErHs8aEV8uLdL+NONIxlndsItLX06tqkVfUWg== X-Received: by 2002:a05:6000:230f:b0:3b8:d1a4:bacb with SMTP id ffacd0b85a97d-3b900b5118emr2786143f8f.42.1754664840226; Fri, 08 Aug 2025 07:54:00 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.53.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:53:59 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 19/24] net: wipe the setting of deactived queues Date: Fri, 8 Aug 2025 15:54:42 +0100 Message-ID: X-Mailer: git-send-email 2.49.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 Clear out all settings of deactived queues when user changes the number of channels. We already perform similar cleanup for shapers. Signed-off-by: Jakub Kicinski Signed-off-by: Pavel Begunkov --- net/core/dev.c | 5 +++++ net/core/dev.h | 2 ++ net/core/netdev_config.c | 13 +++++++++++++ 3 files changed, 20 insertions(+) diff --git a/net/core/dev.c b/net/core/dev.c index 8e9af8469421..01264c284c84 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -3188,6 +3188,8 @@ int netif_set_real_num_tx_queues(struct net_device *d= ev, unsigned int txq) if (dev->num_tc) netif_setup_tc(dev, txq); =20 + netdev_queue_config_update_cnt(dev, txq, + dev->real_num_rx_queues); net_shaper_set_real_num_tx_queues(dev, txq); =20 dev_qdisc_change_real_num_tx(dev, txq); @@ -3233,6 +3235,9 @@ int netif_set_real_num_rx_queues(struct net_device *d= ev, unsigned int rxq) rxq); if (rc) return rc; + + netdev_queue_config_update_cnt(dev, dev->real_num_tx_queues, + rxq); } =20 dev->real_num_rx_queues =3D rxq; diff --git a/net/core/dev.h b/net/core/dev.h index f51b66403466..a33d8a507bed 100644 --- a/net/core/dev.h +++ b/net/core/dev.h @@ -101,6 +101,8 @@ void __netdev_queue_config(struct net_device *dev, int = rxq, struct netdev_queue_config *qcfg, bool pending); int netdev_queue_config_revalidate(struct net_device *dev, struct netlink_ext_ack *extack); +void netdev_queue_config_update_cnt(struct net_device *dev, unsigned int t= xq, + unsigned int rxq); =20 /* netdev management, shared between various uAPI entry points */ struct netdev_name_node { diff --git a/net/core/netdev_config.c b/net/core/netdev_config.c index ede02b77470e..c5ae39e76f40 100644 --- a/net/core/netdev_config.c +++ b/net/core/netdev_config.c @@ -64,6 +64,19 @@ int netdev_reconfig_start(struct net_device *dev) return -ENOMEM; } =20 +void netdev_queue_config_update_cnt(struct net_device *dev, unsigned int t= xq, + unsigned int rxq) +{ + size_t len; + + if (rxq < dev->real_num_rx_queues) { + len =3D (dev->real_num_rx_queues - rxq) * sizeof(*dev->cfg->qcfg); + + memset(&dev->cfg->qcfg[rxq], 0, len); + memset(&dev->cfg_pending->qcfg[rxq], 0, len); + } +} + void __netdev_queue_config(struct net_device *dev, int rxq, struct netdev_queue_config *qcfg, bool pending) { --=20 2.49.0 From nobody Sun Oct 5 05:24:22 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 9F36B2877C5; Fri, 8 Aug 2025 14:54:03 +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=1754664845; cv=none; b=LfafIV0HNvo7MzvHkiWpM9JCd7WQmRQivBZRLNem77+ezP2ixjYOQgz0OaLKd0bgLkCpr1S3kh36ZLpoOND3L/DwfDTREC9C+HpptXY8x3tSrVXndglxPIXo+Itm5uO5ZxB/IrRfA9a/Owaw0wHG6oL1uHZ3WIKIubG8pllZuTo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664845; c=relaxed/simple; bh=c2RmXB2vgtc9JkGJKPTZJ3+xhYJ6MmNCUF1JsHQp8Vw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Skclyl+JXxkGZ1kkaQyqPaDP6LF1WSQsIERw3rzOEzc6Upx71nP5ooQlE9ICcD9bA9aE9Qb/DbbthHuOAQ39gbksHbXE4e35pCc6qRQFB+zXiJXS3BeUbJ18jVH+UjoYB5yq4df3b0RrGt8r9aZzp1EWioOmOQ8UH58RI6fdekA= 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=E9x5sVXI; 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="E9x5sVXI" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-455b00339c8so14564115e9.3; Fri, 08 Aug 2025 07:54:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664842; x=1755269642; 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=ssMrL+g2mHRnxPNV608Yq9cyP8KWXAoTfnZBuzxF5uk=; b=E9x5sVXI3ZzEp0E5SpQhe2gerIgKh8Zi8UEvwj5p9exyUKsYikEdYcJ2Bryexqb6im dEEAh2dooglyaOQsyJw2JDIgBt0EHiQWGRiX644CUa/MSttObxRFEpLw8h1wHPwIC0yH 3YCy1zQqgJ6OPPqWpLF//dYVRYmgWny4S9yOHDnocGecpL0kq2dVWWHNtUNPyF9MmZop jPUy0MvThv08kwit6W0Ue24IIAenWQKiKjTX5lnc5TtTrD7ENi7ZbRBK/zD138DmY2jS fJSdCXj7245i1shJRX4YZqj6xihUo5Rpc41yRx4ZW/9UC1g9ldSfV/VOzUbwjU2dbB7l 3xbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664842; x=1755269642; 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=ssMrL+g2mHRnxPNV608Yq9cyP8KWXAoTfnZBuzxF5uk=; b=VTYGIClrHXMmT/aBQgg1v3ZS20TCdrd6AJSKviMTVKSR2gu2c15NJslmH6CPrp9Jmo IE2U4mNKhECXBChH0Pwxkc6BDz8jo4VfQOUBdp2H3I8qGSeiUW/kYteQl78+rENyQhxz O5XQTyDwGhdqUB1dYcZe3Li6OSCuaGU4HzWofkDxdoGm3nPfwzQB4jTtdJNZ8jwoHNga sa6yYkfz2jT+VKMbwlEVmDBfvilCg3la/k43d89mpdVZx38Td6GrbmgqMYA2ZhjzaHDK DozQJt7IUGD4Omvm2fAyI8bVoaaQcFWLKdmkS7cEAqhEWd0AthD+4fMZBhvuaMKjSYFm DcTw== X-Forwarded-Encrypted: i=1; AJvYcCWLGl3H0YkRgnYmNJIV+09y8RsvJ5DbfdG490hNuuf7DTUHrwRJ2sQzTeWQKMvgxhvL/K9FzGFR@vger.kernel.org, AJvYcCX3Kk570pR6yFVUbDiWQbruTUuC6JbwRVji8nBJfY8fNf0pSC/mI9hTrvBXiTq4JKRSABQFwvxrheitpeU=@vger.kernel.org X-Gm-Message-State: AOJu0Yw9iOS+lXXmAxsL1da7G14v5RPbbgorEMSaXj4ri8iciCFVSac1 GEpDiTj2utZpeQ18QsjtmjOyNid6Z8kRwZCNo9W6Fpm8ysHPG8OMt/dJDpOVJg== X-Gm-Gg: ASbGncseB1pQEhEDoJ0mDuIAVduryNWjf+snOXEVmOJB2BavDKYtLmxoywGyDdpJ3Rs 9haUxtIvp5JucV5W8T3yKBgjkkn5zrYnY3Q5vrXSrP3EhrDRVIfXlMrI1f+1Y2SKjl1vqmU8yEC nmXz+7dANwvRLhBlbc7C1zU8sWR5QpY91eYMwaqfODBPWRw6Bh0JJJJ1hvqH+gCom+X6zNcVJUa A9g0cxhR8AygNWzWf4RacDYjBvcyE9BGYvJx8lzVWvONjyjULkKUWcGWwIFYpsqRiQxIRTkmNQ/ LqcVU+73hPuCBfHRRRDgPOn2tDnVBWG6qiu0MNhlV762pQvZMooVb33OO/8F2sFhQJ9Nv57jmfk eYWdo6g== X-Google-Smtp-Source: AGHT+IF2yqxWhq+2UE5pqm/JczIyxLZ/TbKm+OtkQLKTCDNnkMsPkEOAcPYQ0oGBkzrwDQWGAyibrg== X-Received: by 2002:a05:600c:4ecf:b0:453:5a04:b60e with SMTP id 5b1f17b1804b1-459f4fa59dbmr28318865e9.26.1754664841668; Fri, 08 Aug 2025 07:54:01 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.54.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:54:00 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 20/24] eth: bnxt: use queue op config validate Date: Fri, 8 Aug 2025 15:54:43 +0100 Message-ID: <59cd7e7563c2df8af5e818a2c3c1f4e2ac2363be.1754657711.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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 Move the rx-buf-len config validation to the queue ops. Signed-off-by: Jakub Kicinski Signed-off-by: Pavel Begunkov --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 40 +++++++++++++++++++ .../net/ethernet/broadcom/bnxt/bnxt_ethtool.c | 12 ------ 2 files changed, 40 insertions(+), 12 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index a00c2a829b6b..86cbeee2bd3c 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -16133,8 +16133,46 @@ static int bnxt_queue_stop(struct net_device *dev,= void *qmem, int idx) return 0; } =20 +static int +bnxt_queue_cfg_validate(struct net_device *dev, int idx, + struct netdev_queue_config *qcfg, + struct netlink_ext_ack *extack) +{ + struct bnxt *bp =3D netdev_priv(dev); + + /* 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 (qcfg->rx_buf_len !=3D bp->rx_page_size && + !(bp->flags & BNXT_FLAG_CHIP_P5_PLUS)) { + NL_SET_ERR_MSG_MOD(extack, "changing rx-buf-len not supported"); + return -EINVAL; + } + + if (!is_power_of_2(qcfg->rx_buf_len)) { + NL_SET_ERR_MSG_MOD(extack, "rx-buf-len is not power of 2"); + return -ERANGE; + } + if (qcfg->rx_buf_len < BNXT_RX_PAGE_SIZE || + qcfg->rx_buf_len > BNXT_MAX_RX_PAGE_SIZE) { + NL_SET_ERR_MSG_MOD(extack, "rx-buf-len out of range"); + return -ERANGE; + } + return 0; +} + +static void +bnxt_queue_cfg_defaults(struct net_device *dev, int idx, + struct netdev_queue_config *qcfg) +{ + qcfg->rx_buf_len =3D BNXT_RX_PAGE_SIZE; +} + static const struct netdev_queue_mgmt_ops bnxt_queue_mgmt_ops =3D { .ndo_queue_mem_size =3D sizeof(struct bnxt_rx_ring_info), + + .ndo_queue_cfg_defaults =3D bnxt_queue_cfg_defaults, + .ndo_queue_cfg_validate =3D bnxt_queue_cfg_validate, .ndo_queue_mem_alloc =3D bnxt_queue_mem_alloc, .ndo_queue_mem_free =3D bnxt_queue_mem_free, .ndo_queue_start =3D bnxt_queue_start, @@ -16142,6 +16180,8 @@ static const struct netdev_queue_mgmt_ops bnxt_queu= e_mgmt_ops =3D { }; =20 static const struct netdev_queue_mgmt_ops bnxt_queue_mgmt_ops_unsupp =3D { + .ndo_queue_cfg_defaults =3D bnxt_queue_cfg_defaults, + .ndo_queue_cfg_validate =3D bnxt_queue_cfg_validate, }; =20 static void bnxt_remove_one(struct pci_dev *pdev) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/ne= t/ethernet/broadcom/bnxt/bnxt_ethtool.c index 2e130eeeabe5..65b8eabdcd24 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c @@ -867,18 +867,6 @@ static int bnxt_set_ringparam(struct net_device *dev, if (!kernel_ering->rx_buf_len) /* Zero means restore default */ kernel_ering->rx_buf_len =3D BNXT_RX_PAGE_SIZE; =20 - if (kernel_ering->rx_buf_len !=3D bp->rx_page_size && - !(bp->flags & BNXT_FLAG_CHIP_P5_PLUS)) { - NL_SET_ERR_MSG_MOD(extack, "changing rx-buf-len not supported"); - return -EINVAL; - } - if (!is_power_of_2(kernel_ering->rx_buf_len) || - kernel_ering->rx_buf_len < BNXT_RX_PAGE_SIZE || - kernel_ering->rx_buf_len > BNXT_MAX_RX_PAGE_SIZE) { - NL_SET_ERR_MSG_MOD(extack, "rx-buf-len out of range, or not power of 2"); - return -ERANGE; - } - if (netif_running(dev)) bnxt_close_nic(bp, false, false); =20 --=20 2.49.0 From nobody Sun Oct 5 05:24:22 2025 Received: from mail-wm1-f46.google.com (mail-wm1-f46.google.com [209.85.128.46]) (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 DED172820CE; Fri, 8 Aug 2025 14:54:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664847; cv=none; b=Dxt4SIUtJ9pxV7hmEEEXvUziJnQBK89qytvIZ2J+SWBmj+Yy6QayFNCQUD5dnuAQmlfAh+zBQ5+lFz0f+iJnH1f46Evc4oPUzECqmz6rlJvtNWjhoGZpc5XYmrO/y4xT4211LokxSv+Li1KxSrfnS1XqsQM7V9qp4TGphSOASW0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664847; c=relaxed/simple; bh=p8nWPhP7vSQGzZCdW2ORmVS9hf1S6V9V2obgfTwR8cs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KvACuCFhSKg88S51ifIVR692zccKWeFMvCwvTkYpLI7BNS8uZeIuvexoyT4HiE55k0/YnZ22uE1vQX5y17PwRo0kZDCl1jdGKs1I+yaBRFzTMZf0IgIrDqXdK7NTAKltyF2MBi7Q8f3DSa5iuMGvWnD7EBlyvQBjI/AQBXzXd7M= 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=DT7yq3oA; arc=none smtp.client-ip=209.85.128.46 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="DT7yq3oA" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-458b885d6eeso14305055e9.3; Fri, 08 Aug 2025 07:54:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664844; x=1755269644; 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=4Y3hrs0t+IeBjTTno+1QeKOa7o9IZ9oGKSKG1wJOxU8=; b=DT7yq3oAK9PurVv4ABNzVcYtaAdNYZbpFvopKVlPo6VEfyhbKj+/b6Ea44JFLSwHmo +8g/QYfvpBiEVH9l2BTP0S9k5w1fiegtQ4tZZ8jcsIRb44roYZQaGv2RusLQsSdH1Apm a941TfL6IdplmkY+jeI0BjPaOxIqXC1X2G/B7roIRJbu0QEEI52Q2XE93P39TLMJxsga PVZRvH0eaN3LJClL2oROgUQ6MmrfwbMfTDc9TYRddLpF4j90GIWqDcLfOB5Xguczqd4v 8N4JradwOKM1E7mk1GUS0L15xHN09TnVbPdpmT26xLJ9TFo/U5A8jVmwpt5ZUP1tJaf0 n6SQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664844; x=1755269644; 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=4Y3hrs0t+IeBjTTno+1QeKOa7o9IZ9oGKSKG1wJOxU8=; b=Lp0xQOy/uR/wf0ddeGoXAwZvl9Uo8GWOmxR9GFnwIzvtk2dKBbrrt+mjgYNuArxxEk Jk8ttDgzixAovuxA+JOK8rvNNkluRhO4Zg2i6Ff0rT9ZzTwFJcOzc30S9eqBMxhEdtqt r4tuOkd25MMO588evbD+5o0P2na23Llf/5xLErBRF4wEpdR3tqedI9GZzGZyTWyLrYm2 Ci8ueVQZHfRoF8OFTnlmR/E2csHH6bJD+gUlQYITWePdO/NFd79aniI86letazb2LOjg upyw1WMbmXv7pOuwlbYFCU5fp3HhB89Ojdv1SaTAlm2f47XvEcg4dy3JGI0/LFzwwsw7 2SGQ== X-Forwarded-Encrypted: i=1; AJvYcCWytKZIVxbDxDTWcgM4bFwF/9cZqbpJuZlMlTl1lWi21q7QCDdFhiTptcXNp9exYfOIa8teD03Rd3LC//o=@vger.kernel.org, AJvYcCX2pDBeQfYdqzm9Emc6wbumOpyYKO4iJHtP3oqzCHFG8bQACLXAkslZK8UelnzAqqB7XRpimryC@vger.kernel.org X-Gm-Message-State: AOJu0Yyn3HRrEC3rLJwbrmIpx93sZwfpM9cNWZK2uGjQe/tBeE/UrbsL kDMujgMyA07P48dc3U/OTyQN08Cb1CHweWRuD9dTEgHgBLdUyKHU678q X-Gm-Gg: ASbGnctCc6F6MRrW5EBOe8GQ915BC/gz6w2sz1+b+vztU1kEvMYdfOR+bmbVnSqj5mn ErbPr9cTYUKD11jvBppszihOHFzKO30UJRxV7dVUt4+jf1oFy8o5mkCiXjSB0hhj6RV57rhdkKu lGyLz2E0Smegz0aAP/LbymSg03n3TIzayzAoFlaa/wtE3ItXYrBxBvnJwXZVKABR4fcB56UD0HV x3ogYzwOMvQm+pSrlo/IM1VWeX3eTltiUIoXRI6IaU2XWWri76LO14WkIVR4G9xuUV/h7Zz4wOj S0bNhtIH22pDv2JzPXx45dBqVMex+1zNXofEP4ywhWd+UJbiGMEe4ga/bO9fy0lqtmWGvXjVbMD mIufPIQ== X-Google-Smtp-Source: AGHT+IFrUEsfWh6aKgmoWToMGRNhtJ9yYTDd/x2IHauD7cQyRBTu7XZq2MhG/C4xkdI4YsRNaZqgeA== X-Received: by 2002:a05:600c:19d2:b0:456:29da:bb25 with SMTP id 5b1f17b1804b1-459f4f04f66mr31428285e9.19.1754664844120; Fri, 08 Aug 2025 07:54:04 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.54.01 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:54:03 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 21/24] eth: bnxt: support per queue configuration of rx-buf-len Date: Fri, 8 Aug 2025 15:54:44 +0100 Message-ID: <08b823769e658571a185f64bdada5996f5231a0d.1754657711.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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 Now that the rx_buf_len is stored and validated per queue allow it being set differently for different queues. Instead of copying the device setting for each queue ask the core for the config via netdev_queue_config(). Signed-off-by: Jakub Kicinski Signed-off-by: Pavel Begunkov --- drivers/net/ethernet/broadcom/bnxt/bnxt.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index 86cbeee2bd3c..8f4ae46de936 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -4300,6 +4300,7 @@ static void bnxt_init_ring_struct(struct bnxt *bp) =20 for (i =3D 0; i < bp->cp_nr_rings; i++) { struct bnxt_napi *bnapi =3D bp->bnapi[i]; + struct netdev_queue_config qcfg; struct bnxt_ring_mem_info *rmem; struct bnxt_cp_ring_info *cpr; struct bnxt_rx_ring_info *rxr; @@ -4322,7 +4323,8 @@ static void bnxt_init_ring_struct(struct bnxt *bp) if (!rxr) goto skip_rx; =20 - rxr->rx_page_size =3D bp->rx_page_size; + netdev_queue_config(bp->dev, i, &qcfg); + rxr->rx_page_size =3D qcfg.rx_buf_len; =20 ring =3D &rxr->rx_ring_struct; rmem =3D &ring->ring_mem; @@ -15857,6 +15859,7 @@ static int bnxt_queue_mem_alloc(struct net_device *= dev, clone->rx_agg_prod =3D 0; clone->rx_sw_agg_prod =3D 0; clone->rx_next_cons =3D 0; + clone->rx_page_size =3D qcfg->rx_buf_len; clone->need_head_pool =3D false; =20 rc =3D bnxt_alloc_rx_page_pool(bp, clone, rxr->page_pool->p.nid); @@ -15963,6 +15966,8 @@ static void bnxt_copy_rx_ring(struct bnxt *bp, src_ring =3D &src->rx_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); @@ -16169,6 +16174,7 @@ bnxt_queue_cfg_defaults(struct net_device *dev, int= idx, } =20 static const struct netdev_queue_mgmt_ops bnxt_queue_mgmt_ops =3D { + .supported_ring_params =3D ETHTOOL_RING_USE_RX_BUF_LEN, .ndo_queue_mem_size =3D sizeof(struct bnxt_rx_ring_info), =20 .ndo_queue_cfg_defaults =3D bnxt_queue_cfg_defaults, --=20 2.49.0 From nobody Sun Oct 5 05:24:22 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 4A1D9288502; Fri, 8 Aug 2025 14:54:09 +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=1754664851; cv=none; b=YVsljY82TdLesjrkOUrtOXcqaJCTlyJRm9TQydrkEXDICjJNjeaUQP1N5KznE8TDhAszc6N1jWZwAql03KIz2UZFhZh1oOhcW1yuwZL2KilimROeI/ekDnvqoF0qcfK33swTjpsiAf8J/xd/lNhDTjkehqMemPB72lthaQZeda8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664851; c=relaxed/simple; bh=DMKxvdjwIe3cobVTLaT5Z0+chPl74jnjEtX3oIXMFHI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DPDv8eJPKQqHLFrRExZS8GFURBkJYGkv5+iA8qqgyNudvDuUfPM9cpYAEglY2gGB49Phj2qwCj62Kc+FVbh6CyXizOwnG5II0oj0Z9QlW1zLfCYZ8Uk3+2jXnr2nu+ws8y4ParVKeb/+aPdc7aWCx+w1lSmeq8ZNfQrIWsbVfo4= 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=SSqXM9Iz; 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="SSqXM9Iz" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-455b00339c8so14564945e9.3; Fri, 08 Aug 2025 07:54:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664848; x=1755269648; 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=mqiVDIiPia/7gaiv57e1tZCg4guYFsjP0/H/rlRCi8w=; b=SSqXM9IzGJboK99zGIn/Qj4NssddUYs71X/SXn4WQ9kOAtgIzynAgTKq10cH4/fRFu YdgvETZn5jvMu4e0UJRvSs5xoAz/UMi9f47uw1EJsJSuU1A62kIa+HB8LyrSsO8L+BIN 8QDxGKIk+Eh917B3CdAhB4Q+GBhfqJvxQVDalafkXrOdhyNtlZEy+zZfYpCiXrJb/C8g t6qoSP6KzmKddFpg7ChZzBhV4ygKalKblpIrhjKZL8TUaGhn7BrynCpECtJ9E40v4PRT 4QBN7z4TobFuTIPXRMDpTXt71Jd2YEsOy3u9pVzD6w85r+5Arzj8GA1xuAKDXWV3/hED y2Jg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664848; x=1755269648; 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=mqiVDIiPia/7gaiv57e1tZCg4guYFsjP0/H/rlRCi8w=; b=fOxo1x+X55UhVF1FTm3pnRyOz2ZGeUDkoXCsG9T0RdBn/PbFTJS8U6aayAvpr/cboT ZihcbSGxUayjRNn6qvblNaGb23mxiajRq5yKUfEFtEGm5cvNhqG5syo91FSkFVHU44Y0 G06g0HVWkNWdbI1h3tmw1qEYomSCT8Rb+Ghx8bupH+yY5tOXL8wL6mG96T8q2aOJ3Vcp F0MVtRBhzU2b6B7Y3TitixN8YAUFzhL8ER0I5KqtY7t29+nbruIK9v878nE7K7bgqXib VIw7A140t5Yzag1mL03sIH19aXmGd8plAGiAdg9GL7IaE/1Sf03oICgvcVPE0/x0RcFZ xLgA== X-Forwarded-Encrypted: i=1; AJvYcCUF7JGMm3MoxNOFmzZMvd4ofN5MXfbhG4mWIQlnzGd3ucHDw/fpXe3DQXHC/10sUH6hO6pa/Gx6@vger.kernel.org, AJvYcCWeqbcg4v/5u1aNy0dlgjdv2ds462HOJ1vYhnmwdWzt2depzJDpT+a3VII/w26xo4R8YPU0FKY2cqVsSow=@vger.kernel.org X-Gm-Message-State: AOJu0Yx+UepDtdQJm5ClzsMT1h1E2ZcDtfUxS7+NOq0V1YBDFeV0v81w 7VhLLcLKGu6lJR6YgXQU3XCu6BVu6pZDQhTn5lFLooZL5JRfgHOfI+9HPEbJCA== X-Gm-Gg: ASbGnct/JcNJsl4W7uzIow7VWFG9fqiQlZFlwsErjUk86P0LUcUUkGDMW/3FeM9psUu 6BUeNYHsh+KajF2o7Iqe9xNTWb8UXktUiiyawoIE2Dcc+Wf7ejk7d5f+2zUgc6DdICU9FKxcW+n FL2QA+9Hd7K5ecMAngEz7fXop1Vy6N2WdtiGWlrB6kruAwkyBYHQ97WczrpXZWctqj7+a3S7h/u UxAWAWM+aMAi4NsSmHx+jHrr+XL3YA2iv4xJlLkS6tK64TlW7H03pjgGy9SdTtPmnDemsehYzub q6FGNqoscnd3A4/8yD74U06bM6YViSaZjpT2zYfmv+TdIwL48gACC8ed8l1nbuAbSxYtaRdzXdw MT8T/dg== X-Google-Smtp-Source: AGHT+IGaXUCKUSl8JShwML/5ctUsQL1Q/kXOcaUKLmgvM9xY8JG/k0S/K0kYec6m9lcH+dYUiWCT0A== X-Received: by 2002:a05:600c:1d09:b0:456:18f3:b951 with SMTP id 5b1f17b1804b1-459f4f52793mr36230325e9.15.1754664847477; Fri, 08 Aug 2025 07:54:07 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.54.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:54:06 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 22/24] net: let pp memory provider to specify rx buf len Date: Fri, 8 Aug 2025 15:54:45 +0100 Message-ID: <51c7abd5bbe6af2bc3b4084ffb05568a282bfe30.1754657711.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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 sturct pp_memory_provider_params, which is copied into the queue, and make __netdev_queue_config() to check if it's present and apply to the configuration. This way the configured length will persist across queue restarts, and will be automatically removed once a memory provider is detached. Signed-off-by: Pavel Begunkov --- include/net/page_pool/types.h | 1 + net/core/netdev_config.c | 15 +++++++++++---- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/include/net/page_pool/types.h b/include/net/page_pool/types.h index 431b593de709..e86bb471f1fc 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_config.c b/net/core/netdev_config.c index c5ae39e76f40..2c9b06f94e01 100644 --- a/net/core/netdev_config.c +++ b/net/core/netdev_config.c @@ -2,6 +2,7 @@ =20 #include #include +#include =20 #include "dev.h" =20 @@ -77,7 +78,7 @@ void netdev_queue_config_update_cnt(struct net_device *de= v, unsigned int txq, } } =20 -void __netdev_queue_config(struct net_device *dev, int rxq, +void __netdev_queue_config(struct net_device *dev, int rxq_idx, struct netdev_queue_config *qcfg, bool pending) { const struct netdev_config *cfg; @@ -88,18 +89,24 @@ void __netdev_queue_config(struct net_device *dev, int = rxq, =20 /* Get defaults from the driver, in case user config not set */ if (dev->queue_mgmt_ops->ndo_queue_cfg_defaults) - dev->queue_mgmt_ops->ndo_queue_cfg_defaults(dev, rxq, qcfg); + dev->queue_mgmt_ops->ndo_queue_cfg_defaults(dev, rxq_idx, qcfg); =20 /* Set config based on device-level settings */ if (cfg->rx_buf_len) qcfg->rx_buf_len =3D cfg->rx_buf_len; =20 /* Set config dedicated to this queue */ - if (rxq >=3D 0) { - const struct netdev_queue_config *user_cfg =3D &cfg->qcfg[rxq]; + if (rxq_idx >=3D 0) { + const struct netdev_queue_config *user_cfg; + struct netdev_rx_queue *rxq; =20 + user_cfg =3D &cfg->qcfg[rxq_idx]; if (user_cfg->rx_buf_len) qcfg->rx_buf_len =3D user_cfg->rx_buf_len; + + rxq =3D __netif_get_rx_queue(dev, rxq_idx); + if (rxq->mp_params.mp_ops && rxq->mp_params.rx_buf_len) + qcfg->rx_buf_len =3D rxq->mp_params.rx_buf_len; } } =20 --=20 2.49.0 From nobody Sun Oct 5 05:24:22 2025 Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) (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 AA5D7288C05; Fri, 8 Aug 2025 14:54:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664852; cv=none; b=PZopDChxsh3kIQa9y63XZQddxSyzy9R/nyB2fS5qu7Fi70XOEwL6HQ58shpuA8N35v1tfJ4vZhJUeXyQ7iYo+ibpQBufc35iDwKjcYxvNaq2yML/T65lZikJkzRGzVW1mw+11qpICZhfJhPIdSIiArn5hy9eS+vjdhVIyqiNYTc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664852; c=relaxed/simple; bh=3TejFr6fgu4eduM337yPWWO2YW+sKNeDkWHAfmFlhUg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XH4lVigHJHngg7yT/PaMjcfkjnRFXCIDRO4nWKyq7pW6NADLvXzk6QLuKgZ6emTTKdcG2FLktFM4KTZJIaelOyYaAoZqUjc9eR2j2uzizhrpYdM4UySt6JDASWvw2b6vUIE+ZrfpzqfykQfqhghzgJk3BieGMi2GG+lSmTcH49Q= 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=ndrl9x0u; arc=none smtp.client-ip=209.85.221.52 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="ndrl9x0u" Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-3b78b2c6ecfso1264929f8f.0; Fri, 08 Aug 2025 07:54:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664849; x=1755269649; 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=e17MfRSU7AvEK9eP7fQNYNtShDJqFvLZAH8mOJdLhMg=; b=ndrl9x0uwgSU4oLnV+9eTmjuT3iCa6gJ2bGvyS1QS3IMLhsP0zT2YQx58iUTutF0ds JZnLC2jfUauNotfr4kX3v8XHtRA34SpdSm+KB71u1FvFEUZehTafskiVpfQNcCzBXILQ f/lBMl4DcsB3vIuDkPAUMBjJYePcKyJrlYozkOav/J40heD35G1eC8Pcqb8BcJV7z+sP TMjRVsQ0H3fOyB1Mi8cN9WttMDTUdOeFmSWMnWn6nuJUlKUZfpzdSyR2h03QHTWo3DOt Xvyoqs5LR+JfZidRph2FTS4mJdzLcIox0rEk+w6Cf25tnWEwIviyzo7zhIAw91+HopEq 8c5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664849; x=1755269649; 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=e17MfRSU7AvEK9eP7fQNYNtShDJqFvLZAH8mOJdLhMg=; b=tSYjcwzb8CtA9+HdrTL8nqorYOtbtkEcr+kfVXQOzWlhLsQAjGaYf1pgXGkyWHdfNs 8uks+2t5HO2ZkJZEEf4nom/Nz/5Y3h4AD7YLdFLPblUZjA1cEW1TZDdwOTTzIrZ0Zn+7 mkBWFiYRmvf343xbvMCcPOxqRm0qTSOpPzlhmuAd2VFmcNKn/55kSAKNtRLhqkbFWd7e Rqu9GvI4Up+beYoCZIQ3kCqEMZ1O/FPoyS2KER7CH7+FLfjrPE1Y6qtGy9dCiCmsF0+k 2V5X8ubfv2xWmYXRZEXGF2iR976wvLx0pWJiU34kmFlpvEsWNdIK+usuM46RBx49Alfh xDAg== X-Forwarded-Encrypted: i=1; AJvYcCU7B74ADMKuc/zqn4MkHBQSm4t2wWE2bGT57GPZyRI1+qWwT3Q/nwIlhkKF0ZN9gJixvhu2JRWOCGAytrQ=@vger.kernel.org, AJvYcCXEEo66OnWZ/PHF68pbZg109MltN+U/XlseNpHBgmfbFriNa7dpUbiw3uRo1glM+exO6eFVxjfR@vger.kernel.org X-Gm-Message-State: AOJu0Yxjyap2mCryVUgMTnrrwo6RJkWiem27nFmwGTZGcEKJTxIYproy buEjsqsxxv49pP0WLld58Xly4HKz5X8cIhKsz4fQMfxuAbQ7i2KKrt8x X-Gm-Gg: ASbGncuNqu62dKpT2As4KE9zkQvUe+M/32lvFDq8RO+e+oDITWfpDzTZ8zyv8h3i8+G FquMJDT0mLvRbqC/+n3oHIU0Uw13zrqWDiiVEbx+6VSg285UjmyhtajyOjnqY87Zfp4p51DW0ti Szn4SoFqhNp4YBaXaysTZnGSrwesr6Yw0bX3eaJ3USpS3FBoWdrtVNcdIWb5fFsRwK+Xs/gH4hx vAK7sSSMmc8Jz1u09+nd2CX/kqFGMeB3fziB2f96iNRH5y7XWUfPTk30iAI/hGaeh3+ovbB6bpy Buy0jPvfAB7eQGQKXfGYQxsJLxLczEpgWj6JGIF1nDE9lxZp2RmrWhqs6G9Y2B5+cFyZ9qSCm0L wTa7b5g== X-Google-Smtp-Source: AGHT+IHZxy6R98pg1IqpIhpqpWuDWTth58NrfVIKWZTrzIigVHN2ehT07sx2HrRN8PQk7IIcrH2p+Q== X-Received: by 2002:a05:6000:240d:b0:3b7:9c28:f856 with SMTP id ffacd0b85a97d-3b900b51379mr2603642f8f.48.1754664848875; Fri, 08 Aug 2025 07:54:08 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.54.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:54:07 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 23/24] net: validate driver supports passed qcfg params Date: Fri, 8 Aug 2025 15:54:46 +0100 Message-ID: <4be7520c9f3f411d851d1959d1b9eedb16ce78c3.1754657711.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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" When we pass a qcfg to a driver, make sure it supports the set parameters by checking it against ->supported_ring_params. Suggested-by: Jakub Kicinski Signed-off-by: Pavel Begunkov --- net/core/dev.h | 3 +++ net/core/netdev_config.c | 26 ++++++++++++++++++++++++++ net/core/netdev_rx_queue.c | 8 +++----- 3 files changed, 32 insertions(+), 5 deletions(-) diff --git a/net/core/dev.h b/net/core/dev.h index a33d8a507bed..9e43da3856d7 100644 --- a/net/core/dev.h +++ b/net/core/dev.h @@ -103,6 +103,9 @@ int netdev_queue_config_revalidate(struct net_device *d= ev, struct netlink_ext_ack *extack); void netdev_queue_config_update_cnt(struct net_device *dev, unsigned int t= xq, unsigned int rxq); +int netdev_queue_config_validate(struct net_device *dev, int rxq_idx, + struct netdev_queue_config *qcfg, + struct netlink_ext_ack *extack); =20 /* netdev management, shared between various uAPI entry points */ struct netdev_name_node { diff --git a/net/core/netdev_config.c b/net/core/netdev_config.c index 2c9b06f94e01..ffe997893cd1 100644 --- a/net/core/netdev_config.c +++ b/net/core/netdev_config.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only =20 #include +#include #include #include =20 @@ -136,6 +137,31 @@ void netdev_queue_config(struct net_device *dev, int r= xq, } EXPORT_SYMBOL(netdev_queue_config); =20 +int netdev_queue_config_validate(struct net_device *dev, int rxq_idx, + struct netdev_queue_config *qcfg, + struct netlink_ext_ack *extack) +{ + const struct netdev_queue_mgmt_ops *qops =3D dev->queue_mgmt_ops; + int err; + + if (WARN_ON_ONCE(!qops)) + return -EINVAL; + + if (!(qops->supported_ring_params & ETHTOOL_RING_USE_RX_BUF_LEN) && + qcfg->rx_buf_len && + qcfg->rx_buf_len !=3D dev->cfg_pending->rx_buf_len) { + NL_SET_ERR_MSG_MOD(extack, "changing rx-buf-len not supported"); + return -EINVAL; + } + + if (qops->ndo_queue_cfg_validate) { + err =3D qops->ndo_queue_cfg_validate(dev, rxq_idx, qcfg, extack); + if (err) + return err; + } + return 0; +} + int netdev_queue_config_revalidate(struct net_device *dev, struct netlink_ext_ack *extack) { diff --git a/net/core/netdev_rx_queue.c b/net/core/netdev_rx_queue.c index 39834b196e95..d583a9ead9c4 100644 --- a/net/core/netdev_rx_queue.c +++ b/net/core/netdev_rx_queue.c @@ -37,11 +37,9 @@ int netdev_rx_queue_restart(struct net_device *dev, unsi= gned int rxq_idx, =20 netdev_queue_config(dev, rxq_idx, &qcfg); =20 - if (qops->ndo_queue_cfg_validate) { - err =3D qops->ndo_queue_cfg_validate(dev, rxq_idx, &qcfg, extack); - if (err) - goto err_free_old_mem; - } + err =3D netdev_queue_config_validate(dev, rxq_idx, &qcfg, extack); + if (err) + goto err_free_old_mem; =20 err =3D qops->ndo_queue_mem_alloc(dev, &qcfg, new_mem, rxq_idx); if (err) --=20 2.49.0 From nobody Sun Oct 5 05:24:22 2025 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 358AB288C11; Fri, 8 Aug 2025 14:54:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664853; cv=none; b=hSKkq+mwlVV519C9KOKCCtDcXEtxthPWRF0cMzatsCLygs9UPoZwfMLWA0TUAVW7b6tC4G5Dwq+YqQto+JjAQjsyij4f7x+8DBNvrA1GnuBXLwVclYfHp/YNYSV65u90h/TStYyX+4mlYYZq85JeWE1r5cBi+hKNXoowR0V/CKc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754664853; c=relaxed/simple; bh=8vq537iXmtQHfUOL8k8D+pDNLn1WmsjY+0Kmacg9zd4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Ndiks7I/f6FiFSghizMpTPt8VGX5Ml6PoySM9TSzkPcDGtr3NlX+vc30AbZghcWkF1WNLplg5MLK/s5r73tdkypmPEErwbux8KKP7gCRViFQ1vXLJ2a0l8OuLuJUjOcWukqq+6/7DmkCNZjLwo9FxwF14Xna9HillESZaP+MBu8= 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=SibvD3py; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="SibvD3py" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-459ddada9b1so20828425e9.0; Fri, 08 Aug 2025 07:54:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754664850; x=1755269650; 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=Bi3R054eLGzZB1SabNcNvV4Hy2T9nutT+v4oQSkGFj0=; b=SibvD3pyAf3yqLG91z40P88GJ0adj189J+XRaLoy77ZKxso5t5DxevvjIj35ZTGG89 1sOi+wXpJWFfF/7IfPdrjGQLHkvzKAvakwbNjlc9JnHPOrydqdKw7ZL5gy66A2tNiQ+2 J3NOWQ0PAfhg/nd8pXiido2/dPzAySKkbjtCUZe6jYeM70k8Tj06u8Z47QioSWblNoFZ FR4MQTgCDQkDV1Rw8YIWZMsFPmgK6mJUjajBNP75wvPf67Yh01W8voe6F0Chut2OyFfM fE1MHEcF7JF5+AVzfEn+pfSAKnmK5ZgKN13BvKgCu5MLurS8/1Sv+Q56YF7t5XPfjbwK s4nQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754664850; x=1755269650; 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=Bi3R054eLGzZB1SabNcNvV4Hy2T9nutT+v4oQSkGFj0=; b=IEsbaN5ebZk9jstnWryqqBJW9LVUnjOHwCa0ni+j+dYy7hLUx0kW8owHM2UFTDPc0Y M36PeTRLiaFlfutZG0fJSqtaLLdF8UVHgLeBNCI9jSJTPd01VBTOdwlCkdsEq3jfmeCd jxAp47+TZWKhVpPIlLZInE4ATUSV9+6e+H6CXTQBvAoGYSdEyr+P6mJXvtrHf7FRlXRe d0Jqwv2qRuS2GJnzIjAmG6WQMi0ewCX4HP7zO3fhZevXhtVkzGE3V3w7o1+QVFEtApLg EcBzMMcR7PadOBFWHHCWF+I19HnnGh3UdYWc3r7YcCnCMOm7uZUuXA/H0uiNXeFX2sNJ 8xyg== X-Forwarded-Encrypted: i=1; AJvYcCVuLzLICbtIz511lh4Rt1ouZwPwt5UVuWbo1uN/eL+QU7FVX2OQE0cuayghDdo2WBSobudtLSBJ@vger.kernel.org, AJvYcCXfG5neRVOIsCJRp469xy5rVENbqYPvSPZJp0TVtkEDZa7BlFjDxZjSGPR5LgSQDgp58hZ0L8iiVitPvgg=@vger.kernel.org X-Gm-Message-State: AOJu0YxCnq4WxJuifB0ulnJVPydtryusE91CmXVEG2IiBH8/XzROH9ob BpcsOgbYdpoJrVRBIYw8JSTdVZrXC0GTg5bx8QVHktmu6iZxZJFswHwR X-Gm-Gg: ASbGncsfpJ5knNFh75krRuFzirRd8j4OWY20W54lw++XoQ7AEqUsp3CyMZw0fR2n+ml YX0GL3LfZ7gSCbkdxaXwXv+uskqKCvzN5DtbiTqx5sOQ+5lF61c32WbBXG0rrX2hhyQ9+cbxxrs LNUiqz7c/C02rI6sY9qnVzeeFj//xtRqe2DrCM6LqE+4A7Wci98hyUNqQ1cXYDWAX3EmBns42wx UVvOEhxV4okiGlTK3wS96VqjVtjnGwVImKbUa8VfSk/qbhcrTq8MSgGX63qe9lsOFm6t5yW8Mci tlAcGYE4bWWweIjlC8AqFVFL2IuzQmAko3rqstEel5wTyEdwzufhrYB95jWPG48upYvs2Gpj2gU ByA92xA== X-Google-Smtp-Source: AGHT+IGMPQ91jVvZHMh0HVt2o3lPaz7U3vVo/p2d0l9PzffQJiGd5Fy99o/5a1kBMSlA7X+IjLZAJQ== X-Received: by 2002:a05:600c:1c8b:b0:458:bfb1:1fb6 with SMTP id 5b1f17b1804b1-459fb811f48mr154765e9.2.1754664850246; Fri, 08 Aug 2025 07:54:10 -0700 (PDT) Received: from 127.com ([2620:10d:c092:600::1:a360]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-459e58400f5sm135106725e9.2.2025.08.08.07.54.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 08 Aug 2025 07:54:09 -0700 (PDT) From: Pavel Begunkov To: Jakub Kicinski , netdev@vger.kernel.org Cc: asml.silence@gmail.com, Eric Dumazet , Willem de Bruijn , Paolo Abeni , andrew+netdev@lunn.ch, horms@kernel.org, davem@davemloft.net, sdf@fomichev.me, almasrymina@google.com, dw@davidwei.uk, michael.chan@broadcom.com, dtatulea@nvidia.com, ap420073@gmail.com, linux-kernel@vger.kernel.org Subject: [RFC v2 24/24] io_uring/zcrx: implement large rx buffer support Date: Fri, 8 Aug 2025 15:54:47 +0100 Message-ID: <2e260f36b0430a76275e49a862b85de382633649.1754657711.git.asml.silence@gmail.com> X-Mailer: git-send-email 2.49.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" There are network cards that support receive buffers larger than 4K, and that can be vastly beneficial for performance, and benchmarks for this patch showed up to 30% CPU util improvement for 32K vs 4K buffers. Allows zcrx users to specify the size in struct io_uring_zcrx_ifq_reg::rx_buf_len. If set to zero, zcrx will use a default value. zcrx will check and fail if the memory backing the area can't be split into physically contiguous chunks of the required size. It's more restrictive as it only needs dma addresses to be contig, but that's beyond this series. Signed-off-by: Pavel Begunkov --- include/uapi/linux/io_uring.h | 2 +- io_uring/zcrx.c | 36 ++++++++++++++++++++++++++++++----- 2 files changed, 32 insertions(+), 6 deletions(-) diff --git a/include/uapi/linux/io_uring.h b/include/uapi/linux/io_uring.h index 9d306eb5251c..8e3a342a4ad8 100644 --- a/include/uapi/linux/io_uring.h +++ b/include/uapi/linux/io_uring.h @@ -1041,7 +1041,7 @@ struct io_uring_zcrx_ifq_reg { =20 struct io_uring_zcrx_offsets offsets; __u32 zcrx_id; - __u32 __resv2; + __u32 rx_buf_len; __u64 __resv[3]; }; =20 diff --git a/io_uring/zcrx.c b/io_uring/zcrx.c index 985c7386e24b..90597547d632 100644 --- a/io_uring/zcrx.c +++ b/io_uring/zcrx.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include =20 @@ -53,6 +54,18 @@ static inline struct page *io_zcrx_iov_page(const struct= net_iov *niov) return area->mem.pages[net_iov_idx(niov) << niov_pages_shift]; } =20 +static int io_area_max_shift(struct io_zcrx_mem *mem) +{ + struct sg_table *sgt =3D mem->sgt; + struct scatterlist *sg; + unsigned order =3D -1U; + unsigned i; + + for_each_sgtable_dma_sg(sgt, sg, i) + order =3D min(order, __ffs(sg->length)); + return order; +} + static int io_populate_area_dma(struct io_zcrx_ifq *ifq, struct io_zcrx_area *area) { @@ -384,8 +397,10 @@ static int io_zcrx_append_area(struct io_zcrx_ifq *ifq, } =20 static int io_zcrx_create_area(struct io_zcrx_ifq *ifq, - struct io_uring_zcrx_area_reg *area_reg) + struct io_uring_zcrx_area_reg *area_reg, + struct io_uring_zcrx_ifq_reg *reg) { + int buf_size_shift =3D PAGE_SHIFT; struct io_zcrx_area *area; unsigned nr_iovs; int i, ret; @@ -400,7 +415,16 @@ static int io_zcrx_create_area(struct io_zcrx_ifq *ifq, if (ret) goto err; =20 - ifq->niov_shift =3D PAGE_SHIFT; + if (reg->rx_buf_len) { + if (!is_power_of_2(reg->rx_buf_len) || + reg->rx_buf_len < PAGE_SIZE) + return -EINVAL; + buf_size_shift =3D ilog2(reg->rx_buf_len); + } + if (buf_size_shift > io_area_max_shift(&area->mem)) + return -EINVAL; + + ifq->niov_shift =3D buf_size_shift; nr_iovs =3D area->mem.size >> ifq->niov_shift; area->nia.num_niovs =3D nr_iovs; =20 @@ -544,8 +568,7 @@ int io_register_zcrx_ifq(struct io_ring_ctx *ctx, return -EFAULT; if (copy_from_user(&rd, u64_to_user_ptr(reg.region_ptr), sizeof(rd))) return -EFAULT; - if (!mem_is_zero(®.__resv, sizeof(reg.__resv)) || - reg.__resv2 || reg.zcrx_id) + if (!mem_is_zero(®.__resv, sizeof(reg.__resv)) || reg.zcrx_id) return -EINVAL; if (reg.if_rxq =3D=3D -1 || !reg.rq_entries || reg.flags) return -EINVAL; @@ -589,12 +612,13 @@ int io_register_zcrx_ifq(struct io_ring_ctx *ctx, } get_device(ifq->dev); =20 - ret =3D io_zcrx_create_area(ifq, &area); + ret =3D io_zcrx_create_area(ifq, &area, ®); if (ret) goto err; =20 mp_param.mp_ops =3D &io_uring_pp_zc_ops; mp_param.mp_priv =3D ifq; + mp_param.rx_buf_len =3D 1U << ifq->niov_shift; ret =3D net_mp_open_rxq(ifq->netdev, reg.if_rxq, &mp_param); if (ret) goto err; @@ -612,6 +636,8 @@ int io_register_zcrx_ifq(struct io_ring_ctx *ctx, goto err; } =20 + reg.rx_buf_len =3D 1U << ifq->niov_shift; + if (copy_to_user(arg, ®, sizeof(reg)) || copy_to_user(u64_to_user_ptr(reg.region_ptr), &rd, sizeof(rd)) || copy_to_user(u64_to_user_ptr(reg.area_ptr), &area, sizeof(area))) { --=20 2.49.0