From nobody Wed Feb 11 20:29:53 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 4fB95s5jM6z6S98w for ; Wed, 11 Feb 2026 20:29: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 "R13" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fB95s3P29z3HQJ for ; Wed, 11 Feb 2026 20:29:53 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1770841793; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=yrPdYxLrwS1UzwmQgv4WW1CVvYpgh40VDxB7kfmgYDo=; b=dY4wbzmuX8zBp3HeT4EQdjI/iuym+Jc5YJ6Gt9TRNQo6capUOSIBGNXw1X5fwkeL6YoSp1 S5S4Du2G2e/wWjs0KvkknqisxL7sgqlahpV3tn6W0rmZsqw5XupkBjX2FbOSinC/d6lLfm CTjMhBtu9q9jclpidP+Uht64RTY3WuWsMGzt4jbtPQbaxtve/XQZzTEaNsQ/nkTu5nRcJt s1eOJyrwaZzCvsWoACAcaoFJn4YJHF5i1v/g3yotcSvQ8Xg5qIfMf9kx2Wq3BSwEU3wQ7c 2/ZN/xfx4gZF2lRbIPJoOoAnNIDpTOsfatfkZhgi2yYxJnQPjqlWWP9uvUSnVg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1770841793; a=rsa-sha256; cv=none; b=Zkdlr7JczbmmQmF60DHlwWUBweesmsCAlpOj5SlWgzyyTVGCE69FQFp7vlz3qRhx6ac+sK GMqgHN/lC8G/Uwz/Lb1zd74vHcMl2qPKn+nVSBc3VPAIFGI2/c7yGcfQDjEuHkFOu0jwYU uM5RPY8g6saUK1HWMPUNRYczNEtyCnGPuzW4qGoUIba7SLOmlsUWMYtjhyM5nkCena+mgX LCiOe/p8rAjwHWxk7K4cpoTIXwYYj8YdKln9vOLjXTth+PIwkjoi8XVfHIOgJuv00q2e7f C6edU92isMetne4ZebsEe25Xd6zIdc8XDmOnWjNnHQztmxbPYdpUePt25uIF6w== 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=1770841793; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=yrPdYxLrwS1UzwmQgv4WW1CVvYpgh40VDxB7kfmgYDo=; b=HDbgr6WSJDzw1EG9QjxmO63lksk25dlZn1cWN9GPd6gqx/TEKraASzGHXKmCGrKPHbLRk6 PzhCUT8erxm3eMEuBdsromwCCj25Sm2EZmKv+eSu2M/VILYQEspKZC1BdudgU9b7sGV121 ZBSPAIESoQMlmjdRNeQhYt9cvlZQESOD5Y64EsJ6f5Q3CR+KbIXVuVPiqfH88o4aEoWev2 SM2lgq9cMKQUL3oCyl96b45ZVoGEC9fOkq+7LBmJGXE2E7Uh+SJfyYONQPGM7X8d9bMSYE 423t3xqYW8XcqqyDMvvTmeqxkTCf9k0TrZM5ZPwflP2Xeg/NYpwafz1QPSHPtA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fB95s20z6z13M1 for ; Wed, 11 Feb 2026 20:29:53 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 46782 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 11 Feb 2026 20:29:53 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org Cc: Zhenlei Huang From: Colin Percival Subject: git: 1e2393930601 - releng/14.4 - 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: cperciva X-Git-Repository: src X-Git-Refname: refs/heads/releng/14.4 X-Git-Reftype: branch X-Git-Commit: 1e23939306011ac910837d53efd4456ba29b029f Auto-Submitted: auto-generated Date: Wed, 11 Feb 2026 20:29:53 +0000 Message-Id: <698ce6c1.46782.4ccc82ad@gitrepo.freebsd.org> The branch releng/14.4 has been updated by cperciva: URL: https://cgit.FreeBSD.org/src/commit/?id=1e23939306011ac910837d53efd4456ba29b029f commit 1e23939306011ac910837d53efd4456ba29b029f Author: Zhenlei Huang AuthorDate: 2026-02-06 17:52:54 +0000 Commit: Colin Percival CommitDate: 2026-02-11 20:29:19 +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. Approved by: re (cperciva) 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 ed3a0403bb6f..6184e78fe846 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; if_t 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 8a12d45512ac..bc7ff63fe783 100644 --- a/sys/dev/qlnx/qlnxe/qlnx_os.c +++ b/sys/dev/qlnx/qlnxe/qlnx_os.c @@ -90,8 +90,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(if_t ifp, u_long cmd, caddr_t data); static int qlnx_media_change(if_t ifp); static void qlnx_media_status(if_t ifp, struct ifmediareq *ifmr); @@ -2573,44 +2573,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); } @@ -2652,13 +2657,8 @@ qlnx_ioctl(if_t ifp, u_long cmd, caddr_t data) if (flags & IFF_UP) { if (if_getdrvflags(ifp) & IFF_DRV_RUNNING) { - if ((flags ^ ha->if_flags) & - IFF_PROMISC) { - ret = qlnx_set_promisc(ha, flags & IFF_PROMISC); - } else if ((if_getflags(ifp) ^ ha->if_flags) & - IFF_ALLMULTI) { - ret = qlnx_set_allmulti(ha, flags & IFF_ALLMULTI); - } + if (qlnx_set_promisc_allmulti(ha, flags) != 0) + ret = EINVAL; } else { ha->max_frame_size = if_getmtu(ifp) + ETHER_HDR_LEN + ETHER_CRC_LEN; @@ -2669,7 +2669,6 @@ qlnx_ioctl(if_t ifp, u_long cmd, caddr_t data) qlnx_stop(ha); } - ha->if_flags = if_getflags(ifp); QLNX_UNLOCK(ha); break; @@ -6989,6 +6988,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) @@ -7032,7 +7034,6 @@ static int qlnx_set_rx_mode(qlnx_host_t *ha) { int rc = 0; - uint8_t filter; const if_t ifp = ha->ifp; rc = qlnx_set_ucast_rx_mac(ha, ECORE_FILTER_REPLACE, if_getlladdr(ifp)); @@ -7043,19 +7044,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 || (if_getflags(ha->ifp) & IFF_PROMISC)) { - filter |= ECORE_ACCEPT_UCAST_UNMATCHED; - filter |= ECORE_ACCEPT_MCAST_UNMATCHED; - } else if (if_getflags(ha->ifp) & 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, if_getflags(ifp)); return (rc); }