From nobody Fri Aug 7 12:56:33 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 4hGkg61t44z6n2m4 for ; Fri, 07 Aug 2026 12:56:34 +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 4hGkg615zjz487h for ; Fri, 07 Aug 2026 12:56:34 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1786107394; 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=yah/sjJWiA6gMHXjzXuNlQKdji+eit3zhBNqtsLFZiY=; b=mkQEzp3b8TwhkpO4d88FyVXMS6TszP/YTH8Q8pD4WGXeLs6OOzmkiUpwzIz8oqmpZdEGR5 9dFBZQymC1cKrwCs0/Yg6bWm3SBDSB1XCuuuGlNdIW/R+vFebgNDh/vGLj0QTfV1S1vHr6 1LNIu8xmY0xOKbDfSYpUQbebBlPvTj0GklY44vHq6Y0mS+k3cWSn+TG56HbgX0apaA5bmJ 5mcGRZc1f9NfZfIC1Kt0FyDwfdsyuKxvUfqxD7S0TUJ3TuDHXQm4Z9b50CScgHjTd/rmlG cQeQ4Btg4TSE/QQ/dl+mFaU3ijayhXl3TAWFkefiAGuuYE4VHQXBW7IOAhFpHA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1786107394; a=rsa-sha256; cv=none; b=W7IIf0W1DiFWOSLUo3ti6SMKmXZx32IVUUTJyfaAWw0vsjg4v42Rwe8RwOR9fp/PcqxSxO Wrx4yTJr0r8ktETHOEOKi+kh1eHkxgrNg32PKa/U+AFlImtXDKwb0jJ7MpqbBp147F3hQk 0QRuF2RjEv6UexylRBIrXAi1+YsAnUcPmiixOr/ukdeoYjHRbVisZvVoeJ+Ywn0N/ttZIb Mj6YZ1y3aGhCNZKv5BZeoNahSffZbSxM6k30Yns+ElwcFQRSCN3XUl323wd5KnBqUdgcLT ZzCuHm/68xakK7KK7VseGzc8Xwi2JjPgjazXKGpnXbcK4ImDh2y1Y5Qf0bFfEA== 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=1786107394; 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=yah/sjJWiA6gMHXjzXuNlQKdji+eit3zhBNqtsLFZiY=; b=Yj6BToboG5UWc+SDfC8Lix61em/z9h+IHQ+AaENA+3asLaBq4dwwOpWP9lQwYBYLHzB05+ 59wGNhpx2VW+o8wG7ohGuOIyrqTEPia3PQOC4fllpPtzpv2yKIfouE3B9R93DsJ2Sxo0AC U2HsN3mVRkKgu7kosuHlzicJ/0euptUKRIJFM4FT5vYjhI4GL5WmTzjElMtU8MMmOcLpu3 lSWlbjryqeM6d9dRgQ/bgjHF83vy4pI6jatg24Rluw6ctrihB2OKGt3nkkk5UZDQWRdg40 z/7aqH//KJSL6DG7N4wm2DoU1/xI+fR951TqDDlSSTAi0XseJ2p4L9iy/y8U7g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hGkg56s7dz16xM for ; Fri, 07 Aug 2026 12:56:33 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 39067 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Fri, 07 Aug 2026 12:56:33 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: 4383ab82b0bb - main - ixgbe: force receive drops on every VF queue 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: 4383ab82b0bbaf1c78ecdf4eb7628f1e154db24b Auto-Submitted: auto-generated Date: Fri, 07 Aug 2026 12:56:33 +0000 Message-Id: <6a75d601.39067.59f8fdc7@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=4383ab82b0bbaf1c78ecdf4eb7628f1e154db24b commit 4383ab82b0bbaf1c78ecdf4eb7628f1e154db24b Author: Kevin Bowling AuthorDate: 2026-08-01 06:43:08 +0000 Commit: Kevin Bowling CommitDate: 2026-08-07 12:51:10 +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. MFC after: 2 weeks --- 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 4606e735b821..0a8c5573977e 100644 --- a/sys/dev/ixgbe/if_ix.c +++ b/sys/dev/ixgbe/if_ix.c @@ -5265,13 +5265,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 */ /************************************************************************ @@ -5291,11 +5284,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]);