Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 05 Feb 2026 05:31:01 +0000
From:      Zhenlei Huang <zlei@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org
Subject:   git: b562bbc06adf - stable/13 - e1000: Fix setting the promiscuous mode
Message-ID:  <69842b15.229a0.c7d95b8@gitrepo.freebsd.org>

index | next in thread | raw e-mail

The branch stable/13 has been updated by zlei:

URL: https://cgit.FreeBSD.org/src/commit/?id=b562bbc06adf2039e00676440c83dcd7f6900fa8

commit b562bbc06adf2039e00676440c83dcd7f6900fa8
Author:     Zhenlei Huang <zlei@FreeBSD.org>
AuthorDate: 2026-02-02 12:26:31 +0000
Commit:     Zhenlei Huang <zlei@FreeBSD.org>
CommitDate: 2026-02-05 05:28:50 +0000

    e1000: Fix setting the promiscuous mode
    
    The variable reg_rctl stores the value read from reg E1000_RCTL. It
    may contain bits E1000_RCTL_VFE and E1000_RCTL_CFIEN which control
    VLAN hardware filter feature. The promiscuous mode implies all tagged
    or untagged packets should be accepted, so the VLAN hardware filter
    feature should be disabled when enabling the promiscuous mode.
    Calling em_if_vlan_filter_disable() did the task, but later writing
    the value of reg_rctl back to the reg E1000_RCTL may restore the
    feature.
    
    Move the calling of em_if_vlan_filter_disable() after writing the reg
    to fix that.
    
    PR:             292759
    Reviewed by:    kbowling
    Tested by:      vova@zote.me
    Fixes:          2796f7cab107 e1000: Fix up HW vlan ops
    MFC after:      3 days
    Differential Revision:  https://reviews.freebsd.org/D54973
    
    (cherry picked from commit e63ee5fedb8dab51f1bd6d24cc650b68d9663db5)
    (cherry picked from commit 8880678b7a47ccfdcc14d3e7cad7f137862dccea)
    (cherry picked from commit 3cfe90545f016fa190158aa4830f3256e01a7cb2)
---
 sys/dev/e1000/if_em.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sys/dev/e1000/if_em.c b/sys/dev/e1000/if_em.c
index 75b8940587f6..3244dc9fa348 100644
--- a/sys/dev/e1000/if_em.c
+++ b/sys/dev/e1000/if_em.c
@@ -2094,11 +2094,11 @@ em_if_set_promisc(if_ctx_t ctx, int flags)
 
 	if (flags & IFF_PROMISC) {
 		reg_rctl |= (E1000_RCTL_UPE | E1000_RCTL_MPE);
-		em_if_vlan_filter_disable(sc);
 		/* Turn this on if you want to see bad packets */
 		if (em_debug_sbp)
 			reg_rctl |= E1000_RCTL_SBP;
 		E1000_WRITE_REG(&sc->hw, E1000_RCTL, reg_rctl);
+		em_if_vlan_filter_disable(sc);
 	} else {
 		if (flags & IFF_ALLMULTI) {
 			reg_rctl |= E1000_RCTL_MPE;


home | help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?69842b15.229a0.c7d95b8>