From nobody Fri Aug 21 00:31:53 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 4hR1TP2S1rz6pNLF for ; Fri, 21 Aug 2026 00:31:53 +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 4hR1TP1WVRz3ymQ for ; Fri, 21 Aug 2026 00:31:53 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1787272313; 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=Vh5HKMW+3RkykbDip6Cpaz57XWDbPB7179ClXzt7hrI=; b=rHhtsAWAmH6l3vE2iY4aldsCrNzXD6kQ1lb0xEeOWSPIVrcb1Nj/9cz35sMyFdh0uHxgry MaBfUoU+MdnUqRe6+8IMxrcCBbScT+rmuFJrXjD7CXCD/ZlPuWzrOkAHsqHNoPb+uXBMJb 6R9nDFp9LYzJaerV+EW+cjKENJpB6dx5NVTVCGUtTFB6zQygDn2ONEexG8d+rGg8pwHQrY DZrZtcbJDUesjgAvh6rcfYw7fV00nEX9UmeZQy3U2F2iwCS1Oryv8T25Eufg0Vg4BDMQOF mKWCKA0f28BBSvz5FSluPXSBJgZ+jbcTcyI31ITCv5rymH3PChbhqFNjmSLh/g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1787272313; a=rsa-sha256; cv=none; b=S3VccbowjW40oZVdSq6lLF5GXkroYbViKzqvPQeLpLumfJQn1aCuKonUqa8MqcpS5iBDIU pDcL5Fkfg64mx6lFkjnxUDhQJvrWrFjtl4oD86YEKlxirv0wjIY0PFeIohHqO7xVL6CjFJ BGwnMkJe0KnUcp+BiuQq61Pzdq3LHUGgjxOg9n2kLb3EUCISdGt2Q8Ih1j7xCalNGSxrOo NU1PYA60Y2XKdoSyHLfaGRg8pKEbLhwSV0/plOFZfZFI/qKVUJOYRSqFgiBjsNBQgeSG+B 5kjSus0HWqckMFhEJbv14WAYJCJJMPPcPRSnYAcq8YfF4eK6MlbgLrsad38UKw== 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=1787272313; 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=Vh5HKMW+3RkykbDip6Cpaz57XWDbPB7179ClXzt7hrI=; b=qZx5iPAX3P8xeb2li0FCrPIZmzAlY113iGmQzEXHWwL2CBb8ig1nIbmZ7L0moFo0g4X1NA VSWJAef/qTY2LAfjzTYy+syh+0KFPlLS5jxCFP0RJNojnWCvnEnq5/Ql7CJoNHct207KHA ZUCcWyeXBzwdpEFWhu70Rd234lmOPNBAclG5+MLoBmicC98I70Nqk/R9U27wvUKue/WGzA 9MutbRWQqRlx9qgp62LIvseEqlguByXlDJiENPQnh4Sfc0+rUFvScRlrRC4xOGCSqMUcJ3 Memu8oALxqBYps/vpMKL5bOXgEF0le46lz0mTOgU/KU14EJjq7uWPpkND6Faog== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hR1TP09Kczgdm for ; Fri, 21 Aug 2026 00:31:53 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 22127 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 21 Aug 2026 00:31:53 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Kevin Bowling Subject: git: 516fa3d3cda3 - stable/15 - ixgbe: force receive drops on every VF queue 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/15 X-Git-Reftype: branch X-Git-Commit: 516fa3d3cda36b31e631ee3bfe66a65eb471bdcc Auto-Submitted: auto-generated Date: Fri, 21 Aug 2026 00:31:53 +0000 Message-Id: <6a879c79.22127.4388add6@gitrepo.freebsd.org> The branch stable/15 has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=516fa3d3cda36b31e631ee3bfe66a65eb471bdcc commit 516fa3d3cda36b31e631ee3bfe66a65eb471bdcc Author: Kevin Bowling AuthorDate: 2026-08-01 06:43:08 +0000 Commit: Kevin Bowling CommitDate: 2026-08-21 00:31:44 +0000 ixgbe: force receive drops on every VF queue PFQDE is indexed by absolute receive queue, but the driver programs one index per VF. Only the first quarter or half of the VF queues therefore have queue-drop isolation, depending on the virtualization mode. The flow-control path can also clear those bits even though SR-IOV requires them independently of the PF pause policy. Program every queue in a VF pool before enabling receive for that VF. For an X550-family VF with an administrative port VLAN, also hide the VLAN tag as the hardware requires. Keep PF flow-control changes confined to the PF SRRCTL registers, and clear the VF queue settings when SR-IOV is torn down and the queues can be reassigned to the PF. (cherry picked from commit 4383ab82b0bbaf1c78ecdf4eb7628f1e154db24b) --- sys/dev/ixgbe/if_ix.c | 12 ------------ sys/dev/ixgbe/if_sriov.c | 28 ++++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 12 deletions(-) diff --git a/sys/dev/ixgbe/if_ix.c b/sys/dev/ixgbe/if_ix.c index e4ea801b6dc4..8f4d08ba5494 100644 --- a/sys/dev/ixgbe/if_ix.c +++ b/sys/dev/ixgbe/if_ix.c @@ -5256,13 +5256,6 @@ ixgbe_enable_rx_drop(struct ixgbe_softc *sc) IXGBE_WRITE_REG(hw, IXGBE_SRRCTL(rxr->me), srrctl); } - /* enable drop for each vf */ - for (int i = 0; i < sc->num_vfs; i++) { - IXGBE_WRITE_REG(hw, IXGBE_QDE, - (IXGBE_QDE_WRITE | - (i << IXGBE_QDE_IDX_SHIFT) | - IXGBE_QDE_ENABLE)); - } } /* ixgbe_enable_rx_drop */ /************************************************************************ @@ -5282,11 +5275,6 @@ ixgbe_disable_rx_drop(struct ixgbe_softc *sc) IXGBE_WRITE_REG(hw, IXGBE_SRRCTL(rxr->me), srrctl); } - /* disable drop for each vf */ - for (int i = 0; i < sc->num_vfs; i++) { - IXGBE_WRITE_REG(hw, IXGBE_QDE, - (IXGBE_QDE_WRITE | (i << IXGBE_QDE_IDX_SHIFT))); - } } /* ixgbe_disable_rx_drop */ /************************************************************************ diff --git a/sys/dev/ixgbe/if_sriov.c b/sys/dev/ixgbe/if_sriov.c index 98c31b3d7a17..7987009eb8f0 100644 --- a/sys/dev/ixgbe/if_sriov.c +++ b/sys/dev/ixgbe/if_sriov.c @@ -587,6 +587,31 @@ ixgbe_vf_enable_transmit(struct ixgbe_softc *sc, struct ixgbe_vf *vf) } /* ixgbe_vf_enable_transmit */ +static void +ixgbe_vf_set_rx_drop(struct ixgbe_softc *sc, struct ixgbe_vf *vf, + bool enable) +{ + struct ixgbe_hw *hw; + u32 qde; + int i, queue_count; + + hw = &sc->hw; + queue_count = ixgbe_vf_queues(sc->iov_mode); + for (i = 0; i < queue_count; i++) { + qde = IXGBE_QDE_WRITE | + (ixgbe_vf_que_index(sc->iov_mode, vf->pool, i) << + IXGBE_QDE_IDX_SHIFT); + if (enable) { + qde |= IXGBE_QDE_ENABLE; + if (vf->default_vlan != 0 && + hw->mac.type >= ixgbe_mac_X550) + qde |= IXGBE_QDE_HIDE_VLAN; + } + IXGBE_WRITE_REG(hw, IXGBE_QDE, qde); + IXGBE_WRITE_FLUSH(hw); + } +} + static void ixgbe_vf_enable_receive(struct ixgbe_softc *sc, struct ixgbe_vf *vf) { @@ -594,6 +619,8 @@ ixgbe_vf_enable_receive(struct ixgbe_softc *sc, struct ixgbe_vf *vf) uint32_t vf_index, vfre; hw = &sc->hw; + /* Keep one VF without receive descriptors from blocking its peers. */ + ixgbe_vf_set_rx_drop(sc, vf, true); vf_index = IXGBE_VF_INDEX(vf->pool); vfre = IXGBE_READ_REG(hw, IXGBE_VFRE(vf_index)); @@ -1442,6 +1469,7 @@ ixgbe_if_iov_uninit(if_ctx_t ctx) for (i = 0; i < sc->num_vfs; i++) { if (!(sc->vfs[i].flags & IXGBE_VF_ACTIVE)) continue; + ixgbe_vf_set_rx_drop(sc, &sc->vfs[i], false); ixgbe_vf_clear_mac_filters(sc, &sc->vfs[i], true); sc->vfs[i].flags &= ~IXGBE_VF_ANTI_SPOOF; ixgbe_vf_set_anti_spoof(sc, &sc->vfs[i]);