Commit b9ac2c60 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

net: introduce a trivial netdev_queue_config()

We may choose to extend or reimplement the logic which renders
the per-queue config. The drivers should not poke directly into
the queue state. Add a helper for drivers to use when they want
to query the config for a specific queue.

Link: https://patch.msgid.link/20260122005113.2476634-3-kuba@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent 1410c741
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -4326,12 +4326,12 @@ static void bnxt_init_ring_struct(struct bnxt *bp)

	for (i = 0; i < bp->cp_nr_rings; i++) {
		struct bnxt_napi *bnapi = 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;
		struct bnxt_tx_ring_info *txr;
		struct bnxt_ring_struct *ring;
		struct netdev_rx_queue *rxq;

		if (!bnapi)
			continue;
@@ -4349,8 +4349,8 @@ static void bnxt_init_ring_struct(struct bnxt *bp)
		if (!rxr)
			goto skip_rx;

		rxq = __netif_get_rx_queue(bp->dev, i);
		rxr->rx_page_size = rxq->qcfg.rx_page_size;
		netdev_queue_config(bp->dev, i, &qcfg);
		rxr->rx_page_size = qcfg.rx_page_size;

		ring = &rxr->rx_ring_struct;
		rmem = &ring->ring_mem;
+3 −0
Original line number Diff line number Diff line
@@ -170,6 +170,9 @@ struct netdev_queue_mgmt_ops {
	unsigned int supported_params;
};

void netdev_queue_config(struct net_device *dev, int rxq,
			 struct netdev_queue_config *qcfg);

bool netif_rxq_has_unreadable_mp(struct net_device *dev, int idx);

/**
+1 −0
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@ obj-$(CONFIG_NETDEV_ADDR_LIST_TEST) += dev_addr_lists_test.o

obj-y += net-sysfs.o
obj-y += hotdata.o
obj-y += netdev_config.o
obj-y += netdev_rx_queue.o
obj-y += netdev_queues.o
obj-$(CONFIG_PAGE_POOL) += page_pool.o page_pool_user.o
+32 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only

#include <linux/netdevice.h>
#include <net/netdev_queues.h>
#include <net/netdev_rx_queue.h>

/**
 * netdev_queue_config() - get configuration for a given queue
 * @dev:      net_device instance
 * @rxq_idx:  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.
 */
void netdev_queue_config(struct net_device *dev, int rxq_idx,
			 struct netdev_queue_config *qcfg)
{
	struct netdev_queue_config *stored;

	memset(qcfg, 0, sizeof(*qcfg));

	stored = &__netif_get_rx_queue(dev, rxq_idx)->qcfg;
	qcfg->rx_page_size = stored->rx_page_size;
}
EXPORT_SYMBOL(netdev_queue_config);