From nobody Mon Aug 10 17:16:35 2026 X-Original-To: dev-commits-src-main@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4hJhHr5K1Bz6X0hs for ; Mon, 10 Aug 2026 17:16:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "YR1" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hJhHr4YgVz46R8 for ; Mon, 10 Aug 2026 17:16:40 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786382200; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=oaFmMZWIGYnNp7HqjFw9RRba1jkoo/laXdJpllDnt0o=; b=sVQuU3xeOnJPw5w1nASvO6OY3C8B5OXHN0g9MtfOUGnHVHTz9QSpSTQrqZRVYQvVMp9DDD 2FOJrucfT2syDTiVsYSnRBmHzqLhDcKDv9LWILnzsPRz30b6Gxd4GXJdAgVyZaq/8G1qmB N1qAsyVH6DgqoTd2o2wxvRg1eDHGxvcVUR4jLZ6cxcdHpw1+qVWJMpSM3zrR3+mO8y/fYk OM1ZCxZv4Cyafd8Du9CKia8REfCLebEBp4aTA6DlBemT7/jUf082pkJCwGn3gukpM00h+t gKcE9619wf6qn6Z7JooKYyiKJLF+GLBs/Qy2v3YX9Yz0ynBSwIpTlRDXJ1xFmQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1786382200; a=rsa-sha256; cv=none; b=JKv0RHTxUgU3aI6FMM25NwhHkvF6xaDolzJGk3OQNUO52Y1GJZG9latutqxJeSu4MRfQaT fMN0Cr+MhJVSv+TpTjYuXo4POjpCktwXmgpknoruwLkm3kRsdALEgapq54EyeVqKE9RlL5 IecN4b4AoARM6pAkNW0YhnzoowjtIalMsT5ARoNig4CzZfpsQAmcBlAfMkxWkTWuEcSM6J b57kfPb/yvEqMfV+guJTVKCTXeC/CANvObUPoirvUC2CEVqRvxU5QXc14TvsiVvyZUfr3V +fMAsqxL94PuLSO+7XtuOiiQp7XTOXzqHIAAt8KVax6k6qX//RUjKCUDNBtQbA== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786382200; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=oaFmMZWIGYnNp7HqjFw9RRba1jkoo/laXdJpllDnt0o=; b=XsjIhnFFBGpX0VeJYOx7/66nNBR1ji/imvHjOjSb6MGNt8NSjJpaG5U7THo52sU+wTTgDr bq6XAbyjWTq36E/BiU/hCTSLfGmdQb6HGlCBRq6OSAD+L2/bEhi97O5CHCHDWhTl5FgCEw caDQspIS6+ZZ9as6x39lkWWXfMYi8rdgAKuudYdGGL658rh4dkl9q3MqfuOW7edc2K3Xyl Y7hRDQIrvQYuwFRqua6/E2VmlWue02voawS8g1nsA10nJ3tY9+dmRc9zPHXuT/e5Yp+Dig bJ9o98Y+ftxRykBRjEFHZ2OMT/5iC6Z75MH/V1nZiOtJJ5zzOW+9O0S0T22p1A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hJhHr2QlBz3MD for ; Mon, 10 Aug 2026 17:16:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3da1a by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 10 Aug 2026 17:16:35 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: 8b668bc7e7c8 - main - ixgbe: Preserve the full VF RSS domain in the shared RETA List-Id: Commit messages for the main branch of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-main List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-main@freebsd.org Sender: owner-dev-commits-src-main@FreeBSD.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kbowling X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 8b668bc7e7c8b0a1bcb018360a4aafa445ff554f Auto-Submitted: auto-generated Date: Mon, 10 Aug 2026 17:16:35 +0000 Message-Id: <6a7a0773.3da1a.279fe7f7@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=8b668bc7e7c8b0a1bcb018360a4aafa445ff554f commit 8b668bc7e7c8b0a1bcb018360a4aafa445ff554f Author: Kevin Bowling AuthorDate: 2026-08-10 15:53:10 +0000 Commit: Kevin Bowling CommitDate: 2026-08-10 17:16:11 +0000 ixgbe: Preserve the full VF RSS domain in the shared RETA The 82599 and X540 share the global RSS redirection table between the PF and its VFs. Programming that table from the PF queue count prevents a VF from using queue indices absent from the PF layout. A one-queue PF consequently directs every flow for a two- or four-queue VF to queue zero. Program at least four queue indices while SR-IOV is active. Each pool PSRTYPE.RQPL field masks the shared table to the queue subset available to that function, so the PF can continue using fewer queues. MFC after: 2 weeks --- sys/dev/ixgbe/if_ix.c | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/sys/dev/ixgbe/if_ix.c b/sys/dev/ixgbe/if_ix.c index 9a59ce6b4fe8..8a80f15c77d8 100644 --- a/sys/dev/ixgbe/if_ix.c +++ b/sys/dev/ixgbe/if_ix.c @@ -661,7 +661,7 @@ ixgbe_initialize_rss_mapping(struct ixgbe_softc *sc) { struct ixgbe_hw *hw = &sc->hw; u32 reta = 0, mrqc, rss_key[10]; - int queue_id, table_size, index_mult; + int queue_id, reta_queues, table_size, index_mult; int i, j; u32 rss_hash_config; @@ -690,19 +690,31 @@ ixgbe_initialize_rss_mapping(struct ixgbe_softc *sc) break; } + /* + * The global RETA is shared by the PF and VFs on 82599 and X540. + * Program all four queue indices while SR-IOV is active so a VF can + * use its full queue grant even when the PF uses fewer queues. + * PSRTYPE.RQPL limits the subset selected within each pool. + */ + reta_queues = sc->num_rx_queues; +#ifdef PCI_IOV + if (sc->iov_mode != IXGBE_NO_VM) + reta_queues = MAX(reta_queues, 4); +#endif + /* Set up the redirection table */ for (i = 0, j = 0; i < table_size; i++, j++) { - if (j == sc->num_rx_queues) + if (j == reta_queues) j = 0; if (sc->feat_en & IXGBE_FEATURE_RSS) { /* * Fetch the RSS bucket id for the given indirection - * entry. Cap it at the number of configured buckets - * (which is num_rx_queues.) + * entry. Cap it at the number of queue indices that must + * be represented in the shared table. */ queue_id = rss_get_indirection_to_bucket(i); - queue_id = queue_id % sc->num_rx_queues; + queue_id = queue_id % reta_queues; } else queue_id = (j * index_mult);