Thread (31 messages) flat view 31 messages, 3 authors, 17d ago

Re: [PATCH net-next v2 03/13] net: mana: swap queue sets in mana_set_ringparam

From: sashiko-bot@kernel.org
Date: 2026-08-14 05:05:18

Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:

New issues:
- [High] Hardware Resource Exhaustion (MSI-X vectors) / Functional Regression
- [High] Ad-hoc Synchronization with Flags

Pre-existing issues:
- [High] State Loss (RSS Indirection Table)
--
--- Patch [3]: [PATCH net-next v2 03/13] net: mana: swap queue sets in mana_set_ringparam ---
commit e63909b90b30b5041af0319613913c9654a4cc80
Author: Long Li [off-list ref]

net: mana: swap queue sets in mana_set_ringparam

Convert the ring size path to pre-allocate and swap, for the same reasons
as the channel count path. An allocation failure returns the error with
the running configuration untouched, and the vport is never released.
quoted hunk ↗ jump to hunk
diff --git a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c b/drivers/net/ethernet/microsoft/mana/mana_ethtool.c
index b12291555eaeb..40e9886c87a81 100644
--- a/drivers/net/ethernet/microsoft/mana/mana_ethtool.c
+++ b/drivers/net/ethernet/microsoft/mana/mana_ethtool.c
[ ... ]
quoted hunk ↗ jump to hunk
@@ -791,32 +790,61 @@ static int mana_set_ringparam(struct net_device *ndev,
[ ... ]
+	/* Block RDMA from acquiring the vport for the duration. The vport
+	 * itself is never released, so vport_use_count stays > 0.
+	 */
+	mutex_lock(&apc->vport_mutex);
+	if (apc->channel_changing) {
+		mutex_unlock(&apc->vport_mutex);
+		return -EBUSY;
 	}
+	apc->channel_changing = true;
+	mutex_unlock(&apc->vport_mutex);
[Severity: High]
Does this code use apc->channel_changing as an ad-hoc lock?

Since this flag is set on entry and cleared on exit to prevent concurrent
RDMA vport access, could we use a proper synchronization primitive here instead
of a boolean flag?
 
-	apc->tx_queue_size = new_tx;
-	apc->rx_queue_size = new_rx;
+	scratch = mana_qset_scratch_alloc(apc);
+	if (!scratch) {
+		err = -ENOMEM;
+		goto clear_flag;
+	}
 
-	err = mana_attach(ndev);
+	err = mana_alloc_qset(scratch, apc->num_queues, new_rx, new_tx,
+			      apc->priv_flags, &newq);
[Severity: High]
By pre-allocating a complete new queue set alongside the existing one, does
this require twice as many MSI-X vectors simultaneously?

If the system is already fully utilizing its vectors, could mana_create_eq()
fail to acquire vectors from the MSI-X pool, causing the ring parameter
changes to reliably fail with -ENOSPC?

[Severity: High]
This is a pre-existing issue, but does this code cause a loss of the custom RSS
indirection table?

During mana_alloc_qset(), mana_rss_table_init() is called, which unconditionally
overwrites the indirection table with default round-robin values. If a user
has configured a custom RSS indirection table, will those settings be
irrevocably destroyed here?

[ ... ]
+clear_flag:
+	mutex_lock(&apc->vport_mutex);
+	apc->channel_changing = false;
+	mutex_unlock(&apc->vport_mutex);
 	return err;
 }
-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260813050418.2906468-1-longli@microsoft.com?part=3
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help