From nobody Mon Aug 24 09:14:37 2026 X-Original-To: dev-commits-src-all@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 4hT4x96RC0z6p6P3 for ; Mon, 24 Aug 2026 09:14:37 +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 "YR2" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4hT4x93ZPhz3wHD for ; Mon, 24 Aug 2026 09:14:37 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787562877; 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=QPmIlX5aa0PUd6Ti/eHxhJ68GtUsZcwH7ThU9IGvHlg=; b=HMaPxbeidUgCi2GOCT/JUr0QY8HizPuVIQ8qCfwH/DHHGFg3g/6Lo5ZfM/3uRTMis7tItG mqYy9u/WSo/GkWT9etrEfCoZLWdCWPUfzLl5sZGpIn21lpuxCvQRPhW4v71Zl/PAWinWvV MGMhUWq033CR/tJF3o1eEwrpjqdVWeVN5zuDPzYbIO5KqhkZRWl6m15KQT9IgG8fxOY58C +31HIRZS+kMBq8KPp8UfEJ+2kgzlQ4AamzRCJyqtM86bgv5kjZRXkPHOhptaiv/9x1ggxg +T0V06zmv1RCyYaXlSOwSkUlS5EfbitZq8mH8fhNeo+X4C7cNZFAkovtuEkpIw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1787562877; a=rsa-sha256; cv=none; b=hPU8kR2P02nKOpN3ihR8gj/Q3X8l6wsGWcPiN+4//jQLBUhL/ijdyTy5orT2G37vgyIpWi EwRIBmOERRpbm17LHPAqjfJqcv8cm5h7mhIlxxubEGC5z7XVHRrKqz8P03AVGUgAlpBT7Z 7VLNBB5eFOifFTOtB7QgMAb6/XqR//qfbmQNR9TieFWj2LxnHquN3wf+ng9amKa1RhABJS NZnhwz4rPT0LOtJD1/TZZ30zvOfqdlXSdU7QWLXV+qJCXi5ScouXrkzT+HO+zZMzH1CDxy vnHlnpWcyV2F9tHPFddLTN6fWdn0xCs4mB9mBEJdzeb3xbzBbBnzYJAK246CZA== 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=1787562877; 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=QPmIlX5aa0PUd6Ti/eHxhJ68GtUsZcwH7ThU9IGvHlg=; b=C5ep0pR01/JrHY46lnZOsQTsDiseA2KmNqu//L4Futb897zOR+4VMlDms7cBMlI7l5NTpe xoBBdrnj2lUtgDF5aaIVQQN9elphtH5weIElsKZDvOLXlkkE9wH4Sdt4XL2IyJ6C6Ji+QT QvkIjRFuBiYEWM3BPr6h+pN/IbMzG/31Irxy6uZeEwuZ0whuqxCyLE7pNgESB+pmw7qKtB KKYUqgRA01vlfgAA7TZxw9wGoXX6JdGS0Bful78H213yEoQyJ0GSEh5wxWYciT4zcCkpj1 IHVDNrHcXeQGFBXcb5UvG4kFuzB6R80NaAzKcBL0ZIG36B9ij3/fKhDal0qHnw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hT4x922tlzyRD for ; Mon, 24 Aug 2026 09:14:37 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1867f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 24 Aug 2026 09:14:37 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Kevin Bowling Subject: git: 1b368793c10a - stable/14 - ixgbe: Preserve the full VF RSS domain in the shared RETA List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@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/stable/14 X-Git-Reftype: branch X-Git-Commit: 1b368793c10a68ea5943fe16582b6e20377f1f3d Auto-Submitted: auto-generated Date: Mon, 24 Aug 2026 09:14:37 +0000 Message-Id: <6a8c0b7d.1867f.5b42b284@gitrepo.freebsd.org> The branch stable/14 has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=1b368793c10a68ea5943fe16582b6e20377f1f3d commit 1b368793c10a68ea5943fe16582b6e20377f1f3d Author: Kevin Bowling AuthorDate: 2026-08-10 15:53:10 +0000 Commit: Kevin Bowling CommitDate: 2026-08-24 09:12:23 +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. (cherry picked from commit 8b668bc7e7c8b0a1bcb018360a4aafa445ff554f) --- 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 475735e7e50e..18645950766b 100644 --- a/sys/dev/ixgbe/if_ix.c +++ b/sys/dev/ixgbe/if_ix.c @@ -650,7 +650,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; @@ -679,19 +679,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);