The branch stable/14 has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=f336c4564391f699317326cebed69b428d9e031b
commit f336c4564391f699317326cebed69b428d9e031b Author: Kevin Bowling <[email protected]> AuthorDate: 2026-08-09 11:34:58 +0000 Commit: Kevin Bowling <[email protected]> CommitDate: 2026-08-24 00:55:29 +0000 ixgbe: Enable PF RSS across queues with SR-IOV PSRTYPE is indexed by pool in VMDq+RSS mode, and its RQPL field selects the number of receive queues available within the pool. The PF occupies the last pool, but the driver programmed pool zero and left the PF RQPL value at zero. As a result, all PF receive traffic was directed to its first queue while SR-IOV was enabled. Program PSRTYPE for the PF pool and encode its allocated receive queue count. (cherry picked from commit 49f9143d9a37a4646c9f4ddac53b97dde04e3fa3) --- sys/dev/ixgbe/if_ix.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/sys/dev/ixgbe/if_ix.c b/sys/dev/ixgbe/if_ix.c index 3aaee0905dad..b77d48569d88 100644 --- a/sys/dev/ixgbe/if_ix.c +++ b/sys/dev/ixgbe/if_ix.c @@ -847,7 +847,21 @@ ixgbe_initialize_receive_units(if_ctx_t ctx) IXGBE_PSRTYPE_UDPHDR | IXGBE_PSRTYPE_IPV4HDR | IXGBE_PSRTYPE_IPV6HDR; - IXGBE_WRITE_REG(hw, IXGBE_PSRTYPE(0), psrtype); + + /* + * In VMDq+RSS mode PSRTYPE is per pool, and RQPL controls + * how many receive queues RSS may select within that pool. + * The PF occupies the last pool rather than pool zero. + */ +#ifdef PCI_IOV + if (sc->iov_mode != IXGBE_NO_VM) { + if (sc->num_rx_queues > 3) + psrtype |= 2u << IXGBE_PSRTYPE_RQPL_SHIFT; + else if (sc->num_rx_queues > 1) + psrtype |= 1u << IXGBE_PSRTYPE_RQPL_SHIFT; + } +#endif + IXGBE_WRITE_REG(hw, IXGBE_PSRTYPE(sc->pool), psrtype); } rxcsum = IXGBE_READ_REG(hw, IXGBE_RXCSUM);
