[PATCH net-next v3 19/23] net: wipe the setting of deactived queues
From: Pavel Begunkov <asml.silence@gmail.com>
Date: 2025-08-18 13:57:07
Also in:
io-uring, lkml
Subsystem:
networking [general], the rest · Maintainers:
"David S. Miller", Eric Dumazet, Jakub Kicinski, Paolo Abeni, Linus Torvalds
From: Jakub Kicinski <kuba@kernel.org> 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 <kuba@kernel.org> Signed-off-by: Pavel Begunkov <asml.silence@gmail.com> --- 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 *dev, unsigned int txq) if (dev->num_tc) netif_setup_tc(dev, txq); + netdev_queue_config_update_cnt(dev, txq, + dev->real_num_rx_queues); net_shaper_set_real_num_tx_queues(dev, txq); dev_qdisc_change_real_num_tx(dev, txq);
@@ -3233,6 +3235,9 @@ int netif_set_real_num_rx_queues(struct net_device *dev, unsigned int rxq) rxq); if (rc) return rc; + + netdev_queue_config_update_cnt(dev, dev->real_num_tx_queues, + rxq); } dev->real_num_rx_queues = 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 txq, + unsigned int rxq); /* 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; } +void netdev_queue_config_update_cnt(struct net_device *dev, unsigned int txq, + unsigned int rxq) +{ + size_t len; + + if (rxq < dev->real_num_rx_queues) { + len = (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) {
--
2.49.0