From nobody Sat Oct 4 09:38:04 2025 Received: from mail-wr1-f48.google.com (mail-wr1-f48.google.com [209.85.221.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 8B5272BCF5; Mon, 18 Aug 2025 13:56:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.48 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525395; cv=none; b=KZ4SMuwENKLhPIME5fJjhGnr8QH+CKYwIvSfqmZaL+l5fUCVfKsFU27suNK4h5npYS7k3aL9pCjXxRKkDscbzWBOLelTz8YWMjNiTsKAYPCf+TW/Vv0WGAMRp6NpiDfc+fGhF3ujub/GKLo0rqkrN+BBJhY3Lr41D0HsMIlIARo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525395; c=relaxed/simple; bh=2zuBjqmBIW52bVn8LC0IEPkZW+Z1BYOsbm6oKTWRbU8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=q3ZQP71SynHxS5LMHhFlDLswmyNVzz9/LzQPBMxxOUWC/6RpRicxM0laaTuRAghmOWHY9l/5DZxhUZ4y218oUc2mI0tnlfR/42vlCcwjoPgW7UvF51QfnymdRaUY6zfL7y4/pv6o5w+0ga6N4AaJy09QZst2hHf3H36yrdIolls= 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=L9cZ0AHL; arc=none smtp.client-ip=209.85.221.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="L9cZ0AHL" Received: by mail-wr1-f48.google.com with SMTP id ffacd0b85a97d-3b9e414252dso1975022f8f.3; Mon, 18 Aug 2025 06:56:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525392; x=1756130192; 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=aTLz7fw3dhaIWC1UvzYlzpBK+3xiFjrxNZ8h3LHn8bQ=; b=L9cZ0AHLtUJqeMgHE4Cw4urEQoD4R4mXc3cUn2EzACcWk4Slia9YXCRejZqQKTpJlh g/US3wfascafytqjTFIZe50q/t/ixtfaVKjVAt3qt1LEgSZm1jhFxifG8iFE/eWC1lyK jUwB4c/tM9fGhqHTU0JHQeV7OQCw3undxrdnkKO6bzhs+S0zE42l1hFrFK1JnQ9B+v1K Cx+fooGdlNpk2F+CHIbpSDcq/PUYHFVJ7gcCdOXMmCC+NuDNKMpxBx7Vvlb57kzxgk1A JhH5qdytYDSjh3wYvmLkuk778ESIkWRPjVk1l2khYQSCaLhw14v9YJ4xWvzdRbyAzCXm vkMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525392; x=1756130192; 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=aTLz7fw3dhaIWC1UvzYlzpBK+3xiFjrxNZ8h3LHn8bQ=; b=RdbYMeKqaY6VD1cMg0oWrax7ExvAbBB4e0Xc/lAsWjZF2T8X/F3Bh1occ48kcWym7p b4gZ0PRtU4G6CPFoEtCC9E0NJFDOXHVnxOfzbocqisid/weSdOmd1CyIuFrTYjjqoQ8L OI8VDuot955fFJrjiFEVgo8XnyuBTod0xYgn+sV6+9c7wDtz2cCT+LC6B3autW3FwXab uypemkwN/bN6iljPwTUKxJZx/bjTTBv4SX53Igf88E4RAznuFpz8i+G/wKuQyCuwXk/m r0r+CWPtXuwfzG1lRGqwhbYDzqqF1rlea8ICs5VgxxQRf0Uskg2+c/i3EhP23RRvDCbm XT9w== X-Forwarded-Encrypted: i=1; AJvYcCVau95zR13t+rX9SQ2858iDu53q4nxyD67DHD1nzWnDHAqnm2l/21nFyHPIwhs9VQ77KCpt5A7zog==@vger.kernel.org, AJvYcCXb7to6o4mqFdqo/3QPTgFD99phdRFmT9+nGSHXVFLs5StxXKJ29i3alIaJ/Nyiqo+E3LDla4W7ZA33pNVe@vger.kernel.org, AJvYcCXn9ywM89lS0YJsNL2mfZePpotgptGpXJswwkhD/CDrMa8hO6cgoiN8HCFTClr5bMIFsYLRmTWV@vger.kernel.org X-Gm-Message-State: AOJu0YyZy6vwMnb2gs/NhcI1WqXQ9Fbcq6VcJT19bZHlnj6UMv7/w/2y /h2Mq7SHgZExMRKALOpp/PYyugojNgqqRxaRmnGt0fuR+9GaX7p9Vhh5 X-Gm-Gg: ASbGnct5NbFIZ0erUh8PbgRDSlvgHH0X7cPcf9TudfMuISC9PwEQZH2ab/ZAXuIgg1h 2YmnCI3lwPBREx9pFGVFf9LTTNlxyp+RyBD6Kh+zRtYfqF/Lig9Xl52wex3pY85eJgAqW5QprDS EeUUvhUJWrXHpJKYx+cbWt0AcqCIa1Q5M5e6olN6fXKIG3GrHCmP6UC2HWHGS+48eNV3q0mZf9N 6mCgWGEf/l0tl60DLJygIOD1VTGWFsafiqw5btD4iX7/gqAO7c/Atl54K6h6N0I6YyriJDrRcfC fL4ctrtVJX7on0vvPjPPOHWBlpJhzKVbjGpkJ0pebGnoEPhW5/KfCaUxcdJKIrOKNwSU9s5upwg j9NXSeK6Hq5spMkulQQc0At/BcTyRGarnNA== X-Google-Smtp-Source: AGHT+IF0W/t9gHLiLe7UZHDACEfja4A9UmzLFxx/DpzIEp4/2WzMwE5UlByQLEz9LrANZMpZamR3Zg== X-Received: by 2002:a5d:5f4d:0:b0:3b7:9d99:c0cc with SMTP id ffacd0b85a97d-3bb69699cbdmr10466776f8f.51.1755525391771; Mon, 18 Aug 2025 06:56:31 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.56.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:56: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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 01/23] net: page_pool: sanitise allocation order Date: Mon, 18 Aug 2025 14:57:17 +0100 Message-ID: <9b6b42be0d7fb60b12203fe4f0f762e882f0d798.1755499376.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 Reviewed-by: Mina Almasry --- 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 343a6cac21e3..630e34533b16 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 Sat Oct 4 09:38:04 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 9B12F320CC6; Mon, 18 Aug 2025 13:56:35 +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=1755525398; cv=none; b=NBtvxL97a+rD+/WlDS9Fz27p3mAc7vAFXSrN6M0tuQte1kKjTZvydZ/W8TMjHOBahK6IpOi3baMAYcV6a4D9Y4rN2tEUn4lOZnVqa7qcwHUh6b7ta+fpDgc2xjM9cALS6VkqD3ScXSYawaF675LUYQtXM3vKq0KsALKYj69rXzc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525398; c=relaxed/simple; bh=HrrAxyj61SLnsN3GJ6LjWToWuINFN/Kn5UpaU740itM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Fwb4cEwTPADVyLEqbuOujpbX3r/r59Cjm1PsOXAYRiQcvQ1mMwC82MUVdifRynlGf1aM1pTq7soealwx2pLj/pVGahzPFs91YQPiSWchIzraepc7zAeCuVrnvas63i8slYUqD2gyguN90EmaVBng7z+IHUrW6Kn26x8uH9N8pck= 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=D+e//LQC; 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="D+e//LQC" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-45a1b0becf5so21594955e9.2; Mon, 18 Aug 2025 06:56:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525394; x=1756130194; 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=D+e//LQC9bRe4e/Z2lZ42tSlY/Hc2aoh7W3PzN9dAqETkL0STzNDQ0lyHTvhvr2TQr on1Yl10h6bClmYxj6D/SOsidDoGrAy4qJsSLQqi9u9wSggpekH1hS3RShtQb88b1y7XX KTCIadI+ZwqLFUUZhwJqwN+90TZl4OWfgSL9O5iTOCKV/wJVVJ9hPwgrKUl414tfhk6h ppHXk04i5oWjdmlkwXl5L7RReI5Jcb8TZy86nKEEkOCCp6XYJBzE0XHT04A3WmeBol5d x7Xn+OJkXumcLeHHXjjQNADGCRyc7McX6P7uylBNEGMTBOXJ+NmIctahH+c122qlmLMq FRvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525394; x=1756130194; 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=e0N0tcVp/txAwgzeCttdl7COwS4JQg92adtOdUpgNQ1UszuJ8zaE+x+kUzNGL+8INK KLWonhfhWM3h/ZtR5F7te7+7cChk8NnP1qkZuyA5908wKgVC+EWak3xChRuGaMLoedZQ x9NW/ik06jL5F3FcJ7C3rfzjySMIjMJqa3zgXNZ9HjXn3cIaycpTdDMKiDrlWGUMQ3Xv UxF7CN33iDs/jyL0/oir36Wx/bpa0Wlk+IiYIQwNxtS+dbzh7PK4sfv6ZPBOejTWbZmS Km7kohNs4caYcDrxKWrOc1WtArAck3tXIvnlIJGdGgBlifZaJcnS9edB3EwASdzyqeYd kkog== X-Forwarded-Encrypted: i=1; AJvYcCUEzylFtOfpbJ6mOWxfU7+2WSH4ApDsAOVE5OWVoGYow52buwEY67APxt4CrjBPtMb7BKqUCqLpbA==@vger.kernel.org, AJvYcCWlWE4rbzLpArGms9ksdk5tlqPZtA1ikti40/bsgDBFbJrKETvONZIGpOvOuk6QQQmrLqiOw46W+RxTWThg@vger.kernel.org, AJvYcCX7+8FCUaL3tSi2EBl3RYHfxbGRvuOtgj2zcRq4ImS+salWadQ94X3Vi7soXFa+RYmvkecOYwcO@vger.kernel.org X-Gm-Message-State: AOJu0YynkseXQCtV7Y+ZtAYXyHxw/NC/sNBsmuSKbuMqF1ZMOT3A7F/b e2elfYj5rPUQCJhqG3kdzWPa4QlJiWYv6ftHnzTfvuLKYcRLS6JkWvGP X-Gm-Gg: ASbGnct3JRIXjJeVMeOKm2kS6XeytZN58t7kqGbmfkGw/sSrvmiuVvb2R9Y6qIHLsJg 8qecovkamSEvU8YRQCS1BL4IOzvaZzCpO1YYrwaK2GB9lZUy0232ReIfH/XMNHsspwwRgcV6TOd 1zEJh9H5iXfXraGfSDGgHiC7/B1o/NaLbWm4kQtWRlnHmaJapDclWfrGAutDM16XfBXKF3Fuym+ 7ALgwvG+7lVtHejV1a8fTcxK4XZU2cShslXwJCUCzYrIWsjB2q74pkCgEGi+g4DbbOqwMvaICsN dO9Ony+eqMS1WGrtQiqXDbrOUM73mgk+e5RZqf213+kP1SsT+IpphLR+whs8dAIW85HBVu/INvF /NoJqI+CHM4Whd0ZbGdK2DstfItixyKTyXQ== X-Google-Smtp-Source: AGHT+IEX7pzIuAwqyMznwnGBXAQ/IYXLai9r4ecCjkFzntVgaCB8J6e+LGm7kUWPJDcSneo0XZSz+A== X-Received: by 2002:a05:600c:1c11:b0:453:78f:fa9f with SMTP id 5b1f17b1804b1-45a21800120mr95968575e9.11.1755525393444; Mon, 18 Aug 2025 06:56:33 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.56.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:56: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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 02/23] docs: ethtool: document that rx_buf_len must control payload lengths Date: Mon, 18 Aug 2025 14:57:18 +0100 Message-ID: <353e0195a0f44800c0b5aa4a6d751d3655d9842b.1755499376.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 Reviewed-by: Mina Almasry --- 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 Sat Oct 4 09:38:04 2025 Received: from mail-wr1-f42.google.com (mail-wr1-f42.google.com [209.85.221.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0292D320CD2; Mon, 18 Aug 2025 13:56:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525398; cv=none; b=G41LsP7fBp6KAfQrnO+DhkOB4yKRc1NsNy50rTSHmwjxufkNiaqTguanxe08fqmpEid9n65hqHx3nyccACqY/mcGvlgFQsXeVTSlH7tGKT7opnQGoqt1Go1CjJRWzh7NsaqPmvL/Vj9DUZLu+EvVI8r3v7ukewcvE/Zvl4dL7RY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525398; c=relaxed/simple; bh=bqr/4FG2WJKztMJmWFJddItDYg3tny/KNXgD2iRgMFY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oVhQUPJE1rhF0snw0sL2ysuGjdXrCXTq2yFDz4YbDA1TQGQdrQ0ol9U/QzIL5GhipvvkeqjzvbdFetJXlTwYFeJ2A0msqMalU/Ce01maZiHU52kfmRm6h2FNd8Xt6bbwq2j2Om1NVRO4amx4zK7mlgcDBzPtzq2yUHjjvPAyBAA= 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=RYf9Rnmm; arc=none smtp.client-ip=209.85.221.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RYf9Rnmm" Received: by mail-wr1-f42.google.com with SMTP id ffacd0b85a97d-3b9d41c1963so2024222f8f.0; Mon, 18 Aug 2025 06:56:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525395; x=1756130195; 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=cvm2UJ4oSeMfT196qjYy/oWetXEATWOESCbHdqLvAFk=; b=RYf9Rnmmo6FuhQkXs+7zcyDZJ/Zbph6jPGAdX0oApSx41+oNn2QhvbPx1Zs7td8VDk 7PaBjddkIVGRBg9C8F/LVCiTZK2PbOw1pBqFlRF7HL8/EGLr5sNV9jwRilnxa9y7MC0h 7zUHlorgGx8UIIxbOL73Cgv8RGERv9NiFX34JL4YULFOHTGlNtwl+mwBZzRgtvxE9pmu QBz36z2JXJcj/4hLr4Z60Xpu2VhcJeW6cfiF2ys1JgMNO3bY0N30CuWQ0hdGj656PHJf SmQoBCH+t8VbTrkkpPPQuVAxuWXfAfwIXib6AGA82wLN+UxLabUniKecL8goUULbJq7g YcVA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525395; x=1756130195; 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=cvm2UJ4oSeMfT196qjYy/oWetXEATWOESCbHdqLvAFk=; b=qA5VDwagtBi2Ngxruv9NBElqQ+XLFowZqoTH9erfdaON1LxtxYqSDsiq2YaDF3OYZZ Cep3q04L0RBLnQJku5yt+Qr2jK2ZaQlyc1KYFkNjgdn74nUXmcDYibzxMDynhTL1RIFK xZIL9K2FKhBm80uClQLES7iHdNUxcxMe1XpPmYiFRU3pgMInB+CrQwAi5uK+Wm9aTqxK n/MF4HCHU1U4AcGfeOE23JWWnH+FR1xvM2rtkjmQjpBh9bb04wltjKh8VJ/xlaJzntWk 8+KDUECa34qZ/kkSA2Ny26adiah8IMkhPZIED8E09qsiiBdzjONkbMsJys7vIEVad2Oe RBeg== X-Forwarded-Encrypted: i=1; AJvYcCVgSvkE+1e+OuuLCF8rJ7d75iQLX+147yBshujxX3wYcHItMj6v4rD7tvag02ZGjvyuBtnj7nQBCg==@vger.kernel.org, AJvYcCWazGoSxbUES0QVrXh+08gMJKaMp3zv6H0QD/1U1a6E70zd+he+QUKOHW0xxJIB+isJ94pKj/Cv@vger.kernel.org, AJvYcCWjALIUTEmncbWJR1TCF9vzJbG3eAChopnkLWWDJRHs8z1QErbFHFQOdCU8CvamitjoUStGM6iZzj3xyy7H@vger.kernel.org X-Gm-Message-State: AOJu0YwEQ1pu5CKWPNDOtZSbmS0Fli2dp8g8wksQkMd0h95wn3bknc47 AIW8iZDs4IWkNqqVsGAX0iewneMO8Pi4dhmeO640+vwZz/bGdeJJZvvXukacJg== X-Gm-Gg: ASbGncu4c7tPeha/fB7Nf4VvROqsFPlR+TYxntvMuBwbHJZ1M/bYlpRsiy4DtkF4xBI NjsuOZCG7j1QvpCskXs217LHXNAPSTaCVUQghHY8uv7R/d8u8xRGMXLzO3T4H+GFqM72/WgONXj wMG91FowkWvb4uPt6OsRUfzb9Fg5fuzVKe/NuaPPx55AomjiEBgBy0+j/YgkCa/9s7eFp9v2ROa 2lmnTEjwd9xwg4m4p1L/es0wpynFlQpv28U8wuTU/SjwtW008w1NRkBLEwzXDQOgRzP1r2uo63a g36NWhWTGSibZXXSPMz8ChR/EgP2F/mb/40qzlFBsCpQQ5qJiZsP4JSiejmo/P2y4LQBfg8kv64 vgqHQZzwpfu/hBUzUXHsWYEO7D7AL6cfpJQgq32RA9tCG X-Google-Smtp-Source: AGHT+IGlEZyDVaR4a6eFUw2ewS03D+emdOqr8pwqvhUlZLQvyIp8DwaBRWOYPPldumCrU2IMssDrGg== X-Received: by 2002:a5d:5f86:0:b0:3b8:d15e:ed35 with SMTP id ffacd0b85a97d-3bc68b89f7amr6506927f8f.23.1755525395142; Mon, 18 Aug 2025 06:56:35 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.56.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:56:34 -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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 03/23] net: ethtool: report max value for rx-buf-len Date: Mon, 18 Aug 2025 14:57:19 +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 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 Reviewed-by: Mina Almasry --- 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 1bc1bd7d33c2..a88e3c4fcc6f 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 Sat Oct 4 09:38:04 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 05213321F59; Mon, 18 Aug 2025 13:56:38 +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=1755525401; cv=none; b=Fo0zaA+C7g709UmpHK88imb8v+iBeGZTmtt7hCVPjpQEyQIu7FdsdflTVB/80u4yZbiegNPbeI211lMUBUCqJXD7A5Du0P1hlsQCIbW9efinm4JkzCYEc6zmcIoJX1QxnhIkFG7LSBL8V0Y+NWfplaysZtoxdEXwb2bW9zWMEvc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525401; c=relaxed/simple; bh=pQVryzCrqKahWsbuvWHxrlarAv7fIySFGod7Nm4agT8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=JzT/x2CJDc79+OBt0P38FY5I8I/E7avagCQYiAKNovGo9UmKDTufaZEQ0hwdJCXoeTSHSGUPIHoSO2DaFMTVh2hF4fET6z3KTFE/5O5/+LPbTd9Ju5nK2KMtj74l7iG3P/goLF3KWj/v+tUmDP1Q3IEANnNe+PxepQJSWBCyJgA= 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=ScyMQgVR; 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="ScyMQgVR" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-45a1b05a59fso31508615e9.1; Mon, 18 Aug 2025 06:56:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525397; x=1756130197; 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=ScyMQgVRgndz+HywDSB98NZyWaAH4WR2eSr67/YTu7PvwpTdCWHW/jt8cBPSggE0f+ DGkUeNsW/KWGilo3GE1sbSNrxc3yFRrCRfqwzBPJpixai1reZoo4pnWNZCrVvlL+291Q 6Dmraf/9ZmkEUh5wzyidhXdM8Pi2ZCTGwsF05bURDDfem6BtmBw12aPMJgjevl/Dw0b8 Dy3y9rbvdnU+gfzryjFaxiS53Yc6U5g6HC5cNttCg3L1oU16MQzNqFLnPCiYiXjYvOyH QCpX4m7cXfGvlgUuJPsfMsFjtpQatZXeFx+uWB+yZjLiDWkjTxLf1VgLjxm3IWCD808i geYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525397; x=1756130197; 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=fz3aH0CsN1Ne+10YZAkp5VD14N0qRj9LPNEprXQ3cAA/rpoWRlF/XRvGFhY9MvVOm3 JDYOMRdYoSipN+54XV6t4vyPHlY20nmssep5bYQAbaIC8vIGWLduK5NzW77jqpvc4VfQ 2Ql+QCzybthFx2r1SBOOXJt30pKyu4Bn7QGn5vfl9WXWNsmsXTm5mGzQCj/0SwDzkczH 1h+sxj1dhMZYp3MegQjeOVf4uCL3XlMUnCEokoehe0zjNXLr8CgFbfYxflQ0GuX4+QGA neZ3LoaoswPh35nUF+4LAQsCYT4XHHqLKvnA2etnX9KRoJr0UZmQGf5kioI2pSHZRuKG /qUg== X-Forwarded-Encrypted: i=1; AJvYcCU20pEqzndhOWN0KBvuFudIvK2lpFAhd4jY+8WgpUHylMAGGMQipLwLj4SO/PsoSFbSbpKbrNcPEQ==@vger.kernel.org, AJvYcCU4PDV0xrlqqYoDPN9mPQSDE5Ohc2EDbdVoCien3yoPE4SOOTWy4MrMnvuvWg0hZ9yZ4RHGWTGAGQ837Sef@vger.kernel.org, AJvYcCXhSF5TOor17KoBnBuUkEzV148yDOUCD9Ws0VKos9CCofZrvI6BLTqqgkOaXtAPcT2QHoCHfCDy@vger.kernel.org X-Gm-Message-State: AOJu0YyzVtXP/1WX+4jQH6FiyYjjy4E49fukJtVbKZhdDwCzEznSlVzf 5Uo5PbjXRpBSI08J2P03Gq/Cxc4n8+OES182QiZSWs3dSraOqNBY3XAc X-Gm-Gg: ASbGncuAKa3t45A+jgGASB3qYdWTuwX365QTOfHFKQnbmHpa7Pisp8R7JcaCdK13C1c OH0lvkojPU6OlnBW6e4bPgWnOpv9FUP/LVqaZDhXvb+CuTUz+WG1CHccCsd+RMrl5OQIhuns7O1 rfY22sguBRWQDN9vyeaZ0S2peaRchhADf6lZxctnkQs5gwkwGwQlYJTKx3srejfY+Bc0sam8/Om STkkOsMvsXSdmUX8uVOTWI2mjnYLJjQKl9u8aeKRE+9HVTPwh5wTQEyAfGEEVPorxaAJYhTfCbt CQP0cKroyI/x+RZtgw/12nRdNW29BFr0Hn68JbyYewXcfUnrSB4iY9i1lnuG7kz8Cv+wXHLhiW8 86hfCJ9/1ramSu3vRxbWeGKEx3tutA+TeUg== X-Google-Smtp-Source: AGHT+IHn3QGYubT+l/zjkdnvdu+YEXRCCKdAA33enVUYxxYiOhoMR7Xa+aENOKSE8blBUyeIZmBbDw== X-Received: by 2002:a05:600c:4f89:b0:455:fc16:9eb3 with SMTP id 5b1f17b1804b1-45a2679b098mr64615965e9.33.1755525396803; Mon, 18 Aug 2025 06:56:36 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.56.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:56: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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 04/23] net: use zero value to restore rx_buf_len to default Date: Mon, 18 Aug 2025 14:57:20 +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 Reviewed-by: Mina Almasry --- 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 Sat Oct 4 09:38:04 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 863C3322532; Mon, 18 Aug 2025 13:56: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=1755525403; cv=none; b=mbXXHhejP4L1WXEopiB0FrujVwzk1cAd8RdBopzJhVDMRwpEqts2a0jYNYz8vJHTwkp/R2BW3mpS5IK6MsT0vVyfM4f7neJU9Ai5PV0Vzs3fi0p8DBj++NMci9T4XAdvSWZN9t6q9rIhh4zE+7TS3un2Co72SSxOkZ43x7e8CU8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525403; c=relaxed/simple; bh=gYb8YBi9GClyBnpN+21boWlLrjiO7+W2cPrK+FgitMo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=PDohfCcDqJevc5en6octYTruXWvT/AWUWHf/ZzO0/edUUkMCbVi6HfzvJSy1lXQiFWocIivN0lHF2OV3eS78Pgx1pA8vrurZJHTiXu8mTmSk0Lc1xQxaVLzTRADwhGbDFb/fdMGr0yoDOknXnYAyxbhcwU6FYsoFJg37tuJMjVc= 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=C8fo7v98; 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="C8fo7v98" Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-3bb2fb3a436so2261857f8f.1; Mon, 18 Aug 2025 06:56:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525400; x=1756130200; 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=C8fo7v98XAgovvuLZm6GjXfHmj18sPeQw1yR1mr9+hPJmA++pS3OCXBSMbPMYr2vcH eikZ7Hd0Hy4ey5id8eQKdEO6BzmWXf3CZsW1EpzvjILPsgcRsL0MP8QT2XHFohTswZXq hoKZwgwzcA6gZEOl8aC7QqFysSEZfbepiDrIPcETVtuctplNY5lZ2xE3hctLvS2FQygC LElswj655p5wcS3Pn5VaQxk6IeL63+z5mroYLSKr01MboyLVpTqWDkIG+FGeS2MjllIG kKB7OhYJHkZpdCteLbtXRCmIcQZMhmS2Lm+x/Csxx+dYrD45IIziD90jhJcV2U8Xohtl dt6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525400; x=1756130200; 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=CWUDdHMuUageU/BKbGZRS9MozvM88vtjvYitcUY83lP6w1eFIq39i1HLfXZjcWf8Mr qjCiuB5xjE5V0XHyp2u4B2MY2fOXnnDSsuLiIUUcjjVlH4Ev5wZUd3F9XsfLj1ENAXVo PgSu02UnwA5GDI75iScF+AOMn9JRvk0VXlfyx33xN+HGJuLHJ1K3kzVvLxapMKAJMUpH h02XZxx6b59vaY3QoA0kQ9yd2b2LqKoBfdNV59i9cHzJh9HmFX1DKlNMPkqwr5pXuX9G K8QAiQrsEwXZOZH+o3kDPpUiZWi3BpCqv+8dGt8SHIJU1UZbXCdhfdhzTEX8j/NAI1zc VdcA== X-Forwarded-Encrypted: i=1; AJvYcCUnC/rWSngXa7kgC4jX0EYRO2K8AeviXBtIwGO0NjB0yEnqW58nXpLwmRrVTu6lXNTXTbvy37rUTw==@vger.kernel.org, AJvYcCViwSFdSDCt4VyREuLUHyOV7K01Ra0HDSBiZyX3xIWwIuK57q7RazZtMSqA0KdrJbTRRHIu8PCGH6rGmD/+@vger.kernel.org, AJvYcCXJqefQ+UHVSwUVf7TERw/5rWYH2c1xrZ+SfTiJnWmeI/CJyrFz9XjMBb6YuV58pEPTWckTOF5t@vger.kernel.org X-Gm-Message-State: AOJu0YxptdFlh+r/WvmRg4n2rkwZK+Vbr1Xk7Vjwkcpq7SaqYo7w7TTf 51iOHXRtoqT6pivfak1G3QZFrgW0LHrj5Q9qHJtLAujLkUFtlCuS3Cc4 X-Gm-Gg: ASbGncv2p1NwTOQ13k3ok/NUXJQ3Km+91Nj8L/Lx7IPnJ7/CedC0tICgNDJwYUpQwx3 0qqV0kXuCWh00HRClFsGmIQ3qLsutUOH5c6jLeXRcg7+LTeXQkyPWFdC3jv67IjIvJk1jwrTclA 57qId/xlaJkoqJAOj/H6bWieUjNpLV7oDZXNlaRIEplHXENbhCbrpk8XqufWRd+0/M7qJfXfP8r T4c6oFU61ITCKnFxBaDm6NyjT9xQy0W62KKT6Hnbmby6FUggSzG9CufwFeH9TITqkr9s7KlhEDO mb7+f9F4iXP61Dzi/F+rP/OPCnIFaRxDzMo7WY+ziWXXxKrsTn7EPEbIOSSGjo3veuSqkvlGFdo xuovTyT8JJFaugk09owmEkR8OsvA9gAwjDw== X-Google-Smtp-Source: AGHT+IHxIjgZLNrNT6Gg7iLX3j8pygieYq8x0uUhS1o/rgjFhIoBZm6xekcf/5NxSVGPZ511AYFo0g== X-Received: by 2002:a5d:4f0a:0:b0:3b7:6d95:56d2 with SMTP id ffacd0b85a97d-3bc6800f436mr6218222f8f.7.1755525399677; Mon, 18 Aug 2025 06:56:39 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.56.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:56: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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 05/23] net: clarify the meaning of netdev_config members Date: Mon, 18 Aug 2025 14:57:21 +0100 Message-ID: <8669b80579316a12d5b1eb652edb475db2f535e7.1755499376.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 Reviewed-by: Mina Almasry --- 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 Sat Oct 4 09:38:04 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 60859322776; Mon, 18 Aug 2025 13:56:43 +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=1755525407; cv=none; b=RV9yyWkxI3NZsTWXja9Tgmi6Z3Afq77inIIxvhO/AzG25xZboorKdM7jUnWb6ylEpfgXKP2g83PR4vJjx00gbnQV8kLmg8XBNPEmO0mt9YCb7zVg62edZnJ5SY5ulPnl23yFt3QZl0CAWNBjMWSAhoNJRY75G35QmNTRosDtGAQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525407; c=relaxed/simple; bh=FlAybfuKHbG6+a7ZbRKEB6/E7DbObThw5ayznKjijpQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UBoZvXKWWypi825KAE7uhq7P/29Qu7Iko6XMWefmNeD0EF/k/5nUJP7MEEGPv1H0gFmEH8GvDsg/8DpRU/NtbopqCcF0I8A3m4uu5qPj1e/kFmmZ6DTam5QxjMoyL0upjFc4Dg/YmkH031rOwkI7vXQYDcRFqS4HUFj9CTunOpM= 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=cPIs/8vY; 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="cPIs/8vY" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-45a1b05ac1eso19561395e9.1; Mon, 18 Aug 2025 06:56:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525401; x=1756130201; 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=cPIs/8vY4bqB6nxe+LYKZUseQfz4Bg4Bfn1XkjGsUBC9qUTk9XXwWiPk4Exjr6IMKq aeIWisWkICjJZfoDlZJ/PfEjkyKd5W+Z1sKcBJCdSTIhKE3zEDjAl6jNfhH+uhZ0m54G JgUI6aLcJOXIcojXGAqEyso1SrDjh6wfkG65RujijfmRn3KT4EYqhLQmZX7foEl/6mfv jiI/rbVsPC8vfzi9rc0H7Te+9kBwsAGpboMznYITiqADlYr+hdig+CEFXEZGdw+9nsIf dvAe35UQU08P8sQTAPZhy1/u1zGgdYvdfYCg000Ijf2lwXvZRsfvyjbXYh63VEXBHwLT FtqA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525401; x=1756130201; 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=rmDvezjmKI62EAgVgNy/YnGh17MbPnj9tsZGIPGm2UtAaChu4Z9UF5TxHzeP1vr01m 19bREmaLAtZXR5FDJg2l7tm5BSqbL5SOnhYQlZ1vLMm3VvvAk4SD0xkMU+9V3v7GCDr/ JVgZvyooV4V7LUKDXZFdVWuI7uemiKGAY0GjVTOkSkgoZd1jHFK9+/Hs+mreBfu5aGk6 fdhnS1Ckh9bV8J8D6h9N77afpGg9IxwUBgW4I/2f9MZU4YJ0O1CpHk8bXetDIXV9siDX +snZvdE99B51u11kcfL8zXuvQ1+2poLhWHiJg8j1LO9LrvWcLxPKai8O1m+dAEfLCCbQ GG0A== X-Forwarded-Encrypted: i=1; AJvYcCUMFcMp+E557De/FSSynK/fgDWsyBBSblC4mrViUjHv2jgYo3H72WsGIp7pzULZxd5NWrfxurq41/1s6vWB@vger.kernel.org, AJvYcCWZnMrceZ+7FYScbbAOuw1F+ZuarpGP9IgXWIMt2y8HRAyu89dbdWcphJL7hgJt/4jQeCQkSFmc@vger.kernel.org, AJvYcCWoHV9WiE5VySITYT1BZ6+NH3YtaWS1dOFbZrZem9o0LmFYo5Pb2igd9y4AdRVJ6EhXAx7jVkDMZw==@vger.kernel.org X-Gm-Message-State: AOJu0YyBHuvg34UT82Je1K1OYpi2LmQzeToygHexT0moCPzjAEp9wJZQ Zy7zNKOBlk3gkQta1TuGBJQB7zVh6TS6qWehR1MLymWe72t9HdKCA2/w X-Gm-Gg: ASbGncuwGJ+pP9i9Mr2iPlQhaa1jBGAufvXVwwdhvdjB34F9eRM7d+GqIN7ddWfxteG nHJN22eauafskA0nJptu1puvfSnh/yQj3NqDkThig+rASX7+49T1bP9/eQMVWngDfguRxN0dL2Y F4/peKvgqEzAPBUo5r27KxhpcaLV+1/4o2nsz7enXUr0KbT5yVjpDLciBnqCVLLYe8JPQEzAk79 7fqh4JektBQYqMayZYfnwi14UOQg3aHOBrvKi7kts6///lnpfezi8yHRt8msbXhHWKFr8YcloHR 9UT7W7WMJQkpGobGJDfct1Ik6VDuaDCopf7lZD9qMBQg8QXvl4Ka6IVdgvIQoBjdu1STx62+g+N MFoOK2s6Rpe+CvgCS5WvnkKj5exU/+pUr0g== X-Google-Smtp-Source: AGHT+IH+tR2XWMLJZg0/0SvwYa74cV6Ty6uup/A/EKyiDBFftJoh6BBU2pCbd0h9aJQxrt19sfX62w== X-Received: by 2002:a05:600c:4fce:b0:456:18f3:b951 with SMTP id 5b1f17b1804b1-45a21805be3mr109152805e9.15.1755525401413; Mon, 18 Aug 2025 06:56:41 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.56.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:56: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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 06/23] net: add rx_buf_len to netdev config Date: Mon, 18 Aug 2025 14:57:22 +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 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 Reviewed-by: Mina Almasry --- 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 Sat Oct 4 09:38:04 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 F2501279351; Mon, 18 Aug 2025 13:56:44 +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=1755525406; cv=none; b=W/sq1iGI25SABbwfoab/E/tlS2KXaCZ9e0KlJ+IFFWRWCfaihUehRA9hWzeew2rwxvuVA1ZXyDGhTDHwQs+W4Nwd7NX/RcsW5KN833+WTqF/6oNEJuKbmqLoxFw37WneB8fTI6n12feOlyEM3ggMoziVkHCF/0AUdBOHhtDbFEg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525406; c=relaxed/simple; bh=CgnCS789qvKVwzwumupDp5m+5OOfkM3ifrvTrILtyKk=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Uu0Rm/U3leqHX+0NW3wbmtFszESByR+CYMxA03pjmuyV8PLlp5ZVDXT7THY2JtayXQ9pH0hv931NRA7xeSkghGSrAc3TQZm567S7VLN5hpz+N0gNbCj+f1H6QHT8d0rRBlpxaOjALD+oV0yge99nXSCo3DDgqtjvjZr6ZOSxeX8= 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=FosrnFtC; 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="FosrnFtC" Received: by mail-wm1-f46.google.com with SMTP id 5b1f17b1804b1-45a1b004954so29732755e9.0; Mon, 18 Aug 2025 06:56:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525403; x=1756130203; 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=7O2qpU61yLG+Mk1UKSRopcAs3GQir6McvQEEMmetOFw=; b=FosrnFtCWD2IuETHIG+neMzKbeJ/QuQbB0mKwo26ETt8HOfZQg6jNSLeah+Z7W0k1N x5GFufqrkqOsA6sGAiUU4F+62PHlDwsNIPCE0ZuYFtbbRk18+U5yt6IyL1n6LrXHsjqo lGuapsmQe5wGajQJK39fRS8toDKed3lGka2xwuRNX+7iY0r3YPVGhBjyY65NElL11Hbz GMsooNFAYSrwEfseMPe+1HD7piI0tUt3OMcsJ8r+xcTgek0B36NgXcD9yBVrMrVieKeb F4VLREP4ICDndtB78h7kDAcLlChxBa0Q+8SHuFRpj5OxkFdcb+/HAvJp/pIIuJdRVPZi jSKw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525403; x=1756130203; 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=7O2qpU61yLG+Mk1UKSRopcAs3GQir6McvQEEMmetOFw=; b=FUiC1xXwAIrizkSq2Y+ndlAwL5gHHGOJkYFIrcQ7rRE2STWm//c2q4yNuACTEMDy/T cumBxjkiBIYCcp1po9hNh6MrHG8cTa9Sg3wU7GntsTv63csQg0JlL/nuLyklDlqCEvZl S0cdlp/5NIk5TXLyZXivWKV67q6WzCQRKhzeXpPK/HF0kEvePVbk/Fqr7Bvu4Ghzbrtz E5/yXTBVZphMhPEIaOE3EqkXLcZVWTj7o12IKjLGzE96jkUbHMK+5PWKEek+TyMCZGE9 AiBnF8Y8ItzqkTQ33Dro+wmGucoNYn3487o5Qaqxd340sx9ehwrF9tLugZQOCG63CFBo 21tQ== X-Forwarded-Encrypted: i=1; AJvYcCUAWPyXL79xPg/ISaxb7jbjB/Rt/gn8VZsVCQguFhef5i947QgCGVUECf0OpQBGqyGHTS8z6K08@vger.kernel.org, AJvYcCVJ+/ypv92J0kguy2hJcNfv/wWDdm7tXjwG3o43zMzyF7q610wYW+KuwBeb8M0BqvMepPU7bYIRdQ==@vger.kernel.org, AJvYcCXrg+QHjGK2kcqiEtcVjgkP/gjuy9v6RODpkRJ+rl4pd9Ab26ejcbxxQiUGvwFhd3xARAlDIqSIsyKl9oJj@vger.kernel.org X-Gm-Message-State: AOJu0YyylR+xXSwSbagG2ettVh8kT42PzqjwozgkSzZIo4nHyOLc3Ucp 3UmRm+I8PGAURpZne6ziQXXH7igKaPkoZdcHEma8b8rIRUZFnBG6ALwF X-Gm-Gg: ASbGncuoFbfKi4Zzr/INXs1RC0QiRPri4DNGGTBhiQgxbx7qRYQD2/LxLia6jcm8LEx nE85DxQTF9hn4NZnpTx4ZEDQNCJkh8vWWLeEfORtJOBms0QNKZCaN7HhNC3zBPYz4pfN+1TA34k iTCE2/JvzujnhyD6fgQq1o+ReLjcUl5UP9/iW6GqPWfu4CWc4gsdDcWSiuqKpctGaqLtFFwth7E UMP7ZDUH/7xyAdA6T0jzR2drTRw4g+OTUA5QTACxJzjmnzl262so2Xl8G4VJBKeAdNLVkNR2Z2B sJyEeBN2OqlOEdGpYqoS96cqkVHZntOZ4i4SqQVeJu0iGwTvx7LqmLNnT/0kAeci+aZoDup9PeY Om6l5ViTXW3i/batiqF47Q7ulwjjxdPTjWw== X-Google-Smtp-Source: AGHT+IG1e9ou+R7/TQ91yRS1rz1AyimiJdrMTabVI/BDwjSt/EF2gC8/NB+92Jrt8A/prcv/uXS+Jg== X-Received: by 2002:a05:600c:46c6:b0:458:a7b5:9f6c with SMTP id 5b1f17b1804b1-45a26744554mr73348105e9.11.1755525403041; Mon, 18 Aug 2025 06:56:43 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.56.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:56: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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 07/23] eth: bnxt: read the page size from the adapter struct Date: Mon, 18 Aug 2025 14:57:23 +0100 Message-ID: <43a256bdc70e9a0201f25e60305516aed6b1e97c.1755499376.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 Reviewed-by: Mina Almasry --- 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 2800a90fba1f..5307b33ea1c7 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; @@ -1150,9 +1150,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; @@ -1184,7 +1184,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)) @@ -1198,7 +1198,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 @@ -1283,7 +1283,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 @@ -1308,7 +1308,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; @@ -1323,7 +1323,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); @@ -4472,7 +4472,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); @@ -4734,7 +4734,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)) { @@ -7046,7 +7046,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); @@ -16576,6 +16576,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 Sat Oct 4 09:38:04 2025 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.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 B05D5322A24; Mon, 18 Aug 2025 13:56:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525409; cv=none; b=f3EOLO955xrTr4GmhgCccFySN1stlQrPkvCOq15qcCSKzCS8+6dTGvviTSxE2tfhqtbO9R7iqaip0ANRa4EQVHh6rG7OlGRvFbPZDeaEVHyrYGNLdkYHyTY3Cy3Tv3J/UPdmqipzEcasR1lsCIovO5CnhqKNSAbJXj1W2mzIDHc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525409; c=relaxed/simple; bh=3GMjb+lbBpFhbrGVSn65GBcvohAzWPx6gsl/4V25jU4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QsMx9UE7Jk33MIcHSmu0WLCzyXMKRAYy7e2Le4lKlRBur6PFXmhhWZw9pP18JeDoirtdpn9ARAefqvQ2ZRSY2tb95obZTzyaFuKDWvBBbH4589Edn8mOs0fJnm1fjuHfz/bqdrdr3Rw+OLDVU1IocnsJ6L0l8Z3vk+OtcxBVQgI= 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=WCGCLtm2; arc=none smtp.client-ip=209.85.221.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="WCGCLtm2" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-3b9df0bffc3so2892966f8f.1; Mon, 18 Aug 2025 06:56:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525405; x=1756130205; 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=+t66GhzgS8tUB6DAwObgo1BEyoN8jrBytfijH3iRZiA=; b=WCGCLtm2wWZtNPZUOCkRPch6AhldoeB3oVnVz7Dm5aEBv9zQ+evYqd5f3VXGkE+JhP M7ys6aDFqkOe9XYZrxuYGkvLlcy3/8ac2uXeRbV/j6OnhSgsku9pfqWETO9IeKhwpNgu pbtABu5OC0B/IiawCdtCbinXlGmSNz0/RhuICTplOwA5KqqYf76s8tfDDeAgubPOU2f9 02L9wZpP86gM5q3amXfNEHa0WiK1KhE2DB87rLpZPEftqjWPznRjfF+wgirj+Pj4WAEI G1MZxkeihtA53qj6uAreaeg0wpWzJ2JnfShB1icy5HCyqQI104XPCSERLYOAzydWSnOZ 4Dlw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525405; x=1756130205; 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=+t66GhzgS8tUB6DAwObgo1BEyoN8jrBytfijH3iRZiA=; b=shVFC3IGLCwJM/Z7ITAPa82FBns4Gi8JYnl2PQtAEsqawOUrrWAZ/Q0aXO7m2Yxc6f wCWslD1RW5+QMGwX4quZRM0AtQ9meriYvWZW+eO8FReGCo/Dwar+SyUmyIVo77zI5T+w 491CyX4uv7uOBZkNeyS4QC8HYDXN1CRz8q5LkIG+iobM8mIyuDUvdbSieTVFVk9zhiMz QN+BBo+UgocQ3daKXcEdry1nztt0fTMRr6fRSr/44XHAsZJgXfqIl5/rgTDPUB4Z64JK lmwhlgxvojyIm9xuQFZSQoOn4KejsOoIw3l4xamzLEnBhKsXw3XC6vLUG/fkPpzdZyBR OQcw== X-Forwarded-Encrypted: i=1; AJvYcCUwxVgpDLmdgL6lH0gP1wZWZPtWUSR8N1N2jBAB/1y758NnunEx876x1jPQek3x3o7bjawprmeu@vger.kernel.org, AJvYcCVfHqNOzo5KZyp0GlHzO0cmeSCsM+SxSrrhhQ+950qh/X5bz3LTRtLhaYLPJPt0rDyrcUCz88PGEKAwb4HQ@vger.kernel.org, AJvYcCW+lcXqaL/uD+ROZRa9RhWSryxJeIUIjHAdeVlp/IKvBrYLAdXXFpALSodFMAVSNlTXq9QufHzv2g==@vger.kernel.org X-Gm-Message-State: AOJu0Yz8c2DucWs5tWmHENNOcOxVcDU7OUkC4whzJ428dCETcJGYKYlb xGxwUy5EjBf2p1rt2EX5RsSAEP+R8w7OzVr9mJS9+/qMSdhYU9TYshrf X-Gm-Gg: ASbGncsfB8l6RS4qccfO0JzpDx3WnY4YeZPCtV+d+FRVfasvnz7HFVVD1ELHied+pwq LlO1I8xcpjEtZbgDSTiUK00kowYLfYQvUNqX0tWQpcQNaAWnToFDZZ3RxEvDnv8rMWtIAcf2mMg 8MVwgQbvWOvmKmliqvdnsOi1ZXM48NexsiCyE4oLnl7OIetIx5kjo52vsT4Fcqtm33VFlzF6CWW Ig5ECLpsRlI2abCpZVZ/uFJ42r7UxN2YZTs41SqAtdvXq9fYJUqnVP5IAoG7ifItidoLGaJSar0 87/+/jhU+4Dl+Jw6gCQ73al3LMtQsQgFCRfIQnlpm9Kt6WK1MyAIwTv9JVCGjYdP6XH127mkIS2 QKp7+XB6LLRuuNK1v5fJ8ZsBOg64T+PeKPA== X-Google-Smtp-Source: AGHT+IFWS+50cUTPIMdIhGYfua7eZN7PcLQyrWYfXTyoFLwVW+vWPYvtq8zqWpxs5aIj1ZQPnK/Cug== X-Received: by 2002:a05:6000:1a8e:b0:3b9:7c1f:86b1 with SMTP id ffacd0b85a97d-3bb68548d36mr9603703f8f.37.1755525404694; Mon, 18 Aug 2025 06:56:44 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.56.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:56:43 -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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 08/23] eth: bnxt: set page pool page order based on rx_page_size Date: Mon, 18 Aug 2025 14:57:24 +0100 Message-ID: <51c3dd0a3a8aab6175e2915d94f7f7aece8e74d3.1755499376.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 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 Reviewed-by: Mina Almasry Reviewed-by: Somnath Kotur --- 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 5307b33ea1c7..d3d9b72ef313 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -3824,11 +3824,13 @@ static int bnxt_alloc_rx_page_pool(struct bnxt *bp, pp.pool_size =3D bp->rx_agg_ring_size / agg_size_fac; if (BNXT_RX_PAGE_MODE(bp)) pp.pool_size +=3D bp->rx_ring_size / rx_size_fac; + + pp.order =3D get_order(bp->rx_page_size); pp.nid =3D numa_node; pp.netdev =3D bp->dev; pp.dev =3D &bp->pdev->dev; pp.dma_dir =3D bp->rx_dir; - pp.max_len =3D PAGE_SIZE; + pp.max_len =3D PAGE_SIZE << pp.order; pp.flags =3D PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV | PP_FLAG_ALLOW_UNREADABLE_NETMEM; pp.queue_idx =3D rxr->bnapi->index; @@ -3839,7 +3841,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 Sat Oct 4 09:38:04 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 5CFA1322A3F; Mon, 18 Aug 2025 13:56:48 +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=1755525410; cv=none; b=NEGyxej1eU+BLutLD94ghT8b/+pvwUYnxy76l5/INYCRO14MVvk62QH6jDshkhikZjNuJMXBeqVagOfKJmzreBK6wyLjaAO1ZKkMMAWtJx2zd1at/YVQ/MdgZbhEJQDKlOjHLpplh/MVHVjE4kwFmZMAiD2I4tMS0+w4cta+abs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525410; c=relaxed/simple; bh=02ll7Hf0om4fnk8EYgvdpXG5XbOBZ69wid9PsjkjrbY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=kCd1YedP/zkpeYV0mEx45/AT79V7vojVgJ0oc1NfvVQWKwjpjkKQwLL1bVT2bSMRTzeeJE4x8yueLPy3DflmCWfMPoKpLGpkXwfWNaheAG86B6rzxC4I/vJqImjJBx5IJA/Qh9lxZDkFr1rjl+JyxGWtsQ1d1vmplGzTOpal2gw= 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=d4mP13FE; 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="d4mP13FE" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-45a20c51c40so20513005e9.3; Mon, 18 Aug 2025 06:56:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525407; x=1756130207; 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=d4mP13FExk2pcBi6IF3e5dt9XhViQqne8NIl67O4qVL3tA15f+RknT78LX42eh/feD gybHkN60wMfuDgCObvB8SZ29VSJCQQfiikWmhoanqwvg6q0RHq7SkHJGMs2ezqLpuZ7+ x78a8l+yfL5BqSr3+7am93ue3C++ubnoBm+penPU1LUlSxl4C//XGvctS6a0POxbk5cq rQwFjGVK06eMlR58EQCuGcRL/xeawBqHBMN2Vr8QdLseI5bS2hLTSCeGI/XjwSLCqDtM +0JjfYGZ2wN/OhNJobdDcUa5IrEwLm+TMLYZNIKHoL2mmSOGd1ZaOhYHqszLaz9JItUg Ihag== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525407; x=1756130207; 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=SiquvcH2pbscKiid/+9Fh/UTp50x1UoqT/EiWtd4ylKwtomnC4ba2Rult4QGMM2d7J 7uQVN6LU9rCSTb1kv6ZdrXtwPEAYv5dz4zUNM5Cd8dPZQvhPXjQPAxB4WaotgiiaIp/1 SamprGZ16po4d3VywOfCWbPVCMjc0y8ank1DAvVonjE4vo+q1EFH4T8LZDJAgy50Qrxn 6mzLAIk9ec4L3NggI9z72kIJW+/qWUYBe4JNzClvqFg2XwblpxX4PT8NZdEGuLl7FBzb H4qsw25Wwu/sKxgsW2dIX++d3Rv4nHzN9/t/3o67LcHUgXRZOtVTjz86LhjEHCOKNtVs xYiQ== X-Forwarded-Encrypted: i=1; AJvYcCUMCrGI+9iyU52FKzhpNDf5B5GY3Z94HFgQkpdhFEGYNAEY9PRt2GICw9yf/+YDLKPbe0HEqpzJ@vger.kernel.org, AJvYcCUsJWjLbRP2IXzCiZi6SaJSW7MpYTiYYKF45Ol4LkrHhMPW+Nhf+duCbyPM2Us+mzkZd9n5JiLDxJKSTlRR@vger.kernel.org, AJvYcCUtGGne6iJWqp8jW1dHjFacr7lp3h4zGjhLrBUWb86yRaGjr+iHr+6u/Sb6RiuUqzZ0+Zjmh89lKA==@vger.kernel.org X-Gm-Message-State: AOJu0YwqOaELxNBwSkNxwj1ZQqj7KfylGBX/2YDA+fhM1C+FTfWexJbk 5kHhMDGTf7N7ih2VBYt31wg1sdDNeSccQ2FERlh5n5OFvzQ4d/HpUqORgF0PpA== X-Gm-Gg: ASbGncsrP3FqkWuR6bceqX6oAiWtRMLLk+fWA/VnTfGINbMhRU/vWnIXAd8rLWuVBTj knlpwvvyrADg27wh1r6W6ZGdAdNGQ3N5JcOUfMAqLbIRD3tYcXFw6ZTVTb05D1eikE+S5Zes+um uBlUG/VT7GGPFMzu63PBEwbFe/5est/42llRML7oGf5eIFTO0NtTrSWQNcVL4jW+8a+MVFkX4Ud tOTbx7WzTnxP+N75wTVkuu8tb+zhU/OdcOYYs9QLMmtcqX7dkCZbh6vbbtcF8X3bk5wqNMkQV+i 3PwCJQBW2zeM9Poj9WwHaiZhk+OvnUsU6vW9ec54Bc8W2x2a90luyrytMT/wDnBJbS7ulV2dpHa 4unjFznkpGDX9DHMZcIP+ZzHDF8Qbq0Yr6w== X-Google-Smtp-Source: AGHT+IFNzpARJvLXV1EfITDeWXOyFQtbwixTX3RZylIBDZ29kLIj0YiFSVxoxFvOEdmEXPLzM+R9wQ== X-Received: by 2002:a05:6000:2888:b0:3b8:d493:31f4 with SMTP id ffacd0b85a97d-3bb693b1f00mr9609443f8f.48.1755525406510; Mon, 18 Aug 2025 06:56:46 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.56.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:56: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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 09/23] eth: bnxt: support setting size of agg buffers via ethtool Date: Mon, 18 Aug 2025 14:57:25 +0100 Message-ID: <155130382a12b1386540b51a4ca561f61e81177d.1755499376.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 Reviewed-by: Mina Almasry --- 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 Sat Oct 4 09:38:04 2025 Received: from mail-wr1-f46.google.com (mail-wr1-f46.google.com [209.85.221.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 DE7F8322DBF; Mon, 18 Aug 2025 13:56:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525411; cv=none; b=SSiY/10NBrNSGQjXDMRicYOrsCn8pUuN4H2FxyY1TVjNS9Mwbtqtn6YtYn6Q4erwxSlPMtYYz98LuQkAxx2SGUhZacYN06bcDrRjnoZRoWX5IIxJTih2od1KbcZs4D9RihwGYnsTvjZPZ5HBzvry7PGkcKW7rU+eFZqn3VlhTmo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525411; c=relaxed/simple; bh=DvFXxblauZ96VafpOgvufX2U0H591Fff3g6A9dC69o8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=HfBDaftTANWN4sxU77JsVnhuYoTdjxAYTV4B3WT1cvmj3iFKcViczyZJOo9po2W2nXXp9h7NvM6ehWroudHlXUArEvn0wnnj45TQJHJX8OXMTiNd9bRzBKOU63yR5k+WWKsjXfsAx4YaQILrQ5LASKDkJ4ypAmlVP1SoV20RBng= 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=egeatfAG; arc=none smtp.client-ip=209.85.221.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="egeatfAG" Received: by mail-wr1-f46.google.com with SMTP id ffacd0b85a97d-3b9a342e8ffso2987089f8f.0; Mon, 18 Aug 2025 06:56:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525408; x=1756130208; 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=8AxLYhi8kKcwzw7gKfW047K4r67KlE0o7DzHo3l/cZg=; b=egeatfAG3NYEMLunKvMYgnmedZAc/cuGeqIEobEcYTJpKsIlqMcEEH+83VSg5KucHy HiRaZTofI8GNlHbMMRviPmsAKXR6aCkeolHwWcS8xma8VTD1jkoFuYsYR0ufewTluE+r vQO+/ARxhqU2DbKT5nlE3YmyTAZ1TWsDU9uvC7EquQrZXS/Kf5hYyQb1FZQaMvMzY6d4 EDx8xzNAEJf1r4dwXv1xUVrKaF2O9PT6RFVSUI+NW3MF1+Zv40TG5aU0WUnzxRB38ey9 MH96zqv+EhPPyYTH5yYTmUJHW/oHd8fSufexn1nXcJP/mYwbHAliNM5OCbNqSOSWBdzM sU5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525408; x=1756130208; 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=8AxLYhi8kKcwzw7gKfW047K4r67KlE0o7DzHo3l/cZg=; b=fOahhs79aqUwQhD329MzOUobR3r4zPSgp1L+Iliews7yfn382M4YWv+qr/ak070p8y eviX/q1otQBco3B4Sh2vya4WT9NQLn9iZG2rvsHiWkfEaUbAFnrKXd07bOAbJ2cfylAW iJUaxfuozSU9xkWkoIQeKGKueXgVwZUP3AVIUWxs2KPpOKhCVUgY6u3fuDatycR7KNtx TuoNGdPQdXs1H2y0DIW169Z/kz5zai2EBSOVHl+rwQIWI6pz1HPB4WMyuylUkqiRNnlV +d+1cpS7O2+TCOqFkQkim5qcaIrxF7yDnhkRWUA5jmCbldeyOe7jAD2Z88ClsLjV103s 8DoQ== X-Forwarded-Encrypted: i=1; AJvYcCV8xQYrUz8bAdCerJ+vPmWeLQgwJGjgAnglCIzq219Dh/o705Y0umPPwCA2g3+ObiMfGkvndWau2GqZa+Jx@vger.kernel.org, AJvYcCX/u3g1veLPRZc9uGgbhgYtwIQlwInnzD2GTfveU1y94FsK6s4vTOGzPirWVKnQ8R6am5Nwe6b/@vger.kernel.org, AJvYcCX4hVndAsvdWwMO/39jt/tM7C7/aWgayXoApId/YqpVyOqP1XcHHgLBma6lrNpQNmw+jSVS2GFNGA==@vger.kernel.org X-Gm-Message-State: AOJu0YzEPUtt0klRwBcbDGj63FUOdelm6tG7R7t7wOcWxNA9Key1nXkO yWjqJVVdOMV14vgbd42YEqKsXLI+yJxgs8+rkd87iD7MXs6+dUNSZYCXd/JQIQ== X-Gm-Gg: ASbGncubR8GEufz9wD6l5PEhsd42Ybh1Y/9DctusLeXtZk4JSj8XrJ/sqI7OtNdSlhY MCFxsTnYqAP09fmqhtERrhcprOeVGRh/aGTHHl1dmcmli78hbMuX8iBaBGTXOeki8aZhI7oLhhl FwRPGjN7pnmiDm1Qnw8M7WJMJntNpivle4NiKu+ZsY/JGukXnxod49+CFrG8liKqXpirm8cyS69 kEkV40FBestoqTE856oZv7NzNUgeHlxuP8G5MI0jZJfKBKHMc8mhCaD7aSVlTt/FOkVmpormZVU PXYESo00VKDoNe775Ihh3eVn/VYREnO2cqxXBo27nonLkAoFi8YtgSqsXu5FFNhaG4oqkKSfiAJ 7nLmOF3QYK2RJ/OGUSFKVqhQAahC5mOFDgw== X-Google-Smtp-Source: AGHT+IGqnDE72P9mmAK7XWqI7iqEancIsOOzddFZ1FKbJa4KK1w018iwE5+9sfYxuPxvv8Ikzr3pMg== X-Received: by 2002:a05:6000:26c3:b0:3a5:8934:4959 with SMTP id ffacd0b85a97d-3ba5093a6bfmr12759862f8f.27.1755525408154; Mon, 18 Aug 2025 06:56:48 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.56.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:56: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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 10/23] net: move netdev_config manipulation to dedicated helpers Date: Mon, 18 Aug 2025 14:57:26 +0100 Message-ID: <536e37960e3d75c633bdcdcfec37a89636581f2c.1755499376.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 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 Reviewed-by: Mina Almasry --- 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 5a3c0f40a93f..7cd4e5eab441 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -11873,10 +11873,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 dev->num_napi_configs =3D maxqs; napi_config_sz =3D array_size(maxqs, sizeof(*dev->napi_config)); @@ -11947,8 +11945,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 d6b08d435479..7041c8bd2a0f 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 Sat Oct 4 09:38:04 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 935AF32A3D5; Mon, 18 Aug 2025 13:56:51 +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=1755525413; cv=none; b=SQkLlMpG6zx56Rhqua5GM1SD4miAR95NiKruw76ACRLNTCkm9OsPvu53kyqGBAYzkjB1hfTAsDKlNxySgKSJaAEEnjr422QUOu30zO9MPvleTsisZkZ/AcHs971jwhHry0d39Qt0JoQOL+C1WbPCx5kX7VPebRW5h/UmZMvNK7s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525413; c=relaxed/simple; bh=mGd5zTDnP8+6/R0d1mih7E5A9LE5XPZC1Y/OWMGdGH0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=e3cf1br0o8u3Vskmt9KXN8hSJKRh7pL5BQrI2LAV1IyjVBpRPDtSGA4GxWPdUp1TbbDkcxMw+5MUyZbjmFQuA3XBgVaEIVhhG+YRa7e0oz1LRNl63jVO58IllXDnMoqh5IUHYBxdB4KpdAFVLLABLP5kd0xQ3RoHJoQkrKuTqVY= 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=itppsPXR; 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="itppsPXR" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-45a1b00a65fso20670645e9.0; Mon, 18 Aug 2025 06:56:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525410; x=1756130210; 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=itppsPXRvou7Uup4QoooZFqIEwmqyp5NwObJLrC25cWXr1RhrRRrD8Myb7zEvi6N/3 DUaBgoLoj8UvGsn/fJwShtrXgYGLRM7AtQd3ZEiCxQ9GbWt6Crj85kHaNm3falWbeRM/ aNl4t4ybBfKCHHc6NoMAPove6oIg+dtkFoMsATcJe2Sr0WkculOSp8c5MZPUhH6+8sMH fVyFK10rhLj5xje3nu4xI6FK++z+wZ9oheYXcYWoNUeHJ//O3MC23zePzZnXDnyV9Y8R 3y/fevJkeiua6jQXRBxu897p7fMf8AhpJwRfnpEN40iAEbhtwpw91jYIeUMNW3Brsphf T+rQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525410; x=1756130210; 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=MOBuHUXzcW79enhANFYHjAVRH9Q6dkAv+E32aqmleSsq96/CcpOzBYuH4/YW2WtIbV msOesij7g0QLNfYDGnkEUIWRtWK6t6iEIx2DX+drHvjx7+LezgfEfz7v3alvREllfXbN E35r238k4RJrfrbfsRzWX64Q7YOisinxebOSHPsjT2BBtZNTg193hel18vwpcmg3wDA7 3YXg6J8JNnL5gvpistcd8rzRpAhkM4nfcLQOR0fLcXwm6UfPbeP2xivOxMrmG3SDLPUW Lb3m8f5ZMu0wKEIPmSWw/jgpiu4ydcF0qBEMBgYMDw+wylacVON5sWHgxy571+XFSH1W cJmw== X-Forwarded-Encrypted: i=1; AJvYcCU7syUjk2xww8NmgZENJAapv7oWA6GzVaYsYROANCe/arF4xaNjR70TgFlTmJR6aLjugAu9fCoBdNabzAgG@vger.kernel.org, AJvYcCUVHPd3IsPZx/DJCzozyaCAwH4VjPZmHl6nyMfz/dEZFP8ukFBluNb1tpInf5C7galX/qAqdFY4tg==@vger.kernel.org, AJvYcCXUx2cl20ekZFVLwuPOpPI4gN4RJOH3bGn+Fnb4OLHNWgoYNYR/tKlEv2+uKhGai33BRvrj6rhK@vger.kernel.org X-Gm-Message-State: AOJu0YxSN5iU05thekX9eUBzhFW0mxiyYN7uEvJqFgaqlyP4zMsLbUL7 zAOG7anFLpgH/51fPR285HFO5wtOYyPuqiMqFqnhYRaEwx5IbPkC7CF6 X-Gm-Gg: ASbGncslxIb2oesX3xa5R1YUVpHM5m/WOB1G4Kz2wQ5bLnB1BtEFwIcJzkdI1ErHVJ6 YAqdrW4V/r5YJStXzWxWcZirEN5eg7b6KkbS3NbKtTDbo5o3vyz3kBvag298IK34Y5Y1MySy3J0 X3kyylgYea1X/kddG8w9vClozaH/aA4CWYVzWUtGrtqI8hc7F+4MhJPLbn4wDSAHNp6eiOsxRjz DrWquOIh9lRJWasjtTJ7EUO4MuyP/wieA/OlE3m+XEEcbdJdWuYhLVQ5sdU4Cal9upzpRCqcWS0 ZEkSaKO7hT4povJYoOEwGdKCXQjMCACAujQQpJUYqWqL12aHNEwNWZdYd/Gwc2ihR/nvPHRhTK/ 5oe4/OuddqoRuIBaL+Y4pS5NGY8jTBrwlBg== X-Google-Smtp-Source: AGHT+IEjxxvWt/ifwBZv+Mlc7Qp+L3RjGgZuyt5dO4CjlWtPG9aLLfbwpBBf4+SQfQN/oDZktmwi0w== X-Received: by 2002:a05:600c:c059:10b0:458:bc58:850c with SMTP id 5b1f17b1804b1-45a218013abmr56154175e9.1.1755525409789; Mon, 18 Aug 2025 06:56:49 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.56.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:56:49 -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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 11/23] net: reduce indent of struct netdev_queue_mgmt_ops members Date: Mon, 18 Aug 2025 14:57:27 +0100 Message-ID: <724bdda392884e0fd1ee26457856f9e4fb7be869.1755499376.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 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 Sat Oct 4 09:38:04 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 637F933470A; Mon, 18 Aug 2025 13:56:53 +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=1755525415; cv=none; b=g0AwK2U49B7hTCNYJGRySG+k9OHmQXj9hdSiPEg718+DrPrYJLloZP02A88xZjSvRd22qxdIgUenm5cjWj+UvbdDZ2vWHvYu0NxTiYHr/XayXzzD60fNvLXbCrTxu4nxP1qPtbdIEZeSVJx0/b4q9G87uX2nbyzwqGuM/AsObrU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525415; c=relaxed/simple; bh=a2tSau1Prgm8aMIUbNg2AY5nRr9zXWTwa7wmxAIG6Og=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=DLqc+oTt2sFLN5J2GB7EJdF6DYpH+j8Acxu85VlIP9SqnA2ltG18JCyNS1axCeAemIp3rT94AHsA0c0nkElEmeZSGYlGvqBL8jdN/5d+mNj82/hl3VV+5LgP/q11M2kXlgI9EIaSbV0FRIdx8rm5wwUrJp+Gl21vGDU6UAu0MbM= 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=Tt/4X2r5; 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="Tt/4X2r5" Received: by mail-wm1-f45.google.com with SMTP id 5b1f17b1804b1-45a1abf5466so22817945e9.0; Mon, 18 Aug 2025 06:56:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525412; x=1756130212; 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=qLOfpFL3Logct7nx+8SP8xfFgxsOuVroouEMrQa6oto=; b=Tt/4X2r5NssYpwrrbCxq2Eq/+TjHQa4N/o4lkI9vMGYElZ0fecVEYKJ5FItkIw/joG 3J0Zff/v7HllNGvyTX0uxowrVff8R4i80dNfWnRX4Hvt0RykdgNMmtclpAAr4R/jJoZL p3Ix8LIA6rdF/5bz+r3Ys2ilb0Dx6HaSbEa+su6n9LSECBEVvSxAIfYFD1zPM3fmiMWa GttB2CgIY9M/WKL8CAvdLf11FRIbCJz5T++r0lJceVfjeLM8Di5bT0XXcyAJ/d6CmYFc 1vRJNbYJgHIxhh5hEieSsaCaIHk2odVw9JgUR/782Jgsrz+Kn93+h7JnH8pZVsHQCcw3 XsBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525412; x=1756130212; 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=qLOfpFL3Logct7nx+8SP8xfFgxsOuVroouEMrQa6oto=; b=hc7pTQPGYo+x+qHAj96aPHxzxan2qR1AyxkrZu1QXb1nOjklklVXNXBQlLqXPD6b9C pPZR/82+qU0+PgPUu3ius8uS3XBEzX8pWfMVJHCP9pPU4Sr1HrKBDWuscewx+Y1u4N2Q NhXg3DwIR0fWJHLDKZrRKLKWo6/EZWeGgCtNdTctFSP4uvINdjHDdufa85zYjZW0BFyj A8ZsyWxbtvK4mVD+3QYZjsoqO6wD0V6zImHwWKlDAjgUPEysp0BgI8y5ZmGpttgX7IPV H1SZTznY3waeWOAquqUXSQeu3wCxqKMji1gkXBBaAA/gNuMyNILDuZRVUU9ZnQM2fnEr k83A== X-Forwarded-Encrypted: i=1; AJvYcCUJCx0XYjlz+TLEalhzhfEUwDrA9z1y03DtidfNf+wuXxjFmx0QoDvSPqIOdaqmnZ3vIP1qOv18SQ==@vger.kernel.org, AJvYcCWKajd3plYsY807lDTIEcDhF6sMd3MOh5dihxlaWKRfZ5pBK0JIYzOnApVlxNqmfGtvJN1KsFng@vger.kernel.org, AJvYcCWPHnsiLLOIFRIorenZJ7V3KScnq3iiWeiVAb3heg8s5Y+FCNhMJPXe9Ck3V05zLABqTcG7b3/taZL2yU3K@vger.kernel.org X-Gm-Message-State: AOJu0Ywe0AYPorBjKBDQnoiJ0yYWXBSRJoY+dRJkzF79gFAhvBzQdQkJ SeWrSIE1QFDTiu2PgqeJCRTdLjBmcwnktbi28/g0zZoKQ5FprL/Umdvu X-Gm-Gg: ASbGncu+VSa65/nAPg8KqY0qdV7e4O6X5wIJVbHii/5RIjNXspySOExrlqyGZkr5olJ dqc60oq6VUW1+bjLuDTB8g1ZCJnoFEaWth7ctkARZIT+MTN8v+9Nz2Vh+NrsUqP57G6oa73YsT8 RCf6/akx+RQlIUWYb5Yl+ULqQjFhV+ZrXhSGcTXbHdPnlmIm9Hkj+WGFJplM4YJebz2AYJH5gUk 2NlpHtAiOwQDRoJBpawK+Vnsvse7r33CW+QktdOAQcxZJSBehraUaXQGr0278ZbDRorh+gYWKPl 0kPRIRYXqp/wjNkCwYBRTs2Zy/fdExnKXODK9ECF77got7dtQo7MylqnhVG/b7bJj/ht9lwJYBX JF5otT+NX6IeWFnMM+IzPspNzcEaFwodn2g== X-Google-Smtp-Source: AGHT+IE8BX+hBP+7NWUwcL6iS6tM5ciblIDuThyWtpUiHHefNpdVM1pmakzwRM43MuTYi1L7SQczbg== X-Received: by 2002:a05:600c:4ed0:b0:456:1146:5c01 with SMTP id 5b1f17b1804b1-45a1b6bde0bmr133335055e9.12.1755525411625; Mon, 18 Aug 2025 06:56:51 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.56.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:56: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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 12/23] net: allocate per-queue config structs and pass them thru the queue API Date: Mon, 18 Aug 2025 14:57:28 +0100 Message-ID: <9a2571a308e1a2ac600bc23db4911c03fc923d11.1755499376.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 d3d9b72ef313..48ff6f024e07 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -15824,7 +15824,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); @@ -15992,7 +15994,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 0178219f0db5..985c3403ec57 100644 --- a/drivers/net/netdevsim/netdev.c +++ b/drivers/net/netdevsim/netdev.c @@ -733,7 +733,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); @@ -782,7 +783,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 7041c8bd2a0f..a553a0f1f846 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 Sat Oct 4 09:38:04 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 C61E53375AB; Mon, 18 Aug 2025 13:56:55 +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=1755525417; cv=none; b=dtM2PBDIXRvers020WSMnjMVxreJ7JC8wm1hVAMt/gKiZLEejMX1WHcfgHZHsmHsXS+oZwa3nv+CuFOr7Jvl7RYhnXcWC3GKlFKlwGmtaj00XXlLXiY9Thu7YmALV9NGEpaKg7zDxYODW2nHfj8LXOtFNeZkI0ubFaEpKUYYUow= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525417; c=relaxed/simple; bh=T38WdbqlOu0L/d0CPuCwxUvdVJTQcYf+YLV3SNPIqIU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=OSRIZZ4wJryWUMjNBQ2jJf3xi1yjd9e+5zbSai6PWJXr8ZEc/GzEAG/2cpGQTYP7AH/6adTcGRQImUH3HQS/tCC34Fz2Ptl57i67ADnRI6Z+DJgxkyIbCJh6Wo+4wpGSfgjvszdTzt8Whjp2u+V62RyBwN0PIRlXmEQ/dPpxnxM= 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=cnFT/iPv; 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="cnFT/iPv" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-45a1b066b5eso20329855e9.1; Mon, 18 Aug 2025 06:56:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525414; x=1756130214; 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=y+9QuFvmE//f2/12kNYpsjakiZdwYBZ/xWTrgRI26g0=; b=cnFT/iPvE9+Vx8t53rNAjhoYON0QwhPfPxnNB0mAS1e4/WVjlH8b8vnKaQXcArekK3 ip6ENlu/bkEcMP2T+QvnQyjul6GHZUXtyW0SEa7q8kW/3T0nm2M/x68SFRfFhGrx0/Gy qdUQy2ML/ySyI44hXDu97GeC8UhtXIhWB0jI9biIEfiOmWJhJgPCMidPbAd8jj/N1wxt bOz3yGVu3YZdqLdZ+HytduduOR+IFBkUMnn2fw0oQ+BJWnKGa9zEZKglCPd09VbJVU2a Rq9Z2pe/JXK0cIA1jXul+SAfiAdVnaUelBOC+G+152n9MxQelJekuGGdVhXGH2GXv8DC B86A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525414; x=1756130214; 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=y+9QuFvmE//f2/12kNYpsjakiZdwYBZ/xWTrgRI26g0=; b=GgthWydUFMXFlJvAKWzy9AKW0BgORtE4704pZbLbhWTlQLHMJbbxWH7HK7qYaZ1MKJ hvd6bZLZEpAOvVgHgr8t9SVFvwFgQjDJrl8IcN1/wX/FtF8ON+4ni+gHal4Vo59RImdc VjfVsqDjYjg8l0D3Nkl4PeIBJrqo8ZuKYGn+AthefWDcRGoF/GXMDzszNKCesFBUwIsT CtoED6qpEtSNspL5VIkhwCw0xjAURYz4k8iG2giMHsBqS/xApismbIoz70jKQtheQrqa gwBoAv7GBcDnwweaRJcieD0SJ+xPkxEaxQ/tCq3Ze56e3zPBi4t8Plsjn7Bv8aVa7kZz 45lQ== X-Forwarded-Encrypted: i=1; AJvYcCU5PCoDoFLUHT0ZwSe4iwpCL5AxVHupPU2waR9HD0TxXGdHXUKz+/NSEAzxu8AZI+7CwMZO6PZhnKj7xFw2@vger.kernel.org, AJvYcCUI9GFG9xLBuxPtdS8gzqWb/1Qcwh0n4DNIw93COUYgJPu7Gf9MpqSq3YBafgja8ycjeghcolic@vger.kernel.org, AJvYcCW8ZH8IkcAOVXlxMkiLsm9fd61v9DQpITV3b3GVwKEk8j8i2D4dxQA3Ct6y/FftwgXiTVgpSnQMMg==@vger.kernel.org X-Gm-Message-State: AOJu0YyCPhVNrVk1leRTwSMuyiZK92sS6dy3YE4V19wGvfJPIha/hkem eDkHiKq7B8o/HPbtdEu6KWXJQ3BL0wBcj2zns/AszUDa2pBJAZ7BGXK6 X-Gm-Gg: ASbGncv+3GBep7KMVBhbXYBCBQOsfHG9avARdlGNfHHL3dfhwa5jFg80uQkhyIIcA1B 7PFQtH2rv/nNHNGBP99JEMgX/PjS8wa5oCqOmASsXimm9cuLiI/cwajUsiZBoPo52r7KgrQ8Tt9 Mu3Kq9u/a5GtnQWWkSch10le88ofZYKcxMrgb4p0fzzkATA7A6bkkvCQm8TByxmjgW4JFTr9Tt9 s9u0Qe0YV0lB3LJLiy5qoTrv8CBQHY8spVTI0WzvTuvQ4koLzV+FxoKRBjoshZwCRO4dV5pN3LA KhtuXRS6USMV58RKsv4cprsujXbWdx3Eb/sVzOpUEMSZXoDFv/iOh878rNMo/66OYuaE4W9f9pg B9fzN8ZBtIJKuMiKSV5kqek+3+365eVevHA== X-Google-Smtp-Source: AGHT+IGMMKADJ4Wfgv/Orzs7rhoSRaxE6IDC3PJ6RUVwcUkunnT0+U507mQcQxG6mnv0i6XdCxbwFQ== X-Received: by 2002:a05:600c:474a:b0:459:e025:8c5b with SMTP id 5b1f17b1804b1-45a21864826mr123943255e9.30.1755525413701; Mon, 18 Aug 2025 06:56:53 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.56.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:56:52 -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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 13/23] net: pass extack to netdev_rx_queue_restart() Date: Mon, 18 Aug 2025 14:57:29 +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 Pass extack to netdev_rx_queue_restart(). Subsequent change will need it. Signed-off-by: Jakub Kicinski Signed-off-by: Pavel Begunkov Reviewed-by: Mina Almasry --- 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 48ff6f024e07..4cb92267251d 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -11544,7 +11544,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 985c3403ec57..919088822159 100644 --- a/drivers/net/netdevsim/netdev.c +++ b/drivers/net/netdevsim/netdev.c @@ -869,7 +869,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 Sat Oct 4 09:38:04 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 42FCB3375C0; Mon, 18 Aug 2025 13:56: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=1755525419; cv=none; b=ltS86xEpX1UIiPO4wN1AZaLyj5rRo7OZAefalXyAQLuvexS6QqTFe4xhJoi8BtCfb+OP00EHodYoIuE2r/NiyR9UlJhY0/IVvtHREDabgwDUuHqFsprSGV7iLL6DjNk92OvMbMSiZ1QJpyPHMnK64LTN8WQ1eHZE3ush48Y3zwQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525419; c=relaxed/simple; bh=rItQ1FaDqGqniICF4r0l4EGOYimzKaifFQoIxkujB4U=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QEtlDYWKQNOETq8aDsKJApYb9sK+kp24Br30pe/R2uquFveWW+y8PhQa4jxSYL3sJkMsOmm05Bci3fIuP6ux4wATxqzr2XaSXP0IRLAqR7F2wgMLAfzahJQvo+y7Mj/xODeim0jcgHmK0jETlIm465njppCaH/I8SuBVmHz9jeA= 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=bXxYq9NG; 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="bXxYq9NG" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-45a1b0bde14so21627305e9.2; Mon, 18 Aug 2025 06:56:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525416; x=1756130216; 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=ZHaJLKiQ+hzCfw0tJkKNJaBQathEy1NNmqz8lEijMqM=; b=bXxYq9NGOa9Ms5mFDTo+ZDSIVYYqNME2VO98YctV3jS/bkTOe4tgmagT8lrqlssryD /v8+Atdq5S44wW29JoC6TKWD9fhS6CSLVUQKdbg/Lh2l6Vzf5im37zVNCkQzBw91LXGU /+lrKgACPTNdNCZhCYv/hiphhNr7wt15LBiQzmeUJ/i5dsuJSEussmQpj4gtwi17Jons zjQHf4U+nidnmITxQQ0FLF4nnj/7LtVwdVEWNv7z9uJnmzS/CsXP9zR0oxUhMzywS76u xynW/e0eSvSZglsqsH3NNIm/bRRtXTJvwHekhiZr6VZJDvpDKClTJSKorIBwzA1XeTNt 91pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525416; x=1756130216; 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=ZHaJLKiQ+hzCfw0tJkKNJaBQathEy1NNmqz8lEijMqM=; b=KxXEq0sGxPyZrdVNdVQX8Dpsq7HgX7mkgXwWmFDq4l72Nv1xCvXnaDCkOvECaN1Kcv N0yyK6ws/ETn/yJl3zfEf1svZf82kZKnMrBjkwEmwrsof+v0BXL8atuSlkJu4NSxgmAp iubHVoKbbyx+Xs0cceHey/7XOa9Aix2sVx1B5O6mabBV/b+aY0UI92QpJHmzei0HoX/o WPv4MYzQBcK7w+f4wnHkZmFcUJqaqp0Z7Xx2x07EKhMpqANATpI/4O7us3xDlqC19+Sh QbGNrGAHe4hr86KaLMO7MyRpBXHf7c8y+Wuy0gpRuwdG3AoYNhjKSS/WhgO9NVuFs1gv iArA== X-Forwarded-Encrypted: i=1; AJvYcCVSVR70puwO95FgnzDBPtoq2xxMMaPLDwVFYjEruw+TMo6TN6szq09apaR0Vde2PpP5twpwGuY1/A==@vger.kernel.org, AJvYcCXAIVhPv2jHiZ+UM7U8uZN0KwAUbr2xa3TN21bQh+mtnKzL7FaMoFxX/3CwF586t5upYFQYCKzN@vger.kernel.org, AJvYcCXcvxqyL19XaK2faNpMEkaYp2qPvhy6mHnW1/0osTKqa9lViGN73EabG4BRV5gdoHbGFdYFkCM8962e8RKE@vger.kernel.org X-Gm-Message-State: AOJu0YxNdY69QnzEcybDTZgZ7DOzrU+3WzveGrv8yrHzsxOyPsXOe2r6 9wrw8J5fKnZpBIvB44WLIPZszJwCH8tCAiafmuAO/Gjr27W4UGnd2ITp X-Gm-Gg: ASbGncvLIuVKwnNklT8B2qj1bi3Z5VoiWqEgpWGc695ZpHs2hFZ4qnXA6YD+2sRWW68 ZD369zogVPk4+kt3UDQpV5QeAm28BuCQXNiPNotEoScwlZXituqHwhlGVDkjd874d8cQdjRTvyV hEh4BBzPtJ3wVMZwcpy8XYC8MwY+FilMoXjkycjV54JEAe3fJoel2oIKWivEk4qhpKa2VHm72KK uR28el0EMKbr6TkbfihIIJS7PPi1KrEIZfQwLiVPmSneKO3/AovB2hytjPu4nwC7e9UpDGELh2M Mfx8qyoGjPAxFHUwfXGXqHb7sYroxmHxO/5Ppz/wf3/MwSruvg/FC4nN8e+jCSffDSfPYojxaKi NZ8uW/3QGJy5Mxi4DVh8O4wSDAk8OmAYGbw== X-Google-Smtp-Source: AGHT+IFQXMXIqOUwUve9nBMNNE61co037mpqKcoM8hBl9Y/qq6DfVe4ICkECU/EvqtYznHyoGvJlIA== X-Received: by 2002:a5d:64e7:0:b0:3b8:d7c7:62d7 with SMTP id ffacd0b85a97d-3bb66e16fecmr9143322f8f.16.1755525415494; Mon, 18 Aug 2025 06:56:55 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.56.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:56: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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 14/23] net: add queue config validation callback Date: Mon, 18 Aug 2025 14:57:30 +0100 Message-ID: <819d46e1354b0c7cc97945c6c7bde09f12df1da6.1755499376.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 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 a553a0f1f846..523d50e6f88d 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 Sat Oct 4 09:38:04 2025 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.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 5440433A012; Mon, 18 Aug 2025 13:56:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525421; cv=none; b=AE27MexG7zw8AWE8MuHBcvgtohMYqC54/pZ/n3BetTEdlWSuhneKELCcY70H8j4DcfFYliPsFxjsi4YWmY74M6TBb0Sd7l7tgsdhqi7Abo6mFv9x7uvSm87gLzlJIbgLHMhrJyGFMLEotpGOWIoLgIaLZkY0ahTrIJQ8M18rxLM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525421; c=relaxed/simple; bh=nD5PvWpNaGg+EB6vwWm37VJLhYDc4ljaynOHbbYJj1c=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=BYHYfExyHI4WRKxfDN9h0L1aBSADTmLeXUrUvMopvieYFQ5MdpCn+BPVnCTIejhGxgrUFq8lNvXHBSMLkysgjEdDZKShCT9a2u983/MQBNY1cy0avPIe4hb9KpuAPzGtLKoWLp/1CIzVRNnk4b+FCQURHt2GgdpHoHN+WI4isXc= 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=UUEjpK+o; arc=none smtp.client-ip=209.85.128.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="UUEjpK+o" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-45a1b001f55so17364685e9.0; Mon, 18 Aug 2025 06:56:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525418; x=1756130218; 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=yvfnwBAFQAn1RtN+NTtAWiTt1fyLuYlp8K6FvhJpuWs=; b=UUEjpK+owQqptdhRvN++aJCpLbn5mjIW2DmgZ7Bu8S5Xqi9FL1+/QBcCz7uR2bkI/D 070cZKitdV7mv29bbYH4W4Rx/qK4ZckhBI2+WsB5q2gJrICeBQAipKGvZabIf9/LW9cZ enCNGez1sG1jnKkVPlilnW057ZOGauLtJeuLdbTsTbtztlYAYUDB9zfnePW0kewr9Tyf gQyWoMsREGqBa0jJhCWt63d0NWywTqkJlqg6QQhejv5T4lVqYU7DZZbR22zgvsCOI0DP lbEuBFG9yhw1neDiqWGiHjV1V0y2JE6BK+J09kFDtgS1ZEgfMJXRESOdr9YZP89jcRAO sRZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525418; x=1756130218; 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=yvfnwBAFQAn1RtN+NTtAWiTt1fyLuYlp8K6FvhJpuWs=; b=babKgnRmnr8AXt0sYH2nEDlSr3bVe9nrrq8t/5nU/xWfzDkzJrzAd3mXR7DhXsdA5H TNKEh7AYuukgZa+CPL74xN4K+5s+r8TJQ5O13w4ewdpH9GMOcgQqfGx6NL8+13gpABWa fh2cFzmGKlr/YmtFyWmdG4OZJPAPkYNhkaro4NRw0l7Ialr2rp5S51jr3esh0fc3qiFv JcbFGVtn6uqp6NKFkK8Smzq1ZO9IVvDs643qgU4Zu02XzTuLa/5N23Aegtu3bFcI3RJ/ aN6xHyTi81ulVatufrregLeGbwsMjuH9Xzesz+q6AJ6kLDiobrWzsgxXg8e2wVf567d5 vm7Q== X-Forwarded-Encrypted: i=1; AJvYcCUVgwo/V15FJVG5cmoOYZIU+2FD+1VBXCZXKKkRg8Ua5DX0CCDB/1d6K3BerBkE3DRm5a4eJ6rV@vger.kernel.org, AJvYcCWIL+tSaIVlO3QFfRkOvpGL9uW55dae8I6uU2BFJ5fjbyXUjq7Q/ypjwabbrd4Qh1Rf5HpVjGVirA==@vger.kernel.org, AJvYcCWSb8Q7c5Xb/AsMPNiRy/zK+Kn/l9u7GeRvlLcqr6Ld4H1EFzKQL5bjcljoy8kl+xgEwdyi9iPh7+ABEy3a@vger.kernel.org X-Gm-Message-State: AOJu0Yxmm7wpD5yVr0ASp8UneuxHe4RBUcS2iWSnPliq7NKjs/2x4aR9 nqKuEujY28A44+jyB07bHF0cf6I6JsGdWyc/KUwaWULWqTesUpmlgOap X-Gm-Gg: ASbGncvY4bgzGC7mLiP+x79PHVSG+89LrnLKiQeKz9Hhl0vVAHc9aSJPPSazby/ZUbY dMa9iIu5M76BF/uGzIJCdxojdgMj7vFmyLneXhxRkXb3r+LocMxwfxOAhTbh97GD6KKFdKB5nF/ cFPNAd//ODWCQyXIlnS74eyoFSbjG6oc0ft04wyzOA8SWbWAduAhe8LrG3vMOsWDsdTiBzZWnC/ bzPG4WbNysMQoIsTGY+O15e2mnr9PpEG6GZ9tbLsuaqOXAkS3jc04e+q//AC1FQEzOe1TFxnSUh qczgNXu4nOohSYj+hlazPZ6Dc/euFQXFQ80NG+An3tGF/Uk696Ytjnh+8+gzOKguYbajTrE8WOh HKJR//hPSdcYHL1jLkpLXu9NodvnrCgdQjZrYlEQjTUkN X-Google-Smtp-Source: AGHT+IFNIPiylMCocGT3d+JBL2csDxP+x1EQN/XFfCq8zXqkDZf8i/3lXjmzrhHY+edquPemzKBMDw== X-Received: by 2002:a05:600c:4f83:b0:459:e370:d065 with SMTP id 5b1f17b1804b1-45a267524cfmr86314135e9.15.1755525417318; Mon, 18 Aug 2025 06:56:57 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.56.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:56: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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 15/23] eth: bnxt: always set the queue mgmt ops Date: Mon, 18 Aug 2025 14:57:31 +0100 Message-ID: <63cfaa6b723410ec24c1f7b865ca66fc94fe9cce.1755499376.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 Reviewed-by: Mina Almasry --- 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 4cb92267251d..467e8a0745e1 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -16131,6 +16131,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); @@ -16784,6 +16787,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 Sat Oct 4 09:38:04 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 43182340D9A; Mon, 18 Aug 2025 13:57:01 +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=1755525424; cv=none; b=k/pMyBqd0+yKdjrXbZqlN2dFUI159Y6CZpycNaqJOvLuMofiZH9+n1kjnlTbeo7mcnJaxff9NVp//Jr8UprLj32Wsy7/yZ49quAWGnR544MxjOkmZ4keugwNmcNh1h6KJ4IEqQbZ/8mulhNblDBfnq0D47VXLGvDB+bdHkPB/uo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525424; c=relaxed/simple; bh=lY0Qrq1H+EPCqEDi4+XqeYO3VVjeKdAMZr0t+Omrwts=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=TSmd3IW7KV/qK6UdmLi/pRSQg1Splgupe3vWqj/5OcUA6TFSLB2BpDKjCbbZzY6gKM+S0o6W9jy36Kp7zr8Y2KN56aRF4zjZzhefn1PPbl4ykk0R3ZpzKRw0j6RSJmEi+SBcgK6h638t7pWVR04feJB1KRPyNCK0OZplcJZ6EaI= 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=Z8QLG3dY; 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="Z8QLG3dY" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-45a1abf5466so22819105e9.0; Mon, 18 Aug 2025 06:57:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525420; x=1756130220; 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=tvg1vJQ+O6zEDtAE8YZCYjL+xN2NwlnlK3/hG1PRnhY=; b=Z8QLG3dYsk60Ph5dsIcRB1FKBv/KkI5XamYHIjsh1zBAFX98/iKN8kbLWkCn2FlybN v/mdYe9AwPZhCV8GKSYOFcZiNr/gckyDsOsxaPXU9RtdTxfy0ZF5sx9Hp3xMFuCX5MaB UFbRQBY3i1g31XEJkUeQk80QgXxDBUMfsZy8MscSvPMOVapkwXqDVkPGyuGiG/u7r8dt 6eAf050G6FjhQdt8llkFM6l/vONSpTp5D3P9bkyUmqKqDy5hikAUNmSnqW31QoW6SeBy 9mgNHPeh6xoN0TaapMJ1cZ7ApLP7ojf0tFMmPdf5b1/RllRzJj227/jqkqTOQ7jDeL+g Y8AA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525420; x=1756130220; 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=tvg1vJQ+O6zEDtAE8YZCYjL+xN2NwlnlK3/hG1PRnhY=; b=UCXqrXcl4tSB7NiXpmSU9bCL15nb/TbovSRb8r0B+cyG/fgEKOL4NqWpWtN32piQRW 1l875Z2kzbHaF9/8Ik7dAoO8V0Vj/1xscC8e3udlRueoU09Ey0VROH7IKBAV/5+Mph2j QYvpqPPV0s512ZHLM/Og/ZR289OLFPVaielV4nK5NgN5rcxsxfiohZkPt3f+pA1/TEGO BzldFx3JwpVqsWGX0o5PoyBN3sLA2cy1xycQonR2oWrI18baDhwOzxo/eEfD6ROz6lFC olcFqcALHjIX/jApyiNvhBqFqdEOHIYIVNQTWX5UJNzPqiZr9YyB4DAorO1WLdfQXsTP zQcg== X-Forwarded-Encrypted: i=1; AJvYcCVfcdR3R32/P4FiQB9qnUKOe96HxaS8zNEIw94SDC3ns2hFsTFDgbsxhpSb6QaGQEQRoz1Ue/+Y@vger.kernel.org, AJvYcCXD5Zdcv74BMJlbmYtjpkJab0eQU5T1IoSkzMEwXs7YekWevaEbYmPsGenVi4ikqcafk4CHTL0RMA==@vger.kernel.org, AJvYcCXpeC+ZOVCo8PVA+9XQs0EJgoGsNpIGN2/iJcOWTlP6PTTyZv8+3AE6I3her4VmIcTq9D+Zpj6poIsDN3BD@vger.kernel.org X-Gm-Message-State: AOJu0Yw8kzEqt5HnHpyYyekftnbcTjIzwG/HoLR6ucobNZujOvFLEo1n iUeZF5sJQJ7p72E5u6+zO7Abu7qNWb7RlUB1R2tAoCidTvIK8hkX/KpY X-Gm-Gg: ASbGncsDpC+B5uYiwfT1WMyXZGFDJVroWDUZe+ocOCpaJeQjeeTTveKuw8e7bRWuZzM MSTP2BOUhg6recejq9/pFrKkNNNDRUov3kDuMtUZxraf/n/iXiIHCWrbsEuNiV2k83RogiC2gRu XoPORiD/e8KRUgjMgVJQL+UMP7etGy8GWh7vRjgamux+MuPqJAgeMiF3MN/hhnaJjSMBc9LS4Iu jV0650oHNVpVHZUKXHxyfxq9uD8kbHED6Hpu55s0en+xYdTCW3phj+oIk6uKIDODgLEFfCqaACV i87JwBJkIVDV/8C6fc9BKQ54gAhZ4ALqsHuj2phMoGKw8W/w2PBt4kpokLg3MVsT2Xa/Hn0f+Yd RzWyMkQPArxyBy3Ovp2m3IGGUv0lqLxddSQ== X-Google-Smtp-Source: AGHT+IEhdJwyTb0psCx0dCePsW1lkL9mxpdlk8igTJeQ0UIVhFUiVipR9YBT8hBZou3BWSUdGDCxwA== X-Received: by 2002:a05:600c:1d87:b0:45a:2686:dda2 with SMTP id 5b1f17b1804b1-45a2686de7emr66591185e9.5.1755525420250; Mon, 18 Aug 2025 06:57:00 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.56.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:56: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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 16/23] eth: bnxt: store the rx buf size per queue Date: Mon, 18 Aug 2025 14:57:32 +0100 Message-ID: <397938dd32c6465250a137b55944f2ba46c6cc34.1755499376.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 Reviewed-by: Somnath Kotur --- 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 467e8a0745e1..50f663777843 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; @@ -1150,9 +1150,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; @@ -1184,7 +1184,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)) @@ -1198,7 +1198,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 @@ -1283,7 +1283,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 @@ -1308,7 +1308,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; @@ -1323,7 +1323,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); @@ -2276,8 +2276,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); @@ -3825,7 +3824,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.netdev =3D bp->dev; pp.dev =3D &bp->pdev->dev; @@ -4318,6 +4317,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; @@ -4477,7 +4478,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); @@ -7042,6 +7043,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]; @@ -7051,7 +7053,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); @@ -7065,6 +7067,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) { @@ -7121,7 +7124,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; @@ -7269,7 +7273,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 @@ -7289,7 +7293,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 @@ -7313,7 +7317,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); @@ -7328,7 +7332,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); @@ -7354,7 +7358,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 Sat Oct 4 09:38:04 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 EFC30340DA9; Mon, 18 Aug 2025 13:57:03 +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=1755525425; cv=none; b=PGYWS7eD4aey+Mgqqmmrbw+Qh2sxWNaIuEMZBTEegpYR3JsUSXmt9eZY6G8mrFq0bbdudG/kn87gQERCspXpd8X2NhRWJTn0ZJUf8uYXfIMI3ru8DMujtKXW843TR9WtTXP4fbFqw7wlhCB7IDyl6MMrBPB0JuA7cg2EcejbeGw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525425; c=relaxed/simple; bh=rc0YQ0x0wrZ7moGxHCzFDGmosQdHLH5aAifxKJ71OdI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=jhuSG2vKsdGJMA0ZPaBneKD3NpGHmuInnPcacY6gx5nGZcM9voR+P1+ci9+vXSxJLtP9Iuwl+nQSclVSWf0NEmGpL3kNr1heDEczVZ+8nhOMJvfUxnzoDzUZ4xLqeuzdWwQKm0ecowhos9YWvMLNyQGuCSmV58r9WSNQrvXg6Sg= 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=edzym3n6; 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="edzym3n6" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-45a1b05a49cso30147945e9.1; Mon, 18 Aug 2025 06:57:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525422; x=1756130222; 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=iyCEFBKqEjH0pemMHaxucZCjRqMSn8Hg4d1cOb7O5ag=; b=edzym3n63i43paiTYhxHTbvLfEkGjVmmNBhM/ATA6znUD8Y6d5uV4ZS/IKl25BLoww SkQoGFiTPxWLrqND0b9TtWiQpZMk+M89qSCu2tkCyCrBqgj3liskCIsYe1yZzka6kQXZ yH9EQt7aCf6LrmANWqh3KSzF4X+XzIXTJ67EgET7H6FnQGhZoOrQp62dVTMmIvqluzga ueTP6lgGBIB8+kXEvrubcFU4Nx3RIzQS4SwN4WDjQ79XBLkzhjsldHCROWaS4kTgvvQs GfN+nP2cWCdU4v+ATQkoLVzhWVZq3qK011gKM5Qj1aozc3/PoLmf6RIbJrxpWpFv9eSg KM+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525422; x=1756130222; 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=iyCEFBKqEjH0pemMHaxucZCjRqMSn8Hg4d1cOb7O5ag=; b=IN51Kyq5yyl+UoXn2XLYGe2a7+gXScB7QqFhxUef7Vla+8Rwt4HBXgL9DndBq/xG9J x/FSNCVvbt4nKKmBa+yonX+QJFvtvE2Lg3br561DcaYIHAx/6BCkL5WPel7ASiSnDzZQ Qgi13oHwzXj5shpLGn9qk1Vw70QPgCgphrNa3aO8dT+M7A/2moqIM0ZJin5J2Fy+d/Fn 3OBGGZdc2b/HcKLT3OvODIzj53btkTdvb+6Djxly6HpOXN4MOormF9XZxUGvJb+XLMdb UjacTe+w6Q9ZlxHP9uVuQq3cYMTqxCrenhrwpnz9dgOLeyBbm/4MEwtUUrBwTPkjmkyc ho1A== X-Forwarded-Encrypted: i=1; AJvYcCWyXkr26R1eX4g7ybCQlaYRV+g0y8XajPug5YriC9cgC1ggPzE/W0Hc5z50Xxu8xXVaVZpzk84l0E9lA26f@vger.kernel.org, AJvYcCXQs4bvIkqUcDaxKy7TORWtP87e61l0yDQhGKawFVJryMt89K7bw9qhFlFmsrz+yBmjvh32xHXy@vger.kernel.org, AJvYcCXiBfGJmoh63+2xJKjgWGJ9yVlIJOl4OmU4nZ0SeIc/7Q49GmLvb2d7bLPS0Vf7AEsDdBf0+007DQ==@vger.kernel.org X-Gm-Message-State: AOJu0Yy2V0zs5lXgMo+0yhWM2IYQV7ZwKGjYgTW1DYO/04nuZiVp0zil +1UOU9pVp5zrFY7F9XmTfub3++LVwzX5zy6rkZJGFc6l8s9lH+aOBgRR X-Gm-Gg: ASbGnctfq/BNQdBD1Cr5tAeIf/7LIoZV7JVjWCnEdfy+W4BmG0Xl+37p8JfglbHhyRN uJlDrSVzWs8JEF5txLnyccbsA18wBoga2I9oKdOTckZra8mVZrZW87E1oFp95EYDyQh1+3lERpA ZQ3olRQnGyTO3atuW1hHWbnsWY70UWBrAWyQquywm1xmtOsT9paLfnFxIFxcWbpz5Wv9a6G8GQQ YNx/W0BWjvn5aOv3PrK/PjoSWIciH6RY8mZQRYKc4MghXF1a1zVneUsH5Qtn5FqZZxb1bmOsoZB 04mCw2aahRyljXohHBX+kX0dl5xXsd49h+2ELHqBEc5uZPh75NAHPshmby/HuluzZxv7sC1BYv/ MsrjK2JYOOFLdzNUZqpDxrY0ZxavUOELasaZJETdB7jVV X-Google-Smtp-Source: AGHT+IGLLkv16swk4fx9aCVvfU1SOUGYfOcKy/YNUc2y0tepDLomC4H05wxHLBOQJ8YxMzryQZamog== X-Received: by 2002:a05:600c:1389:b0:441:b698:3431 with SMTP id 5b1f17b1804b1-45a2185e6d6mr70529725e9.28.1755525422015; Mon, 18 Aug 2025 06:57:02 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.57.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:57:01 -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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 17/23] eth: bnxt: adjust the fill level of agg queues with larger buffers Date: Mon, 18 Aug 2025 14:57:33 +0100 Message-ID: <311f2a7b63a9ca20b0d0944657828093d05a5116.1755499376.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 | 28 +++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethern= et/broadcom/bnxt/bnxt.c index 50f663777843..b47b95631a33 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -3811,16 +3811,34 @@ static void bnxt_free_rx_rings(struct bnxt *bp) } } =20 +static int bnxt_rx_agg_ring_fill_level(struct bnxt *bp, + struct bnxt_rx_ring_info *rxr) +{ + /* User may have chosen larger than default rx_page_size, + * we keep the ring sizes uniform and also want uniform amount + * of bytes consumed per ring, so cap how much of the rings we fill. + */ + int fill_level =3D bp->rx_agg_ring_size; + + if (rxr->rx_page_size > 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; + unsigned int agg_size_fac =3D rxr->rx_page_size / BNXT_RX_PAGE_SIZE; const unsigned int rx_size_fac =3D PAGE_SIZE / SZ_4K; struct page_pool_params pp =3D { 0 }; struct page_pool *pool; =20 - pp.pool_size =3D bp->rx_agg_ring_size / agg_size_fac; + if (WARN_ON_ONCE(agg_size_fac =3D=3D 0)) + agg_size_fac =3D 1; + + pp.pool_size =3D bnxt_rx_agg_ring_fill_level(bp, rxr) / agg_size_fac; if (BNXT_RX_PAGE_MODE(bp)) pp.pool_size +=3D bp->rx_ring_size / rx_size_fac; =20 @@ -4396,11 +4414,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 Sat Oct 4 09:38:04 2025 Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C5B07342C90; Mon, 18 Aug 2025 13:57:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525428; cv=none; b=u8Yk9Y8TGiGjn3y0z+jHnSZQXM4B2QdFppj8Q7bsluWgQS7CO00GiacOorxLAVxBARq/q/XODl2jHWPfnpP+D2dBkzWsL0nu6NvzDp5V6ojQJwAN47FIrNKEE9N0uQ9KvwzCzDeYf1D4UXOnL8XbqJ0jXhYJe5xKs8KYU2jxo8Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525428; c=relaxed/simple; bh=dKemawYs6tmRpVp4P/ZJ5e8Z9CA9cpAAwsABO80XNsY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=suUtB4exHXLChZmHzBz82mLHxFWfvLzvENpr0hN2coZK8cJ0ipT4R3LLU1Tc0hE17Rda2LC4+oqanrSP71ENCDPoqyjbtM2sq5AcVNV5j92Rp8HPVluOjc5/XRuuKot2npFVix6PSpMKTx+9I8gfnFO8fy/mgFJlUbFgUYEmYzk= 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=RX76MQ5o; arc=none smtp.client-ip=209.85.128.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="RX76MQ5o" Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-45a1b0b2d21so19554895e9.2; Mon, 18 Aug 2025 06:57:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525424; x=1756130224; 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=RX76MQ5op6qhucjBA+8vIsbFL1GhMdl/yx+WecySJ5bpWzTIGO+5IE/N35QCCQDZ2u l6bDIqqqAYS+uQtXSxW6Y9ixdZJzn5PfLpm8xXr7uzsXKLzNZ1AQX8K0FR8wkeMvn5OJ eTFAaPLyGPZhimxg4hrUFNhexlw81172aiU9G0jUrBVkSQxff6MAC/+xyALKwXz2N6UA US/ABL6iOrLG7oG4EnySBSNspogJomWdblR3wE8iIQ+xKkJRC9jrXkIAkR7VCeuc//Q6 xdpP7IJRiTLNKTmw+kv1RTUpWxPIUGDOi0oHNyO/1YeX9L+E1Wo0GHwM4FUufrbBc+hg QkPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525424; x=1756130224; 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=QXY5zo46JxMcZsRaV9JrCyTabg2MqdGlqVE1UPTACeiOeVJRamp3uGpZw96jXmzQsj I8anfZt2+KZLHI0ny4Is9UOPD/HecTtTobiLAdL6hoknhFqtEZQ8+dDOVJmPWv6+bWIJ /ra9URHEH2K46Mk0ToKEkNmtBBYKirlRHoE8AJmhCwUzdCTHigCmxzO358spNUOvUtf8 IardHoFNAtEuQGRQ4x90h/r7NZGwe6f00g7oSgQtx/S93PI3RtRNhUnJQPEBtxo9QlIj V55i/jOaqYlKVKIO+C28exI7ZFb1pg/L710OhEQc1r9K3ru6wtkWw8+3t+KTEyhG0br7 YHbg== X-Forwarded-Encrypted: i=1; AJvYcCUnLbZ3Zg94nvhMz93h27h1qOHB2PeH6Bnmb+xpOwB9zTeWT7clEKS0w5EtlEi4b3FpHRw77heU@vger.kernel.org, AJvYcCV6aq+Joifshz/QQYjsUKGmWOrgcGeREU+Z8g4upeguT6FCJ9TIHvs0so5Riv8gZBp9opqnD4nuNw==@vger.kernel.org, AJvYcCXGJHGIl5LzeEjklvpeK2EmQdpFrrkJtidVU8PtH0PHeR237DelWvjTHJJYe9nIA7DE+U4F3tyS5vrGVs8h@vger.kernel.org X-Gm-Message-State: AOJu0YzpBKEBAATk/Ar7CEPKcTCdmjBacKQXnAkQrPDRRLQsh7z0e++I 5qgpOGrsypvOkEDtStFZBQpgoqYJMRVh3o2AdZoCkmzPpfnwejMpuox6 X-Gm-Gg: ASbGnctF/ulqM2SL5fY6P6NTuQzWwhe0GjMf+73sTLsUpl3W5g4ww6OeTdM/Bzso4Y3 CmQvtP9to3R7cvAxWGp7vN+LkaR4ryFgFiZY7TsFhyAhJiBjRarvfisjauSprEJ8Hkwx3GR2fiS 7MHpcjqW2gQcvS9BeaVHXDszMI5eSJ5rWPv02u1bxl9d9dt3rnZT45+itPmvcjexX1UKdSsv2Zx 8WLKBszaulDmQEOMKoW8lXF0KHIcrhjRfR4Xuee0yElTqyToDaa2CPXlqP+DhO4svchTgr9Gtgt SPB2axnlymtt8IWbYGywk3ja8c3echCGQtC1TQ81Aogvcpw67xF8dMYANFuQ5UGR7vZb/2REYPB GzgAqjrnhpFdIB0VUGSP7LiVk1iK7wRsyAQ== X-Google-Smtp-Source: AGHT+IHFpkjBoZA6K71P9o/tTFhDYmXJ8FdMdG6nqViRdJyxe78EWhY6+Vtlg9ACTTfyO/RIFIM8xw== X-Received: by 2002:a05:600c:4ecd:b0:456:1846:6566 with SMTP id 5b1f17b1804b1-45a218573e1mr99589145e9.29.1755525423813; Mon, 18 Aug 2025 06:57:03 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.57.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:57:02 -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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 18/23] netdev: add support for setting rx-buf-len per queue Date: Mon, 18 Aug 2025 14:57:34 +0100 Message-ID: <5273e2bf83c1f22a6448363b5a51ec85854f03d6.1755499376.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 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 Sat Oct 4 09:38:04 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 523BB342CA8; Mon, 18 Aug 2025 13:57:07 +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=1755525428; cv=none; b=N5RU2nQhViW4uWCkRveIQ49rdY6huNjOaIH1TOZmVzIXdvR2kNzcXhneXmHSqXttJEiKrlp0slJyoUHfmHCuOsAVjWvlR2itm6qmXJBO4kE8u3wBSRYyvzP05lbKO6wMQFKv+Rpjlk3rr1SugMpWD+1pF89Ttmryi9HphiLoc+8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525428; c=relaxed/simple; bh=mYVcN2+csBFSxHU70gBvzCskHp+H0qUc9gIK7qA6Aa8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=bKwT5Pcf2ScfRe/K8zEKxxNY/96J4rwrG38geaHb4+7+jjiaLSV4/7bjgTAoYrf5qxAKvDn5+AvTVbWBJYYU4BABaE7+/27Cew3Erl+7CGkgMdJ4KvYxRaeeUDhFdmhfmP7X6bP07V+wOQAa2v/EyZDAN7/l75wKFiXOVeU5gDE= 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=IQFPKWmd; 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="IQFPKWmd" Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-45a286135c8so7919645e9.0; Mon, 18 Aug 2025 06:57:07 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525426; x=1756130226; 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=Sa32ZzLQriCKbCG36ZxiaTopjAbCU2hYd913+NJy9Lo=; b=IQFPKWmdVU76tMEjA0nDhPelBlgawEJjGnsxy5PaFiZl1kqTuk6CaHj2LDufQsYqV+ 4celp01SB/JnCwOsUZP6UvyaaaD2V2O9CU5QoGVX2NlNTavDYzjN6OeLL0aGOIbD110l lSaOSPdSNn+y8rf7ibGGvSAeYCI6/Lj2nbxQpKZQy5dQhhnj6UpQQaNJuJhVkiJmvWqN l25z+303ANYJBimQL+tfSWjbjXd2bLpZSDiK/vzdER+m6f4c/q6QK/gSwVfJ9b2O90U9 g0ZwCy/iD7mlfecP8MR9wesgWw0BkfcLpUMIEvdZR1I+smtb2zk2C54sGiMmJX5s28BV /Y5w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525426; x=1756130226; 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=Sa32ZzLQriCKbCG36ZxiaTopjAbCU2hYd913+NJy9Lo=; b=OX847ZM/r2dodwjc4nHZ//MwLZLJjiWVDHxxmQzgOsCONfx7LKw1idMMKIOE59Z/sx Y3yxLk9JUbkbtDfFQo9vZuy8MldXqxClvMq33vhioB0Ak4jOV/M1c7sLxj/SFRYwX6ms 3bytmz5goyFg6sWGH6IocK/xFNgsPFK1xx1RGc30KcevcZ1f5xcE8UiBx/fjYVMF1sZE kjOOCVLhWwW+BHfYoj6XznfxbDJjsshjc6d3HEYQp8MBjwEiTOFlJ2+c8ef/RAg046Qc ioAlneHx7Mo3u9CZ5WlsLckImGIGetYs/DQGUDdNY0WtoJgBJsy9HF/tTaDydwauP2xv E/xQ== X-Forwarded-Encrypted: i=1; AJvYcCUNEcJq8/GfSk0I7LhZW8f3M93F+ly3Fz/+gbSI3agSI5D90r/amv4XeV2sdcTIdg827XkW+dvw@vger.kernel.org, AJvYcCVIR2ligEJd6bzGT56pv9S4YlM0nkTc9JrNr7p1nPHAPJGxdVcMIg0HvdPm2RR+ObvCDH65OsdWh5NWCC0x@vger.kernel.org, AJvYcCWFphlCPCCCJD7fkUBZNfbbTzd2IW3cpKRxKEfNQHNcwEh6uXasmRIJ+UjTOPJgUp4uNlubPj9F2A==@vger.kernel.org X-Gm-Message-State: AOJu0YxBUMg2SsDpCiFGYszeYY1WraVUROUcVTSbAz509VNieIrRXT2X h5pT46/rrbGNaq3zPOkqIXSODOvgQF8uD+PNPwsnsuITuO+Nxkoi4gLw X-Gm-Gg: ASbGncu/lWlVAhURCG6VaDceXEtBpppSXuoKWwae6AEVMb8pkWgjj1E+f8CCQrZ8QWx Ntr/v9ET9m6CdE9BuvuaNefApxSBtj2xWlXH5ESRn4twZ0HJXhQzFoOKH5OOP3EyuCfXOcJV3NR zE8hlq1bk8GtqpO3+ex8P/g3nfYhOwIc5dJoz4B4OVD2ftWgASIPk/JIzvU72KgqEqNMuiKZLpd exmWwoVBNhbfTTrYcuYPPazBIEFHKHjIeuBiw4XqHB1Pk1NDzI9zHftbkbgr6/BfzfM1RM6HbxR HGMtQcvlRI6BdST3GWJeKjqdngDM8seP3/Btq2DXowPgVU1LhInG6gVZ9cjid5ymSaOlBIN//iq dJJU7zYIIxAXUThld+kIB2SKwsL4s1OAZGQ== X-Google-Smtp-Source: AGHT+IGxje0boceoHSgbUFO9JG94L54W4nuJRwC7Np/Ze6s0syJcX+0dN1vsh13l4qdUSMafyjvz0Q== X-Received: by 2002:a05:600c:3006:b0:459:db88:c4ca with SMTP id 5b1f17b1804b1-45a1b65c7c9mr102367055e9.3.1755525425519; Mon, 18 Aug 2025 06:57:05 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.57.03 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:57:04 -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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 19/23] net: wipe the setting of deactived queues Date: Mon, 18 Aug 2025 14:57:35 +0100 Message-ID: <0ac4e47001e1e7adea755a3c45552079104549b9.1755499376.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 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 Reviewed-by: Mina Almasry --- 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 7cd4e5eab441..457ba1d111e4 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 523d50e6f88d..c1cc54e38fe4 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 Sat Oct 4 09:38:04 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 47AB4340D9A; Mon, 18 Aug 2025 13:57:09 +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=1755525432; cv=none; b=CSnj9D5G+G8BcWU9R6CBLXsSafV3Pwlap2hLFla2nesaZbVKpZTEMV4s/7jozfMg3Sqf00Gbh8zs0CEjgsBFMgF4HI/Uz2WI7Nqv6l3ZKj04FNo6sIE8i6q5VBzzo86MyYP2Ub0nh88TPhMix6MZy1Xmnj/t18GZXvPjsx5yBgE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525432; c=relaxed/simple; bh=RReO56BatJj7rMlajRFlgYtUF9/vCtVpo9sSe60qrVU=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ONORBG/4DNIAuHYKlLpbqV1Di/tzt6oeUdQVU+r0vc4XlRTQxZBM639bPEMJCtk1opejEmmxvY6vnIZvF+DtMcLJEIW+iRVnfeZlK39rkOGVrroOgBPWRmzlsXRs07L5ZnS4zDRv1bbwupAOmcxg/f1LZT+1OSXOhVjAFXKVo/o= 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=hyk+YxBg; 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="hyk+YxBg" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-45a286135c8so7919905e9.0; Mon, 18 Aug 2025 06:57:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525428; x=1756130228; 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=Z25S50YCNKWhUSA7z3uNSqaKR5tWMv56D/QyK+4pnsk=; b=hyk+YxBgicVi+HqJ7Kaj8xshqSl6lkY8VY24uuyTzfzYbj8ZsTSndY2Oo13BoYxNxC YSfEI95OnA1x3y7acDK//qLQITePc19WFDQ2KqLzE1/pvWvmH/UmrI6WanELtjmYqu7v yxMolsxaKhZJof/NOE4B7aGcFYLWG7DMsSn6SK3v3h5Sb0riuDFC51fmoa0Lf3rN0QOm YTGC/dJDfgMLpI6I5lw+NyJmqBuwmFfKo6hv1lFJM24Zoq74T+BHoe+ncEAxKHWsQe9H sWUoGbdBsaHNJkyBTyiPW2/zNsahvS0gFrc+NqENy9F7fYuEpmECrDG3hKp/GF9DwiQ6 +HhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525428; x=1756130228; 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=Z25S50YCNKWhUSA7z3uNSqaKR5tWMv56D/QyK+4pnsk=; b=xHkn3ZHJAdsbg8gCr14tcWDWg+tlYCnI69WjBw/PRTFHhlTt9fyRfdmobLhmDb04S+ 6OcO3pcjjZCVU+P7CS6IOhL04FIMxAzsSmteSWNlu9u+dHRLGfeNP4hmdXY7TLmfuwb5 1r42emS9KI8NgPQ2asPMRvmAVjTK9e14LZvM5itB7GRCJ7Wwq2mPL8tux7JDLzM8vEvq 7GILsDtvVNAMgFyZVnX9pZ+vpGntL4pk4p0orPzxX43SWHkpVZyg1vHOPya35hWTZNHl 1ik/mlsZO8kSS4OfKpRnTs4UhM8GyQNND4Z71uNTDUnEr2J+pgxf+LrMQGbs6WSUHY61 i5ow== X-Forwarded-Encrypted: i=1; AJvYcCULsSc5eXqzYjUJVIU/wT0gFb1NcqbYEFr5Q1vRMH8UklcocJI6t9GKoIKCc4A1z+KVWyVlY9PjCpzDraiN@vger.kernel.org, AJvYcCWOdlW4rpwOMVvrmu+6ym5RnIgmDFd335fk0Kl92aLKP5r5CRrTFkJhKblO9X/QkwgtQAnZK5lE@vger.kernel.org, AJvYcCXhpoD6Uo5vWX9hUZLDM/TiP5/A/B57/FNUkuy4lgZbO8aqSWjTpIFIGOQQDp+W5qUxp56cVMps9g==@vger.kernel.org X-Gm-Message-State: AOJu0Yyx/ITXL/3LpJ+oLxWvwphSgrZhb/OYm4ibH8hVesttLI3jFXhV wDWETqoB5REWREFsNax7rv3oEEX2/mzJZF3gzwPhBQ7NBIKg2m0hvrQS X-Gm-Gg: ASbGncvSUUgUyaAwlh9aWvWJ2YyKyY9Hw3R8+LGOjv+stFp7X/NDCrlzQgiwgeLgmuH ihzKNwieZ4r8ByLE5CIeS8AYkTG/kCVtmTGBaiLk6O9thavf8dGJ/GdFERMMnnO8PkCnfdnFOx1 3apkVtNuoCCts8dgkCsyN5jIYozAT4k3dDymihiUjotU2082srtdAl7CF4I1A3Cr1kn73aFApve oDGZqE3g9Bp2GCuG8K5AhL9FSjmJBmmYu5jtaz//fhClvNBPVlhUVWBdGSACfyZEAQDBzpDOT1P MtY/Q6x9mxVCnCR5NxvWvQQuJMt0hE1FssRTHahYnfk+kSfgzarXgXY5vNdAFjFD3zJ/e0i0vMI SnZetWlnnB9pBhn8MItOzAKDLWQzQcE4nww== X-Google-Smtp-Source: AGHT+IG7pX8UX1OSGUSdBOtglakEOCMLFNhwxEIKiHPZz3/EGTvhoNq5cxEvUolV5KjbDogZrOJmiw== X-Received: by 2002:a05:600c:4687:b0:458:bade:72c5 with SMTP id 5b1f17b1804b1-45a21809208mr88670935e9.8.1755525428352; Mon, 18 Aug 2025 06:57:08 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.57.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:57: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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 20/23] eth: bnxt: use queue op config validate Date: Mon, 18 Aug 2025 14:57:36 +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 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 b47b95631a33..b02205f1f010 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -16147,8 +16147,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, @@ -16156,6 +16194,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 Sat Oct 4 09:38:04 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 CBA1234572A; Mon, 18 Aug 2025 13:57:11 +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=1755525433; cv=none; b=On/5+jUnbfmyAVjicxTSGOmZ2/9PDfbdIycuFpfn9HXOVE+ktMET5SeO47oVJQ8w3z1BpRI9dPplx4+ARK4/WoER1NtphfwXEgXZAV1VuVjh9jquoIqSsHbpy7YUrGbD6fc3zYsLSwAkJ4P+4rOJoBPfkSvYwYAmTvHDmMzV9DM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525433; c=relaxed/simple; bh=g+U/dDRMJlpuZ+vOqxuN3mbpStlCbyAdnbyJxluqbQo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Zh/K/r3FynS5bFlFa0aEFW4agDdvFOjvx7mX2yrCwCrX2xJonsMxe7dhS6OYy8nzAZfJ2t/itPk/UHHVGaof+PdlZrFabgnZ/Vo4MKPaXQawlpV5GxrDLWztVOWb2BZYPa47AHOomWj0AY4DLi4+IR4i6q4BGRvW/mPvuKvFVEI= 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=Oxv5MXoK; 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="Oxv5MXoK" Received: by mail-wm1-f48.google.com with SMTP id 5b1f17b1804b1-45a1b0cbbbaso28794975e9.3; Mon, 18 Aug 2025 06:57:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525430; x=1756130230; 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=MakgO4vr4JjhkQ2lJFO6co8+2+DfEo312cNgG79Z1GI=; b=Oxv5MXoKrUEpdgzn5rXp2dPc4kY9eK+f/0qXRTqYy9obj8WiuW5mpKDYANA5n7y3yb WMlFyJaY5VighVUfSy5eDXCRnACBKAHgjQ1lfdPcPOUZ3vNODxKGSYVtJsGIDC3s/UzO 5jhI9O6kMcLHROvncfenY1i2GI6RZ4xNwpc5QYp7on039wEEhn3IkuwA4vhWs5rDEIp4 YqEyTnu4OPcnBGgF2NBvup/36v6CE2BKT2laVDc70UwnLhZC+R9ymiMY2by85ApUBs4J oZcZ6ehzoHDvAVAnI6TiZaAIdIPNoPzuIRms7GDaE2GlYSAV5Pk9R/HzQhHFLFuhbvq7 BJfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525430; x=1756130230; 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=MakgO4vr4JjhkQ2lJFO6co8+2+DfEo312cNgG79Z1GI=; b=kFMM5uIiTZzrub7aXfEiZ68q3KfT6VCG4ijsiM5JoMpHKEpaj6rZmuMCAcCnU19bSC 9/3jxUlwBLnEZTmQNafwpw8svpjrAOOG5s2yipS++G4QfvGOaYphGcw72FxgwGecQOXK zO/sbA3nYt/vForZ+U/nXPK//Wl7xPBAMJ6qEhpTVdfJ5N3BU7uv2YM8ElJi/GPlUpo0 KVDlMj4jzlEZKic8YgtkkhH93crQmVdBsECMatrIQSZxWEJRUuf4KbpeNu9Pl/WwJACn xRqmn1pdju4LEwBhzmYb6A/zFU/qk6caGF6VERbyz2m6I8OU8CSaN7kafzDyHTjix8H/ 9LZA== X-Forwarded-Encrypted: i=1; AJvYcCUQCbw68+KDFDuniNmMnienR9vd3qbQ09mhJUtC+lDznN+trcRjT92v2Wj1AFt7cwP4JjvGru+tSQ==@vger.kernel.org, AJvYcCVWyeGRidosj8q1gRxsQoaLjFmXVUw3WHuJKCBllVNCCDiwgITi4MLceULSaA6++xEoFy8XHUeWZx5uX/s6@vger.kernel.org, AJvYcCWgZBOfKhVpnK7uEq06nE4C36yoUesFJEr/AmkDZsdzb0FB/L2qMxCj8GxW7pHCRKJALEWQiJir@vger.kernel.org X-Gm-Message-State: AOJu0Yxb+B8Sx/12cOf1KOc3/bSzVNVjbw2X1svK09X4zPlyztvWFvY3 jGin+uL0Z4AJeWsxhZfYomWjQZ0w5W5r/yT6lHDWT+eZszGvL+MedJTC X-Gm-Gg: ASbGnctRSB9FZd5/WnslqKUfsbilclei6dIj+LM3qJdGpJ5Hb7ZW8fj13R/4qvYDUJS W/wJZnNgem1Xmbk8iveN5AUqBxsh1MbO01sUuhYmRld2BBSW/4CiKH9g2BvO25xGWNyl9GXi3kB enOq9lbTli5HESNzvx1rN+KdlIZaxbBnCUxS9sCp1wbEo/T87u/pQ/cKeC9qsAWLZ3ajmBTmNUa 69Ad39EzXYDLmDGEBZIE+47JOhFsKFeoZWdU7EUl7n9szCagvM/qlT0imD4z7Qc6hgp6sB/mQKn IBDvX7QhF/wMrTE/pEYq4zlwJ0HNv3rOs2vsrUjli7/gkXGW3hULd6yp4CGdUQp3aZR8GNLjMmf Zn27FXnZjbbFZcVVtNbvF4U+8axMYM7gGELyYZxzzgHXS X-Google-Smtp-Source: AGHT+IGuIwzsKruUx00S6MuPZZ8wEipmbrU34csOmvQGufg9/2Z1MNN5TYK/0noWD38o0a09A5dqvA== X-Received: by 2002:a05:600c:1c9d:b0:459:da76:d7aa with SMTP id 5b1f17b1804b1-45a2185d715mr86983485e9.25.1755525430037; Mon, 18 Aug 2025 06:57:10 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.57.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:57: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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 21/23] eth: bnxt: support per queue configuration of rx-buf-len Date: Mon, 18 Aug 2025 14:57:37 +0100 Message-ID: <4468e2a3f887f687050ff9cc602415ecbb541b8f.1755499376.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 b02205f1f010..5490f956f577 100644 --- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c +++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c @@ -4313,6 +4313,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; @@ -4335,7 +4336,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; @@ -15870,6 +15872,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); @@ -15976,6 +15979,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); @@ -16183,6 +16188,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 Sat Oct 4 09:38:04 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 D069934575B; Mon, 18 Aug 2025 13:57:13 +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=1755525435; cv=none; b=ZDaH6Cjnkw4YPGo641JtDqnt5BB+jCwZcG6WczpuwYC54yBZ/7ObMfWtplJKrGwMaiYFjsAV/6T1Rxer/7qb22wsjZIpgUZ/KPt5nsWz7mpIoJDuQxfRnLFuSpZawQYhsfgxlFDICwAfih0ircEg7T++2cU2w7E8eLmT7u6bqAk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525435; c=relaxed/simple; bh=kvdcNejWK/mOk04H688uEbaA/cC9mhfBNv/gUTpRf6E=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=UmBTAn5QA4+I8GaoMMzgxmggjX4h6U2apaYUZ0XEuxYhrqHjhHBEpOIfwAqJZJaMAd+fkPTnS2ejA4W5vwTMxtLpu/1jO93jdRrqrUUV71wuP0bn0j3XbOclfAYfoKhZO1Sp3gKRSpNu1kj0+xtCygCQRz8OnyKaFPzml6UmtK4= 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=WIdky3NO; 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="WIdky3NO" Received: by mail-wr1-f53.google.com with SMTP id ffacd0b85a97d-3b9e4148134so2044027f8f.2; Mon, 18 Aug 2025 06:57:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525432; x=1756130232; 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=8P7N+yGyf3ZHVe543mLefJ6kNjA/6azjCaZxnGN+ZPM=; b=WIdky3NONvYBlGtlBbIBgLKYrY9LsPUTI8k+SBuHWqs9JFozSr6oKzd1ESOrhX5rLA tNykC3vaN0gLqqvsCkE+2au8OjVSlVmlbaO0edI+jS2ghlqPxoWnlajtT6HAhlkg97ok aDQFmKHB7q09M8ChhhJlqlx7Bwx5MmtDccyIH6U9gXo5ckrBOLPN/CLJzAeNdslG22EK NqjMr4av/hB2IRuGncgkoGnK8B+nUS3BU/0ywipbJu0dp8RuacBD7GHyMcAvXr3EHfUn 7Wl1IW+J6TvrNCkWiU4P1+DqJF3qj56GxHzsNheKwfnJlP+v0OcV0rYwu074dzC/mU+x I6ZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525432; x=1756130232; 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=8P7N+yGyf3ZHVe543mLefJ6kNjA/6azjCaZxnGN+ZPM=; b=b4hjcAYLMIe9LrQ3KYuUAF+EJFlAokNIiQC5OYNRe+3ognhIx1SsTZWsqVvXHhtY6n qQvhPWcestMWKUr+zRwKiovSXDyyvjHfu3p6sXlkELM88XSEQyR7cUXY5uJASz/fn8TH GcxIyvW3OnKJAUC+KrWe6edpgVCjxjZ19G77/slL39WJwA/g1Y9pQJUqPPnC624LGBGx jzFTgd1Wbuxp0pA/zebURpG68h00X+p+rCHe3Z4mvGHcyH1xHwQ1lmMTby3HD6FnjJ8d JsEgMnZanrYlr4B/y89VqMb/aSdlcHBDKbkKxaiTYK3UlHreLNPevsECDXUtaq6UzPSS PC/g== X-Forwarded-Encrypted: i=1; AJvYcCUuk3DxjnPZ8RDxmgbT9fCkr+hTt27mekTnulbMaMB3+OTdGVH2qAYT/Ke4Ys0twYgZEO+PJ25pC+ADz3HI@vger.kernel.org, AJvYcCVgb/pD/DCboky7D00CExCiNeXb9JmHjk672wPBWLGeXTth3raSGNWic9KN4NhXFtLXS/m8brrG@vger.kernel.org, AJvYcCXCA7jdIGSDYCAf/65nw/NwEn48DjELfekaqRbEIHSb5CV2nMEXPV4cybmV3WkGWtW0KG/okk/RVw==@vger.kernel.org X-Gm-Message-State: AOJu0YydQwUZyLSmqI6w7vjzyi27HD3UkrJUL0+woUjNYw4Zor408awj fXvFe2NIiDOAQM0aIPyU99W7UUTwV0lq2to5lqYrl7gOQp1Sc88h1onK X-Gm-Gg: ASbGncv9szUSkTorFrpq7rHXDgOEWqkdJ0PT05r54Ht5+4iMVwVvMkPjGhl4eZRewNY nuQMnNyEW0tlLCF3W8hVYgOq+bSDwOu4dStxFGql2l+lzy2i6B/LsDbSlc/byWdeTTxdHdDaKcT 9mvKOSsu7RPetzOxle6Yg/rkHJrvhhQSTWqjtIk5NwMssI3wic0HIwKFR6gaTIcRiGj+qa7R2dk 1kiVAKKxWZb1dJxeVYPnjz1brUeDAUDuABsiDCnooc4FBdAzuujMtc+LPwY7A0V7t+sA3S+IZ0W tM/OfVzINTbi8vZhQfGAnPUe302QuTsZbPZcsFR+VvpZLagfy3h/ZYl/eP0KiZqnLe8CajrPkLE gkzR2tor80QeOvKAhfNnwxf8b1VZ4yMFG4A== X-Google-Smtp-Source: AGHT+IGWcAV4vtQFInltL7YhCyhg4u98E5AGYiBsEz3MCfv8Oh389GRDiiy5jbzrpgyxE5yXbUIyig== X-Received: by 2002:a05:6000:2893:b0:3b9:48f:1960 with SMTP id ffacd0b85a97d-3bb692bcf88mr10059635f8f.49.1755525431897; Mon, 18 Aug 2025 06:57:11 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.57.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:57:11 -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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 22/23] net: let pp memory provider to specify rx buf len Date: Mon, 18 Aug 2025 14:57:38 +0100 Message-ID: <65819c0768920744b4f388a154ea7b8e7c4a85e3.1755499376.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 1509a536cb85..be74e4aec7b5 100644 --- a/include/net/page_pool/types.h +++ b/include/net/page_pool/types.h @@ -161,6 +161,7 @@ struct memory_provider_ops; struct pp_memory_provider_params { void *mp_priv; const struct memory_provider_ops *mp_ops; + u32 rx_buf_len; }; =20 struct page_pool { diff --git a/net/core/netdev_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 Sat Oct 4 09:38:04 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 92C85322C87; Mon, 18 Aug 2025 13:57:15 +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=1755525437; cv=none; b=ilwTb7L9Y7tdvWFl+XmLLd5fRMS1qn3JVNgoDhWTigC/cZsdbvUy3cJoQ8fP+GGD6lRp39jw/T8HEA7iAFUXxm0pGeOA2ueB9ThUMsDYSy0S3B3dWYhTh+YWY3S6QCXXnUi0F8fYS+rJxGtvnjrNLhjtMnbQQtH4AAgCvMHt7ws= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1755525437; c=relaxed/simple; bh=uPhOZodCNAiYT0WW4/0KEJWaonMqErn9eznseuAcoic=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=oIj746RHnRRp21hx47shaijfC84u5mscbQoYeNFfsxxMgZZ4LetIFui3IkrtIqSt83u8zgVAz/n/yttCYpBPKVnzUnDypUQRlk88lu8fUYyx201pKMdSwd5f6JwufpVvl46HmN1cEZ8B2WLJHP3rcVu6YlhmvMuioN1qE3XCyXI= 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=SHoIT5lE; 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="SHoIT5lE" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-45a1b004954so29738605e9.0; Mon, 18 Aug 2025 06:57:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1755525434; x=1756130234; 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=EO4rhFnxoPdE6uV4o0KSojzsehfdwFllHuXNXl4bHdg=; b=SHoIT5lEMwesPGETf6FwuGGzHZh8PAUCaMtGAAOYK1Dr9FlygA62n3tN7wNheE1PVO NdkgLUVEctchgzBucj5hSjZHRVHTlMx0luWSQA45K7m6YbpIrgtYbbWgOqaU9ZsQdlZE nydilSvXs0JKT8R3TfLifE2rAm+oAAYltxPeW+Tzsi7dHjtyol7SgXSDwUUKxU5rMxJB idve7QdEScSz6xgCufrt1sTq2+6bkSk6HnrKGbiz4xlagimfT01FCvmG9H1Gch+TvnOJ j0UNKnHPju/6TwewrUdNI826hCLR171scnUt5iOQrmvGb5W1XCEyTy1pxYV4ikxoE8mi NdUQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1755525434; x=1756130234; 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=EO4rhFnxoPdE6uV4o0KSojzsehfdwFllHuXNXl4bHdg=; b=sZuc3kaiJfcVnmQPJsH4Ck46csYidTrZl/WgfSBRQHUy2aCloF/BzwRk1szoNDZ3jb Jj8jO1ILJe/XjrdBDttwIc/RxrSFmKhH+VI7miWLN3JgYZOW6RuogjS+M/Qf5pNusmuj gWCLqTp8k8cTuSkMs0soi7kPQjWrqyfVlc39+4xCABGRA0dwUMZqatW9CZlpuRfbzlsS JQPHe7+hB3sx862XqJKVlkVyvUnlzBegbLSwzinaHVdg9FWvK8h6ZI33eYjYaag45j9z ajVT/Rt6NG29DS3XQp6ZCz9ycZVGY45PxSGU7alkQ8rJyT7lSXicVXtkYXALmKVN8yvR 6FqA== X-Forwarded-Encrypted: i=1; AJvYcCUs6d1RWVM8f9cI6c5lRiV2erlIz5usVJak4NxeODwBx+n8o3OybaA8rwSoZRsNLT4e17uEZdxQ@vger.kernel.org, AJvYcCWpFk9qBRJkE8hJB+93L1Hzx8UQ3YpoYd2Bl0JWLVuY3GfSCSRnZcUidh6NQ/AxQ80+h3DUqHbdLg==@vger.kernel.org, AJvYcCXaH8WXn/dNHgx8QvPxRaXiWEvViR0DH7Hy1FDTvYNpa4gyVtymAmPjPqiHtELbXLvf/+vwMynsPr7jliM1@vger.kernel.org X-Gm-Message-State: AOJu0YzVwdaa1bpm/o8TSHmraWxbl47XUx0RkYAfUFoMZyGArKXoshXS rIKTeAf3FCD+AeCO2mH6C4cDHypud4lB39mD1bAJwJ/XIYX0vvbi3VcM X-Gm-Gg: ASbGncvmJLMWYkK5SR2NrQwhXrwixckKi9uh3LVTi5jbzJadn2ZMg+UV/Tktk8P0MfG aCJ8YPEc29fRwqVtr/nk0RFN0VS15K2ZoOn1woD1JQZa3cM9jM5rYWom9T02oTPpMIxHQHx33o9 rGE3pnFmEHcpEUq0V/fqQ3wRuS+kKi/ayBLwdqqwwLyP0Zo52I3IulBcpV7n/3i5YYyEwwMgi2y n3d0rq8JDUvgYWWh6DFTw+Cyz5Y5x7lxogn/U19UpXNCQezP4SkUV+0qeZS0d3v9iATXcmRWQBZ bwZjjpun9cXK82lrXq4362AhCUHOKvZQ7o9ctV6VZwGJ8o9VGAn29EaducHHrLbZikJ0ePPm7Qd REthksHgfSlEWevU8NM5j82n5n45wA0Q5jg== X-Google-Smtp-Source: AGHT+IGwIAP1mf1GI9G+rzGUBGLqZz7cZDoMgatT5HDZq6aN5orhtgKenBZxfYBMO0vD4Z/+YO1Ymw== X-Received: by 2002:a05:600c:1f10:b0:450:cabd:b4a9 with SMTP id 5b1f17b1804b1-45a26790db8mr66136765e9.29.1755525433654; Mon, 18 Aug 2025 06:57:13 -0700 (PDT) Received: from 127.0.0.1localhost ([185.69.144.43]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-45a1b899338sm91187345e9.7.2025.08.18.06.57.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 18 Aug 2025 06:57:12 -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, io-uring@vger.kernel.org Subject: [PATCH net-next v3 23/23] net: validate driver supports passed qcfg params Date: Mon, 18 Aug 2025 14:57:39 +0100 Message-ID: <417cf28f3bf129d1a0d1b231220aa045abac3263.1755499376.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 c1cc54e38fe4..c53b8045d685 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