From nobody Mon Aug 3 10:20:22 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 4hDCNk3c3wz6n3r4 for ; Mon, 03 Aug 2026 10:20:22 +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 4hDCNk2ljTz3DbB for ; Mon, 03 Aug 2026 10:20:22 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1785752422; 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=PySCUiqaKgewd5oIRqPzyePZWgufAXN4lqnfLe93bjE=; b=MXuD4UZS3dvXIcNCQISvAnvFWl2J/RbqWSCfifxmS9AA8gVfUoBocMyKJEnhIqLby7ibjY 7lYSgiaihBTQ3e8jUnwPFMhPJrReDAVa3ZvkFcIXOYTKJJyEkUgBgjn1aul+PcJ7i4WsDd Vlb4pg6rqLkCPt1Jj5nau3kU80gSZszhQWFhLT6uYnitx59ijZlNcFrVJKtYkyMUwx+bge kEUnttzud/k47VFzE0/53WOY7qaJNO5GKGq3oHu6LFS7OT+7aqPKAwuAj8yxtM2dwUz0xX MNr0vhH1egh8DraFpX6m5QMrAPy9Nu9sxrNZgwa/C1v961NGLdfSgAyJuYOy+g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1785752422; a=rsa-sha256; cv=none; b=gaWTCFwvxPqmtEMWvRuEumSdH4WVyJwErrMYoa9oXeqjslkB2akkmyaqhjCw+7rXzObzjO FRP5rsuMIX+XNoLbhMlYlC0okk+R0JgyOlssVn+CtmacsFBAvkOVgQo5aO+M+rF9LH2uhy aaH3QgkicKZMCrbUeZj3RyCwmwATzc4E00Y5QjSoG5OVrLAmFqtID2kV8lE9hgFmwAmvuv 6HSw20LQv07I/LAnP2ll19yHBBuVPqo3f3HGaQ4/D309enULip/wtkFNHhmoJgarsLHP5K v6rm4rAkQJNbM0TaznueXNh/UOgA49ceuQ2irxORoFsLC/3cc9Q1Lon6oknYYw== 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=1785752422; 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=PySCUiqaKgewd5oIRqPzyePZWgufAXN4lqnfLe93bjE=; b=fuDSP1oQEGhOrPbaFiMF8Q1blcmrNatBGj/mcIV+LG6y2A+5ztlmBTb1Ij/kbjhgbOqA8z vibqSGMuVG06pWjrafMk3QXxSXbjfCdBojSbIghc05B5GiuTnaquAQTUqV8jyWG29KywQt P3TfTc+R6KVIy8eJyGqqdZiKjlVLFEQz3kF+qCQtR+aMZ2Gg9zV5YW9WeO2HRgblCMW7qw 1lhJn7Sq4A4d2RtTsgaF4qOqi3ebiwbuKMlt0v38YqBepvYnzMUFdoqoCjn1rJ4RCDweJ1 WmXHlTBNuyM8xim4yD/2tMivqs4g8r5DsZV12FTbzcm3LzcR550tko3yPUJyNA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4hDCNk1Vs9zwZY for ; Mon, 03 Aug 2026 10:20:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 4391f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 03 Aug 2026 10:20:22 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Kevin Bowling Subject: git: 1c91c3ae1ec6 - main - igb: recover retained i350 admin interrupts 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/main X-Git-Reftype: branch X-Git-Commit: 1c91c3ae1ec6c65e458f130a95d3119d83ca088e Auto-Submitted: auto-generated Date: Mon, 03 Aug 2026 10:20:22 +0000 Message-Id: <6a706b66.4391f.21a7b9f9@gitrepo.freebsd.org> The branch main has been updated by kbowling: URL: https://cgit.FreeBSD.org/src/commit/?id=1c91c3ae1ec6c65e458f130a95d3119d83ca088e commit 1c91c3ae1ec6c65e458f130a95d3119d83ca088e Author: Kevin Bowling AuthorDate: 2026-08-03 08:05:49 +0000 Commit: Kevin Bowling CommitDate: 2026-08-03 10:19:45 +0000 igb: recover retained i350 admin interrupts I350 can retain EICR.OTHER with MDDET and LVMMC asserted while the admin vector and legacy cause remain enabled. The anti-spoof filter continues dropping packets, but no MSI-X is delivered and the spoof diagnostic is lost. Preserve the one-shot setup drain across iflib reset preparation, clear ICR before LVMMC during i350 setup, and kick the enabled admin vector from each admin pass. The synthetic no-cause interrupt stays in the filter and also releases a retained MDDET cause. Keep 82576 drain ordering and stop-time cleanup unchanged. --- sys/dev/e1000/if_igb_iov.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/sys/dev/e1000/if_igb_iov.c b/sys/dev/e1000/if_igb_iov.c index 7a7348ede657..7b6c18690db5 100644 --- a/sys/dev/e1000/if_igb_iov.c +++ b/sys/dev/e1000/if_igb_iov.c @@ -677,7 +677,15 @@ igb_iov_reset_prepare(struct e1000_softc *sc) atomic_readandclear_32(&sc->iov_pending); atomic_readandclear_32(&sc->iov_spoof_pending); atomic_readandclear_32(&sc->iov_blocked_pending); - atomic_readandclear_32(&sc->iov_intr_drain_pending); + /* + * Normal iflib initialization prepares the reset before + * igb_iov_initialize() requests this drain. Preserve a still-pending + * I350 request across a later stop or repeated preparation so the next + * interrupt arm consumes it. Other families retain the ordinary + * stop-time cleanup. + */ + if (sc->hw.mac.type != e1000_i350) + atomic_readandclear_32(&sc->iov_intr_drain_pending); } void @@ -1735,6 +1743,17 @@ igb_iov_handle_mdd(struct e1000_softc *sc) if ((cleared & (1U << sc->pool)) != 0) sc->iov_pf_mdd_blocked = false; } + if (sc->hw.mac.type == e1000_i350) { + /* + * I350 can retain EICR.OTHER without delivering the admin MSI-X + * even though its EIMS and legacy IMS bits remain enabled. Kick + * the already-enabled vector on each admin pass so its filter + * consumes any retained ICR/LVMMC cause. A synthetic interrupt + * with no legacy cause is handled entirely by the filter. + */ + E1000_WRITE_REG(&sc->hw, E1000_EICS, sc->link_mask); + E1000_WRITE_FLUSH(&sc->hw); + } } void @@ -1928,11 +1947,20 @@ igb_iov_initialize(struct e1000_softc *sc) * active state. Mailbox requests are also serviced by the periodic * admin pass, and ping_all_vfs() below supplies a fresh notification. */ + /* + * Clear the setup-time interrupt latch before its diagnostic state. + * I350 does not reliably generate the next MDDET edge when LVMMC is + * consumed while ICR.MDDET remains latched. This differs deliberately + * from the final arm-time drain, where ICR is read last so a later event + * remains pending for the unmask. + */ + if (hw->mac.type == e1000_i350) + (void)E1000_READ_REG(hw, E1000_ICR); (void)E1000_READ_REG(hw, E1000_LVMMC); if (hw->mac.type == e1000_82576) (void)E1000_READ_REG(hw, E1000_WVBR); - /* Read ICR last so a later event remains pending for the arm below. */ - (void)E1000_READ_REG(hw, E1000_ICR); + if (hw->mac.type != e1000_i350) + (void)E1000_READ_REG(hw, E1000_ICR); atomic_readandclear_32(&sc->iov_mdd_cause); atomic_readandclear_32(&sc->iov_pending); atomic_readandclear_32(&sc->iov_spoof_pending);