[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250421222827.283737-20-kuba@kernel.org>
Date: Mon, 21 Apr 2025 15:28:24 -0700
From: Jakub Kicinski <kuba@...nel.org>
To: davem@...emloft.net
Cc: netdev@...r.kernel.org,
edumazet@...gle.com,
pabeni@...hat.com,
andrew+netdev@...n.ch,
horms@...nel.org,
donald.hunter@...il.com,
sdf@...ichev.me,
almasrymina@...gle.com,
dw@...idwei.uk,
asml.silence@...il.com,
ap420073@...il.com,
jdamato@...tly.com,
dtatulea@...dia.com,
michael.chan@...adcom.com,
Jakub Kicinski <kuba@...nel.org>
Subject: [RFC net-next 19/22] eth: bnxt: use queue op config validate
Move the rx-buf-len config validation to the queue ops.
Signed-off-by: Jakub Kicinski <kuba@...nel.org>
---
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/ethernet/broadcom/bnxt/bnxt.c
index 43497b335329..a772ffaf3e5b 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -16052,8 +16052,46 @@ static int bnxt_queue_stop(struct net_device *dev, void *qmem, int idx)
return 0;
}
+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 = 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 != 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 = BNXT_RX_PAGE_SIZE;
+}
+
static const struct netdev_queue_mgmt_ops bnxt_queue_mgmt_ops = {
.ndo_queue_mem_size = sizeof(struct bnxt_rx_ring_info),
+
+ .ndo_queue_cfg_defaults = bnxt_queue_cfg_defaults,
+ .ndo_queue_cfg_validate = bnxt_queue_cfg_validate,
.ndo_queue_mem_alloc = bnxt_queue_mem_alloc,
.ndo_queue_mem_free = bnxt_queue_mem_free,
.ndo_queue_start = bnxt_queue_start,
@@ -16061,6 +16099,8 @@ static const struct netdev_queue_mgmt_ops bnxt_queue_mgmt_ops = {
};
static const struct netdev_queue_mgmt_ops bnxt_queue_mgmt_ops_unsupp = {
+ .ndo_queue_cfg_defaults = bnxt_queue_cfg_defaults,
+ .ndo_queue_cfg_validate = bnxt_queue_cfg_validate,
};
static void bnxt_remove_one(struct pci_dev *pdev)
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c b/drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
index 956f51449709..8842390f687f 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 = BNXT_RX_PAGE_SIZE;
- if (kernel_ering->rx_buf_len != 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);
--
2.49.0
Powered by blists - more mailing lists