Thread (8 messages) 8 messages, 2 authors, 2025-09-17

Re: [PATCH net-next v4 1/2] net: libwx: support multiple RSS for every pool

From: Jakub Kicinski <kuba@kernel.org>
Date: 2025-09-16 01:01:35

On Fri, 12 Sep 2025 14:23:56 +0800 Jiawen Wu wrote:
Subject: [PATCH net-next v4 1/2] net: libwx: support multiple RSS for every pool
"support multiple RSS" needs an object. Multiple RSS keys? Multiple
contexts? Multiple tables?
-static void wx_store_reta(struct wx *wx)
+u32 wx_rss_indir_tbl_entries(struct wx *wx)
 {
+	if (test_bit(WX_FLAG_SRIOV_ENABLED, wx->flags))
+		return 64;
+	else
+		return 128;
+}
Is WX_FLAG_SRIOV_ENABLED set only when VFs are created?
What if the user set a table with 128 entries?
The RSS table can't shrink once intentionally set to a specific size.
quoted hunk ↗ jump to hunk
+void wx_store_reta(struct wx *wx)
+{
+	u32 reta_entries = wx_rss_indir_tbl_entries(wx);
 	u8 *indir_tbl = wx->rss_indir_tbl;
 	u32 reta = 0;
 	u32 i;
@@ -2007,36 +2016,55 @@ static void wx_store_reta(struct wx *wx)
 	/* Fill out the redirection table as follows:
 	 *  - 8 bit wide entries containing 4 bit RSS index
 	 */
-	for (i = 0; i < WX_MAX_RETA_ENTRIES; i++) {
+	for (i = 0; i < reta_entries; i++) {
 		reta |= indir_tbl[i] << (i & 0x3) * 8;
 		if ((i & 3) == 3) {
-			wr32(wx, WX_RDB_RSSTBL(i >> 2), reta);
+			if (test_bit(WX_FLAG_SRIOV_ENABLED, wx->flags) &&
+			    test_bit(WX_FLAG_MULTI_64_FUNC, wx->flags))
+				wr32(wx, WX_RDB_VMRSSTBL(i >> 2, wx->num_vfs), reta);
Do we need to reprogram the RSS when number of VFs change, now?
+			else
+				wr32(wx, WX_RDB_RSSTBL(i >> 2), reta);
 			reta = 0;
 		}
 	}
 }
 
+void wx_store_rsskey(struct wx *wx)
+{
+	u32 random_key_size = WX_RSS_KEY_SIZE / 4;
They key is just initialized to a random value, it doesn't have to be
random. Just "key_size" is better.
+	u32 i;
+
+	if (test_bit(WX_FLAG_SRIOV_ENABLED, wx->flags) &&
+	    test_bit(WX_FLAG_MULTI_64_FUNC, wx->flags)) {
+		for (i = 0; i < random_key_size; i++)
+			wr32(wx, WX_RDB_VMRSSRK(i, wx->num_vfs),
+			     *(wx->rss_key + i));
Prefer normal array indexing:

			     wx->rss_key[i]
+	} else {
+		for (i = 0; i < random_key_size; i++)
+			wr32(wx, WX_RDB_RSSRK(i), wx->rss_key[i]);
+	}
+}
-	u32 rss_field = 0;
completely unclear to me why moving rss_field to struct wx is part of
this patch. It looks unrelated / prep for the next patch. 
-- 
pw-bot: cr
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help