From nobody Tue Feb 24 10:45:12 2026 X-Original-To: dev-commits-src-branches@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 4fKvWF3Pqtz6ThKj for ; Tue, 24 Feb 2026 10:45:13 +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 "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fKvWD6Rk8z42pq for ; Tue, 24 Feb 2026 10:45:12 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1771929912; 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=EWX4mnDApX1BNK9UZmbe7kPsFWrXAklW0nyb4xl+C7o=; b=qecsc2g3SCqNYSuuY5r4F+xN6ymv+2tQ9ouK8frtJvtcsiLbNiTqCZQJzcOMozbWpxDSrB C1gNdgdpRPT/A7XYhZbqbIUPHO/NwrFmWx08UgfYGkiKKcjOOkZD9d5mrQhAdue6QR89Qq +6HTCuS+qIjbRh/ox3Aa9ofM2v0SkrTXvo3HEpe4oZdXESjTh0Wvfb+rHY/ymYBMMQl6We EwOtml7ot7xGm6mxeS/MixnfTEOMj9oBnXiu7udH3IxUPRQnzzr7UtzMGUQotUhPq0LTEN Fo+7V5cZSGsGckDQUK+TulBhzGsqgyUWBgatX9k7ETBGCLVn77LzrG3iou3Dog== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1771929912; a=rsa-sha256; cv=none; b=SRtfyX7DC+QXvNVBlswV4lj2/wUWeGa87kw4iLCAHBB1IUVAeT2x2xf9GTuCWCUB2lcrGx aXm5x4xdAJLlcfD2EEpZ4/OhA7F8iwrTaqZxEPZ5ph1f90rYMlgkhlJgv4t02A/wnUpRxW ZcwhFR+ErA/TnLwop0oIvtS0+PWlO1SEPqhLvjPszx5jGzCm8/MgPvNpX8QqSGi2ocNu95 b/CeGYZGRSNXcy9NVXSrg2VKZv9enrkOuS7Kv5/0zMSy0MMnLO3SuRI66vqXV9suRsm7ib LlAPWQfe2MG/n70s8nfxf03XKiS6pZegdcc1LWw1yYZjnd8fQRgcvqkfPLlQZw== 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=1771929912; 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=EWX4mnDApX1BNK9UZmbe7kPsFWrXAklW0nyb4xl+C7o=; b=pjOQZLC+ObSF0bMC5PXTmf9ynXXXeX0XuoS2ToEjkLsaHoctZxOvO8bk4WPY25zSc0V/ar rBL4c66+yR4Fgseq+OSS+7NPwHt6e/hgI1E9srZlCrVhDvauEL/yxfByp7qYADQMieyGab /AxXckXyGEKALaBWWC4IuhVrUh68xSzEJcTNeR0ZxuNtNukTMiODfZJEXZRuaMsFN3lL0y u9/aaJNdD43d9uvIwCdguNuoswv+/RnAcAwofgPlKjFgBQEMCZVcjKwNpmctg1YDkI+o97 8SqyVkOwMoZp/4Rcuu6mAPpnMV8V6IxsxC8GAVk5mHQ/S8nq65M7UkFPd0J4Nw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fKvWD5RvHz1BK8 for ; Tue, 24 Feb 2026 10:45:12 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 37282 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 24 Feb 2026 10:45:12 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: Zhenlei Huang Subject: git: eeb4c04dd12b - stable/13 - qlnxe: Refactor setting the promiscuous and allmulti mode List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-branches@freebsd.org Sender: owner-dev-commits-src-branches@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: zlei X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: eeb4c04dd12becd430e9367a679f72d6ee9100f0 Auto-Submitted: auto-generated Date: Tue, 24 Feb 2026 10:45:12 +0000 Message-Id: <699d8138.37282.48a9226f@gitrepo.freebsd.org> The branch stable/13 has been updated by zlei: URL: https://cgit.FreeBSD.org/src/commit/?id=eeb4c04dd12becd430e9367a679f72d6ee9100f0 commit eeb4c04dd12becd430e9367a679f72d6ee9100f0 Author: Zhenlei Huang AuthorDate: 2026-02-06 17:52:54 +0000 Commit: Zhenlei Huang CommitDate: 2026-02-24 10:15:37 +0000 qlnxe: Refactor setting the promiscuous and allmulti mode There are two entry points to set the promiscuous and allmulti mode. One is ioctl, and another is the init routine. Given they share almost the identical logic, refactor a little to make the code more clear. While here, for the ioctl, translate the error to EINVAL to avoid confusing the net stack. Reviewed by: kbowling MFC after: 5 days Differential Revision: https://reviews.freebsd.org/D54890 (cherry picked from commit 45b1718fadae7d56051ba04ef9d7a175a602a226) (cherry picked from commit b8d2c1c367465506b66a1696483caec1d04b2ea0) (cherry picked from commit 00ab0df79364f4567ad61f6a66eba1b2f0a7d507) --- sys/dev/qlnx/qlnxe/qlnx_def.h | 1 - sys/dev/qlnx/qlnxe/qlnx_os.c | 80 +++++++++++++++++++------------------------ 2 files changed, 36 insertions(+), 45 deletions(-) diff --git a/sys/dev/qlnx/qlnxe/qlnx_def.h b/sys/dev/qlnx/qlnxe/qlnx_def.h index 3e63bd2d1882..d647f928f6d4 100644 --- a/sys/dev/qlnx/qlnxe/qlnx_def.h +++ b/sys/dev/qlnx/qlnxe/qlnx_def.h @@ -370,7 +370,6 @@ struct qlnx_host { uint16_t device_id; struct ifnet *ifp; - int if_flags; volatile int link_up; struct ifmedia media; uint16_t max_frame_size; diff --git a/sys/dev/qlnx/qlnxe/qlnx_os.c b/sys/dev/qlnx/qlnxe/qlnx_os.c index cce23f0f7ea1..311ab73eb868 100644 --- a/sys/dev/qlnx/qlnxe/qlnx_os.c +++ b/sys/dev/qlnx/qlnxe/qlnx_os.c @@ -85,8 +85,8 @@ static void qlnx_init_ifnet(device_t dev, qlnx_host_t *ha); static void qlnx_init(void *arg); static void qlnx_init_locked(qlnx_host_t *ha); static int qlnx_set_multi(qlnx_host_t *ha, uint32_t add_multi); -static int qlnx_set_promisc(qlnx_host_t *ha, int enabled); -static int qlnx_set_allmulti(qlnx_host_t *ha, int enabled); +static int qlnx_set_promisc_allmulti(qlnx_host_t *ha, int flags); +static int _qlnx_set_promisc_allmulti(qlnx_host_t *ha, bool promisc, bool allmulti); static int qlnx_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data); static int qlnx_media_change(struct ifnet *ifp); static void qlnx_media_status(struct ifnet *ifp, struct ifmediareq *ifmr); @@ -2624,44 +2624,49 @@ qlnx_set_multi(qlnx_host_t *ha, uint32_t add_multi) } static int -qlnx_set_promisc(qlnx_host_t *ha, int enabled) +qlnx_set_promisc_allmulti(qlnx_host_t *ha, int flags) { int rc = 0; - uint8_t filter; if (qlnx_vf_device(ha) == 0) return (0); - filter = ha->filter; - if (enabled) { - filter |= ECORE_ACCEPT_MCAST_UNMATCHED; - filter |= ECORE_ACCEPT_UCAST_UNMATCHED; - } else { - filter &= ~ECORE_ACCEPT_MCAST_UNMATCHED; - filter &= ~ECORE_ACCEPT_UCAST_UNMATCHED; - } - - rc = qlnx_set_rx_accept_filter(ha, filter); + rc = _qlnx_set_promisc_allmulti(ha, flags & IFF_PROMISC, + flags & IFF_ALLMULTI); return (rc); } static int -qlnx_set_allmulti(qlnx_host_t *ha, int enabled) +_qlnx_set_promisc_allmulti(qlnx_host_t *ha, bool promisc, bool allmulti) { int rc = 0; uint8_t filter; - - if (qlnx_vf_device(ha) == 0) - return (0); + bool mcast, ucast; filter = ha->filter; - if (enabled) { + filter |= ECORE_ACCEPT_UCAST_MATCHED; + filter |= ECORE_ACCEPT_MCAST_MATCHED; + filter |= ECORE_ACCEPT_BCAST; + + mcast = promisc || allmulti; + ucast = promisc; + + if (mcast) filter |= ECORE_ACCEPT_MCAST_UNMATCHED; - } else { + else filter &= ~ECORE_ACCEPT_MCAST_UNMATCHED; - } - rc = qlnx_set_rx_accept_filter(ha, filter); + if (ucast) + filter |= ECORE_ACCEPT_UCAST_UNMATCHED; + else + filter &= ~ECORE_ACCEPT_UCAST_UNMATCHED; + + if (filter == ha->filter) + return (0); + + rc = qlnx_set_rx_accept_filter(ha, filter); + if (rc == 0) + ha->filter = filter; return (rc); } @@ -2701,13 +2706,8 @@ qlnx_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) if (ifp->if_flags & IFF_UP) { if (ifp->if_drv_flags & IFF_DRV_RUNNING) { - if ((ifp->if_flags ^ ha->if_flags) & - IFF_PROMISC) { - ret = qlnx_set_promisc(ha, ifp->if_flags & IFF_PROMISC); - } else if ((ifp->if_flags ^ ha->if_flags) & - IFF_ALLMULTI) { - ret = qlnx_set_allmulti(ha, ifp->if_flags & IFF_ALLMULTI); - } + if (qlnx_set_promisc_allmulti(ha, ifp->if_flags) != 0) + ret = EINVAL; } else { ha->max_frame_size = ifp->if_mtu + ETHER_HDR_LEN + ETHER_CRC_LEN; @@ -2718,7 +2718,6 @@ qlnx_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data) qlnx_stop(ha); } - ha->if_flags = ifp->if_flags; QLNX_UNLOCK(ha); break; @@ -7123,6 +7122,9 @@ qlnx_clean_filters(qlnx_host_t *ha) { int rc = 0; + /* Reset rx filter */ + ha->filter = 0; + /* Remove all unicast macs */ rc = qlnx_remove_all_ucast_mac(ha); if (rc) @@ -7166,7 +7168,6 @@ static int qlnx_set_rx_mode(qlnx_host_t *ha) { int rc = 0; - uint8_t filter; const struct ifnet *ifp = ha->ifp; rc = qlnx_set_ucast_rx_mac(ha, ECORE_FILTER_REPLACE, IF_LLADDR(ifp)); @@ -7177,19 +7178,10 @@ qlnx_set_rx_mode(qlnx_host_t *ha) if (rc) return rc; - filter = ECORE_ACCEPT_UCAST_MATCHED | - ECORE_ACCEPT_MCAST_MATCHED | - ECORE_ACCEPT_BCAST; - - if (qlnx_vf_device(ha) == 0 || (ha->ifp->if_flags & IFF_PROMISC)) { - filter |= ECORE_ACCEPT_UCAST_UNMATCHED; - filter |= ECORE_ACCEPT_MCAST_UNMATCHED; - } else if (ha->ifp->if_flags & IFF_ALLMULTI) { - filter |= ECORE_ACCEPT_MCAST_UNMATCHED; - } - ha->filter = filter; - - rc = qlnx_set_rx_accept_filter(ha, filter); + if (qlnx_vf_device(ha) == 0) + rc = _qlnx_set_promisc_allmulti(ha, true, true); + else + rc = qlnx_set_promisc_allmulti(ha, ifp->if_flags); return (rc); }