From nobody Mon Mar 30 04:05:22 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 4fkd2B6rzjz6W6m9 for ; Mon, 30 Mar 2026 04:05: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 "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fkd2B6Wvzz3jrG for ; Mon, 30 Mar 2026 04:05:22 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774843522; 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=G71a8ecfNwciWHU9tOognNUmOHuODWbb7I9VQG319u0=; b=uJFm4GcdcfU+gmEkREcI1ItCosKq89Jrmqld995alkmZ9I4Y11WtTTbk6dr4BaAmWNX6i+ RMOD3/l22EAIaLh1+OsF6nfSvMVg2dmcvGz/fTi97SKaNJIb0WGHbI9Z2JUVXoPremOKSB WchNsyZDQUW4UkDwSRecrGiS07+XjufjWhEbqERzMuaROSZk1j/8M92GIuzeLcmpDCgyUf JYRJGwqxmNCY0BjK3i0aKZV6J75SURuhbyMYApzB6KnO9rYNttCDSWaoG22TGlkhDgSh0g Ya4jZ7QYdSQJT5QxgVa3/Sh8ZCLDfzlCOY88gKAPqUPteXSqjyblYY3wLADXew== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774843522; a=rsa-sha256; cv=none; b=E9jzRXJFBUmbf4YWBpemVNMw8nMEqU5AsIZULgJDlbMAfaebq5fNBDmrgpL4Xd+GY8Hnli yYN5EJG8BQx+RvNkjz47CXpnU+XaQX1kowmdUwfEJd+AR1OicelxYtYh35/ZZ/PScvAEBS AK9tDgapDDqeV1rFRmzm8u6a37FwlsgQwHmlW60eJbk5D14RMeGndbfta0Kcn64QBAsj2p zfICuAlWM8lMAaApS+wLF1ZoPzKKraGiipE+yw2MA3Suji/wnCsPb/jtbS2KbaDy0m8mXQ Hd6W0M4bQIWDBpRrhGwAuoNYIYjTtvCY1warljseP7df5KUueqDZNH037fkGkw== 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=1774843522; 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=G71a8ecfNwciWHU9tOognNUmOHuODWbb7I9VQG319u0=; b=u+WTbQH43I1UTUSWbEDfkE385t+HJGNncI6DCyUt4suiY1gv264pVDPPylJYLkAih6weQ+ 67QcEcyC+XpjnExzHdIuRDttHlFXQLlcoFQGrUnlivw7Vkc+geTQdgkq5s0yiv4us3fPJX QZEoQL3PbVLXmiwCPWntnCvvojBz+PshoGdpBf87ToCYU9twM/f/buDN56oOHyW+5UB/OH 47ATFPNRUEQS4m349/y8VEHUrG5gBHDv/U8BFR/feIldw5kygKVB8G8C0GewQzxBpOpERj VHDfyrSbZCqQa4bcNDhb3dIXBYnec/MJeXOG5R+nodg0H+5yAA4ihQNmRrhReg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkd2B65dYz9fZ for ; Mon, 30 Mar 2026 04:05:22 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 364b3 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 04:05:22 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Bjoern A. Zeeb Subject: git: e8166d7f378b - main - LinuxKPI wlan drivers: update makefiles to not use WITH_ 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: bz X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e8166d7f378bb449315aff535909c153f3e71daf Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 04:05:22 +0000 Message-Id: <69c9f682.364b3.741e2c0f@gitrepo.freebsd.org> The branch main has been updated by bz: URL: https://cgit.FreeBSD.org/src/commit/?id=e8166d7f378bb449315aff535909c153f3e71daf commit e8166d7f378bb449315aff535909c153f3e71daf Author: Bjoern A. Zeeb AuthorDate: 2026-03-19 23:02:05 +0000 Commit: Bjoern A. Zeeb CommitDate: 2026-03-30 03:53:51 +0000 LinuxKPI wlan drivers: update makefiles to not use WITH_ Up to now the LinuxKPI wlan drivers were using local variables starting with a WITH_ prefix in their Makefiles. That is likely to collide with other mechanisms like WITH_ and WITHOUT_ from src.conf. Adjust the local variables to use a driver name prefix for now to control what is built and what is not. These variables are mainly for the time of development so we can turn off/on a feature or bus attachment while working on it. Otherwise they are there for documentation purposes. The only reason one would change them locally would be if someone was to build a very custom image and not want certain bits (e.g., USB support) being compiled into the modules. While here, try to harmonize some parts of the Makefiles. Suggested by: imp Discussed with: imp Reviewed by: imp Sponsored by: The FreeBSD Foundation MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D55977 --- sys/modules/ath10k/Makefile | 38 ++++++++-------- sys/modules/ath11k/Makefile | 12 ++++- sys/modules/ath12k/Makefile | 8 +++- sys/modules/athk_common/Makefile | 13 +++--- sys/modules/brcm80211/brcmfmac/Makefile | 80 ++++++++++++++++++--------------- sys/modules/brcm80211/brcmutil/Makefile | 16 +++---- sys/modules/iwlwifi/Makefile | 18 ++++---- sys/modules/mt76/Makefile | 6 +++ sys/modules/mt76/Makefile.inc | 44 ++++++++++-------- sys/modules/mt76/core/Makefile | 34 +++++++------- sys/modules/mt76/mt7615/Makefile | 23 ++++++---- sys/modules/mt76/mt7915/Makefile | 35 +++++++++------ sys/modules/mt76/mt7921/Makefile | 36 ++++++++------- sys/modules/mt76/mt7925/Makefile | 24 +++++----- sys/modules/mt76/mt7996/Makefile | 31 ++++++++----- sys/modules/rtw88/Makefile | 58 ++++++++++++------------ sys/modules/rtw89/Makefile | 57 +++++++++++------------ 17 files changed, 300 insertions(+), 233 deletions(-) diff --git a/sys/modules/ath10k/Makefile b/sys/modules/ath10k/Makefile index 16f481116357..2ffa8532ff47 100644 --- a/sys/modules/ath10k/Makefile +++ b/sys/modules/ath10k/Makefile @@ -3,11 +3,11 @@ DEVATH10KDIR= ${SRCTOP}/sys/contrib/dev/athk/ath10k .PATH: ${DEVATH10KDIR} # Bus attachments. -WITH_PCI= 1 -WITH_USB= 0 # Never finished upstream, not working. +ATH10K_PCI= 1 +ATH10K_USB= 0 # Currently not working again, upstream kaputt. -WITH_CONFIG_FWLOG= 1 -WITH_LEDS= 0 +ATH10K_CONFIG_FWLOG= 1 +ATH10K_LEDS= 0 KMOD= if_ath10k @@ -17,31 +17,32 @@ SRCS+= txrx.c wmi.c wmi-tlv.c SRCS+= p2p.c swap.c # PCI parts; PCI needs to be compiled into the kernel and cannot be loaded. -.if defined(WITH_PCI) && ${WITH_PCI} > 0 && ${KERN_OPTS:MDEV_PCI} +.if defined(ATH10K_PCI) && ${ATH10K_PCI} > 0 && ${KERN_OPTS:MDEV_PCI} SRCS+= pci.c .endif # USB parts; USB can be loaded and is unconditional on any kernel config. -.if defined(WITH_USB) && ${WITH_USB} > 0 +.if defined(ATH10K_USB) && ${ATH10K_USB} > 0 SRCS+= usb.c .endif -# Other -SRCS+= ${LINUXKPI_GENSRCS} -SRCS+= opt_wlan.h opt_inet6.h opt_inet.h opt_acpi.h - -.if defined(WITH_CONFIG_FWLOG) && ${WITH_CONFIG_FWLOG} > 0 +.if defined(ATH10K_CONFIG_FWLOG) && ${ATH10K_CONFIG_FWLOG} > 0 SRCS+= fwlog.c -CFLAGS+= -DCONFIG_FWLOG=${WITH_CONFIG_FWLOG} +CFLAGS+= -DCONFIG_FWLOG .endif -.if defined(WITH_LEDS) && ${WITH_LEDS} > 0 +.if defined(ATH10K_LEDS) && ${ATH10K_LEDS} > 0 CFLAGS+= -DCONFIG_ATH10K_LEDS SRCS+= leds.c .endif -CFLAGS+= -DKBUILD_MODNAME='"ath10k"' -CFLAGS+= -DLINUXKPI_VERSION=61900 +# Always on for now. +CFLAGS+= -DCONFIG_ATH10K_DEBUG +CFLAGS+= -DLINUXKPI_WANT_LINUX_ACPI + +# Other +SRCS+= ${LINUXKPI_GENSRCS} +SRCS+= opt_wlan.h opt_inet6.h opt_inet.h opt_acpi.h CFLAGS+= -I${DEVATH10KDIR} CFLAGS+= -I${DEVATH10KDIR}/.. @@ -49,9 +50,7 @@ CFLAGS+= ${LINUXKPI_INCLUDES} # Helpful after fresh imports. #CFLAGS+= -ferror-limit=0 -CFLAGS+= -DCONFIG_ATH10K_DEBUG -CFLAGS+= -DLINUXKPI_WANT_LINUX_ACPI - +# TODO: further options and SRCS files. #CFLAGS+= -DCONFIG_ATH10K_AHB #CFLAGS+= -DCONFIG_ATH10K_DEBUGFS #CFLAGS+= -DCONFIG_ATH10K_DFS_CERTIFIED @@ -65,4 +64,7 @@ CFLAGS+= -DLINUXKPI_WANT_LINUX_ACPI #CFLAGS+= -DCONFIG_PM_SLEEP #CFLAGS+= -DCONFIG_THERMAL +CFLAGS+= -DKBUILD_MODNAME='"ath10k"' +CFLAGS+= -DLINUXKPI_VERSION=61900 + .include diff --git a/sys/modules/ath11k/Makefile b/sys/modules/ath11k/Makefile index d17e76255802..b1eb2422cc3d 100644 --- a/sys/modules/ath11k/Makefile +++ b/sys/modules/ath11k/Makefile @@ -2,6 +2,9 @@ DEVATH11KDIR= ${SRCTOP}/sys/contrib/dev/athk/ath11k .PATH: ${DEVATH11KDIR} +ATH11K_PCI= 1 +ATH11K_AHB= 0 + ATH11K_DEBUGFS= 0 ATH11K_TRACE= 0 ATH11K_THERMAL= 0 @@ -18,10 +21,15 @@ SRCS+= ce.c peer.c dbring.c hw.c pcic.c SRCS+= fw.c p2p.c # PCI +.if defined(ATH11K_PCI) && ${ATH11K_PCI} > 0 && ${KERN_OPTS:MDEV_PCI} SRCS+= mhi.c pci.c +CFLAGS+= -DCONFIG_ATH11K_PCI +.endif -# AHB -#SRCS+= ahb.c +.if defined(ATH11K_AHB) && ${ATH11K_AHB} > 0 +SRCS+= ahb.c +CFLAGS+= -DCONFIG_ATH11K_AHB +.endif .if defined(ATH11K_DEBUGFS) && ${ATH11K_DEBUGFS} > 0 SRCS+= debugfs.c debugfs_htt_stats.c debugfs_sta.c diff --git a/sys/modules/ath12k/Makefile b/sys/modules/ath12k/Makefile index ff61769bd99e..018504812995 100644 --- a/sys/modules/ath12k/Makefile +++ b/sys/modules/ath12k/Makefile @@ -2,8 +2,10 @@ DEVATH12KDIR= ${SRCTOP}/sys/contrib/dev/athk/ath12k .PATH: ${DEVATH12KDIR} -ATH12K_ACPI= 0 +ATH12K_PCI= 1 ATH12K_AHB= 0 + +ATH12K_ACPI= 0 ATH12K_COREDUMP= 0 ATH12K_DEBUGFS= 0 ATH12K_PM= 0 @@ -16,7 +18,11 @@ SRCS+= wmi.c mac.c reg.c htc.c qmi.c SRCS+= dp.c dp_tx.c dp_rx.c dp_mon.c debug.c SRCS+= ce.c peer.c dbring.c hw.c fw.c p2p.c +.if defined(ATH12K_PCI) && ${ATH12K_PCI} > 0 && ${KERN_OPTS:MDEV_PCI} SRCS+= mhi.c pci.c +.else +.error ath12k requires PCI support compiled in at this point +.endif .if defined(ATH12K_AHB) && ${ATH12K_AHB} > 0 CFLAGS+= -DCONFIG_ATH12K_AHB diff --git a/sys/modules/athk_common/Makefile b/sys/modules/athk_common/Makefile index 5400cfa7723d..d058d19cbe80 100644 --- a/sys/modules/athk_common/Makefile +++ b/sys/modules/athk_common/Makefile @@ -4,19 +4,19 @@ DEVDIR= ${SRCTOP}/sys/contrib/dev/athk KMOD= athk_common -WITH_ATH_DEBUG= 1 -WITH_ATH_TRACEPOINTS= 0 +ATHK_COMMON_ATH_DEBUG= 1 +ATHK_COMMON_ATH_TRACEPOINTS= 0 SRCS= main.c SRCS+= dfs_pattern_detector.c dfs_pri_detector.c SRCS+= hw.c key.c regd.c -.if defined(WITH_ATH_DEBUG) && ${WITH_ATH_DEBUG} > 0 +.if defined(ATHK_COMMON_ATH_DEBUG) && ${ATHK_COMMON_ATH_DEBUG} > 0 SRCS+= debug.c CFLAGS+= -DCONFIG_ATH_DEBUG .endif -.if defined(WITH_ATH_TRACEPOINTS) && ${WITH_ATH_TRACEPOINTS} > 0 +.if defined(ATHK_COMMON_ATH_TRACEPOINTS) && ${ATHK_COMMON_ATH_TRACEPOINTS} > 0 SRCS+= trace.c CFLAGS+= -DCONFIG_ATH_TRACEPOINTS .endif @@ -25,11 +25,12 @@ CFLAGS+= -DCONFIG_ATH_TRACEPOINTS SRCS+= ${LINUXKPI_GENSRCS} SRCS+= opt_wlan.h opt_inet6.h opt_inet.h opt_acpi.h -CFLAGS+= -DKBUILD_MODNAME='"athk_common"' - CFLAGS+= -I${DEVDIR} CFLAGS+= ${LINUXKPI_INCLUDES} # Helpful after fresh imports. #CFLAGS+= -ferror-limit=0 +CFLAGS+= -DKBUILD_MODNAME='"athk_common"' +CFLAGS+= -DLINUXKPI_VERSION=61900 + .include diff --git a/sys/modules/brcm80211/brcmfmac/Makefile b/sys/modules/brcm80211/brcmfmac/Makefile index b0c4d75a3d17..107914c2dc27 100644 --- a/sys/modules/brcm80211/brcmfmac/Makefile +++ b/sys/modules/brcm80211/brcmfmac/Makefile @@ -3,14 +3,16 @@ DEVDIR= ${SRCTOP}/sys/contrib/dev/broadcom/brcm80211/brcmfmac .PATH: ${DEVDIR} # Should split this up into a core driver and 3 more -WITH_PCI=1 -WITH_SDIO=0 -WITH_USB=0 +BRCMFMAC_PCI= 1 +BRCMFMAC_USB= 0 +BRCMFMAC_SDIO= 0 -WITH_DMI=0 -WITH_OF=0 -WITH_DEBUG=1 -WITH_TRACING=0 # ftrace probes; simple enough to change possibly; keep 0! +BRCMFMAC_PROTO_BCDC= 0 # SDIO, USB -- do not set manually +BRCMFMAC_DEBUG= 1 +BRCMFMAC_TRACING= 0 # ftrace probes; simple enough to change possibly; keep 0! +BRCMFMAC_OF= 0 +BRCMFMAC_DMI= 0 +BRCMFMAC_ACPI= 0 KMOD= if_brcmfmac @@ -21,46 +23,57 @@ SRCS+= fweh.c fwil.c fwvid.c p2p.c pno.c proto.c vendor.c xtlv.c SRCS+= wcc/core.c cyw/core.c bca/core.c # PCI parts; PCI needs to be compiled into the kernel and cannot be loaded. -.if defined(WITH_PCI) && ${WITH_PCI} > 0 && ${KERN_OPTS:MDEV_PCI} -SRCS+= pcie.c msgbuf.c commonring.c flowring.c -CFLAGS+= -DCONFIG_BRCMFMAC_PCIE=1 +.if defined(BRCMFMAC_PCI) && ${BRCMFMAC_PCI} > 0 && ${KERN_OPTS:MDEV_PCI} +SRCS+= pcie.c +CFLAGS+= -DCONFIG_BRCMFMAC_PCIE +SRCS+= msgbuf.c commonring.c flowring.c +CFLAGS+= -DCONFIG_BRCMFMAC_PROTO_MSGBUF .endif # SDIO parts; SDIO depends on an MMCCAM kernel. -.if defined(WITH_SDIO) && ${WITH_SDIO} > 0 && ${KERN_OPTS:MMMCCAM} +.if defined(BRCMFMAC_SDIO) && ${BRCMFMAC_SDIO} > 0 && ${KERN_OPTS:MMMCCAM} SRCS+= sdio.c bcmsdh.c SRCS+= sdio_if.h SRCS+= sdiodevs.h -CFLAGS+= -DCONFIG_BRCMFMAC_SDIO=1 +CFLAGS+= -DCONFIG_BRCMFMAC_SDIO +BRCMFMAC_PROTO_BCDC= 1 .endif # USB parts; USB can be loaded and is unconditional on any kernel config. -.if defined(WITH_USB) && ${WITH_USB} > 0 +.if defined(BRCMFMAC_USB) && ${BRCMFMAC_USB} > 0 SRCS+= usb.c -CFLAGS+= -DCONFIG_BRCMFMAC_USB=1 +CFLAGS+= -DCONFIG_BRCMFMAC_USB +BRCMFMAC_PROTO_BCDC= 1 .endif -.if (defined(WITH_SDIO) && ${WITH_SDIO} > 0) || \ - (defined(WITH_USB) && ${WITH_USB} > 0) -CFLAGS+= -DCONFIG_BRCMFMAC_PROTO_BCDC=1 +.if defined(BRCMFMAC_PROTO_BCDC) && ${BRCMFMAC_PROTO_BCDC} > 0 +CFLAGS+= -DCONFIG_BRCMFMAC_PROTO_BCDC SRCS+= bcdc.c fwsignal.c .endif -.if defined(WITH_DMI) && ${WITH_DMI} > 0 -SRCS+= dmi.c +.if defined(BRCMFMAC_DEBUG) && ${BRCMFMAC_DEBUG} > 0 +CFLAGS+= -DDEBUG -DCONFIG_BRCMDBG +SRCS+= debug.c .endif -.if defined(WITH_OF) && ${WITH_OF} > 0 +.if defined(BRCMFMAC_TRACING) && ${BRCMFMAC_TRACING} > 0 +SRCS+= tracepoint.c +CFLAGS+= -DCONFIG_BRCM_TRACING +.endif + +.if defined(BRCMFMAC_OF) && ${BRCMFMAC_OF} > 0 SRCS+= of.c +CFLAGS+= -DCONFIG_OF .endif -.if defined(WITH_DEBUG) && ${WITH_DEBUG} > 0 -CFLAGS+= -DDEBUG=${WITH_DEBUG} -SRCS+= debug.c +.if defined(BRCMFMAC_DMI) && ${BRCMFMAC_DMI} > 0 +SRCS+= dmi.c +CFLAGS+= -DCONFIG_DMI .endif -.if defined(WITH_TRACING) && ${WITH_TRACING} > 0 -SRCS+= tracepoint.c +.if defined(BRCMFMAC_ACPI) && ${BRCMFMAC_ACPI} > 0 +SRCS+= acpi.c +CFLAGS+= -DCONFIG_ACPI .endif # Other @@ -68,25 +81,18 @@ SRCS+= bus_if.h device_if.h pci_if.h vnode_if.h SRCS+= ${LINUXKPI_GENSRCS} SRCS+= opt_wlan.h opt_inet6.h opt_inet.h opt_acpi.h -CFLAGS+= -DKBUILD_MODNAME='"brcmfmac"' -CFLAGS+= -DLINUXKPI_VERSION=61700 - CFLAGS+= -I${DEVDIR} CFLAGS+= -I${DEVDIR}/../include CFLAGS+= ${LINUXKPI_INCLUDES} -CFLAGS+= -ferror-limit=0 - -#CFLAGS+= -DCONFIG_BRCM_TRACING=${WITH_TRACING} -CFLAGS+= -DCONFIG_BRCMFMAC_PROTO_MSGBUF=${WITH_PCI} -CFLAGS+= -DCONFIG_BRCMDBG=${WITH_DEBUG} - -#CFLAGS+= -DCONFIG_DMI=${WITH_DMI} -#CFLAGS+= -DCONFIG_OF=${WITH_OF} +# Helpful after fresh imports. +#CFLAGS+= -ferror-limit=0 #CFLAGS+= -DCONFIG_PM_SLEEP= -#CFLAGS+= -DCONFIG_ACPI=0 #CFLAGS+= -DCONFIG_PM #CFLAGS+= -DCONFIG_IPV6=0 +CFLAGS+= -DKBUILD_MODNAME='"brcmfmac"' +CFLAGS+= -DLINUXKPI_VERSION=61900 + .include diff --git a/sys/modules/brcm80211/brcmutil/Makefile b/sys/modules/brcm80211/brcmutil/Makefile index 3fc01f4894fd..7ef89be18bf9 100644 --- a/sys/modules/brcm80211/brcmutil/Makefile +++ b/sys/modules/brcm80211/brcmutil/Makefile @@ -2,27 +2,27 @@ DEVDIR= ${SRCTOP}/sys/contrib/dev/broadcom/brcm80211/brcmutil .PATH: ${DEVDIR} -WITH_DEBUG=1 +BRCMUTIL_DEBUG= 1 KMOD= brcmutil SRCS= d11.c utils.c +.if defined(BRCMUTIL_DEBUG) && ${BRCMUTIL_DEBUG} > 0 +CFLAGS+= -DDEBUG +.endif + # Other SRCS+= ${LINUXKPI_GENSRCS} SRCS+= bus_if.h device_if.h pci_if.h vnode_if.h SRCS+= opt_wlan.h opt_inet6.h opt_inet.h -CFLAGS+= -DKBUILD_MODNAME='"brcmutil"' -CFLAGS+= -DLINUXKPI_VERSION=61700 - -.if defined(WITH_DEBUG) && ${WITH_DEBUG} > 0 -CFLAGS+= -DDEBUG=${WITH_DEBUG} -.endif - CFLAGS+= -I${DEVDIR} CFLAGS+= -I${DEVDIR}/../include CFLAGS+= ${LINUXKPI_INCLUDES} #CFLAGS+= -ferror-limit=0 +CFLAGS+= -DKBUILD_MODNAME='"brcmutil"' +CFLAGS+= -DLINUXKPI_VERSION=61900 + .include diff --git a/sys/modules/iwlwifi/Makefile b/sys/modules/iwlwifi/Makefile index b5441744d77a..399e35b79d61 100644 --- a/sys/modules/iwlwifi/Makefile +++ b/sys/modules/iwlwifi/Makefile @@ -4,10 +4,10 @@ DEVIWLWIFIDIR= ${SRCTOP}/sys/contrib/dev/iwlwifi .PATH: ${DEVIWLWIFIDIR} -WITH_CONFIG_PM= 0 -WITH_DEBUGFS= 0 +IWLWIFI_CONFIG_PM= 0 +IWLWIFI_DEBUGFS= 0 .if ${KERN_OPTS:MDEV_ACPI} -WITH_CONFIG_ACPI= 1 +IWLWIFI_CONFIG_ACPI= 1 .endif KMOD= if_iwlwifi @@ -49,21 +49,21 @@ SRCS+= mld/regulatory.c mld/roc.c mld/rx.c mld/scan.c SRCS+= mld/session-protect.c mld/sta.c mld/stats.c mld/thermal.c SRCS+= mld/time_sync.c mld/tlc.c mld/tx.c -.if defined(WITH_DEBUGFS) && ${WITH_DEBUGFS} > 0 +.if defined(IWLWIFI_DEBUGFS) && ${IWLWIFI_DEBUGFS} > 0 SRCS+= fw/debugfs.c SRCS+= mvm/debugfs.c mvm/debugfs-vif.c SRCS+= mld/debugfs.c CFLAGS+= -DCONFIG_IWLWIFI_DEBUGFS CFLAGS+= -DCONFIG_MAC80211_DEBUGFS .endif -.if defined(WITH_CONFIG_PM) && ${WITH_CONFIG_PM} > 0 +.if defined(IWLWIFI_CONFIG_PM) && ${IWLWIFI_CONFIG_PM} > 0 SRCS+= mvm/d3.c SRCS+= mld/d3.c CFLAGS+= -DCONFIG_PM CFLAGS+= -DCONFIG_PM_SLEEP .endif -.if defined(WITH_CONFIG_ACPI) && ${WITH_CONFIG_ACPI} > 0 +.if defined(IWLWIFI_CONFIG_ACPI) && ${IWLWIFI_CONFIG_ACPI} > 0 SRCS.DEV_ACPI+= fw/acpi.c CFLAGS+= -DCONFIG_ACPI .endif @@ -74,9 +74,6 @@ CFLAGS+= -DLINUXKPI_WANT_LINUX_ACPI SRCS+= ${LINUXKPI_GENSRCS} SRCS+= opt_wlan.h opt_inet6.h opt_inet.h opt_acpi.h -CFLAGS+= -DKBUILD_MODNAME='"iwlwifi"' -CFLAGS+= -DLINUXKPI_VERSION=61700 - CFLAGS+= -I${DEVIWLWIFIDIR} CFLAGS+= ${LINUXKPI_INCLUDES} CFLAGS+= -DCONFIG_IWLDVM=0 @@ -96,6 +93,9 @@ CFLAGS+= -DCONFIG_IWLWIFI_DEVICE_TRACING=1 #CFLAGS+= -DCONFIG_THERMAL=1 #CFLAGS+= -DCONFIG_EFI=1 +CFLAGS+= -DKBUILD_MODNAME='"iwlwifi"' +CFLAGS+= -DLINUXKPI_VERSION=61900 + CWARNFLAGS.clang.drv.c+= -Wno-initializer-overrides CWARNFLAGS.drv.c+= -Wno-override-init ${CWARNFLAGS.${COMPILER_TYPE}.${.IMPSRC:T}} diff --git a/sys/modules/mt76/Makefile b/sys/modules/mt76/Makefile index 5abae4c5ad7c..726f7759e9be 100644 --- a/sys/modules/mt76/Makefile +++ b/sys/modules/mt76/Makefile @@ -1,8 +1,14 @@ +.include + SUBDIR= core SUBDIR+= mt7615 +.if ${KERN_OPTS:MDEV_PCI} SUBDIR+= mt7915 +.endif SUBDIR+= mt7921 SUBDIR+= mt7925 +.if ${KERN_OPTS:MDEV_PCI} SUBDIR+= mt7996 +.endif .include diff --git a/sys/modules/mt76/Makefile.inc b/sys/modules/mt76/Makefile.inc index 41b18651e985..b44dcd2e2e82 100644 --- a/sys/modules/mt76/Makefile.inc +++ b/sys/modules/mt76/Makefile.inc @@ -1,16 +1,21 @@ # Common information shared by all submodule builds. COMMONDIR= ${SRCTOP}/sys/contrib/dev/mediatek/mt76 +DEVDIR= ${SRCTOP}/sys/contrib/dev/mediatek/mt76/${MT76_DRIVER_NAME} -# Bus attachments. -WITH_PCI= 1 -WITH_USB= 0 -WITH_SDIO= 0 +KMOD?= if_${MT76_DRIVER_NAME} -# Options. -WITH_CONFIG_PM= 0 -WITH_DEBUGFS= 0 -WITH_SOC_WED= 0 +# Bus attachment for the core part and that each driver can check +# what the common code supports. +MT76_PCI= 1 +MT76_SDIO= 0 +MT76_USB= 0 + +# General options for common code so drivers can check. +MT76_ACPI?= 0 +MT76_CONFIG_PM?= 0 +MT76_DEBUGFS?= 0 +MT76_SOC_WED?= 0 # Other SRCS+= ${LINUXKPI_GENSRCS} @@ -19,23 +24,26 @@ SRCS+= opt_wlan.h opt_inet6.h opt_inet.h # This is true for all architectures we build for. CFLAGS+= -DCONFIG_ARCH_DMA_ADDR_T_64BIT -# Helpful after fresh imports. -#CFLAGS+= -ferror-limit=0 - -.if defined(WITH_CONFIG_PM) && ${WITH_CONFIG_PM} > 0 -CFLAGS+= -DCONFIG_PM=${WITH_CONFIG_PM} +.if defined(MT76_CONFIG_PM) && ${MT76_CONFIG_PM} > 0 +CFLAGS+= -DCONFIG_PM .endif -.if defined(WITH_DEBUGFS) && ${WITH_DEBUGFS} > 0 -CFLAGS+= -DCONFIG_MAC80211_DEBUGFS=${WITH_DEBUGFS} +.if defined(MT76_DEBUGFS) && ${MT76_DEBUGFS} > 0 +CFLAGS+= -DCONFIG_MAC80211_DEBUGFS .endif -.if defined(WITH_SOC_WED) && ${WITH_SOC_WED} > 0 -CFLAGS+= CONFIG_NET_MEDIATEK_SOC_WED +.if defined(MT76_SOC_WED) && ${MT76_SOC_WED} > 0 +CFLAGS+= -DCONFIG_NET_MEDIATEK_SOC_WED .endif CFLAGS+= -I${COMMONDIR} +.if ${MT76_DRIVER_NAME} != "mt76_core" +CFLAGS+= -I${DEVDIR} +.endif CFLAGS+= ${LINUXKPI_INCLUDES} +# Helpful after fresh imports. +#CFLAGS+= -ferror-limit=0 + +CFLAGS+= -DKBUILD_MODNAME='"${MT76_DRIVER_NAME}"' CFLAGS+= -DLINUXKPI_VERSION=61900 -# end diff --git a/sys/modules/mt76/core/Makefile b/sys/modules/mt76/core/Makefile index f2aec9dfcf4c..e4e65d8e3c24 100644 --- a/sys/modules/mt76/core/Makefile +++ b/sys/modules/mt76/core/Makefile @@ -1,25 +1,30 @@ +MT76_DRIVER_NAME= mt76_core + .include -.PATH: ${COMMONDIR} +KMOD= ${MT76_DRIVER_NAME} -KMOD= mt76_core +.PATH: ${COMMONDIR} # Basic stuff. -SRCS= mac80211.c mmio.c util.c dma.c eeprom.c tx.c agg-rx.c mcu.c +SRCS+= mac80211.c mmio.c util.c dma.c eeprom.c tx.c agg-rx.c mcu.c SRCS+= channel.c scan.c wed.c -#SRCS+= trace.c -# Bus stuff. # PCI parts; PCI needs to be compiled into the kernel and cannot be loaded. -.if defined(WITH_PCI) && ${WITH_PCI} > 0 && ${KERN_OPTS:MDEV_PCI} +.if defined(MT76_PCI) && ${MT76_PCI} > 0 && ${KERN_OPTS:MDEV_PCI} SRCS+= pci.c .endif -.if defined(WITH_USB) && ${WITH_USB} > 0 -SRCS+= usb.c # usb_trace.c +# SDIO parts; SDIO depends on an MMCCAM kernel. +.if defined(MT76_SDIO) && ${MT76_SDIO} > 0 && ${KERN_OPTS:MMMCCAM} +SRCS+= sdio.c sdio_txrx.c .endif -#SRCS+= sdio.c sdio_txrx.c +# USB parts; USB can be loaded and is unconditional on any kernel config. +.if defined(MT76_USB) && ${MT76_USB} > 0 +SRCS+= usb.c +#SRCS+= usb_trace.c +.endif # Connac-Lib stuff. SRCS+= mt76_connac_mac.c mt76_connac_mcu.c mt76_connac3_mac.c @@ -30,22 +35,21 @@ SRCS+= mt76_connac_mac.c mt76_connac_mcu.c mt76_connac3_mac.c # MT792X-LIB stuff. SRCS+= mt792x_core.c mt792x_mac.c mt792x_dma.c #SRCS+= mt792x_trace.c -.if defined(WITH_ACPI) && ${WITH_ACPI} > 0 +.if defined(MT76_ACPI) && ${MT76_ACPI} > 0 SRCS+= mt792x_acpi_sar.c .endif -.if defined(WITH_USB) && ${WITH_USB} > 0 +.if defined(MT76_USB) && ${MT76_USB} > 0 SRCS+= mt792x_usb.c .endif -.if defined(WITH_DEBUGFS) && ${WITH_DEBUGFS} > 0 +.if defined(MT76_DEBUGFS) && ${MT76_DEBUGFS} > 0 SRCS+= mt792x_debugfs.c .endif -.if defined(WITH_DEBUGFS) && ${WITH_DEBUGFS} > 0 +.if defined(MT76_DEBUGFS) && ${MT76_DEBUGFS} > 0 SRCS+= debugfs.c .endif -CFLAGS+= -DKBUILD_MODNAME='"mt76_core"' -CFLAGS+= -DCONFIG_MAC80211_DEBUGFS=${WITH_DEBUGFS} +#SRCS+= trace.c EXPORT_SYMS= YES diff --git a/sys/modules/mt76/mt7615/Makefile b/sys/modules/mt76/mt7615/Makefile index 6d7cb945a32d..6eb650a8439a 100644 --- a/sys/modules/mt76/mt7615/Makefile +++ b/sys/modules/mt76/mt7615/Makefile @@ -1,26 +1,31 @@ -DEVDIR= ${SRCTOP}/sys/contrib/dev/mediatek/mt76/mt7615 +MT76_DRIVER_NAME= mt7615 + +.include .PATH: ${DEVDIR} -WITH_DEBUGFS= 0 -WITH_DEV_COREDUMP= 0 +MT7615_PCI= 1 -KMOD= if_mt7615 +MT7615_DEBUGFS= 0 +MT7615_DEV_COREDUMP= 0 # Common stuff. -SRCS= init.c main.c mac.c mcu.c eeprom.c +SRCS+= init.c main.c mac.c mcu.c eeprom.c # PCIe (7622_WMAC ignored) +.if defined(MT76_PCI) && ${MT76_PCI} > 0 && ${KERN_OPTS:MDEV_PCI} && \ + defined(MT7615_PCI) && ${MT7615_PCI} > 0 SRCS+= dma.c mmio.c pci.c pci_init.c pci_mac.c +.endif # USB + SDIO ignored currently. -.if defined(WITH_DEBUGFS) && ${WITH_DEBUGFS} > 0 +.if defined(MT7615_DEBUGFS) && ${MT7615_DEBUGFS} > 0 SRCS+= debugfs.c -CFLAGS+= -DCONFIG_MT7915_DEBUGFS=${WITH_DEBUGFS} +CFLAGS+= -DCONFIG_MT7915_DEBUGFS .endif -CFLAGS+= -DKBUILD_MODNAME='"mt7615"' -CFLAGS+= -I${DEVDIR} +.if defined(MT7615_DEV_COREDUMP) && ${MT7615_DEV_COREDUMP} > 0 +.endif .include diff --git a/sys/modules/mt76/mt7915/Makefile b/sys/modules/mt76/mt7915/Makefile index 049c919949f6..580fde3b7aa7 100644 --- a/sys/modules/mt76/mt7915/Makefile +++ b/sys/modules/mt76/mt7915/Makefile @@ -1,30 +1,37 @@ -DEVDIR= ${SRCTOP}/sys/contrib/dev/mediatek/mt76/mt7915 +MT76_DRIVER_NAME= mt7915 + +.include .PATH: ${DEVDIR} -WITH_DEBUGFS= 0 -WITH_DEV_COREDUMP= 1 +MT7915_PCI= 1 + +MT7915_WMAC= 0 +MT7915_DEBUGFS= 0 +MT7915_DEV_COREDUMP= 1 -KMOD= if_mt7915 +SRCS+= init.c main.c mac.c mcu.c mmio.c eeprom.c -# Common stuff. -SRCS= init.c main.c mac.c mcu.c mmio.c eeprom.c +# PCI only driver so it better be there (otherwise nothing will attach at least). +.if defined(MT76_PCI) && ${MT76_PCI} > 0 && ${KERN_OPTS:MDEV_PCI} && \ + defined(MT7915_PCI) && ${MT7915_PCI} > 0 SRCS+= pci.c dma.c +.endif # SOC+6E stuff. -#SRCS+= soc.c +.if defined(MT7915_WMAC) && ${MT7915_WMAC} > 0 +SRCS+= soc.c +CFLAGS+= -DCONFIG_MT798X_WMAC +.endif -.if defined(WITH_DEBUGFS) && ${WITH_DEBUGFS} > 0 +.if defined(MT7915_DEBUGFS) && ${MT7915_DEBUGFS} > 0 SRCS+= debugfs.c -CFLAGS+= -DCONFIG_MT7915_DEBUGFS=${WITH_DEBUGFS} +CFLAGS+= -DCONFIG_MT7915_DEBUGFS .endif -.if defined(WITH_DEV_COREDUMP) && ${WITH_DEV_COREDUMP} > 0 +.if defined(MT7915_DEV_COREDUMP) && ${MT7915_DEV_COREDUMP} > 0 SRCS+= coredump.c -CFLAGS+= -DCONFIG_DEV_COREDUMP=${WITH_DEV_COREDUMP} +CFLAGS+= -DCONFIG_DEV_COREDUMP .endif -CFLAGS+= -DKBUILD_MODNAME='"mt7915"' -CFLAGS+= -I${DEVDIR} - .include diff --git a/sys/modules/mt76/mt7921/Makefile b/sys/modules/mt76/mt7921/Makefile index 1b53df04357c..b6dbe88204a3 100644 --- a/sys/modules/mt76/mt7921/Makefile +++ b/sys/modules/mt76/mt7921/Makefile @@ -1,35 +1,39 @@ -.include +MT76_DRIVER_NAME= mt7921 -DEVDIR= ${SRCTOP}/sys/contrib/dev/mediatek/mt76/mt7921 +.include .PATH: ${DEVDIR} -KMOD= if_mt7921 +MT7921_PCI= 1 +MT7921_SDIO= 0 +MT7921_USB= 0 + +MT7921_DEBUGFS= 0 # Common stuff. -SRCS= init.c main.c mac.c mcu.c +SRCS+= init.c main.c mac.c mcu.c # PCI parts; PCI needs to be compiled into the kernel and cannot be loaded. -.if defined(WITH_PCI) && ${WITH_PCI} > 0 && ${KERN_OPTS:MDEV_PCI} +.if defined(MT76_PCI) && ${MT76_PCI} > 0 && ${KERN_OPTS:MDEV_PCI} && \ + defined(MT7921_PCI) && ${MT7921_PCI} > 0 SRCS+= pci.c pci_mac.c pci_mcu.c .endif -# USB parts; USB can be loaded and is unconditional on any kernel config. -.if defined(WITH_USB) && ${WITH_USB} > 0 -SRCS+= usb.c -.endif - # SDIO parts; SDIO depends on an MMCCAM kernel. -.if defined(WITH_SDIO) && ${WITH_SDIO} > 0 && ${KERN_OPTS:MMMCCAM} +.if defined(MT76_SDIO) && ${MT76_SDIO} > 0 && ${KERN_OPTS:MMMCCAM} && \ + defined(MT7921_SDIO) && ${MT7921_SDIO} > 0 SRCS+= sdio.c sdio_mac.c sdio_mcu.c .endif -.if defined(WITH_DEBUGFS) && ${WITH_DEBUGFS} > 0 -SRCS+= debugfs.c -CFLAGS+= -DCONFIG_MT7921_DEBUGFS=${WITH_DEBUGFS} +# USB parts; USB can be loaded and is unconditional on any kernel config. +.if defined(MT76_USB) && ${MT76_USB} > 0 && \ + defined(MT7921_USB) && ${MT7921_USB} > 0 +SRCS+= usb.c .endif -CFLAGS+= -DKBUILD_MODNAME='"mt7921"' -CFLAGS+= -I${DEVDIR} +.if defined(MT7921_DEBUGFS) && ${MT7921_DEBUGFS} > 0 +SRCS+= debugfs.c +CFLAGS+= -DCONFIG_MT7921_DEBUGFS +.endif .include diff --git a/sys/modules/mt76/mt7925/Makefile b/sys/modules/mt76/mt7925/Makefile index ee79f09dba1c..c8477eadd7f5 100644 --- a/sys/modules/mt76/mt7925/Makefile +++ b/sys/modules/mt76/mt7925/Makefile @@ -1,30 +1,32 @@ -.include +MT76_DRIVER_NAME= mt7925 -DEVDIR= ${SRCTOP}/sys/contrib/dev/mediatek/mt76/mt7925 +.include .PATH: ${DEVDIR} -KMOD= if_mt7925 +MT7925_PCI= 1 +MT7925_USB= 1 + +MT7925_DEBUGFS= 0 # Common stuff. -SRCS= init.c main.c mac.c mcu.c regd.c +SRCS+= init.c main.c mac.c mcu.c regd.c # PCI parts; PCI needs to be compiled into the kernel and cannot be loaded. -.if defined(WITH_PCI) && ${WITH_PCI} > 0 && ${KERN_OPTS:MDEV_PCI} +.if defined(MT76_PCI) && ${MT76_PCI} > 0 && ${KERN_OPTS:MDEV_PCI} && \ + defined(MT7925_PCI) && ${MT7925_PCI} > 0 SRCS+= pci.c pci_mac.c pci_mcu.c .endif # USB parts; USB can be loaded and is unconditional on any kernel config. -.if defined(WITH_USB) && ${WITH_USB} > 0 +.if defined(MT76_USB) && ${MT76_USB} > 0 && \ + defined(MT7925_USB) && ${MT7925_USB} > 0 SRCS+= usb.c .endif -.if defined(WITH_DEBUGFS) && ${WITH_DEBUGFS} > 0 +.if defined(MT7925_DEBUGFS) && ${MT7925_DEBUGFS} > 0 SRCS+= debugfs.c -CFLAGS+= -DCONFIG_MT7925_DEBUGFS=${WITH_DEBUGFS} +CFLAGS+= -DCONFIG_MT7925_DEBUGFS .endif -CFLAGS+= -DKBUILD_MODNAME='"mt7925"' -CFLAGS+= -I${DEVDIR} - .include diff --git a/sys/modules/mt76/mt7996/Makefile b/sys/modules/mt76/mt7996/Makefile index a43721b6079e..97de923c84ab 100644 --- a/sys/modules/mt76/mt7996/Makefile +++ b/sys/modules/mt76/mt7996/Makefile @@ -1,27 +1,36 @@ -DEVDIR= ${SRCTOP}/sys/contrib/dev/mediatek/mt76/mt7996 +MT76_DRIVER_NAME= mt7996 + +.include .PATH: ${DEVDIR} -WITH_DEBUGFS= 0 -WITH_DEV_COREDUMP= 1 +MT7996_PCI= 1 -KMOD= if_mt7996 +MT7996_DEBUGFS= 0 +MT7996_DEV_COREDUMP= 1 +MT7996_NPU= 0 # Common stuff. -SRCS= init.c main.c mac.c mcu.c mmio.c eeprom.c +SRCS+= init.c main.c mac.c mcu.c mmio.c eeprom.c +# PCI only driver so it better be there (otherwise nothing will attach at least). +.if defined(MT76_PCI) && ${MT76_PCI} > 0 && ${KERN_OPTS:MDEV_PCI} && \ + defined(MT7996_PCI) && ${MT7996_PCI} > 0 SRCS+= pci.c dma.c +.endif -.if defined(WITH_DEBUGFS) && ${WITH_DEBUGFS} > 0 +.if defined(MT7996_DEBUGFS) && ${MT7996_DEBUGFS} > 0 SRCS+= debugfs.c -CFLAGS+= -DCONFIG_MT7996_DEBUGFS=${WITH_DEBUGFS} +CFLAGS+= -DCONFIG_MT7996_DEBUGFS .endif -.if defined(WITH_DEV_COREDUMP) && ${WITH_DEV_COREDUMP} > 0 +.if defined(MT7996_DEV_COREDUMP) && ${MT7996_DEV_COREDUMP} > 0 SRCS+= coredump.c -CFLAGS+= -DCONFIG_DEV_COREDUMP=${WITH_DEV_COREDUMP} +CFLAGS+= -DCONFIG_DEV_COREDUMP .endif -CFLAGS+= -DKBUILD_MODNAME='"mt7996"' -CFLAGS+= -I${DEVDIR} +.if defined(MT7996_NPU) && ${MT7996_NPU} > 0 +SRCS+= npu.c +CFLAGS+= -DCONFIG_MT7996_NPU +.endif .include diff --git a/sys/modules/rtw88/Makefile b/sys/modules/rtw88/Makefile index 2347093db1a5..04000dd66e95 100644 --- a/sys/modules/rtw88/Makefile +++ b/sys/modules/rtw88/Makefile @@ -5,14 +5,14 @@ DEVRTW88DIR= ${SRCTOP}/sys/contrib/dev/rtw88 .PATH: ${DEVRTW88DIR} # Bus attachments. -WITH_PCI= 1 -WITH_USB= 0 -WITH_SDIO= 0 +RTW88_PCI= 1 +RTW88_SDIO= 0 +RTW88_USB= 0 # Options. -WITH_CONFIG_PM= 0 -WITH_DEBUGFS= 1 -WITH_LEDS= 0 +RTW88_CONFIG_PM= 0 +RTW88_DEBUGFS= 1 +RTW88_LEDS= 0 KMOD= if_rtw88 @@ -22,11 +22,6 @@ SRCS+= bf.c coex.c debug.c efuse.c fw.c mac.c mac80211.c SRCS+= phy.c ps.c regd.c SRCS+= rx.c sar.c sec.c tx.c util.c -.if defined(WITH_CONFIG_PM) && ${WITH_CONFIG_PM} > 0 -SRCS+= wow.c -CFLAGS+= -DCONFIG_PM=${WITH_CONFIG_PM} -.endif - # Common SRCS+= rtw8723x.c # 87x3 common SRCS+= rtw8703b.c rtw8703b_tables.c # 11n @@ -37,7 +32,7 @@ SRCS+= rtw8822b.c rtw8822b_table.c # 11ac SRCS+= rtw8822c.c rtw8822c_table.c # 11ac # PCI parts; PCI needs to be compiled into the kernel and cannot be loaded. -.if defined(WITH_PCI) && ${WITH_PCI} > 0 && ${KERN_OPTS:MDEV_PCI} +.if defined(RTW88_PCI) && ${RTW88_PCI} > 0 && ${KERN_OPTS:MDEV_PCI} SRCS+= pci.c SRCS+= rtw8723de.c SRCS+= rtw8814ae.c @@ -46,8 +41,17 @@ SRCS+= rtw8822be.c SRCS+= rtw8822ce.c .endif +# SDIO parts; SDIO depends on an MMCCAM kernel. +.if defined(RTW88_SDIO) && ${RTW88_SDIO} > 0 && ${KERN_OPTS:MMMCCAM} +SRCS+= rtw8723cs.c +SRCS+= rtw8723ds.c +SRCS+= rtw8821cs.c +SRCS+= rtw8822bs.c +SRCS+= rtw8822cs.c +.endif + # USB parts; USB can be loaded and is unconditional on any kernel config. -.if defined(WITH_USB) && ${WITH_USB} > 0 +.if defined(RTW88_USB) && ${RTW88_USB} > 0 SRCS+= usb.c SRCS+= rtw8723du.c SRCS+= rtw88xxa.c # 88xxa common @@ -57,41 +61,35 @@ SRCS+= rtw8821a.c rtw8821a_table.c rtw8821au.c SRCS+= rtw8821cu.c SRCS+= rtw8822bu.c SRCS+= rtw8822cu.c - CFLAGS+= -DCONFIG_RTW88_USB .endif -# SDIO parts; SDIO depends on an MMCCAM kernel. -.if defined(WITH_SDIO) && ${WITH_SDIO} > 0 && ${KERN_OPTS:MMMCCAM} -SRCS+= rtw8723cs.c -SRCS+= rtw8723ds.c -SRCS+= rtw8821cs.c -SRCS+= rtw8822bs.c -SRCS+= rtw8822cs.c +.if defined(RTW88_CONFIG_PM) && ${RTW88_CONFIG_PM} > 0 +SRCS+= wow.c +CFLAGS+= -DCONFIG_PM=${RTW88_CONFIG_PM} .endif -.if defined(WITH_LEDS) && ${WITH_LEDS} > 0 -CFLAGS+= -DCONFIG_RTW88_LEDS *** 133 LINES SKIPPED *** From nobody Mon Mar 30 07:20:00 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 4fkjLm5h8Jz6WSfj for ; Mon, 30 Mar 2026 07:20:00 +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 4fkjLm58KJz42BM for ; Mon, 30 Mar 2026 07:20:00 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774855200; 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=tJ6RYce2k9OboJErySCfbdD4HKPTXYj/xFmduOsQaOo=; b=obQK48nP1cl18GXRwIHPPFPSFKgE7FagyOogY1+HsNfcaC5eOdrYszrmuaZ4hLDJLIRa0W aVr4ZBRXcil/DYXDwhfaJF6nGOa/9a3wVkweiZM+7VXJ9Xa8R9MsSFG4IxsrxvN3/uUxba LLE2oOZcprqNz4HMeQPKHMVLMXkQB8eSott3+RWW0Gya+4378EI0P25Vo/G4UmLHQmCc2y 7APrxLIPD0HJhWqW3ARzrFE2SB2ijhIGUBjq81RPvaGCMopra3jbq9oFB9JWYdvM3WzJ/U lyH4PkeQ9vqkolVkrADnXV6oAo09SRQq0d6e7NJMHdb/ewsFCm9smwQzxApFBg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774855200; a=rsa-sha256; cv=none; b=UDTkQ1evIRAu7LXEDcmZRjzFBRzhHOtrwHLTI9yZeEayQrn2e3zf5JUUP5vdLxiD/RFINt jIjasL1/rpzim8G9Futbe+D9Bf8S3Go5c0djIDHsEXT9uAUJSqv4+SYpTR1D3cxPeRehh5 nO1lnywL7rSE+h/l4wHbU0WdzVakubie6F3BacmHGiUQ4xWGA7i699C7qmbv1lOLds5dLs TU/Rnm/kRR5hXZea2muWlDmsvZ/98WV92UjEB16g+L3VHu5qn+kiBQzUEqO2cwhiH+oTPq uEj1eTCnYy6MSlkmgJO3GqNfvhAdUv2I7Ga5Y0M+EyxwlemJ/LKJKyMrmLPQdQ== 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=1774855200; 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=tJ6RYce2k9OboJErySCfbdD4HKPTXYj/xFmduOsQaOo=; b=D8pb9uJPX2NbKPzHEmt8JAOQTJ0lLVoAaGJ7fHDkjd4L8SfsWyhrgY2YuBqIOrqMMC0SPr v5yjb0n/Bi1JyGxIgWkNhG08rcnjqW8yKBxEXCH0Zma6C/HM1ZDSwybVc5bGTUZk+ZAouR I/r7textnQ/vUPUeORB1DFo0vSrYVVgsXqsO4zM8GW0oWEeVj+tPQqmU2mve5Pujyxu7XZ j2iDiOYmFDEJrufI9vgPFZqmfUV1fw+l/Er8tzPHpS5ddyhBbl6Iwcb9/LT+Ib2QuTrFRr dpOvaneDkUYT2Nh/SVpt3ZeQYtLJfdeeYHfyooI98qfFTGA3+9HRFyRBUD0oiQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkjLm4fG1zYqk for ; Mon, 30 Mar 2026 07:20:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 18dc3 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 07:20:00 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: ShengYi Hung Subject: git: e6eba5076929 - main - vmm: Add missing AVX instructions for AVX512 in cpuid stdext 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: aokblast X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e6eba5076929d0b193c9c94b2658c7e8f5da0669 Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 07:20:00 +0000 Message-Id: <69ca2420.18dc3.73859074@gitrepo.freebsd.org> The branch main has been updated by aokblast: URL: https://cgit.FreeBSD.org/src/commit/?id=e6eba5076929d0b193c9c94b2658c7e8f5da0669 commit e6eba5076929d0b193c9c94b2658c7e8f5da0669 Author: ShengYi Hung AuthorDate: 2026-03-22 02:26:56 +0000 Commit: ShengYi Hung CommitDate: 2026-03-30 07:19:44 +0000 vmm: Add missing AVX instructions for AVX512 in cpuid stdext Reported by: Tom Reviewed by: markj Tested by: Tom MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D56021 --- sys/amd64/vmm/x86.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/sys/amd64/vmm/x86.c b/sys/amd64/vmm/x86.c index 6794110f067a..4ac008499999 100644 --- a/sys/amd64/vmm/x86.c +++ b/sys/amd64/vmm/x86.c @@ -446,10 +446,19 @@ x86_emulate_cpuid(struct vcpu *vcpu, uint64_t *rax, uint64_t *rbx, CPUID_STDEXT_AVX512ER | CPUID_STDEXT_AVX512CD | CPUID_STDEXT_SHA | CPUID_STDEXT_AVX512BW | - CPUID_STDEXT_AVX512VL; + CPUID_STDEXT_AVX512VL | + CPUID_STDEXT_AVX512IFMA; regs[2] &= CPUID_STDEXT2_VAES | - CPUID_STDEXT2_VPCLMULQDQ; - regs[3] &= CPUID_STDEXT3_MD_CLEAR; + CPUID_STDEXT2_VPCLMULQDQ | + CPUID_STDEXT2_AVX512VBMI | + CPUID_STDEXT2_AVX512VBMI2 | + CPUID_STDEXT2_AVX512VNNI | + CPUID_STDEXT2_AVX512BITALG | + CPUID_STDEXT2_AVX512VPOPCNTDQ; + regs[3] &= CPUID_STDEXT3_MD_CLEAR | + CPUID_STDEXT3_AVX5124VNNIW | + CPUID_STDEXT3_AVX5124FMAPS | + CPUID_STDEXT3_AVX512VP2INTERSECT; /* Advertise RDPID if it is enabled. */ error = vm_get_capability(vcpu, VM_CAP_RDPID, From nobody Mon Mar 30 09:25:12 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 4fkm7F509Sz6WgmL for ; Mon, 30 Mar 2026 09:25: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 4fkm7F0HgKz3FZn for ; Mon, 30 Mar 2026 09:25:13 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774862713; 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=9lBkgsdiXqmArLmOd3V/nCBKmLDfs6DzIrbtaHhJOKU=; b=v0lCixYgpmsvuCErxImK1rdsxd9EaWimxx2wNfqjAj1TReHvOoZAxFRha6HgHN3KTZWv4w XyBoLuRd28XHgAt+lWWnH1fYSE7Rk7kuD6xcEZiG419X3W4IOkVBeRcRCdo/8zCRi9AJru 8Dx3oyqaj2GZeMonnTIz4lWzCWlqOmIVwXQseHRBpr5rwb197O0ZxzGenMD60vqW6rJi6U DiC4z5CNSM+y5dw20uds/R+O+9tn1jZwuqAuSajJWWnM8dN5vrl7JpN6NZ0bB+36IMfoYF wZBPqUSQXthuCuveuBZGbLYT4jW9HaluwbsOw9z9mWtUJz4kQToyiXbBe5gTPA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774862713; a=rsa-sha256; cv=none; b=ETj31tuCxtgwAMoGDSl1Gr8Qm7njvberl0lMxLzDKFaBlMnKRHpdESZGUbYskFLYKg6u0x sQdF6oH/FszN2zWDSKBTzkcPbnp9qASIEVVQLfv0IU1lXGMjtWoIblBQiaZwpwrCqRpeHv QEuOfuRJnPw69++kl46qLr2+v1qRzXRhYN5bXpRRXJwZaIp1JPnbGyrUFq+QhA5g7xxMeZ e4/y9PwY2HBGbQCDr0/EQGR6j4/vDXOzyJ7pGgba2fd9URK7T/ApT0r5Yter6cXZcG+BNZ rqnR+RqlMl10yfY2JEb8PH2LISFj/ng6j1FpQUbiNFp9sYaE6io0r8YA0XEqtg== 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=1774862713; 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=9lBkgsdiXqmArLmOd3V/nCBKmLDfs6DzIrbtaHhJOKU=; b=bU7XfHm0DpRpLWfPT00v97ziPZRxSVqxxDiesXmKpUzHTscTQ3lDSAuQPGPOz5XW1d/2GN Q4OrguykTUJ3YktRxOK7MqxNk0ASDsWx912VqkBBXXgj/hsmmOpxsowjNG5U5K9y9pZSlV Thp7qxE5jnKWHDYa/N9vP0yNQvYvtR+fBdwTiXnydlN4rGGQgSiFSli317ai+yGA5TZPf3 1sINs4pZfWnC5uz6jl3XFO28Q/37y/YpNhh5TYWnV4lHucUGGeluB7O7V1tfHd4KtzhXag GW1cvSngFbHchWH7l1DAM2TgLuzsem7tK6+J9INDYy8Y0l4J3n/Pq8rYbeL9GA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkm7D69knzcyv for ; Mon, 30 Mar 2026 09:25:12 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 27070 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 09:25:12 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Olivier Certner Subject: git: 4deb934c1a10 - main - vfs: Simplify vfs_write_resume()/vn_start_write_refed() 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: olce X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4deb934c1a1051d7ef41e9309d066742722ce180 Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 09:25:12 +0000 Message-Id: <69ca4178.27070.49cd4f61@gitrepo.freebsd.org> The branch main has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=4deb934c1a1051d7ef41e9309d066742722ce180 commit 4deb934c1a1051d7ef41e9309d066742722ce180 Author: Olivier Certner AuthorDate: 2026-03-27 12:43:24 +0000 Commit: Olivier Certner CommitDate: 2026-03-30 09:24:23 +0000 vfs: Simplify vfs_write_resume()/vn_start_write_refed() The call to vn_start_write_refed() from vfs_write_resume() with 'mplocked' set to 'true' exactly boils down to doing an increment of 'mnt_writeopcount', albeit with lots of unnecessary verifications. Replace it with an inline incrementation. As the original call was the last with 'mplocked' with 'true', remove the 'mplocked' parameter from vfs_write_resume(), simplifying its code accordingly ('mplocked' always false). While here, in vfs_write_resume(), initialize 'error' out of the mount lock. Reviewed by: kib MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D56108 --- sys/kern/vfs_vnops.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/sys/kern/vfs_vnops.c b/sys/kern/vfs_vnops.c index ea8f8437b743..4061b2272193 100644 --- a/sys/kern/vfs_vnops.c +++ b/sys/kern/vfs_vnops.c @@ -2078,26 +2078,22 @@ vn_closefile(struct file *fp, struct thread *td) * suspension is over, and then proceed. */ static int -vn_start_write_refed(struct mount *mp, int flags, bool mplocked) +vn_start_write_refed(struct mount *mp, int flags) { struct mount_pcpu *mpcpu; int error, mflags; - if (__predict_true(!mplocked) && (flags & V_XSLEEP) == 0 && - vfs_op_thread_enter(mp, mpcpu)) { + if ((flags & V_XSLEEP) == 0 && vfs_op_thread_enter(mp, mpcpu)) { MPASS((mp->mnt_kern_flag & MNTK_SUSPEND) == 0); vfs_mp_count_add_pcpu(mpcpu, writeopcount, 1); vfs_op_thread_exit(mp, mpcpu); return (0); } - if (mplocked) - mtx_assert(MNT_MTX(mp), MA_OWNED); - else - MNT_ILOCK(mp); - error = 0; + MNT_ILOCK(mp); + /* * Check on status of suspension. */ @@ -2165,7 +2161,7 @@ vn_start_write(struct vnode *vp, struct mount **mpp, int flags) if (vp == NULL) vfs_ref(mp); - error = vn_start_write_refed(mp, flags, false); + error = vn_start_write_refed(mp, flags); if (error != 0 && (flags & V_NOWAIT) == 0) *mpp = NULL; return (error); @@ -2373,10 +2369,12 @@ vfs_write_resume(struct mount *mp, int flags) if ((flags & VR_NO_SUSPCLR) == 0) VFS_SUSP_CLEAN(mp); vfs_op_exit(mp); - } else if ((flags & VR_START_WRITE) != 0) { - MNT_REF(mp); - vn_start_write_refed(mp, 0, true); } else { + if ((flags & VR_START_WRITE) != 0) { + MNT_REF(mp); + mp->mnt_writeopcount++; + } + MNT_IUNLOCK(mp); } } From nobody Mon Mar 30 09:25:13 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 4fkm7G1YCZz6WgPf for ; Mon, 30 Mar 2026 09:25:14 +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 4fkm7F6K9Zz3FZr for ; Mon, 30 Mar 2026 09:25:13 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774862713; 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=h5vRgVQnDOv0z5dvLPz90uepS2hT3gPk94viqHLPw5c=; b=fGiGJGgAbokXyyAjmst+FOgIzDGgSgZdQN7H1+l2fpcrCGItBscqZYtpPblYiyKQRqG8/u uJ8LdRFGFT3rowg46bK361INSmjbP7Zy0Vc8QgOdiNRNa+XAWWo3o/zRLGva1iNo5d/mdj 85jDXkx5HUvAYnKGpuXGlPta3AzQGhwUZAE8CJd2NRTLBuclibcyKYKxlcpoN371HxZSD3 J3H7iSg2PixIM/fiJfx/N87aSr46KLh+bMXeH6/S7xHPaC3ZOoC2XWQ4hXML5Ukcd9spls u25FyN3WfyhcSRv1YyL1SX0MiW9ELaqLGR3HlhY2zcLRWtMjlC1mxvFMWVOSWQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774862713; a=rsa-sha256; cv=none; b=ZpkEthh/MjokcfekWUTbuo11uxECrx6d1AGCIJat/kjwMNN4DS8hOyvvrNK2FIFjRr5ZCJ lolZnT6eTEuK/2MPEI0WUdX0CJJGNwaCOKgWv5iTiflaIXD6iBeZ5KDYh66/X3k2v7UsKt eMK9eAzUxpU5brJtjkOtNkbsqM2JvvbSB0f6kSQSF+19SgkKqC2XOEHPHQfgGYbG65ZEHg prVic/sg0BdUoM5pMhhbiwrS8RG92NioQ39DUgpsVNHr02qbHMmFWwleQyrlEY68qmC/kg hOOJp5y5vqULIY5qADdLWbf/GgbYteCZrbb51YxPzW4kISNXH1XYiT9jxcis5A== 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=1774862713; 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=h5vRgVQnDOv0z5dvLPz90uepS2hT3gPk94viqHLPw5c=; b=dMUr5hjf7qnEqC93f8CwysWe/o7hHEJW16mMneK0SvbNAw7aV6V+e8PqZQ7tKCnA3xK0qs wMC5ENzfqc7F+IzAvf5E7HsGiQsoZJ179hY0UjU9seSPnW0cDGdUb4cCXEu/qejh/cCif7 NWFbNQLveuVrYpNRxrDSSQx7+QZhD0SKP2LeMJAOYTz2SOZq0yELnTncfGMbu0fHWw98Lf wV4SJn6Q+1Vau79nqyM2KgguM61mX1wXBZ8WV6YiVYuQmuyFWt3PeS5oqMmlYSK0xqHKhp 6I7SNgzuKBylSokgIRP/QjrwWA7FSlOX48lCSKFsCGzYD8IBYWJniLg5ZNsovg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkm7F5w0pzcPK for ; Mon, 30 Mar 2026 09:25:13 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 268b8 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 09:25:13 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Olivier Certner Subject: git: e220af9cee74 - main - nvme_sim: Fix name in module version metadata 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: olce X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e220af9cee74082841db9e80cbb73f570f3a570f Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 09:25:13 +0000 Message-Id: <69ca4179.268b8.22038dea@gitrepo.freebsd.org> The branch main has been updated by olce: URL: https://cgit.FreeBSD.org/src/commit/?id=e220af9cee74082841db9e80cbb73f570f3a570f commit e220af9cee74082841db9e80cbb73f570f3a570f Author: Olivier Certner AuthorDate: 2026-03-30 09:17:04 +0000 Commit: Olivier Certner CommitDate: 2026-03-30 09:24:34 +0000 nvme_sim: Fix name in module version metadata MFC after: 1 week Fixes: 1e39b5d4833e ("nvme_sim: Attach as a child of nvme") Sponsored by: The FreeBSD Foundation --- sys/dev/nvme/nvme_sim.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/dev/nvme/nvme_sim.c b/sys/dev/nvme/nvme_sim.c index a4bb5df4e456..b9f09c8d1f61 100644 --- a/sys/dev/nvme/nvme_sim.c +++ b/sys/dev/nvme/nvme_sim.c @@ -496,4 +496,4 @@ static driver_t nvme_sim_driver = { }; DRIVER_MODULE(nvme_sim, nvme, nvme_sim_driver, NULL, NULL); -MODULE_VERSION(nvme_shim, 1); +MODULE_VERSION(nvme_sim, 1); From nobody Mon Mar 30 12:10:24 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 4fkqp012WXz6WDZj; Mon, 30 Mar 2026 12:10:32 +0000 (UTC) (envelope-from gbe@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [IPv6:2610:1c1:1:606c::24b:4]) (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 "smtp.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fkqp008rsz3ZXk; Mon, 30 Mar 2026 12:10:32 +0000 (UTC) (envelope-from gbe@freebsd.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774872632; 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: in-reply-to:in-reply-to:references:references; bh=+zNPG0gAJsVww1NHh7okm3hjNfMA0YlpSLLkyQIluYo=; b=jKScTHVj1vTmh7gAYAVuc9VU6cvHTtfqX3KYB6Qc/Ur7IUxdkRobxYDjnBfAHInErXWy+0 mOPaQN2cH/8xdK7xKpGThSxPb9fVg5yMak4xz4Zmp3+yKlsSK5SZexb1YG7vpFeKBllj5Z qTjANobMdiksszw1NjVhdbn9eK3OfAPtiR1zGiuzzNg0/u3LycAsD60kJkdriDsn7MsPF9 b4FNsC88Qs4ZXiYUeDdV0b/IqnKZhNAwPZmvKc4xyS1ULLi/8B+rtkkUnygQd5VLLH/n/1 8+2zBXi2oKRbB0uO1hQqRsZh0ikFLMYtXNiCEQ0TxSmFe2biJ3NYLlqXWhnXIw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774872632; a=rsa-sha256; cv=none; b=kahhTfZvygQQUDtt4wKIfIIszXwAcjPll3IZb0zRwGHMiAE7UHNqfPf4XG43mg/qXhroeW wKBMkhtvVxfITGBCGoJv5CKGctITBL8Nhi4JRiwfG1N4ZyirZ3JhtUAHBWMFk0sRY+wG/l 39WwxvCNxcyuKgj9x13mjlAScTopbIh/kWFMPsqhxJV+i68xo+dzBFpH7qtEd4eKUhz2BX 7eFwxKqeKSsmofhQQVc/VXwC8GvBvEtCCuPaIZ3dMghqbSBpfOm5RwRe95wdf3bleprRwZ FnYbuLG3xev8AfcCpMgoSBTZkrN+QSbtddld5Jy0KDZgJQms6h2BdEmQQsXRxw== 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=1774872632; 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: in-reply-to:in-reply-to:references:references; bh=+zNPG0gAJsVww1NHh7okm3hjNfMA0YlpSLLkyQIluYo=; b=U4ooeTtjbfsuW7CHtjIC8fS8ZuCrRqUamkZ7+p+5CnoLVJv+my0qERnMG6zP/0DTMAmrTr Xkw1miQhw/YwBXAr/3FtZ+ixTavI1RvG+9rj5JspHxojM3GaeL6u8OAFakm8dwZOPSvg6v i29Q1w5VTsdeeua3dJ856LDFLfOEOcIHNPYd8QzetOaVIt8zBTYaxSdG4p46py4pHKL5z7 lZwXnj+jv6KrJXiktccmUtymdzTYL0vGMdGxP9wrR51iHvtQDgUYc1y1CXrgKSQWRlify/ HkLkCPjXFcXXKxyCDmDyK4uoWND1f6huvhkz1mpr8UHR/t88M5MxFkLl15xRow== Received: from localhost (p200300cb870ac9417dd91433b5db3990.dip0.t-ipconnect.de [IPv6:2003:cb:870a:c941:7dd9:1433:b5db:3990]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (prime256v1) server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) (Authenticated sender: gbe) by smtp.freebsd.org (Postfix) with ESMTPSA id 4fkqnz38TWzH2D; Mon, 30 Mar 2026 12:10:31 +0000 (UTC) (envelope-from gbe@freebsd.org) Date: Mon, 30 Mar 2026 14:10:24 +0200 From: Gordon Bergling To: John Baldwin Cc: src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Subject: Re: git: aed3bc80fe03 - main - ofed: Fix a typo in a source code comment Message-ID: References: <69c62ad6.45a08.7da2a3bb@gitrepo.freebsd.org> 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 MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha256; protocol="application/pgp-signature"; boundary="zSqfAH2+gJlVz7yR" Content-Disposition: inline In-Reply-To: X-Url: X-Operating-System: FreeBSD 14.3-RELEASE-p10 amd64 X-Host-Uptime: 1:28PM up 4 days, 5:01, 3 users, load averages: 0.11, 0.13, 0.09 --zSqfAH2+gJlVz7yR Content-Type: text/plain; charset=us-ascii Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Hi John, On Fri, Mar 27, 2026 at 09:00:47AM +0000, John Baldwin wrote: > On 3/27/26 06:59, Gordon Bergling wrote: > > The branch main has been updated by gbe: > >=20 > > URL: https://cgit.FreeBSD.org/src/commit/?id=3Daed3bc80fe033ab28e8f01ca= d49e73deb761516b > >=20 > > commit aed3bc80fe033ab28e8f01cad49e73deb761516b > > Author: Gordon Bergling > > AuthorDate: 2026-03-27 06:59:19 +0000 > > Commit: Gordon Bergling > > CommitDate: 2026-03-27 06:59:19 +0000 > >=20 > > ofed: Fix a typo in a source code comment > > - s/refereced/referenced/ > > MFC after: 3 days > > --- > > sys/ofed/include/rdma/ib_mad.h | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > >=20 > > diff --git a/sys/ofed/include/rdma/ib_mad.h b/sys/ofed/include/rdma/ib_= mad.h > > index 454db78dbde5..45f5ee2ff2ca 100644 > > --- a/sys/ofed/include/rdma/ib_mad.h > > +++ b/sys/ofed/include/rdma/ib_mad.h > > @@ -558,7 +558,7 @@ struct ib_mad_send_wc { > > * ib_mad_recv_buf - received MAD buffer information. > > * @list: Reference to next data buffer for a received RMPP MAD. > > * @grh: References a data buffer containing the global route header. > > - * The data refereced by this buffer is only valid if the GRH is > > + * The data referenced by this buffer is only valid if the GRH is > > * valid. > > * @mad: References the start of the received MAD. >=20 > Please refrain from future fixes in sys/ofed as it is really vendor code > (similar to sys/contrib) and local diffs like this can create conflicts f= or > merges from upstream. I realize it is a bit confusing as it is not under > sys/contrib. :-/ sorry, I wasn't aware of it. In my find commands I ommit contrib and sys/co= ntrib and have a few drivers on my list that are vendor code. I have added sys/of= ed to the list and will not commit any typo fixes to it. --Gordon --zSqfAH2+gJlVz7yR Content-Type: application/pgp-signature; name=signature.asc -----BEGIN PGP SIGNATURE----- iQEzBAEBCAAdFiEEYbWI0KY5X7yH/Fy4OQX2V8rP09wFAmnKaCAACgkQOQX2V8rP 09yaYAf/YtY+TKnjCV8ntM5xS1tJLum+v864zQi2OhG511rBF9af2GiE/kDZHBTE EviFOMRfBw1juxGwFFRq2faSy6njZ2aKX3pxYebZNJOGyKR0wqq2fe6CDYCLkf/y BYWg0RIpJF4A2F7mrEMqg8/c6uZdjz6gfOCs5ypTVLRIfbhseu0JvQgXdSp9lpo8 QgnpQL2fikHTwU0Uy0rQRaYwS9kJoTnZlnyCuxKByvhoXdk0R5PKPQjPSjvzYAHq OnwUENDbVPQVztOL4/ES+MBsmULR+1z/Tna4dxCAGZ4VnL3kQi18kR4iV6C+WRQQ 22PEAqDFe2aWx5SersNTig2pAS/XVA== =i5Q5 -----END PGP SIGNATURE----- --zSqfAH2+gJlVz7yR-- From nobody Mon Mar 30 13:41:34 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 4fksq24Qrmz6WQGC for ; Mon, 30 Mar 2026 13:41: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 "R12" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fksq223h1z3lF8 for ; Mon, 30 Mar 2026 13:41:34 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774878094; 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=6FH/xQnVaF5MkwlUqWWi93xxwGqF78wCGetBs9JAKBA=; b=mNt3WEPyCYyeSc2AS2/ybKmJ6XbcTpx68n2vulyrPgaykXA0LqKr/QDKQCMamqerfZUTdw VGk6h0mr5LQrsjPo2AOUFpm3DtGHuJ2pTx5SmkOylKBdW1MgfhsLKiEYEL9+oaJYwqBts8 gEc2e3BwlK17r8ej+38W4uERrxOsk3SqqQIM61+jKAQEUqoplB2zzzIjQsbTCjQf56jl+Y qDXoHQDrrSSmeeQm0jRwjQ+rvPx2p3gWNHVWByP196b93gYqGR452Ii7OzAC3p72Bksmal fIP7J1g4pYYxgSOBTa1Bkdv2OxbnyMXXNYYijkJpPES0vNJF/WO3faKjEAPASQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774878094; a=rsa-sha256; cv=none; b=XMO3vf/YA6wWBd5jNUNxzwuiyws7yZbgS2kIAgBK0CeDiKtMYkNditDV8b/AN/2dt/GfwH nGKM3ek/L6HpK/o/sHeQ2RGMGUpBxJqJSk19eeVCBcYQej1JmcbBimVGQnkLGBLMZizK/z MMNMQmNuRLP/4Py5NkPNf6R9MjJl1P7uV4ROgD6eQzz1Ron9+ni4Y1g5ACKfRgrD4xpGbs XdImCgiNr0Ac7NGUe4ilweKdCi757B69nEbfbOy9OaQyTk94Q9viRXRpdAlkj2700oAvHy dtqj3KcQpAjgnR1HqmOsxQTKR+FMNizCZVbQPdMXa1yg3JCNd5A8ViubVRhXqA== 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=1774878094; 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=6FH/xQnVaF5MkwlUqWWi93xxwGqF78wCGetBs9JAKBA=; b=nsjmCHVwLxisJGThSwcMu24yfeaHofvYbX4vn/S4RM36oV1Wy8rZ+fNgdJop4B/rJ2zmQL VxMzHWxEIkmOj/jiaLJlIiACFRb/t22vfkDBpTwidgag49SxlO4M5JHnXgRWxkvzMOmpJ0 SJWnjBx7T1A/j4CoLsok36y08CLSSt9qgRLYSmhaxoBID5uoHT+RTzfsM6pLHuYcowOKJs G3ItYJ9zXu/ZnilIG3xWZO6x5Q3z2FVQUWC00POSREov3spTi8G58WVuRzD1ZEMsp7HbNd O1qIqtWllRIordlcZzp5/ggomj9hPCfcc55a+fAGnKoGO3XmQO1pElLjZ7vdNg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fksq213R7zls9 for ; Mon, 30 Mar 2026 13:41:34 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 245f6 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 13:41:34 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: John Baldwin Subject: git: cc2715cf1f86 - main - acpi_apm: Narrow scope of ACPI_LOCK 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhb X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: cc2715cf1f864345ab175db691d4e152d5fb84af Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 13:41:34 +0000 Message-Id: <69ca7d8e.245f6.17fbbc14@gitrepo.freebsd.org> The branch main has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=cc2715cf1f864345ab175db691d4e152d5fb84af commit cc2715cf1f864345ab175db691d4e152d5fb84af Author: John Baldwin AuthorDate: 2026-03-30 13:38:54 +0000 Commit: John Baldwin CommitDate: 2026-03-30 13:41:06 +0000 acpi_apm: Narrow scope of ACPI_LOCK This lock doesn't need to be held across seldrain/knlist_destroy. It is also redundant (and a bug) to hold it across knlist_add and knlist_remove since it is the mutex for the knlist. PR: 293901 Reported by: Jiaming Zhang Reviewed by: markj MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D55994 --- sys/x86/acpica/acpi_apm.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/sys/x86/acpica/acpi_apm.c b/sys/x86/acpica/acpi_apm.c index 919f76949dd4..71e2573d5fde 100644 --- a/sys/x86/acpica/acpi_apm.c +++ b/sys/x86/acpica/acpi_apm.c @@ -243,9 +243,9 @@ apmdtor(void *data) /* Remove this clone's data from the list and free it. */ ACPI_LOCK(acpi); STAILQ_REMOVE(&acpi_sc->apm_cdevs, clone, apm_clone_data, entries); + ACPI_UNLOCK(acpi); seldrain(&clone->sel_read); knlist_destroy(&clone->sel_read.si_note); - ACPI_UNLOCK(acpi); free(clone, M_APMDEV); } @@ -408,11 +408,9 @@ apmkqfilter(struct cdev *dev, struct knote *kn) struct apm_clone_data *clone; devfs_get_cdevpriv((void **)&clone); - ACPI_LOCK(acpi); kn->kn_hook = clone; kn->kn_fop = &apm_readfiltops; knlist_add(&clone->sel_read.si_note, kn, 0); - ACPI_UNLOCK(acpi); return (0); } @@ -421,10 +419,8 @@ apmreadfiltdetach(struct knote *kn) { struct apm_clone_data *clone; - ACPI_LOCK(acpi); clone = kn->kn_hook; knlist_remove(&clone->sel_read.si_note, kn, 0); - ACPI_UNLOCK(acpi); } static int @@ -433,8 +429,8 @@ apmreadfilt(struct knote *kn, long hint) struct apm_clone_data *clone; int sleeping; - ACPI_LOCK(acpi); clone = kn->kn_hook; + ACPI_LOCK(acpi); sleeping = clone->acpi_sc->acpi_next_stype != POWER_STYPE_AWAKE; ACPI_UNLOCK(acpi); return (sleeping); From nobody Mon Mar 30 14:04:15 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 4fktKC6w3Jz6WSYv for ; Mon, 30 Mar 2026 14:04:15 +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 4fktKC5PSVz3pls for ; Mon, 30 Mar 2026 14:04:15 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774879455; 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=0KbLvfYA406bwTCtx8HPoMRkVEz+e0j+3XOXvUjtc9o=; b=Dvvd4IDXjflmsnArP+QcC68fj6Ljg0Eam7b91VxLlbyXr7xzUltw7PjQm7FhEjK+wMCPN1 zM7z1kX7GTQGtBwjDX76Dk18/1Ig1r45N6jwmWuwfgOPADXrNwtqN6KRDbnneC9fcp9bQG w7KT1hRI3+RaX2ea5WtF3jdezVMSDE9szwjke//0zW+guf28u7Pkj5JebrvhK1UpI4iC4t tZZwLapIHFDoXIighv6jWmePsFg9O3s61Xz+vVnyULaIJRigO4c8eo71ga9eaNYGrI7Iu2 DSGKHWKYfqIT3ggm8SoyA5Mn49vXRd5ob0aUsTKNg3eRTqIChs+1z3DbbOc2nw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774879455; a=rsa-sha256; cv=none; b=MwxAwaFY+Lw5w4VOMe4G21KzHz7cBy1xLeuGl5QvF91rTNleXwe+ihtqyvabrNtTq6MHoS cF8wUyAv16WTJMs4zWUnJOsv4RVOfL0OoP8DM/ingUThpIFtk5OLzoLOc/42IY422Y+42s HnKncrcKCazewLLuzaP961J+J5sC2qSMibpkmzv4J4qy+65v4aT8oguBPXrWKzTtznmJrS mFRcBdj2fG91OJ1Sedif0a7LdpeHWfZawPaKGQYQu1127+DvKtDn1PvUv8l8V6bEqSNAgS Xz5/qtfa+wg+Wq6oj5hzF+wviEED5oZQVJdWoRFWJM4fTuXcwd9O8DWsBoMaMQ== 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=1774879455; 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=0KbLvfYA406bwTCtx8HPoMRkVEz+e0j+3XOXvUjtc9o=; b=FHLZQtkrvUvGpouF3mLJMjWabzjtCK8a8swB7jjn79PSygiF7JSecvcd1YczSw4XqpD2lS 55JCz+HAArGBfHS44MlsPAtpGKuR+OCu2UZ+Khvitn3Z19GrzPvxae6vPHnZp9TKFoVjQ4 7Kab/6FE+t1OJ/w6us+s7YAtdX9USNfMYyPc/KrkcX8bW73Fdxo01dyUzw1tvxV4Jz7ycm w9pLKDHPbiaXggEkbE6uCtljKAPaz5D5uWU3/KLMSvUVBVkUhJZ9/JXrNNkJTYorPgp6KX OgtiXVAD0cidfU6noeSLEAARn/Ufe9p9tz4QcFDo26cBgxfTL41GC6SX3+MFng== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fktKC4V5gzm23 for ; Mon, 30 Mar 2026 14:04:15 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 24de6 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 14:04:15 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 0a6dbf51d8ea - main - pkgbase: Move all of ATF into the atf package 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0a6dbf51d8ea112a1d164be260004ec795b4368d Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 14:04:15 +0000 Message-Id: <69ca82df.24de6.2baba8c0@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=0a6dbf51d8ea112a1d164be260004ec795b4368d commit 0a6dbf51d8ea112a1d164be260004ec795b4368d Author: Dag-Erling Smørgrav AuthorDate: 2026-03-30 14:03:03 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-03-30 14:03:29 +0000 pkgbase: Move all of ATF into the atf package Parts of ATF (including the licence and some of the documentation) were for some reason part of the tests package instead of the atf package. Moving them to where they logically belong poses no problem since tests already depends on atf. PR: 294129 MFC after: 1 week Reviewed by: ivy Differential Revision: https://reviews.freebsd.org/D56158 --- etc/mtree/BSD.usr.dist | 4 ++-- libexec/atf/atf-sh/Makefile | 1 - share/doc/atf/Makefile | 12 ++++++------ share/man/man1/Makefile | 10 +++++----- share/man/man4/Makefile | 10 +++++----- 5 files changed, 18 insertions(+), 19 deletions(-) diff --git a/etc/mtree/BSD.usr.dist b/etc/mtree/BSD.usr.dist index b9ee785ab8b2..7fa3f769e53a 100644 --- a/etc/mtree/BSD.usr.dist +++ b/etc/mtree/BSD.usr.dist @@ -199,7 +199,7 @@ sbin .. share - atf tags=package=tests + atf tags=package=atf .. bhyve gdb @@ -236,7 +236,7 @@ doc IPv6 .. - atf tags=package=tests + atf tags=package=atf .. kyua tags=package=tests .. diff --git a/libexec/atf/atf-sh/Makefile b/libexec/atf/atf-sh/Makefile index afd848581f36..a76b59e9a1aa 100644 --- a/libexec/atf/atf-sh/Makefile +++ b/libexec/atf/atf-sh/Makefile @@ -71,7 +71,6 @@ FILESGROUPS= SUBR SUBRDIR= ${SHAREDIR}/atf SUBR= libatf-sh.subr -SUBRTAGS= package=tests HAS_TESTS= SUBDIR.${MK_TESTS}+= tests diff --git a/share/doc/atf/Makefile b/share/doc/atf/Makefile index 27f820bf86a0..e4a345f9b092 100644 --- a/share/doc/atf/Makefile +++ b/share/doc/atf/Makefile @@ -24,13 +24,13 @@ # SUCH DAMAGE. # -ATF= ${SRCTOP}/contrib/atf -.PATH: ${ATF} ${ATF}/doc +ATFTOP= ${SRCTOP}/contrib/atf +.PATH: ${ATFTOP} ${ATFTOP}/doc -FILESGROUPS= TOP +FILESGROUPS= ATF -TOPDIR= ${SHAREDIR}/doc/atf -TOP= AUTHORS COPYING NEWS README -TOPTAGS= package=tests +ATFDIR= ${SHAREDIR}/doc/atf +ATF= AUTHORS COPYING NEWS README +ATFPACKAGE= atf .include diff --git a/share/man/man1/Makefile b/share/man/man1/Makefile index c4ba33ff086b..19d6a655ced6 100644 --- a/share/man/man1/Makefile +++ b/share/man/man1/Makefile @@ -100,11 +100,11 @@ RUNTIMELINKS=\ builtin.1 while.1 .if ${MK_TESTS} != "no" -MANGROUPS+= TESTS -ATF= ${SRCTOP}/contrib/atf -.PATH: ${ATF}/doc -TESTS= atf-test-program.1 -TESTSPACKAGE= tests +MANGROUPS+= ATF +ATFTOP= ${SRCTOP}/contrib/atf +.PATH: ${ATFTOP}/doc +ATF= atf-test-program.1 +ATFPACKAGE= atf .endif .include diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile index 7612bead9580..ade0168cb0a6 100644 --- a/share/man/man4/Makefile +++ b/share/man/man4/Makefile @@ -1054,11 +1054,11 @@ MAN+= mlx5io.4 .endif .if ${MK_TESTS} != "no" -MANGROUPS+= TESTS -ATF= ${SRCTOP}/contrib/atf -.PATH: ${ATF}/doc -TESTS= atf-test-case.4 -TESTSPACKAGE= tests +MANGROUPS+= ATF +ATFTOP= ${SRCTOP}/contrib/atf +.PATH: ${ATFTOP}/doc +ATF= atf-test-case.4 +ATFPACKAGE= atf .endif .if ${MK_PF} != "no" From nobody Mon Mar 30 14:04:16 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 4fktKF0PGBz6WSLM for ; Mon, 30 Mar 2026 14:04:17 +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 4fktKD5wF4z3pp0 for ; Mon, 30 Mar 2026 14:04:16 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774879456; 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=t1XC7+cJATj5iiSkHO4JfaUFIF7K9OA2XEUitlGu5RM=; b=nSC0bM/v2xJHVKfpVFU7ppIzFHrMilvok950YFJk5kYe4G3Wi3KweLu8uQuh9iBymMRc8G 37tL7KTSbOAuy/ayx5GM6shXKNt8/PA5oPXEtV+oNI4BdmVcaYGDgQLw4BxzViiZ4zgtVe Oo91Ky+7CsjyS5/Q4QD8OauAOGlu9QCUZ+93sZY4wyNxqF/d7dwwRjbzrWH6/7odm2p4pn APDFyn/fykZLIRujW6NE3kdtafyqUg8ppKaSv07ugn0YApiS5eQG2wkfJ4eGwyLKrwRXJS G5f0NNllAO+ChqKy2MhndAGI6hQnywn5Br8cBAfwG6rQdPZCF25X6qpVwxeyaQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774879456; a=rsa-sha256; cv=none; b=G641UL4SXDRgZpgmPyvJ0a033VTx15SAqReP6k/sUOPFJ3T3g+ZhJSP381iY+mQ8w6YJTI MUbSPPO3vY0eez0zF2HaK50B/FpFIrjOHT9qarxuar8E34OE4lYzV4kQiKAVjRilXTAFWI +RG63dnGGzlGM2VccueeJZ8sOmkWJIeoubHezG2nUFrhmZQytT1wWuRX0FqcJTsrFSpQqe VCU7V/RS7z3B4B0smXdGjydPhr3AkfYj2KSnIxXr11weh3nRwrgb1We3ZGQ0+Jvop8Be2J fbBok5chJBVFMhowU2vGsd9G7SqV9Si6ly9S7jkwl3ylpDJxtDExuWXU37YV2g== 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=1774879456; 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=t1XC7+cJATj5iiSkHO4JfaUFIF7K9OA2XEUitlGu5RM=; b=NqY6Ch4xSwQ/MYVW1a3p9nipnHtcHwdYiILNV30xPaZie68h+5GQ7eVP7CzAUTZrEgNL/I 8+KpLsL/eB1RYUZkoq+G/F0xAygEUrkdRCk1d/F2x1Kb5eQ+T5R1sqCFW1VqjSvNjM8YBl /0fJZa83FkZN5nT46/2uaIYEtz68xdh/+LulACR6jrU0qDGR4lOfoX6jtgWU62Gg81kLqK VGEOylScluXYQX6E+OJZYkGUXZTfUmbiVTF4uxGcuL+/XVPJj9JeWva7S18NbbdX1pB3kG HtmilYkB262zvzxgNzw8PLStHsV9MOdTPEKbeUn9AATMdKSDDnJNcNjO03avsg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fktKD5L7FzmTZ for ; Mon, 30 Mar 2026 14:04:16 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 25ce3 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 14:04:16 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Dag-Erling=?utf-8?Q? Sm=C3=B8rg?=rav Subject: git: 40e8afadc393 - main - pkgbase: Move all of Kyua into the kyua package 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: des X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 40e8afadc393a102f4199228ae2047d3e6c71251 Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 14:04:16 +0000 Message-Id: <69ca82e0.25ce3.2be5a68f@gitrepo.freebsd.org> The branch main has been updated by des: URL: https://cgit.FreeBSD.org/src/commit/?id=40e8afadc393a102f4199228ae2047d3e6c71251 commit 40e8afadc393a102f4199228ae2047d3e6c71251 Author: Dag-Erling Smørgrav AuthorDate: 2026-03-30 14:03:18 +0000 Commit: Dag-Erling Smørgrav CommitDate: 2026-03-30 14:03:29 +0000 pkgbase: Move all of Kyua into the kyua package Some Kyua directories were improperly tagged as belonging to the tests package. Move them to the kyua package, which contains all of the files found in these directories. PR: 294129 MFC after: 1 week Reviewed by: ivy, emaste Differential Revision: https://reviews.freebsd.org/D56159 --- etc/mtree/BSD.root.dist | 2 +- etc/mtree/BSD.usr.dist | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/etc/mtree/BSD.root.dist b/etc/mtree/BSD.root.dist index 95a3361b3c61..d5ef29c51a92 100644 --- a/etc/mtree/BSD.root.dist +++ b/etc/mtree/BSD.root.dist @@ -63,7 +63,7 @@ .. jail.conf.d tags=package=jail .. - kyua tags=package=tests + kyua tags=package=kyua .. mail tags=package=runtime .. diff --git a/etc/mtree/BSD.usr.dist b/etc/mtree/BSD.usr.dist index 7fa3f769e53a..f9577e3c8085 100644 --- a/etc/mtree/BSD.usr.dist +++ b/etc/mtree/BSD.usr.dist @@ -238,7 +238,7 @@ .. atf tags=package=atf .. - kyua tags=package=tests + kyua tags=package=kyua .. legal .. @@ -334,7 +334,7 @@ .. .. .. - kyua tags=package=tests + kyua tags=package=kyua .. libusb20 .. @@ -483,10 +483,10 @@ .. .. .. - kyua tags=package=tests - misc tags=package=tests + kyua tags=package=kyua + misc tags=package=kyua .. - store tags=package=tests + store tags=package=kyua .. .. locale From nobody Mon Mar 30 14:13:24 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 4fktWm4ys0z6WTFY for ; Mon, 30 Mar 2026 14:13:24 +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 4fktWm2sWfz3rQw for ; Mon, 30 Mar 2026 14:13:24 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774880004; 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=9Le+QZZLTs7d2kbt+xatWmeFoImfThkn7wLd0LpBqig=; b=U6Odr8V0W4vsI32+maw1KXqwPcEWZn8eLv1DDIMax/g1AlFCV1GxdE//pKsPmzctXkhC0e kasA8jV7EqQ1S6cpnAFW9A37M326bSGkmbLAGHQukW9xi9UH8kEyZJQYN/7qRoWJQm3YFh 1Ydotoe1u/6iKu/fTZvx5ErzIlcg3VXJzCmLdCWW5Hyo97ZDr+zn7lrYkUcLGFyILxoZ7S eIZ1c1Vy2KXa64xUUP5mNS+PgnnSw67y4CtWzNK0tXqc/4QCg/ecR60iJOu8VxPhGWnj6M K8fuRRRwDLN2wKVdY4swce4GDJirNzgzRohihhjB2bYWX8wHxInvrKEXBlLIPA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774880004; a=rsa-sha256; cv=none; b=phdamG7B5pBQ9e8GInVMPj/HYoyMVpoeEGuvLqhBb9ZqfdGf9Jb2CcMfuHrBo4EbqwCvyx crmd+vohEJS2aq5eTwl6THSK4sUidJ+YwdqMHq71i42Dlp9HbbKKE5zICBcMKfFA+jHhns nzLyEdY3Yt6Yz+FACBRw9PCDahCmhdFHHWTo56h8GHNuIQI1rnJtj3B2x8+/lKXePKAQVe a/XvTAKjiMrwyMu4wxqNRKI0TkGOvqYgu800J5ptz7bRHPtNLyD+fU0nppoya1hfsFlkKi /ylPkEl8U07+NvNhgvNVj3Iv5vIgMQ7zh7AODrrilRsMR/jfN80doypbzIyReQ== 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=1774880004; 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=9Le+QZZLTs7d2kbt+xatWmeFoImfThkn7wLd0LpBqig=; b=QUdc8w04IU330xK3QYddxhr6+QyEGaiis5JXwTJTBcd9Dyp1Bj4ZVasf8rRFPZJuOMQGBt G+vEs0bQpDbYyiVSBkGfUFsPbH1aqHiDwTGZ/YNxYnlbrNHvu1413u76FqkLHUZi5jk7gJ rWSDyPQ7NHk6Si4Hfhz+hAF6Jv9tEQ9cT9uEEZH3cvuxcSNEv7Yb5jM3JQ2Wu3tVyXPLc2 XU+H42Tb5LyyYIpi1n6Pm7U7vn8Bnmm3uoapOrFKtZmpExS6eBkrcYzCnhPQgkQyGx/G/U 8TCB+xbdE59/p33xSVlT47lbUXhvIf6TLQCmcCaNW48X75j0kYAjvDlqSYaO6Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fktWm2SjDzmXd for ; Mon, 30 Mar 2026 14:13:24 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 2609c by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 14:13:24 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Christos Margiolis Subject: git: 0efd33382504 - main - snd_uaudio: Retire sndcard_func usage 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: christos X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0efd33382504d3172734fa21325fcabef9c7f063 Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 14:13:24 +0000 Message-Id: <69ca8504.2609c.5ed38d62@gitrepo.freebsd.org> The branch main has been updated by christos: URL: https://cgit.FreeBSD.org/src/commit/?id=0efd33382504d3172734fa21325fcabef9c7f063 commit 0efd33382504d3172734fa21325fcabef9c7f063 Author: Christos Margiolis AuthorDate: 2026-03-30 14:13:16 +0000 Commit: Christos Margiolis CommitDate: 2026-03-30 14:13:16 +0000 snd_uaudio: Retire sndcard_func usage This is effectively a no-op, as it does not make use of the sndcard_func->varinfo field, so eventually ua_probe() always succeeds. Also change ua_probe()'s value to 0. There is no need to return BUS_PROBE_DEFAULT, because snd_uaudio() attaches the sound(4)'s children with bus_attach_children(). Sponsored by: The FreeBSD Foundation MFC after: 1 week Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D56160 --- sys/dev/sound/usb/uaudio.c | 5 ----- sys/dev/sound/usb/uaudio_pcm.c | 13 +------------ 2 files changed, 1 insertion(+), 17 deletions(-) diff --git a/sys/dev/sound/usb/uaudio.c b/sys/dev/sound/usb/uaudio.c index dd8aa8c9fafe..65976ced8a75 100644 --- a/sys/dev/sound/usb/uaudio.c +++ b/sys/dev/sound/usb/uaudio.c @@ -367,7 +367,6 @@ struct uaudio_softc_child { }; struct uaudio_softc { - struct sndcard_func sc_sndcard_func; struct uaudio_chan sc_rec_chan[UAUDIO_MAX_CHILD]; struct uaudio_chan sc_play_chan[UAUDIO_MAX_CHILD]; struct umidi_chan sc_midi_chan; @@ -1112,8 +1111,6 @@ uaudio_attach(device_t dev) /* attach the children */ - sc->sc_sndcard_func.func = SCF_PCM; - /* * Only attach a PCM device if we have a playback, recording * or mixer device present: @@ -1130,8 +1127,6 @@ uaudio_attach(device_t dev) DPRINTF("out of memory\n"); goto detach; } - device_set_ivars(sc->sc_child[i].pcm_device, - &sc->sc_sndcard_func); } bus_attach_children(dev); diff --git a/sys/dev/sound/usb/uaudio_pcm.c b/sys/dev/sound/usb/uaudio_pcm.c index 0b3da9b20440..c24c111f983c 100644 --- a/sys/dev/sound/usb/uaudio_pcm.c +++ b/sys/dev/sound/usb/uaudio_pcm.c @@ -190,18 +190,7 @@ MIXER_DECLARE(ua_mixer); static int ua_probe(device_t dev) { - struct sndcard_func *func; - - /* the parent device has already been probed */ - - func = device_get_ivars(dev); - - if ((func == NULL) || - (func->func != SCF_PCM)) { - return (ENXIO); - } - - return (BUS_PROBE_DEFAULT); + return (0); } static int From nobody Mon Mar 30 14:46:46 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 4fkvGH1FNlz6WXSn for ; Mon, 30 Mar 2026 14:46:47 +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 4fkvGH0bXfz3vxV for ; Mon, 30 Mar 2026 14:46:47 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774882007; 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=N4Y3xB4IMOe1lOIoFnpzVRHcmRJzpErX/+ryOno9fQw=; b=sQ1lfO5AYnQxCS5HkZuh+jQb49+tguWv4if2oWJ4QMPsfiWtdJ5RluCeZuSO+JY/Xa//P2 EA4sR65lTKB9z4LeTw8CPcSoSVO3c7DNf/w5Jr/y7SNzqY8PkKEJvv8vFAMjPiiRb9aApD pMjoB2wMvx1UNQGdDjgiwt0yc5NonkEo9XCSDfBLFf1FuPwqVtxf4ggHHrQIM7a/tNe4va WodUid7AQzYwdVuDkZcih5HPHEld3pKq2lUXKo0GEbqQ9QNqaQdtpmxrFWF5NNyIzk/DDK OzzS6LP6J9Twp+9hcG24XGjmPEaPXSLhMmtvn4b38+iTpf0D5TQLKDwVxqkODA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774882007; a=rsa-sha256; cv=none; b=v3tu/YPwCo9l07w5nN38kLIz0o1GEJmPRWXhcmoJ7p06hMZUc6cmgQE7+Us2ooW+HvrkNC QuOXkrRxcscaqqoJ0mz/ttlUdCx7m7cBsBH3BL+c4MCpdLOOuCEq7n2uzyPtusU5mPDBPT HR9yLR3O/0KVIIJRNkrpacP+I0xUhslMaUk2rMyt16IF3ntnsthuBGsVCrXST6dlK78/Ub fvfMpM618CNs4BlrbIxi1BXuGLQEM1+ICNlANaq90+rwkm2FeTGdMgEm3kNQQTMlSBbGb/ PDJaU6l7seoT0r2KRDeHh3Afbvjs/kUgmL/iI9grzGh2eb+ja4IHNj0yLaRANA== 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=1774882007; 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=N4Y3xB4IMOe1lOIoFnpzVRHcmRJzpErX/+ryOno9fQw=; b=m6mXNTKKgYBQB5kY2R7R/FHzq1naYmBtoP2FBwjsRX0OZpoQJFh9+40e9Yqbqr8uQT4gk1 /EDaPF84jLDjF13mJvzB2BCy7ZVxcCNTHSJZW8HA2AOnbzMmyfPdKnCAWCON0CjmQ4u7+W n4FvhtVKxVyKYKqEtcU5v4ugZzKcdG+ehiP+5a07FMV8Mu1FN/TEFnSe1sS1SR68xENjVj V07Slw79y9xozw9G8VTAhcg/+6z4t5WHyUOKNeFXAi+GY6j/CvGBt0FqafmFEFW9hBsMFc KUKwmsBwaV/9r6QWPymttgpiM1YRdGldGC0lWYp50rzYLO7k0QdXiOGMpTISIQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkvGG6z26znSy for ; Mon, 30 Mar 2026 14:46:46 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 30ec2 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 14:46:46 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Gleb Popov Subject: git: 0f147784de10 - main - stat(2): Send to sticky(7) in the S_ISVTX description 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: arrowd X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0f147784de1037a662b0bd0aaa5f7f7bd7876e37 Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 14:46:46 +0000 Message-Id: <69ca8cd6.30ec2.35ebef7b@gitrepo.freebsd.org> The branch main has been updated by arrowd: URL: https://cgit.FreeBSD.org/src/commit/?id=0f147784de1037a662b0bd0aaa5f7f7bd7876e37 commit 0f147784de1037a662b0bd0aaa5f7f7bd7876e37 Author: Gleb Popov AuthorDate: 2026-03-21 11:11:15 +0000 Commit: Gleb Popov CommitDate: 2026-03-30 14:46:38 +0000 stat(2): Send to sticky(7) in the S_ISVTX description Approved by: ziaee Differential Revision: https://reviews.freebsd.org/D56015 --- lib/libsys/stat.2 | 2 +- sys/sys/stat.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/libsys/stat.2 b/lib/libsys/stat.2 index 8107740bd901..b31975ee068f 100644 --- a/lib/libsys/stat.2 +++ b/lib/libsys/stat.2 @@ -295,7 +295,7 @@ has these bits: #define S_IFWHT 0160000 /* whiteout */ #define S_ISUID 0004000 /* set user id on execution */ #define S_ISGID 0002000 /* set group id on execution */ -#define S_ISVTX 0001000 /* save swapped text even after use */ +#define S_ISVTX 0001000 /* sticky(7) bit is set */ #define S_IRWXU 0000700 /* RWX mask for owner */ #define S_IRUSR 0000400 /* read permission, owner */ #define S_IWUSR 0000200 /* write permission, owner */ diff --git a/sys/sys/stat.h b/sys/sys/stat.h index 6aa536732efd..0c58838094ed 100644 --- a/sys/sys/stat.h +++ b/sys/sys/stat.h @@ -273,7 +273,7 @@ struct nstat { #define S_IFREG 0100000 /* regular */ #define S_IFLNK 0120000 /* symbolic link */ #define S_IFSOCK 0140000 /* socket */ -#define S_ISVTX 0001000 /* save swapped text even after use */ +#define S_ISVTX 0001000 /* sticky(7) bit is set */ #endif #if __BSD_VISIBLE #define S_IFWHT 0160000 /* whiteout */ From nobody Mon Mar 30 16:02:12 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 4fkwxJ4td2z6WhVF for ; Mon, 30 Mar 2026 16:02:12 +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 4fkwxJ41xvz47GV for ; Mon, 30 Mar 2026 16:02:12 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774886532; 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=g863N5nPu3sdp8yoWgaapcFfuXv8W4PyiaKyuRJXXto=; b=Zh4bQvxc6PfLbfFLJlNy4noBTHYD1/ykKzoX6bufKywF0ID5czfkqSxa1OLX3igMRscbuc V3cbNaT2MCE4C3xmqgeziZKIb23rVQvPRYM9V8lJkAYA1pGcPi/yL1yaqE2B1zJxILN00u +KFBQ2BFLMQ9Bc4xXvYZUR0AtEHmEw5Zj6NYLAz6eQG+O7iDEoNLLu+QI4mJvojBIEBD11 bFItvjPq6FPAX7GtorGCkEOsIsSpbtJhW8OUnmE8fwJlhiZ8ey9yQsrRQbjrkpIM9qEMyc XkmmbzVmafjQlsYckwzUD02bDrBN6m1EESin3lbo7Y5NBEKRQPImLGEISZhMEQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774886532; a=rsa-sha256; cv=none; b=uorq2uxQi3WMbUCEtZyJEtL9NsxyZpOwmmEVYnxUgnKp877rlJG0ysLqXuXc1K2RTP1TPw yLkkYWLQkGdGut4SbEEiXGoROXwbXL/mx+JyDRLTUZcuiWl333ru0ktYtVpRlfXQnIN+a6 mNGe8FuTJ2phM2mOGnn3bwqOd5PtM0bNFs3g3d62SkZ+vHSALhDfoAnH8v3IsfmwWws80M Nr97005Wgn0gCmscIczCOdGakf2QjGeZqqhvyIIz59BK3Uyci/+wJAlO2GMMRlskkqgSO7 vrClh0WG1Ybhm8l6A3X61uq6KynijJ8ProW+1xKkHkhspBi+E4IY+udr0q1W8g== 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=1774886532; 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=g863N5nPu3sdp8yoWgaapcFfuXv8W4PyiaKyuRJXXto=; b=kWMYm3KmSapUS/qVdldlhePu8VbEfITu7NZ0eUCoHX+p3CxTwyLv8CyYF5wZ2OxNAyQJLE SsIsaKGCpmqI7MA+O5FLbQEpJKHBkNOKw/P+mtNAriYJI3myt+ok4qA7NhTW7tEopKS2WZ /ws7Qroa9zOyS5HbeCNLHvOdvsRaK8JtTsy2au3NxU3daHtZiEVw3nI2UvtXi+1hmhllo3 dMiRxg5lKHn8RewrCFr1iM/utfK85PW33391xOcmkUKZPG9+crXXbx/FIDmyujJ/norJBx AJ0ukNchXTmOaJUTvk0nLBS8vz/CSkfzPQsyMjYrbllvc39QO1Zgd82DVPPFZQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkwxJ3YgrzqLV for ; Mon, 30 Mar 2026 16:02:12 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 39858 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 16:02:12 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Zhenlei Huang Subject: git: ee9456ce3753 - main - ifnet: Fix races in if_vmove_reclaim() 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 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/main X-Git-Reftype: branch X-Git-Commit: ee9456ce37539da5b651945eea18502f290eb133 Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 16:02:12 +0000 Message-Id: <69ca9e84.39858.1a21c3c1@gitrepo.freebsd.org> The branch main has been updated by zlei: URL: https://cgit.FreeBSD.org/src/commit/?id=ee9456ce37539da5b651945eea18502f290eb133 commit ee9456ce37539da5b651945eea18502f290eb133 Author: Zhenlei Huang AuthorDate: 2026-03-30 16:00:01 +0000 Commit: Zhenlei Huang CommitDate: 2026-03-30 16:00:01 +0000 ifnet: Fix races in if_vmove_reclaim() The thread running if_vmove_reclaim() may race with other threads those running if_detach(), if_vmove_loan() or if_vmove_reclaim(). In case the current thread loses race, two issues arise, 1. It is unstable and unsafe to access ifp->if_vnet, 2. The interface is removed from "active" list, hence if_unlink_ifnet() can fail. For the first case, check against source prison's vnet instead, given the interface is obtained from that vnet. For the second one, return ENODEV to indicate the interface was on the list but the current thread loses race, to distinguish from ENXIO, which means the interface or child prison is not found. This is the same with if_vmove_loan(). Reviewed by: kp, pouria Fixes: a779388f8bb3 if: Protect V_ifnet in vnet_if_return() MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D55997 --- sys/net/if.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/sys/net/if.c b/sys/net/if.c index 41084ecf0516..bdb5671c1afb 100644 --- a/sys/net/if.c +++ b/sys/net/if.c @@ -1242,7 +1242,7 @@ if_vmove_reclaim(struct thread *td, char *ifname, int jid) struct prison *pr; struct vnet *vnet_dst; struct ifnet *ifp; - int found __diagused; + int found; /* Try to find the prison within our visibility. */ sx_slock(&allprison_lock); @@ -1255,16 +1255,16 @@ if_vmove_reclaim(struct thread *td, char *ifname, int jid) /* Make sure the named iface exists in the source prison/vnet. */ CURVNET_SET(pr->pr_vnet); - ifp = ifunit(ifname); /* XXX Lock to avoid races. */ + ifp = ifunit(ifname); if (ifp == NULL) { CURVNET_RESTORE(); prison_free(pr); return (ENXIO); } - /* Do not try to move the iface from and to the same prison. */ + /* Do not try to move the iface from and to the same vnet. */ vnet_dst = TD_TO_VNET(td); - if (vnet_dst == ifp->if_vnet) { + if (vnet_dst == pr->pr_vnet) { CURVNET_RESTORE(); prison_free(pr); return (EEXIST); @@ -1272,7 +1272,11 @@ if_vmove_reclaim(struct thread *td, char *ifname, int jid) /* Get interface back from child jail/vnet. */ found = if_unlink_ifnet(ifp, true); - MPASS(found); + if (! found) { + CURVNET_RESTORE(); + prison_free(pr); + return (ENODEV); + } sx_xlock(&ifnet_detach_sxlock); if_vmove(ifp, vnet_dst); sx_xunlock(&ifnet_detach_sxlock); From nobody Mon Mar 30 16:15:35 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 4fkxDm08fLz6WyXC for ; Mon, 30 Mar 2026 16:15:36 +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 4fkxDl6HcPz49h4 for ; Mon, 30 Mar 2026 16:15:35 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774887335; 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=v/0FLCqnIz+FoLeJcRVtEIr1EufYsDO5xTIQCgvMbfs=; b=tSLnvwTcYnCBjU1vS3mmCxGO22BZpoLv0/X5JrzwMORctNYG56BOOHKAfB/QrDUrQCib20 TBFgPvPIUREBERPwf0XWIsgjaQ6aTOxhRIryQ6kfbNBNh7Qyv4dxMNGavLVTQWGev2IQMl ggkN8OSHWomv4IaTXke8AHhODrCaHchRsu2N7IpkoHVY8nXxlVHjTNG3y9EJ5n2gDQBxLx JtgRaeWJaJaA77YhXKSruUrKqXWhIF+QJ4tZrGVqYJwAVFVvRESBXacYxONWV28SguF1r4 QPJpYrE6vFCzHADP49Oq11nBZEktvD6Wy9ZXw2IQlvolzddUzKOlFExNvt9ocg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774887335; a=rsa-sha256; cv=none; b=FYiRcS8I9ivTHYh03j+krGboMapqttcU+y491Esv4y4Zp+XqgpOfPaZNyevecq1oAjfC4f wCHdpQgBLvK1a0nqBsKZKohMTSkH4z+Xju2ugSgg4rmSnCSQTj65gERl0RI25NQ6A0zH4a UED8CxFlg2wQKcxnmCFbuifIiKzjzvJcwfBBTLlIKJfzJ9RTSYBPORUmB3uYYNm+AyPgvM zpWBwkyqFA6gUzv6ZoYd5gtIGT2Wa5el+o1lftEDi/wQj6+l2PBGX/uWO34gqinXUprMdy TMkwNhz6LfIVZ64Ld1t6m1cInyfHRl2omPyXKyTHnWFt4PRRLKQ7XyiQ+EmAAg== 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=1774887335; 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=v/0FLCqnIz+FoLeJcRVtEIr1EufYsDO5xTIQCgvMbfs=; b=BtCIOUNlueWgnh+QflwnAMy3ogFYAMTXD+qklFF3Ici97QrVZz+OxE0kRvzbfDAq4/AcY3 PLHFT/h8XDkQpwHEKu1QcNZ/S4Vip35YWfmYZ2fXBAKVAKqpLJZEgAAHEyuAaBPVmgGaKQ QTMVXgjiWLtgsCPz0IFWh0DbJoLe0L//m46lDeVulmgE/rZ1I2zgI76Qwed23Tg1ukvaao kvhPnTghbRy3Mf/HAos2KWoH1F8Up/8sVFE0Opd9xNZ2gM1pTTmeubg+C6LzU0h1B8XlHx 0tZr9cjS4bPCRm4X3FPSakiBXK4+YiuvxwwjAtV6CcGM7E8DT8Q5mf5aDR8tjQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkxDl5Z5YzqWQ for ; Mon, 30 Mar 2026 16:15:35 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3b9c2 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 16:15:35 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: d50d0c002b98 - main - ip_mroute: Start moving globals into a structure 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d50d0c002b982f193e36ede9fa2669d5dcf8467b Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 16:15:35 +0000 Message-Id: <69caa1a7.3b9c2.3d515715@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=d50d0c002b982f193e36ede9fa2669d5dcf8467b commit d50d0c002b982f193e36ede9fa2669d5dcf8467b Author: Mark Johnston AuthorDate: 2026-03-30 13:27:52 +0000 Commit: Mark Johnston CommitDate: 2026-03-30 16:08:20 +0000 ip_mroute: Start moving globals into a structure I would like to support per-FIB multicast routing tables, such that one can run a routing daemon per-FIB, with each daemon oblivious to the existence of others. Currently the multicast routing code is completely unaware of FIBs. To that end, start collecting various global variables in ip_mroute.c into a per-VNET struct mfctable. In a future patch this will be expanded into an array of mfctable structures, one per FIB. For now, all of the state is collected into V_mfctables[0]. Each mfctable contains, among other things: - a pointer to the routing socket, if routing is enabled, - a hash table of routing cache entries, - an table of network interfaces participating in the routing configuration This change has no functional effect, it is just factoring out these global variables to make the subsequent patches simpler. MFC after: 2 weeks Sponsored by: Stormshield Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D55237 --- sys/netinet/ip_mroute.c | 473 +++++++++++++++++++++++++++--------------------- 1 file changed, 266 insertions(+), 207 deletions(-) diff --git a/sys/netinet/ip_mroute.c b/sys/netinet/ip_mroute.c index 7a197e20a62f..6e5b739f1da8 100644 --- a/sys/netinet/ip_mroute.c +++ b/sys/netinet/ip_mroute.c @@ -169,8 +169,26 @@ SYSCTL_VNET_PCPUSTAT(_net_inet_ip, OID_AUTO, mrtstat, struct mrtstat, mrtstat, "IPv4 Multicast Forwarding Statistics (struct mrtstat, " "netinet/ip_mroute.h)"); -VNET_DEFINE_STATIC(struct socket *, ip_mrouter); -#define V_ip_mrouter VNET(ip_mrouter) +struct mfctable { + struct socket *router; + LIST_HEAD(mfchashhdr, mfc) *mfchashtbl; + u_char *nexpire; + vifi_t numvifs; + struct vif viftable[MAXVIFS]; + + struct buf_ring *bw_upcalls; + struct mtx bw_upcalls_mtx; + + struct ifnet *register_if; + vifi_t register_vif; + + uint32_t api_config; + int pim_assert_enabled; + struct timeval pim_assert_interval; +}; + +VNET_DEFINE_STATIC(struct mfctable *, mfctables); +#define V_mfctables VNET(mfctables) VNET_DEFINE_STATIC(u_long, mfchash); #define V_mfchash VNET(mfchash) @@ -182,28 +200,17 @@ VNET_DEFINE_STATIC(u_long, mfchash); static u_long mfchashsize = MFCHASHSIZE; /* Hash size */ SYSCTL_ULONG(_net_inet_ip, OID_AUTO, mfchashsize, CTLFLAG_RDTUN, &mfchashsize, 0, "IPv4 Multicast Forwarding Table hash size"); -VNET_DEFINE_STATIC(u_char *, nexpire); /* 0..mfchashsize-1 */ -#define V_nexpire VNET(nexpire) -VNET_DEFINE_STATIC(LIST_HEAD(mfchashhdr, mfc)*, mfchashtbl); -#define V_mfchashtbl VNET(mfchashtbl) + VNET_DEFINE_STATIC(struct taskqueue *, task_queue); #define V_task_queue VNET(task_queue) VNET_DEFINE_STATIC(struct task, task); #define V_task VNET(task) -VNET_DEFINE_STATIC(vifi_t, numvifs); -#define V_numvifs VNET(numvifs) -VNET_DEFINE_STATIC(struct vif *, viftable); -#define V_viftable VNET(viftable) - static eventhandler_tag if_detach_event_tag = NULL; VNET_DEFINE_STATIC(struct callout, expire_upcalls_ch); #define V_expire_upcalls_ch VNET(expire_upcalls_ch) -VNET_DEFINE_STATIC(struct mtx, buf_ring_mtx); -#define V_buf_ring_mtx VNET(buf_ring_mtx) - #define EXPIRE_TIMEOUT (hz / 4) /* 4x / second */ #define UPCALL_EXPIRE 6 /* number of timeouts */ @@ -218,10 +225,6 @@ static MALLOC_DEFINE(M_BWMETER, "bwmeter", "multicast upcall bw meters"); */ VNET_DEFINE_STATIC(struct callout, bw_upcalls_ch); #define V_bw_upcalls_ch VNET(bw_upcalls_ch) -VNET_DEFINE_STATIC(struct buf_ring *, bw_upcalls_ring); -#define V_bw_upcalls_ring VNET(bw_upcalls_ring) -VNET_DEFINE_STATIC(struct mtx, bw_upcalls_ring_mtx); -#define V_bw_upcalls_ring_mtx VNET(bw_upcalls_ring_mtx) #define BW_UPCALLS_PERIOD (hz) /* periodical flush of bw upcalls */ @@ -296,11 +299,6 @@ static struct pim_encap_pimhdr pim_encap_pimhdr = { 0 /* flags */ }; -VNET_DEFINE_STATIC(vifi_t, reg_vif_num) = VIFI_INVALID; -#define V_reg_vif_num VNET(reg_vif_num) -VNET_DEFINE_STATIC(struct ifnet *, multicast_register_if); -#define V_multicast_register_if VNET(multicast_register_if) - /* * Private variables. */ @@ -332,14 +330,16 @@ static void free_bw_list(struct bw_meter *); static int get_sg_cnt(struct sioc_sg_req *); static int get_vif_cnt(struct sioc_vif_req *); static void if_detached_event(void *, struct ifnet *); -static int ip_mdq(struct mbuf *, struct ifnet *, struct mfc *, vifi_t); +static int ip_mdq(struct mfctable *, struct mbuf *, struct ifnet *, + struct mfc *, vifi_t); static int ip_mrouter_init(struct socket *, int); static __inline struct mfc * - mfc_find(struct in_addr *, struct in_addr *); + mfc_find(const struct mfctable *mfct, const struct in_addr *, + const struct in_addr *); static void phyint_send(struct ip *, struct vif *, struct mbuf *); static struct mbuf * pim_register_prepare(struct ip *, struct mbuf *); -static int pim_register_send(struct ip *, struct vif *, +static int pim_register_send(struct mfctable *, struct ip *, struct vif *, struct mbuf *, struct mfc *); static int pim_register_send_rp(struct ip *, struct vif *, struct mbuf *, struct mfc *); @@ -363,29 +363,20 @@ static const uint32_t mrt_api_support = (MRT_MFC_FLAGS_DISABLE_WRONGVIF | MRT_MFC_FLAGS_BORDER_VIF | MRT_MFC_RP | MRT_MFC_BW_UPCALL); -VNET_DEFINE_STATIC(uint32_t, mrt_api_config); -#define V_mrt_api_config VNET(mrt_api_config) -VNET_DEFINE_STATIC(int, pim_assert_enabled); -#define V_pim_assert_enabled VNET(pim_assert_enabled) -static struct timeval pim_assert_interval = { 3, 0 }; /* Rate limit */ /* * Find a route for a given origin IP address and multicast group address. * Statistics must be updated by the caller. */ -static __inline struct mfc * -mfc_find(struct in_addr *o, struct in_addr *g) +static struct mfc * +mfc_find(const struct mfctable *mfct, const struct in_addr *o, + const struct in_addr *g) { struct mfc *rt; - /* - * Might be called both RLOCK and WLOCK. - * Check if any, it's caller responsibility - * to choose correct option. - */ MRW_LOCK_ASSERT(); - LIST_FOREACH(rt, &V_mfchashtbl[MFCHASH(*o, *g)], mfc_hash) { + LIST_FOREACH(rt, &mfct->mfchashtbl[MFCHASH(*o, *g)], mfc_hash) { if (in_hosteq(rt->mfc_origin, *o) && in_hosteq(rt->mfc_mcastgrp, *g) && buf_ring_empty(rt->mfc_stall_ring)) @@ -403,8 +394,7 @@ mfc_alloc(void) if (rt == NULL) return rt; - rt->mfc_stall_ring = buf_ring_alloc(MAX_UPQ, M_MRTABLE, - M_NOWAIT, &V_buf_ring_mtx); + rt->mfc_stall_ring = buf_ring_alloc(MAX_UPQ, M_MRTABLE, M_NOWAIT, NULL); if (rt->mfc_stall_ring == NULL) { free(rt, M_MRTABLE); return NULL; @@ -419,6 +409,7 @@ mfc_alloc(void) static int X_ip_mrouter_set(struct socket *so, struct sockopt *sopt) { + struct mfctable *mfct; int error, optval; vifi_t vifi; struct vifctl vifc; @@ -426,7 +417,8 @@ X_ip_mrouter_set(struct socket *so, struct sockopt *sopt) struct bw_upcall bw_upcall; uint32_t i; - if (so != V_ip_mrouter && sopt->sopt_name != MRT_INIT) + mfct = &V_mfctables[0]; + if (so != mfct->router && sopt->sopt_name != MRT_INIT) return EPERM; error = 0; @@ -458,7 +450,7 @@ X_ip_mrouter_set(struct socket *so, struct sockopt *sopt) * select data size depending on API version. */ if (sopt->sopt_name == MRT_ADD_MFC && - V_mrt_api_config & MRT_API_FLAGS_ALL) { + (mfct->api_config & MRT_API_FLAGS_ALL) != 0) { error = sooptcopyin(sopt, &mfc, sizeof(struct mfcctl2), sizeof(struct mfcctl2)); } else { @@ -515,24 +507,27 @@ X_ip_mrouter_set(struct socket *so, struct sockopt *sopt) static int X_ip_mrouter_get(struct socket *so, struct sockopt *sopt) { + struct mfctable *mfct; int error; + mfct = &V_mfctables[0]; + switch (sopt->sopt_name) { case MRT_VERSION: error = sooptcopyout(sopt, &mrt_api_version, sizeof mrt_api_version); break; case MRT_ASSERT: - error = sooptcopyout(sopt, &V_pim_assert_enabled, - sizeof V_pim_assert_enabled); + error = sooptcopyout(sopt, &mfct->pim_assert_enabled, + sizeof(mfct->pim_assert_enabled)); break; case MRT_API_SUPPORT: error = sooptcopyout(sopt, &mrt_api_support, sizeof mrt_api_support); break; case MRT_API_CONFIG: - error = sooptcopyout(sopt, &V_mrt_api_config, - sizeof V_mrt_api_config); + error = sooptcopyout(sopt, &mfct->api_config, + sizeof(mfct->api_config)); break; default: error = EOPNOTSUPP; @@ -577,7 +572,7 @@ get_sg_cnt(struct sioc_sg_req *req) struct mfc *rt; MRW_RLOCK(); - rt = mfc_find(&req->src, &req->grp); + rt = mfc_find(&V_mfctables[0], &req->src, &req->grp); if (rt == NULL) { MRW_RUNLOCK(); req->pktcnt = req->bytecnt = req->wrong_if = 0xffffffff; @@ -596,18 +591,20 @@ get_sg_cnt(struct sioc_sg_req *req) static int get_vif_cnt(struct sioc_vif_req *req) { + struct mfctable *mfct; struct vif *vif; vifi_t vifi; + mfct = &V_mfctables[0]; vifi = req->vifi; MRW_RLOCK(); - if (vifi >= V_numvifs) { + if (vifi >= mfct->numvifs) { MRW_RUNLOCK(); return EINVAL; } - vif = &V_viftable[vifi]; + vif = &mfct->viftable[vifi]; mtx_lock(&vif->v_mtx); req->icount = vif->v_pkt_in; req->ocount = vif->v_pkt_out; @@ -622,10 +619,13 @@ get_vif_cnt(struct sioc_vif_req *req) static void if_detached_event(void *arg __unused, struct ifnet *ifp) { + struct mfctable *mfct; vifi_t vifi; u_long i, vifi_cnt = 0; struct ifnet *free_ptr, *multi_leave; + mfct = &V_mfctables[0]; + MRW_WLOCK(); if (!V_ip_mrouting_enabled) { MRW_WUNLOCK(); @@ -641,13 +641,14 @@ if_detached_event(void *arg __unused, struct ifnet *ifp) * 4. Free vif state. This should disable ALLMULTI on the interface. */ restart: - for (vifi = 0; vifi < V_numvifs; vifi++) { - if (V_viftable[vifi].v_ifp != ifp) + for (vifi = 0; vifi < mfct->numvifs; vifi++) { + if (mfct->viftable[vifi].v_ifp != ifp) continue; for (i = 0; i < mfchashsize; i++) { struct mfc *rt, *nrt; - LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) { + LIST_FOREACH_SAFE(rt, &mfct->mfchashtbl[i], mfc_hash, + nrt) { if (rt->mfc_parent == vifi) { expire_mfc(rt); } @@ -693,12 +694,14 @@ ip_mrouter_upcall_thread(void *arg, int pending __unused) static int ip_mrouter_init(struct socket *so, int version) { + struct mfctable *mfct; CTR2(KTR_IPMF, "%s: so %p", __func__, so); if (version != 1) return ENOPROTOOPT; + mfct = &V_mfctables[0]; MRW_TEARDOWN_WLOCK(); MRW_WLOCK(); @@ -708,25 +711,26 @@ ip_mrouter_init(struct socket *so, int version) return ENOPROTOOPT; } - if (V_ip_mrouter != NULL) { + if (mfct->router != NULL) { MRW_WUNLOCK(); MRW_TEARDOWN_WUNLOCK(); return EADDRINUSE; } - V_mfchashtbl = hashinit_flags(mfchashsize, M_MRTABLE, &V_mfchash, + mfct->mfchashtbl = hashinit_flags(mfchashsize, M_MRTABLE, &V_mfchash, HASH_NOWAIT); - if (V_mfchashtbl == NULL) { + if (mfct->mfchashtbl == NULL) { MRW_WUNLOCK(); MRW_TEARDOWN_WUNLOCK(); return (ENOMEM); } /* Create upcall ring */ - mtx_init(&V_bw_upcalls_ring_mtx, "mroute upcall buf_ring mtx", NULL, MTX_DEF); - V_bw_upcalls_ring = buf_ring_alloc(BW_UPCALLS_MAX, M_MRTABLE, - M_NOWAIT, &V_bw_upcalls_ring_mtx); - if (!V_bw_upcalls_ring) { + mtx_init(&mfct->bw_upcalls_mtx, "mroute upcall buf_ring mtx", NULL, + MTX_DEF); + mfct->bw_upcalls = buf_ring_alloc(BW_UPCALLS_MAX, M_MRTABLE, M_NOWAIT, + &mfct->bw_upcalls_mtx); + if (mfct->bw_upcalls == NULL) { MRW_WUNLOCK(); MRW_TEARDOWN_WUNLOCK(); return (ENOMEM); @@ -741,13 +745,11 @@ ip_mrouter_init(struct socket *so, int version) callout_reset(&V_bw_upcalls_ch, BW_UPCALLS_PERIOD, expire_bw_upcalls_send, curvnet); - V_ip_mrouter = so; + mfct->router = so; + mfct->pim_assert_interval.tv_sec = 3; V_ip_mrouting_enabled = true; atomic_add_int(&ip_mrouter_cnt, 1); - /* This is a mutex required by buf_ring init, but not used internally */ - mtx_init(&V_buf_ring_mtx, "mroute buf_ring mtx", NULL, MTX_DEF); - MRW_WUNLOCK(); MRW_TEARDOWN_WUNLOCK(); @@ -762,14 +764,17 @@ ip_mrouter_init(struct socket *so, int version) static void X_ip_mrouter_done(struct socket *so) { + struct mfctable *mfct; struct ifnet **ifps; int nifp; u_long i; vifi_t vifi; struct bw_upcall *bu; + mfct = &V_mfctables[0]; + MRW_TEARDOWN_WLOCK(); - if (so != V_ip_mrouter) { + if (so != mfct->router) { MRW_TEARDOWN_WUNLOCK(); return; } @@ -777,10 +782,10 @@ X_ip_mrouter_done(struct socket *so) /* * Detach/disable hooks to the reset of the system. */ - V_ip_mrouter = NULL; + mfct->router = NULL; V_ip_mrouting_enabled = false; atomic_subtract_int(&ip_mrouter_cnt, 1); - V_mrt_api_config = 0; + mfct->api_config = 0; /* * Wait for all epoch sections to complete to ensure the new value of @@ -800,11 +805,11 @@ X_ip_mrouter_done(struct socket *so) taskqueue_cancel(V_task_queue, &V_task, NULL); /* Destroy upcall ring */ - while ((bu = buf_ring_dequeue_mc(V_bw_upcalls_ring)) != NULL) { + while ((bu = buf_ring_dequeue_mc(mfct->bw_upcalls)) != NULL) { free(bu, M_MRTABLE); } - buf_ring_free(V_bw_upcalls_ring, M_MRTABLE); - mtx_destroy(&V_bw_upcalls_ring_mtx); + buf_ring_free(mfct->bw_upcalls, M_MRTABLE); + mtx_destroy(&mfct->bw_upcalls_mtx); /* * For each phyint in use, prepare to disable promiscuous reception @@ -813,16 +818,19 @@ X_ip_mrouter_done(struct socket *so) * sx locks in their ioctl routines, which is not allowed while holding * a non-sleepable lock. */ - KASSERT(V_numvifs <= MAXVIFS, ("More vifs than possible")); - for (vifi = 0, nifp = 0; vifi < V_numvifs; vifi++) { - if (!in_nullhost(V_viftable[vifi].v_lcl_addr) && - !(V_viftable[vifi].v_flags & (VIFF_TUNNEL | VIFF_REGISTER))) { - ifps[nifp++] = V_viftable[vifi].v_ifp; + KASSERT(mfct->numvifs <= MAXVIFS, ("More vifs than possible")); + for (vifi = 0, nifp = 0; vifi < mfct->numvifs; vifi++) { + struct vif *vif; + + vif = &mfct->viftable[vifi]; + if (!in_nullhost(vif->v_lcl_addr) && + (vif->v_flags & (VIFF_TUNNEL | VIFF_REGISTER)) == 0) { + ifps[nifp++] = vif->v_ifp; } } - bzero((caddr_t)V_viftable, sizeof(*V_viftable) * MAXVIFS); - V_numvifs = 0; - V_pim_assert_enabled = 0; + bzero(mfct->viftable, sizeof(*mfct->viftable) * MAXVIFS); + mfct->numvifs = 0; + mfct->pim_assert_enabled = 0; callout_stop(&V_expire_upcalls_ch); callout_stop(&V_bw_upcalls_ch); @@ -834,18 +842,15 @@ X_ip_mrouter_done(struct socket *so) for (i = 0; i < mfchashsize; i++) { struct mfc *rt, *nrt; - LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) { + LIST_FOREACH_SAFE(rt, &mfct->mfchashtbl[i], mfc_hash, nrt) { expire_mfc(rt); } } - free(V_mfchashtbl, M_MRTABLE); - V_mfchashtbl = NULL; - - bzero(V_nexpire, sizeof(V_nexpire[0]) * mfchashsize); + free(mfct->mfchashtbl, M_MRTABLE); + mfct->mfchashtbl = NULL; - V_reg_vif_num = VIFI_INVALID; - - mtx_destroy(&V_buf_ring_mtx); + bzero(mfct->nexpire, sizeof(mfct->nexpire[0]) * mfchashsize); + mfct->register_vif = VIFI_INVALID; MRW_WUNLOCK(); MRW_TEARDOWN_WUNLOCK(); @@ -870,7 +875,7 @@ set_assert(int i) if ((i != 1) && (i != 0)) return EINVAL; - V_pim_assert_enabled = i; + V_mfctables[0].pim_assert_enabled = i; return 0; } @@ -881,6 +886,7 @@ set_assert(int i) int set_api_config(uint32_t *apival) { + struct mfctable *mfct; u_long i; /* @@ -890,11 +896,12 @@ set_api_config(uint32_t *apival) * - pim_assert is not enabled * - the MFC table is empty */ - if (V_numvifs > 0) { + mfct = &V_mfctables[0]; + if (mfct->numvifs > 0) { *apival = 0; return EPERM; } - if (V_pim_assert_enabled) { + if (mfct->pim_assert_enabled) { *apival = 0; return EPERM; } @@ -902,7 +909,7 @@ set_api_config(uint32_t *apival) MRW_RLOCK(); for (i = 0; i < mfchashsize; i++) { - if (LIST_FIRST(&V_mfchashtbl[i]) != NULL) { + if (LIST_FIRST(&mfct->mfchashtbl[i]) != NULL) { MRW_RUNLOCK(); *apival = 0; return EPERM; @@ -911,8 +918,8 @@ set_api_config(uint32_t *apival) MRW_RUNLOCK(); - V_mrt_api_config = *apival & mrt_api_support; - *apival = V_mrt_api_config; + mfct->api_config = *apival & mrt_api_support; + *apival = mfct->api_config; return 0; } @@ -923,7 +930,8 @@ set_api_config(uint32_t *apival) static int add_vif(struct vifctl *vifcp) { - struct vif *vifp = V_viftable + vifcp->vifc_vifi; + struct mfctable *mfct; + struct vif *vifp; struct sockaddr_in sin = {sizeof sin, AF_INET}; struct ifaddr *ifa; struct ifnet *ifp; @@ -931,6 +939,10 @@ add_vif(struct vifctl *vifcp) if (vifcp->vifc_vifi >= MAXVIFS) return EINVAL; + + mfct = &V_mfctables[0]; + vifp = &mfct->viftable[vifcp->vifc_vifi]; + /* rate limiting is no longer supported by this code */ if (vifcp->vifc_rate_limit != 0) { log(LOG_ERR, "rate limiting is no longer supported\n"); @@ -967,11 +979,11 @@ add_vif(struct vifctl *vifcp) CTR1(KTR_IPMF, "%s: tunnels are no longer supported", __func__); return EOPNOTSUPP; } else if (vifcp->vifc_flags & VIFF_REGISTER) { - ifp = V_multicast_register_if = if_alloc(IFT_LOOP); + ifp = mfct->register_if = if_alloc(IFT_LOOP); CTR2(KTR_IPMF, "%s: add register vif for ifp %p", __func__, ifp); - if (V_reg_vif_num == VIFI_INVALID) { - if_initname(V_multicast_register_if, "register_vif", 0); - V_reg_vif_num = vifcp->vifc_vifi; + if (mfct->register_vif == VIFI_INVALID) { + if_initname(mfct->register_if, "register_vif", 0); + mfct->register_vif = vifcp->vifc_vifi; } } else { /* Make sure the interface supports multicast */ if ((ifp->if_flags & IFF_MULTICAST) == 0) @@ -987,7 +999,7 @@ add_vif(struct vifctl *vifcp) if (!in_nullhost(vifp->v_lcl_addr)) { if (ifp) - V_multicast_register_if = NULL; + mfct->register_if = NULL; MRW_WUNLOCK(); if (ifp) if_free(ifp); @@ -1008,8 +1020,8 @@ add_vif(struct vifctl *vifcp) mtx_init(&vifp->v_mtx, vifp->v_mtx_name, NULL, MTX_DEF); /* Adjust numvifs up if the vifi is higher than numvifs */ - if (V_numvifs <= vifcp->vifc_vifi) - V_numvifs = vifcp->vifc_vifi + 1; + if (mfct->numvifs <= vifcp->vifc_vifi) + mfct->numvifs = vifcp->vifc_vifi + 1; MRW_WUNLOCK(); @@ -1026,17 +1038,19 @@ add_vif(struct vifctl *vifcp) static int del_vif_locked(vifi_t vifi, struct ifnet **ifp_multi_leave, struct ifnet **ifp_free) { + struct mfctable *mfct; struct vif *vifp; + mfct = &V_mfctables[0]; *ifp_free = NULL; *ifp_multi_leave = NULL; MRW_WLOCK_ASSERT(); - if (vifi >= V_numvifs) { + if (vifi >= mfct->numvifs) { return EINVAL; } - vifp = &V_viftable[vifi]; + vifp = &mfct->viftable[vifi]; if (in_nullhost(vifp->v_lcl_addr)) { return EADDRNOTAVAIL; } @@ -1045,10 +1059,10 @@ del_vif_locked(vifi_t vifi, struct ifnet **ifp_multi_leave, struct ifnet **ifp_f *ifp_multi_leave = vifp->v_ifp; if (vifp->v_flags & VIFF_REGISTER) { - V_reg_vif_num = VIFI_INVALID; + mfct->register_vif = VIFI_INVALID; if (vifp->v_ifp) { - if (vifp->v_ifp == V_multicast_register_if) - V_multicast_register_if = NULL; + if (vifp->v_ifp == mfct->register_if) + mfct->register_if = NULL; *ifp_free = vifp->v_ifp; } } @@ -1060,10 +1074,10 @@ del_vif_locked(vifi_t vifi, struct ifnet **ifp_multi_leave, struct ifnet **ifp_f CTR2(KTR_IPMF, "%s: delete vif %d", __func__, (int)vifi); /* Adjust numvifs down */ - for (vifi = V_numvifs; vifi > 0; vifi--) - if (!in_nullhost(V_viftable[vifi-1].v_lcl_addr)) + for (vifi = mfct->numvifs; vifi > 0; vifi--) + if (!in_nullhost(mfct->viftable[vifi - 1].v_lcl_addr)) break; - V_numvifs = vifi; + mfct->numvifs = vifi; return 0; } @@ -1091,18 +1105,18 @@ del_vif(vifi_t vifi) * update an mfc entry without resetting counters and S,G addresses. */ static void -update_mfc_params(struct mfc *rt, struct mfcctl2 *mfccp) +update_mfc_params(struct mfctable *mfct, struct mfc *rt, struct mfcctl2 *mfccp) { int i; rt->mfc_parent = mfccp->mfcc_parent; - for (i = 0; i < V_numvifs; i++) { + for (i = 0; i < mfct->numvifs; i++) { rt->mfc_ttls[i] = mfccp->mfcc_ttls[i]; - rt->mfc_flags[i] = mfccp->mfcc_flags[i] & V_mrt_api_config & + rt->mfc_flags[i] = mfccp->mfcc_flags[i] & mfct->api_config & MRT_MFC_FLAGS_ALL; } /* set the RP address */ - if (V_mrt_api_config & MRT_MFC_RP) + if (mfct->api_config & MRT_MFC_RP) rt->mfc_rp = mfccp->mfcc_rp; else rt->mfc_rp.s_addr = INADDR_ANY; @@ -1112,12 +1126,12 @@ update_mfc_params(struct mfc *rt, struct mfcctl2 *mfccp) * fully initialize an mfc entry from the parameter. */ static void -init_mfc_params(struct mfc *rt, struct mfcctl2 *mfccp) +init_mfc_params(struct mfctable *mfct, struct mfc *rt, struct mfcctl2 *mfccp) { rt->mfc_origin = mfccp->mfcc_origin; rt->mfc_mcastgrp = mfccp->mfcc_mcastgrp; - update_mfc_params(rt, mfccp); + update_mfc_params(mfct, rt, mfccp); /* initialize pkt counters per src-grp */ rt->mfc_pkt_cnt = 0; @@ -1156,13 +1170,16 @@ static int add_mfc(struct mfcctl2 *mfccp) { struct mfc *rt; + struct mfctable *mfct; struct rtdetq *rte; u_long hash = 0; u_short nstl; struct epoch_tracker et; + mfct = &V_mfctables[0]; + MRW_WLOCK(); - rt = mfc_find(&mfccp->mfcc_origin, &mfccp->mfcc_mcastgrp); + rt = mfc_find(mfct, &mfccp->mfcc_origin, &mfccp->mfcc_mcastgrp); /* If an entry already exists, just update the fields */ if (rt) { @@ -1170,7 +1187,7 @@ add_mfc(struct mfcctl2 *mfccp) __func__, ntohl(mfccp->mfcc_origin.s_addr), (u_long)ntohl(mfccp->mfcc_mcastgrp.s_addr), mfccp->mfcc_parent); - update_mfc_params(rt, mfccp); + update_mfc_params(mfct, rt, mfccp); MRW_WUNLOCK(); return (0); } @@ -1181,7 +1198,7 @@ add_mfc(struct mfcctl2 *mfccp) nstl = 0; hash = MFCHASH(mfccp->mfcc_origin, mfccp->mfcc_mcastgrp); NET_EPOCH_ENTER(et); - LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) { + LIST_FOREACH(rt, &mfct->mfchashtbl[hash], mfc_hash) { if (in_hosteq(rt->mfc_origin, mfccp->mfcc_origin) && in_hosteq(rt->mfc_mcastgrp, mfccp->mfcc_mcastgrp) && !buf_ring_empty(rt->mfc_stall_ring)) { @@ -1194,15 +1211,15 @@ add_mfc(struct mfcctl2 *mfccp) if (nstl++) CTR1(KTR_IPMF, "%s: multiple matches", __func__); - init_mfc_params(rt, mfccp); + init_mfc_params(mfct, rt, mfccp); rt->mfc_expire = 0; /* Don't clean this guy up */ - V_nexpire[hash]--; + mfct->nexpire[hash]--; /* Free queued packets, but attempt to forward them first. */ while (!buf_ring_empty(rt->mfc_stall_ring)) { rte = buf_ring_dequeue_mc(rt->mfc_stall_ring); if (rte->ifp != NULL) - ip_mdq(rte->m, rte->ifp, rt, -1); + ip_mdq(mfct, rte->m, rte->ifp, rt, -1); m_freem(rte->m); free(rte, M_MRTABLE); } @@ -1215,12 +1232,12 @@ add_mfc(struct mfcctl2 *mfccp) */ if (nstl == 0) { CTR1(KTR_IPMF, "%s: adding mfc w/o upcall", __func__); - LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) { + LIST_FOREACH(rt, &mfct->mfchashtbl[hash], mfc_hash) { if (in_hosteq(rt->mfc_origin, mfccp->mfcc_origin) && in_hosteq(rt->mfc_mcastgrp, mfccp->mfcc_mcastgrp)) { - init_mfc_params(rt, mfccp); + init_mfc_params(mfct, rt, mfccp); if (rt->mfc_expire) - V_nexpire[hash]--; + mfct->nexpire[hash]--; rt->mfc_expire = 0; break; /* XXX */ } @@ -1233,14 +1250,14 @@ add_mfc(struct mfcctl2 *mfccp) return (ENOBUFS); } - init_mfc_params(rt, mfccp); + init_mfc_params(mfct, rt, mfccp); rt->mfc_expire = 0; rt->mfc_bw_meter_leq = NULL; rt->mfc_bw_meter_geq = NULL; /* insert new entry at head of hash chain */ - LIST_INSERT_HEAD(&V_mfchashtbl[hash], rt, mfc_hash); + LIST_INSERT_HEAD(&mfct->mfchashtbl[hash], rt, mfc_hash); } } @@ -1255,6 +1272,7 @@ add_mfc(struct mfcctl2 *mfccp) static int del_mfc(struct mfcctl2 *mfccp) { + struct mfctable *mfct; struct in_addr origin; struct in_addr mcastgrp; struct mfc *rt; @@ -1265,9 +1283,11 @@ del_mfc(struct mfcctl2 *mfccp) CTR3(KTR_IPMF, "%s: delete mfc orig 0x%08x group %lx", __func__, ntohl(origin.s_addr), (u_long)ntohl(mcastgrp.s_addr)); + mfct = &V_mfctables[0]; MRW_WLOCK(); - LIST_FOREACH(rt, &V_mfchashtbl[MFCHASH(origin, mcastgrp)], mfc_hash) { + LIST_FOREACH(rt, &mfct->mfchashtbl[MFCHASH(origin, mcastgrp)], + mfc_hash) { if (in_hosteq(rt->mfc_origin, origin) && in_hosteq(rt->mfc_mcastgrp, mcastgrp)) break; @@ -1321,6 +1341,7 @@ X_ip_mforward(struct ip *ip, struct ifnet *ifp, struct mbuf *m, struct ip_moptions *imo) { struct mfc *rt; + struct mfctable *mfct; int error; vifi_t vifi; struct mbuf *mb0; @@ -1347,14 +1368,16 @@ X_ip_mforward(struct ip *ip, struct ifnet *ifp, struct mbuf *m, return (1); } + mfct = &V_mfctables[0]; + /* * BEGIN: MCAST ROUTING HOT PATH */ MRW_RLOCK(); - if (imo && ((vifi = imo->imo_multicast_vif) < V_numvifs)) { + if (imo && ((vifi = imo->imo_multicast_vif) < mfct->numvifs)) { if (ip->ip_ttl < MAXTTL) ip->ip_ttl++; /* compensate for -1 in *_send routines */ - error = ip_mdq(m, ifp, NULL, vifi); + error = ip_mdq(mfct, m, ifp, NULL, vifi); MRW_RUNLOCK(); return error; } @@ -1373,11 +1396,11 @@ mfc_find_retry: * Determine forwarding vifs from the forwarding cache table */ MRTSTAT_INC(mrts_mfc_lookups); - rt = mfc_find(&ip->ip_src, &ip->ip_dst); + rt = mfc_find(mfct, &ip->ip_src, &ip->ip_dst); /* Entry exists, so forward if necessary */ if (rt != NULL) { - error = ip_mdq(m, ifp, rt, -1); + error = ip_mdq(mfct, m, ifp, rt, -1); /* Generic unlock here as we might release R or W lock */ MRW_UNLOCK(); return error; @@ -1427,8 +1450,7 @@ mfc_find_retry: /* is there an upcall waiting for this flow ? */ hash = MFCHASH(ip->ip_src, ip->ip_dst); - LIST_FOREACH(rt, &V_mfchashtbl[hash], mfc_hash) - { + LIST_FOREACH(rt, &mfct->mfchashtbl[hash], mfc_hash) { if (in_hosteq(ip->ip_src, rt->mfc_origin) && in_hosteq(ip->ip_dst, rt->mfc_mcastgrp) && !buf_ring_empty(rt->mfc_stall_ring)) @@ -1445,10 +1467,10 @@ mfc_find_retry: * Locate the vifi for the incoming interface for this packet. * If none found, drop packet. */ - for (vifi = 0; vifi < V_numvifs && - V_viftable[vifi].v_ifp != ifp; vifi++) + for (vifi = 0; vifi < mfct->numvifs && + mfct->viftable[vifi].v_ifp != ifp; vifi++) ; - if (vifi >= V_numvifs) /* vif not found, drop packet */ + if (vifi >= mfct->numvifs) /* vif not found, drop packet */ goto non_fatal; /* no upcall, so make a new entry */ @@ -1474,7 +1496,7 @@ mfc_find_retry: MRTSTAT_INC(mrts_upcalls); k_igmpsrc.sin_addr = ip->ip_src; - if (socket_send(V_ip_mrouter, mm, &k_igmpsrc) < 0) { + if (socket_send(mfct->router, mm, &k_igmpsrc) < 0) { CTR0(KTR_IPMF, "ip_mforward: socket queue full"); MRTSTAT_INC(mrts_upq_sockfull); fail1: free(rt, M_MRTABLE); @@ -1488,8 +1510,8 @@ mfc_find_retry: rt->mfc_origin.s_addr = ip->ip_src.s_addr; rt->mfc_mcastgrp.s_addr = ip->ip_dst.s_addr; rt->mfc_expire = UPCALL_EXPIRE; - V_nexpire[hash]++; - for (i = 0; i < V_numvifs; i++) { + mfct->nexpire[hash]++; + for (i = 0; i < mfct->numvifs; i++) { rt->mfc_ttls[i] = 0; rt->mfc_flags[i] = 0; } @@ -1509,7 +1531,7 @@ mfc_find_retry: buf_ring_enqueue(rt->mfc_stall_ring, rte); /* Add RT to hashtable as it didn't exist before */ - LIST_INSERT_HEAD(&V_mfchashtbl[hash], rt, mfc_hash); + LIST_INSERT_HEAD(&mfct->mfchashtbl[hash], rt, mfc_hash); } else { /* determine if queue has overflowed */ if (buf_ring_full(rt->mfc_stall_ring)) { @@ -1537,19 +1559,21 @@ mfc_find_retry: static void expire_upcalls(void *arg) { + struct mfctable *mfct; u_long i; CURVNET_SET((struct vnet *) arg); - /*This callout is always run with MRW_WLOCK taken. */ + MRW_LOCK_ASSERT(); + mfct = &V_mfctables[0]; for (i = 0; i < mfchashsize; i++) { struct mfc *rt, *nrt; - if (V_nexpire[i] == 0) + if (mfct->nexpire[i] == 0) continue; - LIST_FOREACH_SAFE(rt, &V_mfchashtbl[i], mfc_hash, nrt) { + LIST_FOREACH_SAFE(rt, &mfct->mfchashtbl[i], mfc_hash, nrt) { if (buf_ring_empty(rt->mfc_stall_ring)) continue; @@ -1575,7 +1599,8 @@ expire_upcalls(void *arg) * Packet forwarding routine once entry in the cache is made */ static int -ip_mdq(struct mbuf *m, struct ifnet *ifp, struct mfc *rt, vifi_t xmt_vif) +ip_mdq(struct mfctable *mfct, struct mbuf *m, struct ifnet *ifp, struct mfc *rt, + vifi_t xmt_vif) { struct ip *ip = mtod(m, struct ip *); struct vif *vif; @@ -1591,11 +1616,12 @@ ip_mdq(struct mbuf *m, struct ifnet *ifp, struct mfc *rt, vifi_t xmt_vif) * * (since vifi_t is u_short, -1 becomes MAXUSHORT, which > numvifs.) */ - if (xmt_vif < V_numvifs) { - if (V_viftable[xmt_vif].v_flags & VIFF_REGISTER) - pim_register_send(ip, V_viftable + xmt_vif, m, rt); + if (xmt_vif < mfct->numvifs) { + if (mfct->viftable[xmt_vif].v_flags & VIFF_REGISTER) + pim_register_send(mfct, ip, &mfct->viftable[xmt_vif], m, + rt); else - phyint_send(ip, V_viftable + xmt_vif, m); + phyint_send(ip, &mfct->viftable[xmt_vif], m); return 1; } @@ -1603,8 +1629,8 @@ ip_mdq(struct mbuf *m, struct ifnet *ifp, struct mfc *rt, vifi_t xmt_vif) * Don't forward if it didn't arrive from the parent vif for its origin. */ vifi = rt->mfc_parent; - vif = &V_viftable[vifi]; - if (vifi >= V_numvifs || vif->v_ifp != ifp) { + vif = &mfct->viftable[vifi]; + if (vifi >= mfct->numvifs || vif->v_ifp != ifp) { CTR4(KTR_IPMF, "%s: rx on wrong ifp %p (vifi %d, v_ifp %p)", __func__, ifp, (int)vifi, vif->v_ifp); MRTSTAT_INC(mrts_wrong_if); @@ -1617,21 +1643,23 @@ ip_mdq(struct mbuf *m, struct ifnet *ifp, struct mfc *rt, vifi_t xmt_vif) * can complete the SPT switch, regardless of the type * of the iif (broadcast media, GRE tunnel, etc). */ - if (V_pim_assert_enabled && (vifi < V_numvifs) && + if (mfct->pim_assert_enabled && (vifi < mfct->numvifs) && vif->v_ifp != NULL) { - if (ifp == V_multicast_register_if) + if (ifp == mfct->register_if) PIMSTAT_INC(pims_rcv_registers_wrongiif); /* Get vifi for the incoming packet */ - for (vifi = 0; vifi < V_numvifs && V_viftable[vifi].v_ifp != ifp; vifi++) + for (vifi = 0; vifi < mfct->numvifs && + mfct->viftable[vifi].v_ifp != ifp; vifi++) ; - if (vifi >= V_numvifs) + if (vifi >= mfct->numvifs) return 0; /* The iif is not found: ignore the packet. */ if (rt->mfc_flags[vifi] & MRT_MFC_FLAGS_DISABLE_WRONGVIF) return 0; /* WRONGVIF disabled: ignore the packet */ - if (ratecheck(&rt->mfc_last_assert, &pim_assert_interval)) { + if (ratecheck(&rt->mfc_last_assert, + &mfct->pim_assert_interval)) { struct sockaddr_in k_igmpsrc = { sizeof k_igmpsrc, AF_INET }; struct igmpmsg *im; int hlen = ip->ip_hl << 2; @@ -1650,7 +1678,8 @@ ip_mdq(struct mbuf *m, struct ifnet *ifp, struct mfc *rt, vifi_t xmt_vif) MRTSTAT_INC(mrts_upcalls); k_igmpsrc.sin_addr = im->im_src; - if (socket_send(V_ip_mrouter, mm, &k_igmpsrc) < 0) { + if (socket_send(mfct->router, mm, + &k_igmpsrc) < 0) { CTR1(KTR_IPMF, "%s: socket queue full", __func__); MRTSTAT_INC(mrts_upq_sockfull); return ENOBUFS; @@ -1680,13 +1709,13 @@ ip_mdq(struct mbuf *m, struct ifnet *ifp, struct mfc *rt, vifi_t xmt_vif) * - the ttl exceeds the vif's threshold * - there are group members downstream on interface */ - for (vifi = 0; vifi < V_numvifs; vifi++) + for (vifi = 0; vifi < mfct->numvifs; vifi++) if ((rt->mfc_ttls[vifi] > 0) && (ip->ip_ttl > rt->mfc_ttls[vifi])) { - vif = &V_viftable[vifi]; + vif = &mfct->viftable[vifi]; *** 425 LINES SKIPPED *** From nobody Mon Mar 30 16:15:36 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 4fkxDn2mJDz6WyJx for ; Mon, 30 Mar 2026 16:15:37 +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 4fkxDm6sGxz49Rt for ; Mon, 30 Mar 2026 16:15:36 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774887337; 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=2byraYkaPfVmULkHvARHwdUmI9ATXXvxA+q6P7bn9h4=; b=yDI+va3WPqzCnMDQJb4/CAg4En0kKNiIIBXJaxt3FnjUhIXtMmJsBiFiLuZaN6+Xfmq8UK bDJAvoLiY4Hm9vDNMV5vZMt7tDpQX+SHBEVYrx2sPD94rFHHB9074VGmFbcobAGe5guNIo 25/DgMiYZKCqE/BWJb4VhqtKfyrvjc2du8jJZLK37sPXFwAR2ESYvCHlsHtkZ8twFckA+k 9V/EJZQe09coQdEFgRFvcy734osMiuPa/DMaea6GeOu8dooDecLzc1vmHhSAZIUDo68FXQ DPasoJZn3+IHsg3QWCKa4TW+vvj7EysGou0+sv2NTOKsddLsMK2Sx1oK9qquNg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774887336; a=rsa-sha256; cv=none; b=MDp4T9cYCfX4yFr6Z+DKlhM6P2/o2MmSlrq/r5dvTUTcZ/at2mUPBtDnSdEFwvg8NL+UjQ mpMiO2uBWRj79caY5ndbSsWLcUVQd4rxPQBX18gPkGDl3dsx3Kbm8kSMCgIiRAL7jGORLC ieo8au0KcYRUCAqV2kJjqH6uNRKYho41KXIFWQSHzX+4O4NqUWAtpaxW8RYhLBW520S61P 6om1+cUNYl536HoeEECqf3y3M+2lJFDjam8qJMUNgZi2EOuEgyjPFrt/9YHFpDDb/ashMF hnGip9TAMrKgqoSMxRcW/OIlQvqZTVFM3g3OXCm9XNmofCpHrOaIZkicYJ/ADw== 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=1774887336; 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=2byraYkaPfVmULkHvARHwdUmI9ATXXvxA+q6P7bn9h4=; b=Zi61hfhzMyLLVDTgK6EdYc0ewPGE71sTyI+N94r132AQbGoU3rK4aeNClBHHUB9VyqlmzE DBGuFM/it5XhjNfu+/lVFQCR80YQc754O3b3ZUF5v+UNzdRoaRfzWJuBK9To6DTAvyFTgx kZq+Ef+vNM5W9WWIbowoBrlRFo/vbYxquZelxok2nt7i5kTJlXGz3wHeGC1OAtt3NEiDta JNDS+DZX2PgmDihn7e1m9fyKk6PtBSW0YjEVeGMKOZBr5diImDTu0ttesMhkM7Qz2W8GHt anlQqjCQXwcvl1QWJzaBSfsGK93/ogyaWpqMYAa3UXNxEx/mODdA33l/F6NdIg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkxDm6RD0zqPj for ; Mon, 30 Mar 2026 16:15:36 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3bf3e by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 16:15:36 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: a223d6c489c7 - main - ip6_mroute: Start putting global variables into a structure 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a223d6c489c7ea9a384f3d2bbda1b05b00d4502d Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 16:15:36 +0000 Message-Id: <69caa1a8.3bf3e.c1eaaab@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=a223d6c489c7ea9a384f3d2bbda1b05b00d4502d commit a223d6c489c7ea9a384f3d2bbda1b05b00d4502d Author: Mark Johnston AuthorDate: 2026-03-30 13:29:01 +0000 Commit: Mark Johnston CommitDate: 2026-03-30 16:08:20 +0000 ip6_mroute: Start putting global variables into a structure As in the IPv4 version of this change, I added a struct mf6ctable structure which holds all global routing table state, soon to become per-FIB state. Note that much of the v6 multicast routing code was not VNETified; this change fixes that too. MFC after: 2 weeks Sponsored by: Stormshield Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D55238 --- sys/netinet6/ip6_mroute.c | 391 +++++++++++++++++++++++++++------------------- 1 file changed, 229 insertions(+), 162 deletions(-) diff --git a/sys/netinet6/ip6_mroute.c b/sys/netinet6/ip6_mroute.c index a8313e1753a6..912bbfda2486 100644 --- a/sys/netinet6/ip6_mroute.c +++ b/sys/netinet6/ip6_mroute.c @@ -106,6 +106,7 @@ #include #include #include +#include #include #include @@ -124,9 +125,13 @@ static MALLOC_DEFINE(M_MRTABLE6, "mf6c", "multicast forwarding cache entry"); -static int ip6_mdq(struct mbuf *, struct ifnet *, struct mf6c *); +struct mf6ctable; + +static int ip6_mdq(struct mf6ctable *, struct mbuf *, struct ifnet *, + struct mf6c *); static void phyint_send(struct ip6_hdr *, struct mif6 *, struct mbuf *); -static int register_send(struct ip6_hdr *, struct mif6 *, struct mbuf *); +static int register_send(struct mf6ctable *, struct ip6_hdr *, mifi_t, + struct mbuf *); static int set_pim6(int *); static int socket_send(struct socket *, struct mbuf *, struct sockaddr_in6 *); @@ -146,9 +151,6 @@ static const struct encap_config ipv6_encap_cfg = { .input = pim6_input }; -VNET_DEFINE_STATIC(int, ip6_mrouter_ver) = 0; -#define V_ip6_mrouter_ver VNET(ip6_mrouter_ver) - SYSCTL_DECL(_net_inet6); SYSCTL_DECL(_net_inet6_ip6); static SYSCTL_NODE(_net_inet6, IPPROTO_PIM, pim, @@ -172,15 +174,6 @@ static struct sx mrouter6_mtx; #define MROUTER6_LOCK_INIT() sx_init(MROUTER6_LOCKPTR(), "mrouter6") #define MROUTER6_LOCK_DESTROY() sx_destroy(MROUTER6_LOCKPTR()) -VNET_DEFINE_STATIC(struct socket *, ip6_mrouter); -#define V_ip6_mrouter VNET(ip6_mrouter) - -static struct mf6c *mf6ctable[MF6CTBLSIZ]; -SYSCTL_OPAQUE(_net_inet6_ip6, OID_AUTO, mf6ctable, CTLFLAG_RD, - &mf6ctable, sizeof(mf6ctable), "S,*mf6ctable[MF6CTBLSIZ]", - "IPv6 Multicast Forwarding Table (struct *mf6ctable[MF6CTBLSIZ], " - "netinet6/ip6_mroute.h)"); - static struct mtx mfc6_mtx; #define MFC6_LOCKPTR() (&mfc6_mtx) #define MFC6_LOCK() mtx_lock(MFC6_LOCKPTR()) @@ -191,9 +184,42 @@ static struct mtx mfc6_mtx; NULL, MTX_DEF) #define MFC6_LOCK_DESTROY() mtx_destroy(MFC6_LOCKPTR()) -static u_char n6expire[MF6CTBLSIZ]; +struct mf6ctable { + struct socket *router; + int router_ver; + struct mf6c *mfchashtbl[MF6CTBLSIZ]; + u_char nexpire[MF6CTBLSIZ]; + int nummifs; + struct mif6 miftable[MAXMIFS]; + + /* + * 'Interfaces' associated with decapsulator (so we can tell packets + * that went through it from ones that get reflected by a broken + * gateway). Different from IPv4 register_if, these interfaces are + * linked into the system ifnet list, because per-interface IPv6 + * statistics are maintained in ifp->if_afdata. But it does not have + * any routes point to them. I.e., packets can't be sent this way. + * They only exist as a placeholder for multicast source verification. + */ + struct ifnet *register_if; + mifi_t register_mif; +}; + +VNET_DEFINE_STATIC(struct mf6ctable *, mfctables); +#define V_mfctables VNET(mfctables) + +static int +sysctl_mfctable(SYSCTL_HANDLER_ARGS) +{ + return (SYSCTL_OUT(req, &V_mfctables[0].mfchashtbl, + sizeof(V_mfctables[0].mfchashtbl))); +} +SYSCTL_PROC(_net_inet6_ip6, OID_AUTO, mf6ctable, + CTLTYPE_OPAQUE | CTLFLAG_RD, + NULL, 0, sysctl_mfctable, "S,*mf6c[MF6CTBLSIZ]", + "IPv6 Multicast Forwarding Table (struct mf6c *[MF6CTBLSIZ], " + "netinet6/ip6_mroute.h)"); -static struct mif6 mif6table[MAXMIFS]; static int sysctl_mif6table(SYSCTL_HANDLER_ARGS) { @@ -203,17 +229,20 @@ sysctl_mif6table(SYSCTL_HANDLER_ARGS) out = malloc(sizeof(struct mif6_sctl) * MAXMIFS, M_TEMP, M_WAITOK | M_ZERO); for (int i = 0; i < MAXMIFS; i++) { - out[i].m6_flags = mif6table[i].m6_flags; - out[i].m6_rate_limit = mif6table[i].m6_rate_limit; - out[i].m6_lcl_addr = mif6table[i].m6_lcl_addr; - if (mif6table[i].m6_ifp != NULL) - out[i].m6_ifp = mif6table[i].m6_ifp->if_index; + struct mif6_sctl *outp = &out[i]; + struct mif6 *mifp = &V_mfctables[0].miftable[i]; + + outp->m6_flags = mifp->m6_flags; + outp->m6_rate_limit = mifp->m6_rate_limit; + outp->m6_lcl_addr = mifp->m6_lcl_addr; + if (mifp->m6_ifp != NULL) + outp->m6_ifp = mifp->m6_ifp->if_index; else - out[i].m6_ifp = 0; - out[i].m6_pkt_in = mif6table[i].m6_pkt_in; - out[i].m6_pkt_out = mif6table[i].m6_pkt_out; - out[i].m6_bytes_in = mif6table[i].m6_bytes_in; - out[i].m6_bytes_out = mif6table[i].m6_bytes_out; + outp->m6_ifp = 0; + outp->m6_pkt_in = mifp->m6_pkt_in; + outp->m6_pkt_out = mifp->m6_pkt_out; + outp->m6_bytes_in = mifp->m6_bytes_in; + outp->m6_bytes_out = mifp->m6_bytes_out; } error = SYSCTL_OUT(req, out, sizeof(struct mif6_sctl) * MAXMIFS); free(out, M_TEMP); @@ -257,25 +286,6 @@ static void expire_upcalls(void *); #define EXPIRE_TIMEOUT (hz / 4) /* 4x / second */ #define UPCALL_EXPIRE 6 /* number of timeouts */ -/* - * 'Interfaces' associated with decapsulator (so we can tell - * packets that went through it from ones that get reflected - * by a broken gateway). Different from IPv4 register_if, - * these interfaces are linked into the system ifnet list, - * because per-interface IPv6 statistics are maintained in - * ifp->if_afdata. But it does not have any routes point - * to them. I.e., packets can't be sent this way. They - * only exist as a placeholder for multicast source - * verification. - */ -static struct ifnet *multicast_register_if6; - -/* - * Private variables. - */ -static mifi_t nummifs = 0; -static mifi_t reg_mif_num = (mifi_t)-1; - static struct pim6stat pim6stat; SYSCTL_STRUCT(_net_inet6_pim, PIM6CTL_STATS, stats, CTLFLAG_RW, &pim6stat, pim6stat, @@ -335,7 +345,8 @@ static int del_m6if_locked(mifi_t *); static int get_mif6_cnt(struct sioc_mif_req6 *); static int get_sg_cnt(struct sioc_sg_req6 *); -static struct callout expire_upcalls_ch; +VNET_DEFINE_STATIC(struct callout, expire_upcalls_ch); +#define V_expire_upcalls_ch VNET(expire_upcalls_ch) static int X_ip6_mforward(struct ip6_hdr *, struct ifnet *, struct mbuf *); static void X_ip6_mrouter_done(struct socket *); @@ -344,12 +355,13 @@ static int X_ip6_mrouter_get(struct socket *, struct sockopt *); static int X_mrt6_ioctl(u_long, caddr_t); static struct mf6c * -mf6c_find(const struct in6_addr *origin, const struct in6_addr *group) +mf6c_find(const struct mf6ctable *mfct, const struct in6_addr *origin, + const struct in6_addr *group) { MFC6_LOCK_ASSERT(); - for (struct mf6c *rt = mf6ctable[MF6CHASH(*origin, *group)]; rt != NULL; - rt = rt->mf6c_next) { + for (struct mf6c *rt = mfct->mfchashtbl[MF6CHASH(*origin, *group)]; + rt != NULL; rt = rt->mf6c_next) { if (IN6_ARE_ADDR_EQUAL(&rt->mf6c_origin.sin6_addr, origin) && IN6_ARE_ADDR_EQUAL(&rt->mf6c_mcastgrp.sin6_addr, group) && rt->mf6c_stall == NULL) @@ -365,13 +377,15 @@ mf6c_find(const struct in6_addr *origin, const struct in6_addr *group) static int X_ip6_mrouter_set(struct socket *so, struct sockopt *sopt) { + struct mf6ctable *mfct; int error = 0; int optval; struct mif6ctl mifc; struct mf6cctl mfcc; mifi_t mifi; - if (so != V_ip6_mrouter && sopt->sopt_name != MRT6_INIT) + mfct = &V_mfctables[0]; + if (so != mfct->router && sopt->sopt_name != MRT6_INIT) return (EPERM); switch (sopt->sopt_name) { @@ -433,9 +447,11 @@ X_ip6_mrouter_set(struct socket *so, struct sockopt *sopt) static int X_ip6_mrouter_get(struct socket *so, struct sockopt *sopt) { + struct mf6ctable *mfct; int error = 0; - if (so != V_ip6_mrouter) + mfct = &V_mfctables[0]; + if (so != mfct->router) return (EACCES); switch (sopt->sopt_name) { @@ -486,8 +502,8 @@ get_sg_cnt(struct sioc_sg_req6 *req) ret = 0; MFC6_LOCK(); - - rt = mf6c_find(&req->src.sin6_addr, &req->grp.sin6_addr); + rt = mf6c_find(&V_mfctables[0], &req->src.sin6_addr, + &req->grp.sin6_addr); if (rt == NULL) { ret = ESRCH; } else { @@ -495,7 +511,6 @@ get_sg_cnt(struct sioc_sg_req6 *req) req->bytecnt = rt->mf6c_byte_cnt; req->wrong_if = rt->mf6c_wrong_if; } - MFC6_UNLOCK(); return (ret); @@ -507,21 +522,25 @@ get_sg_cnt(struct sioc_sg_req6 *req) static int get_mif6_cnt(struct sioc_mif_req6 *req) { + struct mf6ctable *mfct; mifi_t mifi; int ret; ret = 0; mifi = req->mifi; + mfct = &V_mfctables[0]; MIF6_LOCK(); - if (mifi >= nummifs) { + if (mifi >= mfct->nummifs) { ret = EINVAL; } else { - req->icount = mif6table[mifi].m6_pkt_in; - req->ocount = mif6table[mifi].m6_pkt_out; - req->ibytes = mif6table[mifi].m6_bytes_in; - req->obytes = mif6table[mifi].m6_bytes_out; + struct mif6 *mif = &mfct->miftable[mifi]; + + req->icount = mif->m6_pkt_in; + req->ocount = mif->m6_pkt_out; + req->ibytes = mif->m6_bytes_in; + req->obytes = mif->m6_bytes_out; } MIF6_UNLOCK(); @@ -546,32 +565,33 @@ set_pim6(int *i) static int ip6_mrouter_init(struct socket *so, int v, int cmd) { + struct mf6ctable *mfct; MRT6_DLOG(DEBUG_ANY, "%s: socket %p", __func__, so); if (v != 1) return (ENOPROTOOPT); + mfct = &V_mfctables[0]; MROUTER6_LOCK(); - if (V_ip6_mrouter != NULL) { + if (mfct->router != NULL) { MROUTER6_UNLOCK(); return (EADDRINUSE); } MFC6_LOCK(); V_ip6_mrouting_enabled = true; - V_ip6_mrouter = so; - V_ip6_mrouter_ver = cmd; + mfct->router = so; + mfct->router_ver = cmd; - bzero((caddr_t)mf6ctable, sizeof(mf6ctable)); - bzero((caddr_t)n6expire, sizeof(n6expire)); + bzero(&mfct->mfchashtbl, sizeof(mfct->mfchashtbl)); + bzero(&mfct->nexpire, sizeof(mfct->nexpire)); V_pim6 = 0;/* used for stubbing out/in pim stuff */ - callout_init_mtx(&expire_upcalls_ch, MFC6_LOCKPTR(), 0); - callout_reset(&expire_upcalls_ch, EXPIRE_TIMEOUT, - expire_upcalls, NULL); + callout_reset(&V_expire_upcalls_ch, EXPIRE_TIMEOUT, expire_upcalls, + curvnet); MFC6_UNLOCK(); MROUTER6_UNLOCK(); @@ -587,14 +607,16 @@ ip6_mrouter_init(struct socket *so, int v, int cmd) static void X_ip6_mrouter_done(struct socket *so) { + struct mf6ctable *mfct; mifi_t mifi; u_long i; struct mf6c *rt; struct rtdetq *rte; + mfct = &V_mfctables[0]; MROUTER6_LOCK(); - if (V_ip6_mrouter != so) { + if (mfct->router != so) { MROUTER6_UNLOCK(); return; } @@ -603,15 +625,16 @@ X_ip6_mrouter_done(struct socket *so) * For each phyint in use, disable promiscuous reception of all IPv6 * multicasts. */ - for (mifi = 0; mifi < nummifs; mifi++) { - if (mif6table[mifi].m6_ifp && - !(mif6table[mifi].m6_flags & MIFF_REGISTER)) { - if_allmulti(mif6table[mifi].m6_ifp, 0); + for (mifi = 0; mifi < mfct->nummifs; mifi++) { + struct mif6 *mif = &mfct->miftable[mifi]; + + if (mif->m6_ifp && !(mif->m6_flags & MIFF_REGISTER)) { + if_allmulti(mif->m6_ifp, 0); } } MFC6_LOCK(); - bzero((caddr_t)mif6table, sizeof(mif6table)); - nummifs = 0; + bzero(mfct->miftable, sizeof(mfct->miftable)); + mfct->nummifs = 0; V_pim6 = 0; /* used to stub out/in pim specific code */ @@ -619,7 +642,7 @@ X_ip6_mrouter_done(struct socket *so) * Free all multicast forwarding cache entries. */ for (i = 0; i < MF6CTBLSIZ; i++) { - rt = mf6ctable[i]; + rt = mfct->mfchashtbl[i]; while (rt) { struct mf6c *frt; @@ -635,23 +658,21 @@ X_ip6_mrouter_done(struct socket *so) free(frt, M_MRTABLE6); } } - bzero((caddr_t)mf6ctable, sizeof(mf6ctable)); - - V_ip6_mrouter = NULL; + mfct->router = NULL; + mfct->router_ver = 0; V_ip6_mrouting_enabled = false; - V_ip6_mrouter_ver = 0; - MFC6_UNLOCK(); - callout_drain(&expire_upcalls_ch); + bzero(mfct->mfchashtbl, sizeof(mfct->mfchashtbl)); + MFC6_UNLOCK(); /* * Reset register interface */ - if (reg_mif_num != (mifi_t)-1 && multicast_register_if6 != NULL) { - if_detach(multicast_register_if6); - if_free(multicast_register_if6); - reg_mif_num = (mifi_t)-1; - multicast_register_if6 = NULL; + if (mfct->register_mif != (mifi_t)-1 && mfct->register_if != NULL) { + if_detach(mfct->register_if); + if_free(mfct->register_if); + mfct->register_mif = (mifi_t)-1; + mfct->register_if = NULL; } MROUTER6_UNLOCK(); @@ -666,6 +687,7 @@ static struct sockaddr_in6 sin6 = { sizeof(sin6), AF_INET6 }; static int add_m6if(struct mif6ctl *mifcp) { + struct mf6ctable *mfct; struct epoch_tracker et; struct mif6 *mifp; struct ifnet *ifp; @@ -677,7 +699,8 @@ add_m6if(struct mif6ctl *mifcp) MIF6_UNLOCK(); return (EINVAL); } - mifp = mif6table + mifcp->mif6c_mifi; + mfct = &V_mfctables[0]; + mifp = &mfct->miftable[mifcp->mif6c_mifi]; if (mifp->m6_ifp != NULL) { MIF6_UNLOCK(); return (EADDRINUSE); /* XXX: is it appropriate? */ @@ -692,14 +715,14 @@ add_m6if(struct mif6ctl *mifcp) NET_EPOCH_EXIT(et); /* XXXGL: unsafe ifp */ if (mifcp->mif6c_flags & MIFF_REGISTER) { - if (reg_mif_num == (mifi_t)-1) { + if (mfct->register_mif == (mifi_t)-1) { ifp = if_alloc(IFT_OTHER); if_initname(ifp, "register_mif", 0); ifp->if_flags |= IFF_LOOPBACK; if_attach(ifp); - multicast_register_if6 = ifp; - reg_mif_num = mifcp->mif6c_mifi; + mfct->register_if = ifp; + mfct->register_mif = mifcp->mif6c_mifi; /* * it is impossible to guess the ifindex of the * register interface. So mif6c_pifi is automatically @@ -707,7 +730,7 @@ add_m6if(struct mif6ctl *mifcp) */ mifcp->mif6c_pifi = ifp->if_index; } else { - ifp = multicast_register_if6; + ifp = mfct->register_if; } } else { /* Make sure the interface supports multicast */ @@ -733,8 +756,8 @@ add_m6if(struct mif6ctl *mifcp) mifp->m6_bytes_out = 0; /* Adjust nummifs up if the mifi is higher than nummifs */ - if (nummifs <= mifcp->mif6c_mifi) - nummifs = mifcp->mif6c_mifi + 1; + if (mfct->nummifs <= mifcp->mif6c_mifi) + mfct->nummifs = mifcp->mif6c_mifi + 1; MIF6_UNLOCK(); MRT6_DLOG(DEBUG_ANY, "mif #%d, phyint %s", mifcp->mif6c_mifi, @@ -749,14 +772,17 @@ add_m6if(struct mif6ctl *mifcp) static int del_m6if_locked(mifi_t *mifip) { - struct mif6 *mifp = mif6table + *mifip; + struct mf6ctable *mfct; + struct mif6 *mifp; mifi_t mifi; struct ifnet *ifp; MIF6_LOCK_ASSERT(); - if (*mifip >= nummifs) + mfct = &V_mfctables[0]; + if (*mifip >= mfct->nummifs) return (EINVAL); + mifp = &mfct->miftable[*mifip]; if (mifp->m6_ifp == NULL) return (EINVAL); @@ -765,23 +791,23 @@ del_m6if_locked(mifi_t *mifip) ifp = mifp->m6_ifp; if_allmulti(ifp, 0); } else { - if (reg_mif_num != (mifi_t)-1 && - multicast_register_if6 != NULL) { - if_detach(multicast_register_if6); - if_free(multicast_register_if6); - reg_mif_num = (mifi_t)-1; - multicast_register_if6 = NULL; + if (mfct->register_mif != (mifi_t)-1 && + mfct->register_if != NULL) { + if_detach(mfct->register_if); + if_free(mfct->register_if); + mfct->register_mif = (mifi_t)-1; + mfct->register_if = NULL; } } - bzero((caddr_t)mifp, sizeof(*mifp)); + bzero(mifp, sizeof(*mifp)); /* Adjust nummifs down */ - for (mifi = nummifs; mifi > 0; mifi--) - if (mif6table[mifi - 1].m6_ifp) + for (mifi = mfct->nummifs; mifi > 0; mifi--) + if (mfct->miftable[mifi - 1].m6_ifp != NULL) break; - nummifs = mifi; - MRT6_DLOG(DEBUG_ANY, "mif %d, nummifs %d", *mifip, nummifs); + mfct->nummifs = mifi; + MRT6_DLOG(DEBUG_ANY, "mif %d, nummifs %d", *mifip, mfct->nummifs); return (0); } @@ -804,15 +830,17 @@ del_m6if(mifi_t *mifip) static int add_m6fc(struct mf6cctl *mfccp) { + struct mf6ctable *mfct; struct mf6c *rt; u_long hash; struct rtdetq *rte; u_short nstl; char ip6bufo[INET6_ADDRSTRLEN], ip6bufg[INET6_ADDRSTRLEN]; - MFC6_LOCK(); + mfct = &V_mfctables[0]; - rt = mf6c_find(&mfccp->mf6cc_origin.sin6_addr, + MFC6_LOCK(); + rt = mf6c_find(mfct, &mfccp->mf6cc_origin.sin6_addr, &mfccp->mf6cc_mcastgrp.sin6_addr); /* If an entry already exists, just update the fields */ if (rt) { @@ -833,7 +861,7 @@ add_m6fc(struct mf6cctl *mfccp) */ hash = MF6CHASH(mfccp->mf6cc_origin.sin6_addr, mfccp->mf6cc_mcastgrp.sin6_addr); - for (rt = mf6ctable[hash], nstl = 0; rt; rt = rt->mf6c_next) { + for (rt = mfct->mfchashtbl[hash], nstl = 0; rt; rt = rt->mf6c_next) { if (IN6_ARE_ADDR_EQUAL(&rt->mf6c_origin.sin6_addr, &mfccp->mf6cc_origin.sin6_addr) && IN6_ARE_ADDR_EQUAL(&rt->mf6c_mcastgrp.sin6_addr, @@ -866,12 +894,12 @@ add_m6fc(struct mf6cctl *mfccp) rt->mf6c_wrong_if = 0; rt->mf6c_expire = 0; /* Don't clean this guy up */ - n6expire[hash]--; + mfct->nexpire[hash]--; /* free packets Qed at the end of this entry */ for (rte = rt->mf6c_stall; rte != NULL; ) { struct rtdetq *n = rte->next; - ip6_mdq(rte->m, rte->ifp, rt); + ip6_mdq(mfct, rte->m, rte->ifp, rt); m_freem(rte->m); #ifdef UPCALL_TIMING collate(&(rte->t)); @@ -892,7 +920,7 @@ add_m6fc(struct mf6cctl *mfccp) ip6_sprintf(ip6bufg, &mfccp->mf6cc_mcastgrp.sin6_addr), mfccp->mf6cc_parent); - for (rt = mf6ctable[hash]; rt; rt = rt->mf6c_next) { + for (rt = mfct->mfchashtbl[hash]; rt; rt = rt->mf6c_next) { if (IN6_ARE_ADDR_EQUAL(&rt->mf6c_origin.sin6_addr, &mfccp->mf6cc_origin.sin6_addr)&& IN6_ARE_ADDR_EQUAL(&rt->mf6c_mcastgrp.sin6_addr, @@ -907,7 +935,7 @@ add_m6fc(struct mf6cctl *mfccp) rt->mf6c_wrong_if = 0; if (rt->mf6c_expire) - n6expire[hash]--; + mfct->nexpire[hash]--; rt->mf6c_expire = 0; } } @@ -932,8 +960,8 @@ add_m6fc(struct mf6cctl *mfccp) rt->mf6c_stall = NULL; /* link into table */ - rt->mf6c_next = mf6ctable[hash]; - mf6ctable[hash] = rt; + rt->mf6c_next = mfct->mfchashtbl[hash]; + mfct->mfchashtbl[hash] = rt; } } @@ -976,12 +1004,14 @@ del_m6fc(struct mf6cctl *mfccp) #ifdef MRT6DEBUG char ip6bufo[INET6_ADDRSTRLEN], ip6bufg[INET6_ADDRSTRLEN]; #endif + struct mf6ctable *mfct; struct sockaddr_in6 origin; struct sockaddr_in6 mcastgrp; struct mf6c *rt; struct mf6c **nptr; u_long hash; + mfct = &V_mfctables[0]; origin = mfccp->mf6cc_origin; mcastgrp = mfccp->mf6cc_mcastgrp; hash = MF6CHASH(origin.sin6_addr, mcastgrp.sin6_addr); @@ -992,7 +1022,7 @@ del_m6fc(struct mf6cctl *mfccp) MFC6_LOCK(); - nptr = &mf6ctable[hash]; + nptr = &mfct->mfchashtbl[hash]; while ((rt = *nptr) != NULL) { if (IN6_ARE_ADDR_EQUAL(&origin.sin6_addr, &rt->mf6c_origin.sin6_addr) && @@ -1054,6 +1084,7 @@ socket_send(struct socket *s, struct mbuf *mm, struct sockaddr_in6 *src) static int X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m) { + struct mf6ctable *mfct; struct rtdetq *rte; struct mbuf *mb0; struct mf6c *rt; @@ -1103,18 +1134,19 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m) return (0); } + mfct = &V_mfctables[0]; MFC6_LOCK(); /* * Determine forwarding mifs from the forwarding cache table */ - rt = mf6c_find(&ip6->ip6_src, &ip6->ip6_dst); + rt = mf6c_find(mfct, &ip6->ip6_src, &ip6->ip6_dst); MRT6STAT_INC(mrt6s_mfc_lookups); /* Entry exists, so forward if necessary */ if (rt) { MFC6_UNLOCK(); - return (ip6_mdq(m, ifp, rt)); + return (ip6_mdq(mfct, m, ifp, rt)); } /* @@ -1150,7 +1182,7 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m) /* is there an upcall waiting for this packet? */ hash = MF6CHASH(ip6->ip6_src, ip6->ip6_dst); - for (rt = mf6ctable[hash]; rt; rt = rt->mf6c_next) { + for (rt = mfct->mfchashtbl[hash]; rt; rt = rt->mf6c_next) { if (IN6_ARE_ADDR_EQUAL(&ip6->ip6_src, &rt->mf6c_origin.sin6_addr) && IN6_ARE_ADDR_EQUAL(&ip6->ip6_dst, @@ -1192,7 +1224,7 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m) #ifdef MRT6_OINIT oim = NULL; #endif - switch (V_ip6_mrouter_ver) { + switch (mfct->router_ver) { #ifdef MRT6_OINIT case MRT6_OINIT: oim = mtod(mm, struct omrt6msg *); @@ -1214,11 +1246,11 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m) } MRT6_DLOG(DEBUG_FORWARD, "getting the iif info in the kernel"); - for (mifp = mif6table, mifi = 0; - mifi < nummifs && mifp->m6_ifp != ifp; mifp++, mifi++) - ; + for (mifp = mfct->miftable, mifi = 0; + mifi < mfct->nummifs && mifp->m6_ifp != ifp; mifp++, mifi++) + ; - switch (V_ip6_mrouter_ver) { + switch (mfct->router_ver) { #ifdef MRT6_OINIT case MRT6_OINIT: oim->im6_mif = mifi; @@ -1229,7 +1261,7 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m) break; } - if (socket_send(V_ip6_mrouter, mm, &sin6) < 0) { + if (socket_send(mfct->router, mm, &sin6) < 0) { log(LOG_WARNING, "ip6_mforward: ip6_mrouter " "socket queue full\n"); MRT6STAT_INC(mrt6s_upq_sockfull); @@ -1251,12 +1283,12 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m) rt->mf6c_mcastgrp.sin6_len = sizeof(struct sockaddr_in6); rt->mf6c_mcastgrp.sin6_addr = ip6->ip6_dst; rt->mf6c_expire = UPCALL_EXPIRE; - n6expire[hash]++; + mfct->nexpire[hash]++; rt->mf6c_parent = MF6C_INCOMPLETE_PARENT; /* link into table */ - rt->mf6c_next = mf6ctable[hash]; - mf6ctable[hash] = rt; + rt->mf6c_next = mfct->mfchashtbl[hash]; + mfct->mfchashtbl[hash] = rt; /* Add this entry to the end of the queue */ rt->mf6c_stall = rte; } else { @@ -1294,21 +1326,24 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m) * Call from the Slow Timeout mechanism, every half second. */ static void -expire_upcalls(void *unused) +expire_upcalls(void *arg) { #ifdef MRT6DEBUG char ip6bufo[INET6_ADDRSTRLEN], ip6bufg[INET6_ADDRSTRLEN]; #endif + struct mf6ctable *mfct; struct rtdetq *rte; struct mf6c *mfc, **nptr; u_long i; MFC6_LOCK_ASSERT(); + CURVNET_SET((struct vnet *)arg); + mfct = &V_mfctables[0]; for (i = 0; i < MF6CTBLSIZ; i++) { - if (n6expire[i] == 0) + if (mfct->nexpire[i] == 0) continue; - nptr = &mf6ctable[i]; + nptr = &mfct->mfchashtbl[i]; while ((mfc = *nptr) != NULL) { rte = mfc->mf6c_stall; /* @@ -1333,7 +1368,7 @@ expire_upcalls(void *unused) rte = n; } while (rte != NULL); MRT6STAT_INC(mrt6s_cache_cleanups); - n6expire[i]--; + mfct->nexpire[i]--; *nptr = mfc->mf6c_next; free(mfc, M_MRTABLE6); @@ -1342,15 +1377,18 @@ expire_upcalls(void *unused) } } } - callout_reset(&expire_upcalls_ch, EXPIRE_TIMEOUT, - expire_upcalls, NULL); + callout_reset(&V_expire_upcalls_ch, EXPIRE_TIMEOUT, + expire_upcalls, curvnet); + + CURVNET_RESTORE(); } /* * Packet forwarding routine once entry in the cache is made */ static int -ip6_mdq(struct mbuf *m, struct ifnet *ifp, struct mf6c *rt) +ip6_mdq(struct mf6ctable *mfct, struct mbuf *m, struct ifnet *ifp, + struct mf6c *rt) { struct ip6_hdr *ip6 = mtod(m, struct ip6_hdr *); mifi_t mifi, iif; @@ -1367,13 +1405,13 @@ ip6_mdq(struct mbuf *m, struct ifnet *ifp, struct mf6c *rt) * for its origin. */ mifi = rt->mf6c_parent; - if (mifi >= nummifs || mif6table[mifi].m6_ifp != ifp) { + if (mifi >= mfct->nummifs || mfct->miftable[mifi].m6_ifp != ifp) { MRT6STAT_INC(mrt6s_wrong_if); rt->mf6c_wrong_if++; - if (mifi >= nummifs) + if (mifi >= mfct->nummifs) return (0); - mifp = &mif6table[mifi]; + mifp = &mfct->miftable[mifi]; MRT6_DLOG(DEBUG_FORWARD, "wrong if: ifid %d mifi %d mififid %x", ifp->if_index, mifi, mifp->m6_ifp->if_index); @@ -1412,7 +1450,7 @@ ip6_mdq(struct mbuf *m, struct ifnet *ifp, struct mf6c *rt) oim = NULL; #endif im = NULL; - switch (V_ip6_mrouter_ver) { + switch (mfct->router_ver) { #ifdef MRT6_OINIT case MRT6_OINIT: oim = mtod(mm, struct omrt6msg *); @@ -1430,12 +1468,12 @@ ip6_mdq(struct mbuf *m, struct ifnet *ifp, struct mf6c *rt) return (EINVAL); } - for (mifp = mif6table, iif = 0; - iif < nummifs && mifp->m6_ifp != ifp; + for (mifp = mfct->miftable, iif = 0; + iif < mfct->nummifs && mifp->m6_ifp != ifp; mifp++, iif++) ; - switch (V_ip6_mrouter_ver) { + switch (mfct->router_ver) { #ifdef MRT6_OINIT case MRT6_OINIT: oim->im6_mif = iif; @@ -1450,7 +1488,7 @@ ip6_mdq(struct mbuf *m, struct ifnet *ifp, struct mf6c *rt) MRT6STAT_INC(mrt6s_upcalls); - if (socket_send(V_ip6_mrouter, mm, &sin6) < 0) { + if (socket_send(mfct->router, mm, &sin6) < 0) { MRT6_DLOG(DEBUG_ANY, "ip6_mrouter socket queue full"); MRT6STAT_INC(mrt6s_upq_sockfull); @@ -1460,14 +1498,16 @@ ip6_mdq(struct mbuf *m, struct ifnet *ifp, struct mf6c *rt) return (0); } + mifp = &mfct->miftable[mifi]; + /* If I sourced this packet, it counts as output, else it was input. */ if (m->m_pkthdr.rcvif == NULL) { /* XXX: is rcvif really NULL when output?? */ - mif6table[mifi].m6_pkt_out++; - mif6table[mifi].m6_bytes_out += plen; + mifp->m6_pkt_out++; + mifp->m6_bytes_out += plen; } else { - mif6table[mifi].m6_pkt_in++; - mif6table[mifi].m6_bytes_in += plen; + mifp->m6_pkt_in++; + mifp->m6_bytes_in += plen; } rt->mf6c_pkt_cnt++; rt->mf6c_byte_cnt += plen; @@ -1483,7 +1523,8 @@ ip6_mdq(struct mbuf *m, struct ifnet *ifp, struct mf6c *rt) IP6STAT_INC(ip6s_badscope); return (error); } - for (mifp = mif6table, mifi = 0; mifi < nummifs; mifp++, mifi++) { + for (mifp = mfct->miftable, mifi = 0; mifi < mfct->nummifs; + mifp++, mifi++) { if (IF_ISSET(mifi, &rt->mf6c_ifset)) { /* * check if the outgoing packet is going to break @@ -1491,12 +1532,12 @@ ip6_mdq(struct mbuf *m, struct ifnet *ifp, struct mf6c *rt) * XXX For packets through PIM register tunnel * interface, we believe a routing daemon. */ - if (!(mif6table[rt->mf6c_parent].m6_flags & + if (!(mfct->miftable[rt->mf6c_parent].m6_flags & MIFF_REGISTER) && - !(mif6table[mifi].m6_flags & MIFF_REGISTER)) { - if (in6_setscope(&src0, mif6table[mifi].m6_ifp, + !(mifp->m6_flags & MIFF_REGISTER)) { + if (in6_setscope(&src0, mifp->m6_ifp, &oszone) || - in6_setscope(&dst0, mif6table[mifi].m6_ifp, + in6_setscope(&dst0, mifp->m6_ifp, &odzone) || iszone != oszone || idzone != odzone) { @@ -1508,7 +1549,7 @@ ip6_mdq(struct mbuf *m, struct ifnet *ifp, struct mf6c *rt) mifp->m6_pkt_out++; mifp->m6_bytes_out += plen; if (mifp->m6_flags & MIFF_REGISTER) - register_send(ip6, mifp, m); + register_send(mfct, ip6, mifi, m); else phyint_send(ip6, mifp, m); } @@ -1619,7 +1660,8 @@ phyint_send(struct ip6_hdr *ip6, struct mif6 *mifp, struct mbuf *m) } static int -register_send(struct ip6_hdr *ip6, struct mif6 *mif, struct mbuf *m) +register_send(struct mf6ctable *mfct, struct ip6_hdr *ip6, mifi_t mifi, + struct mbuf *m) { #ifdef MRT6DEBUG char ip6bufs[INET6_ADDRSTRLEN], ip6bufd[INET6_ADDRSTRLEN]; @@ -1663,12 +1705,12 @@ register_send(struct ip6_hdr *ip6, struct mif6 *mif, struct mbuf *m) im6->im6_msgtype = MRT6MSG_WHOLEPKT; im6->im6_mbz = 0; - im6->im6_mif = mif - mif6table; + im6->im6_mif = mifi; /* iif info is not given for reg. encap.n */ MRT6STAT_INC(mrt6s_upcalls); - if (socket_send(V_ip6_mrouter, mm, &sin6) < 0) { + if (socket_send(mfct->router, mm, &sin6) < 0) { MRT6_DLOG(DEBUG_ANY, "ip6_mrouter socket queue full"); MRT6STAT_INC(mrt6s_upq_sockfull); return (ENOBUFS); @@ -1700,11 +1742,14 @@ pim6_encapcheck(const struct mbuf *m __unused, int off __unused, static int pim6_input(struct mbuf *m, int off, int proto, void *arg __unused) { - struct pim *pim; /* pointer to a pim struct */ + struct mf6ctable *mfct; + struct pim *pim; struct ip6_hdr *ip6; int pimlen; int minlen; + mfct = &V_mfctables[0]; + PIM6STAT_INC(pim6s_rcv_total); /* @@ -1792,9 +1837,10 @@ pim6_input(struct mbuf *m, int off, int proto, void *arg __unused) PIM6STAT_INC(pim6s_rcv_registers); - if ((reg_mif_num >= nummifs) || (reg_mif_num == (mifi_t) -1)) { + if (mfct->register_mif >= mfct->nummifs || + mfct->register_mif == (mifi_t)-1) { MRT6_DLOG(DEBUG_PIM, "register mif not set: %d", - reg_mif_num); + mfct->register_mif); m_freem(m); return (IPPROTO_DONE); } @@ -1861,10 +1907,10 @@ pim6_input(struct mbuf *m, int off, int proto, void *arg __unused) MRT6_DLOG(DEBUG_PIM, "forwarding decapsulated register: " "src %s, dst %s, mif %d", ip6_sprintf(ip6bufs, &eip6->ip6_src), - ip6_sprintf(ip6bufd, &eip6->ip6_dst), reg_mif_num); + ip6_sprintf(ip6bufd, &eip6->ip6_dst), mfct->register_mif); - if_simloop(mif6table[reg_mif_num].m6_ifp, m, - dst.sin6_family, 0); + if_simloop(mfct->miftable[mfct->register_mif].m6_ifp, m, + dst.sin6_family, 0); /* prepare the register head to send to the mrouting daemon */ m = mcp; @@ -1880,6 +1926,27 @@ pim6_input(struct mbuf *m, int off, int proto, void *arg __unused) return (rip6_input(&m, &off, proto)); } +static void +vnet_mroute_init(const void *unused __unused) +{ + V_mfctables = mallocarray(V_rt_numfibs, sizeof(*V_mfctables), + M_MRTABLE6, M_WAITOK | M_ZERO); + + callout_init_mtx(&V_expire_upcalls_ch, MFC6_LOCKPTR(), 0); +} +VNET_SYSINIT(vnet_mroute6_init, SI_SUB_PROTO_MC, SI_ORDER_ANY, vnet_mroute_init, + NULL); + +static void +vnet_mroute_uninit(const void *unused __unused) +{ + callout_drain(&V_expire_upcalls_ch); + free(V_mfctables, M_MRTABLE6); + V_mfctables = NULL; +} +VNET_SYSUNINIT(vnet_mroute6_uninit, SI_SUB_PROTO_MC, SI_ORDER_ANY, + vnet_mroute_uninit, NULL); + static int ip6_mroute_modevent(module_t mod, int type, void *unused) { From nobody Mon Mar 30 16:15:38 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 4fkxDp3RNGz6WyDH for ; Mon, 30 Mar 2026 16:15:38 +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 4fkxDp1Dwtz49pF for ; Mon, 30 Mar 2026 16:15:38 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774887338; 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=y6TDNf5vqQlkepVufqm5P4WB44/h8XH7bSMrOblId/8=; b=U4MUuCsCw8ODseHVl3iICSclsLon9Qfrs3MA30yqsHx5v3FUAlpT1keGcTvhJNkmgQK+6R w4yBrqGtVwSDfYhEnrrAwVoKnyq+pYXqM1ifMhwxz6FO0NLHRrCCU1e5UTacsHD9hs5Nam RUOnAjKEO2fiw480/8Km23OXflf4n+WKSi0KK2mvQpLH5q60e9nfC7QUiiSrR8pXeNgRNc LhFZbjuv1KNVT0Cl0KsQGxrKZn6vxDgZdpG3OnN4MNu1ZhUFEARk8RIxvKjZRl2xbZ2XK8 dCrHFZX3TXNztPyvBcf55ZcO5X/G7WVJ4/e96mgx5epM1XPjHypZwfy8pwvvwg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774887338; a=rsa-sha256; cv=none; b=BQgdJED3kCpVz6TiSpCYvW3qrm8H0WmS4d0vVE6otWHebFhw7podwr7l+KQL+32yazVWqH Tbc4QudBJsICTv6X1CCHppBYvY7PqU5YJLBDIwQNPhNEVlTOUDlj7XfU0f1/SamEI7ZHGG Qtm9l21UjDVPG7bZq9hoBLN1IVo2FQDYuwVkbgyQvsFyLfxBz1bFbBgjWRoVLj25VNDZe/ RQOoL3rIcRzvXz5NZILinXeyolMUv0GfelgU/TN1cIYjXX++z1JVuZz/9NKHLJoFVZKB2J ughiD/Apo1YZoN61hEhjJ2QlYpAtmDWmBJkmJ1SMPHD+E/J1B40U3scCnvJa/g== 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=1774887338; 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=y6TDNf5vqQlkepVufqm5P4WB44/h8XH7bSMrOblId/8=; b=rSlXEv0PpZnDNgyuvLwKXFzYsNK1XyMc6DDNvNg1l+W2qkY+VW4GjPdKPMtLTMCKFMp8dI XstWmjIX+ScIrkl+EYtFXPnWEK1/g3aGE2cENvXaH5IggdS+2DwHWUzq1BWtFfuFvb+kd6 PF6+ZDWZ7RTK/yFtm96PpV6D7uMn6lNdvlrLc2CI2qTpLGSY9h/aJXiM7E3vnLhFQke1Ti H50HFM2QpfC3MjhpUS3zR7mWYzygmuGReX9VeweB8O1/P02B6CN7SDJB5T89NLnWl/xQmy xX7mkiOOCWEUV514vP4yoGXXbH/2x36mKUCl8HEa3Wpk0vuhzo2pntKPmEHWPg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkxDp06vYzqkZ for ; Mon, 30 Mar 2026 16:15:38 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3c02d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 16:15:38 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 81dbacbb7d71 - main - net/route: Add an eventhandler for rt_numfibs changes 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 81dbacbb7d71a53eef99ce73f7e589a165c3e1d6 Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 16:15:38 +0000 Message-Id: <69caa1aa.3c02d.318c3993@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=81dbacbb7d71a53eef99ce73f7e589a165c3e1d6 commit 81dbacbb7d71a53eef99ce73f7e589a165c3e1d6 Author: Mark Johnston AuthorDate: 2026-03-30 13:30:19 +0000 Commit: Mark Johnston CommitDate: 2026-03-30 16:08:20 +0000 net/route: Add an eventhandler for rt_numfibs changes The multicast routing code will start implementing per-FIB routing tables. As a part of this, it needs to be notified when the number of FIBs changes, so that it can expand its tables. Add an eventhandler for this purpose. MFC after: 2 weeks Sponsored by: Stormshield Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D55239 --- sys/net/route.h | 6 ++++++ sys/net/route/route_tables.c | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/sys/net/route.h b/sys/net/route.h index 49bb7abd9726..34df3297d6d4 100644 --- a/sys/net/route.h +++ b/sys/net/route.h @@ -32,6 +32,9 @@ #ifndef _NET_ROUTE_H_ #define _NET_ROUTE_H_ +#ifdef _KERNEL +#include +#endif #include /* @@ -124,6 +127,9 @@ VNET_DECLARE(u_int, rt_add_addr_allfibs); /* Announce interfaces to all fibs */ #define V_fib_hash_outbound VNET(fib_hash_outbound) VNET_DECLARE(u_int, fib_hash_outbound); +typedef void (*rtnumfibs_change_t)(void *, uint32_t); +EVENTHANDLER_DECLARE(rtnumfibs_change, rtnumfibs_change_t); + /* Outbound flowid generation rules */ #ifdef RSS #define fib4_calc_packet_hash xps_proto_software_hash_v4 diff --git a/sys/net/route/route_tables.c b/sys/net/route/route_tables.c index 749ef063e125..571f1db9c40d 100644 --- a/sys/net/route/route_tables.c +++ b/sys/net/route/route_tables.c @@ -33,10 +33,10 @@ * Which is the new name for an in kernel routing (next hop) table. * ***********************************************************************/ -#include #include "opt_route.h" #include +#include #include #include #include @@ -268,6 +268,8 @@ grow_rtables(uint32_t num_tables) old_rt_tables = V_rt_tables; V_rt_tables = new_rt_tables; + EVENTHANDLER_INVOKE(rtnumfibs_change, num_tables); + /* Wait till all cpus see new pointers */ atomic_thread_fence_rel(); NET_EPOCH_WAIT(); From nobody Mon Mar 30 16:15:39 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 4fkxDq4kSGz6WyZr for ; Mon, 30 Mar 2026 16:15:39 +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 4fkxDq1Vshz49m7 for ; Mon, 30 Mar 2026 16:15:39 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774887339; 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=W60lmRWiCenpXxQCV/yjFp3rretIVQ5i8/B73quN4Uc=; b=EhgrR1ShfgAnxZzsGivxYMkY7Np2unBEqPQLOGlTMaTONaskhJkoEBQwi5LgiKu9BajWhO 52g3IB5oQ7+SnPbNVOvaMYHIbzbZg70iNTeSTAh+WS0zJtW/hD006LTD1i4nd10bqcLOD0 9b5OrTMV8//9Rv0Nqupwaa7+n/AfzOc+hoXx2i2y57CW+2SgiiAsnaB8RfP5dp+RVtdvE6 ADLaLFdOoSZQ8r8eZS9RHmtjSq9Jw4pSDI8WIb7olHPWxn0daF3rjAOQTj9FHYttXaXqNs X6amzDMdLIY6JCxTeSsJQM0yIdfW8rH5yHGXhD7Ub6c9RqXBIEtEiSkiATl5YQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774887339; a=rsa-sha256; cv=none; b=nP66UXx5W4iCJdXnQJsFN5nrd5k46OC9xr1s+vQGTH8DrDmlOiVwkxrMkQU0yNNWwBqIrF +czyosQvK4bV+peYPU6yS1PwkG5NIOBgvP6HuUnXyL4MAm9ZcjNiel6USVQeVA/jYamrUl XlCOXHWOYoZoe8jaQwwTedEXHkYttjnj5CTg3NlT3ffeLE9Q3O1bMvukdryHrUgD4TMW33 mj/ZWUxUrrU8D43K82Px09htfsrjDAgOEG7H1vnuqChrItxz5MJunvo+opTaFjIQysfLny JXGBV7jrVRGDVn5x9UYZG40eItrdG+Q/hatV4m691QqRY1r8bcRY3RKmk1JJEg== 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=1774887339; 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=W60lmRWiCenpXxQCV/yjFp3rretIVQ5i8/B73quN4Uc=; b=FAKy9eew4fSE2RpnnBP1MWpMZHhJjdArismiumgfqIXUScb5w51hmDoWIiaDL7Y2i8VUvv FZnkjvfDEQQMd1BR7am7v/GRty3yeb451z6lVxek30nbhAAKfi7Q8ITY8xzO6yJyqzMjGX MfFU6nPOLAMX1++0QM471HaJX7gWpGf3HNybDOFlYv8d3vxi08tKtphGy3J9NclTLtiNnf 7ymSvgHPBAM6kUoBiwQSJ+eosJqIIy3V+WWZVwbxxixHGqwwMTWP6OdZ+GYcUjgRMC2c2F BGSN06eV8P1xWZmk4mOrEuVaGPDv+0lLsv5l2VbXDgVexFqtDRBlF9HxJGW7yQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkxDq10cCzqWT for ; Mon, 30 Mar 2026 16:15:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3adf0 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 16:15:39 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 97a4bc9a0da7 - main - ip(6)_mroute: Grow the routing tables when the number of FIBs changes 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 97a4bc9a0da7cd63c660ce59a9dd7c87efe1f218 Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 16:15:39 +0000 Message-Id: <69caa1ab.3adf0.13ae3610@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=97a4bc9a0da7cd63c660ce59a9dd7c87efe1f218 commit 97a4bc9a0da7cd63c660ce59a9dd7c87efe1f218 Author: Mark Johnston AuthorDate: 2026-03-30 13:30:38 +0000 Commit: Mark Johnston CommitDate: 2026-03-30 16:08:21 +0000 ip(6)_mroute: Grow the routing tables when the number of FIBs changes Use the new rtnumfibs_change event to expand the mfctable array when the number of FIBs increases. MFC after: 2 weeks Sponsored by: Stormshield Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D55240 --- sys/netinet/ip_mroute.c | 54 ++++++++++++++++++++++++++++++++++++++--------- sys/netinet6/ip6_mroute.c | 43 ++++++++++++++++++++++++++++++++++--- 2 files changed, 84 insertions(+), 13 deletions(-) diff --git a/sys/netinet/ip_mroute.c b/sys/netinet/ip_mroute.c index 6e5b739f1da8..9ecaa9a669d6 100644 --- a/sys/netinet/ip_mroute.c +++ b/sys/netinet/ip_mroute.c @@ -189,6 +189,8 @@ struct mfctable { VNET_DEFINE_STATIC(struct mfctable *, mfctables); #define V_mfctables VNET(mfctables) +VNET_DEFINE_STATIC(uint32_t, nmfctables); +#define V_nmfctables VNET(nmfctables) VNET_DEFINE_STATIC(u_long, mfchash); #define V_mfchash VNET(mfchash) @@ -206,7 +208,8 @@ VNET_DEFINE_STATIC(struct taskqueue *, task_queue); VNET_DEFINE_STATIC(struct task, task); #define V_task VNET(task) -static eventhandler_tag if_detach_event_tag = NULL; +static eventhandler_tag if_detach_event_tag; +static eventhandler_tag rtnumfibs_change_tag; VNET_DEFINE_STATIC(struct callout, expire_upcalls_ch); #define V_expire_upcalls_ch VNET(expire_upcalls_ch) @@ -2808,7 +2811,6 @@ out_locked: MRW_RUNLOCK(); return (error); } - static SYSCTL_NODE(_net_inet_ip, OID_AUTO, mfctable, CTLFLAG_RD | CTLFLAG_MPSAFE, sysctl_mfctable, "IPv4 Multicast Forwarding Table " @@ -2838,26 +2840,51 @@ sysctl_viflist(SYSCTL_HANDLER_ARGS) MRW_RUNLOCK(); return (error); } - SYSCTL_PROC(_net_inet_ip, OID_AUTO, viftable, CTLTYPE_OPAQUE | CTLFLAG_VNET | CTLFLAG_RD | CTLFLAG_MPSAFE, NULL, 0, sysctl_viflist, "S,vif[MAXVIFS]", "IPv4 Multicast Interfaces (struct vif[MAXVIFS], netinet/ip_mroute.h)"); static void -vnet_mroute_init(const void *unused __unused) +ip_mroute_rtnumfibs_change(void *arg __unused, uint32_t ntables) { - V_mfctables = mallocarray(V_rt_numfibs, sizeof(*V_mfctables), M_MRTABLE, + struct mfctable *mfctables, *omfctables; + + KASSERT(ntables >= V_nmfctables, + ("%s: ntables %u nmfctables %u", __func__, ntables, V_nmfctables)); + + mfctables = mallocarray(ntables, sizeof(*mfctables), M_MRTABLE, M_WAITOK | M_ZERO); - for (int i = 0; i < V_rt_numfibs; i++) { + omfctables = V_mfctables; + + for (int i = V_nmfctables; i < ntables; i++) { struct mfctable *mfct; - mfct = &V_mfctables[i]; + mfct = &mfctables[i]; mfct->nexpire = malloc(mfchashsize, M_MRTABLE, M_WAITOK | M_ZERO); mfct->register_vif = VIFI_INVALID; } + MRW_TEARDOWN_WLOCK(); + MRW_WLOCK(); + for (int i = 0; i < V_nmfctables; i++) + memcpy(&mfctables[i], &omfctables[i], sizeof(*mfctables)); + atomic_store_rel_ptr((uintptr_t *)&V_mfctables, (uintptr_t)mfctables); + MRW_WUNLOCK(); + MRW_TEARDOWN_WUNLOCK(); + + NET_EPOCH_WAIT(); + + V_nmfctables = ntables; + free(omfctables, M_MRTABLE); +} + +static void +vnet_mroute_init(const void *unused __unused) +{ + ip_mroute_rtnumfibs_change(NULL, V_rt_numfibs); + callout_init_rw(&V_expire_upcalls_ch, &mrouter_lock, 0); callout_init_rw(&V_bw_upcalls_ch, &mrouter_lock, 0); @@ -2895,8 +2922,12 @@ ip_mroute_modevent(module_t mod, int type, void *unused) MRW_TEARDOWN_LOCK_INIT(); MRW_LOCK_INIT(); - if_detach_event_tag = EVENTHANDLER_REGISTER(ifnet_departure_event, - if_detached_event, NULL, EVENTHANDLER_PRI_ANY); + if_detach_event_tag = EVENTHANDLER_REGISTER( + ifnet_departure_event, if_detached_event, NULL, + EVENTHANDLER_PRI_ANY); + rtnumfibs_change_tag = EVENTHANDLER_REGISTER( + rtnumfibs_change, ip_mroute_rtnumfibs_change, + NULL, EVENTHANDLER_PRI_ANY); if (!powerof2(mfchashsize)) { printf("WARNING: %s not a power of 2; using default\n", @@ -2937,7 +2968,10 @@ ip_mroute_modevent(module_t mod, int type, void *unused) ip_mrouter_unloading = 1; MRW_WUNLOCK(); - EVENTHANDLER_DEREGISTER(ifnet_departure_event, if_detach_event_tag); + EVENTHANDLER_DEREGISTER(rtnumfibs_change, + rtnumfibs_change_tag); + EVENTHANDLER_DEREGISTER(ifnet_departure_event, + if_detach_event_tag); if (pim_encap_cookie) { ip_encap_detach(pim_encap_cookie); diff --git a/sys/netinet6/ip6_mroute.c b/sys/netinet6/ip6_mroute.c index 912bbfda2486..fff68a7ff47d 100644 --- a/sys/netinet6/ip6_mroute.c +++ b/sys/netinet6/ip6_mroute.c @@ -83,6 +83,7 @@ #include #include #include +#include #include #include #include @@ -207,6 +208,10 @@ struct mf6ctable { VNET_DEFINE_STATIC(struct mf6ctable *, mfctables); #define V_mfctables VNET(mfctables) +VNET_DEFINE_STATIC(uint32_t, nmfctables); +#define V_nmfctables VNET(nmfctables) + +static eventhandler_tag rtnumfibs_change_tag; static int sysctl_mfctable(SYSCTL_HANDLER_ARGS) @@ -1926,11 +1931,36 @@ pim6_input(struct mbuf *m, int off, int proto, void *arg __unused) return (rip6_input(&m, &off, proto)); } +static void +ip6_mroute_rtnumfibs_change(void *arg __unused, uint32_t ntables) +{ + struct mf6ctable *mfctables, *omfctables; + + KASSERT(ntables >= V_nmfctables, + ("%s: ntables %u nmfctables %u", __func__, ntables, V_nmfctables)); + + mfctables = mallocarray(ntables, sizeof(*mfctables), M_MRTABLE6, + M_WAITOK | M_ZERO); + omfctables = V_mfctables; + + MROUTER6_LOCK(); + MFC6_LOCK(); + for (int i = 0; i < V_nmfctables; i++) + memcpy(&mfctables[i], &omfctables[i], sizeof(*mfctables)); + atomic_store_rel_ptr((uintptr_t *)&V_mfctables, (uintptr_t)mfctables); + MFC6_UNLOCK(); + MROUTER6_UNLOCK(); + + NET_EPOCH_WAIT(); + + V_nmfctables = ntables; + free(omfctables, M_MRTABLE6); +} + static void vnet_mroute_init(const void *unused __unused) { - V_mfctables = mallocarray(V_rt_numfibs, sizeof(*V_mfctables), - M_MRTABLE6, M_WAITOK | M_ZERO); + ip6_mroute_rtnumfibs_change(NULL, V_rt_numfibs); callout_init_mtx(&V_expire_upcalls_ch, MFC6_LOCKPTR(), 0); } @@ -1957,6 +1987,10 @@ ip6_mroute_modevent(module_t mod, int type, void *unused) MFC6_LOCK_INIT(); MIF6_LOCK_INIT(); + rtnumfibs_change_tag = EVENTHANDLER_REGISTER( + rtnumfibs_change, ip6_mroute_rtnumfibs_change, + NULL, EVENTHANDLER_PRI_ANY); + pim6_encap_cookie = ip6_encap_attach(&ipv6_encap_cfg, NULL, M_WAITOK); if (pim6_encap_cookie == NULL) { @@ -1978,6 +2012,9 @@ ip6_mroute_modevent(module_t mod, int type, void *unused) if (V_ip6_mrouting_enabled) return (EBUSY); + EVENTHANDLER_DEREGISTER(rtnumfibs_change, + rtnumfibs_change_tag); + if (pim6_encap_cookie) { ip6_encap_detach(pim6_encap_cookie); pim6_encap_cookie = NULL; @@ -2007,4 +2044,4 @@ static moduledata_t ip6_mroutemod = { 0 }; -DECLARE_MODULE(ip6_mroute, ip6_mroutemod, SI_SUB_PROTO_MC, SI_ORDER_ANY); +DECLARE_MODULE(ip6_mroute, ip6_mroutemod, SI_SUB_PROTO_MC, SI_ORDER_MIDDLE); From nobody Mon Mar 30 16:15:40 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 4fkxDr5c52z6WyDL for ; Mon, 30 Mar 2026 16:15:40 +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 4fkxDr3Rcmz49Y7 for ; Mon, 30 Mar 2026 16:15:40 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774887340; 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=NKjecw1NBVkBxlqq41lpxr/HE6Ns3CJ9R6/NVpEc70o=; b=KmrYJXja03huPByySzvn7ODYw7HF3RzRgqDSF2/nK0QFggfigNaWW1e+wj5nvx3JIs2kzV n1sSbI+9FBnbRrGlRTYGDivZEaXQS6t7nj41tIydjmszX33f9IrX3NBm8Wu1MuX2NF0bFz r7NbJj0rdMZ67YhElYzXWBzBjf31XI6gBzwjy187GgiMoRBAPLKs+nGmkqAp0w10nKa2QE kyy0Ivs4PqAlY+mWw47bxaVZH7lZS14QOwUaW5kWqaZkG2e8EAeF0Go6bdmeq85ZKk5Yz5 xyHPp3YyqS9G1TUI0djFCWpxhYOVrhIgdHRTQxyiEcri5iQoEMneITX0kTZz2Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774887340; a=rsa-sha256; cv=none; b=aRaWnCkgOka7HSTmmL+UefT9od3K7+txU73UajpIqkr+Ru+lerL6xGtaL+FwhTzEExcik9 nJX1bsxmL3OHQJXnvbrAEGSTDnA8E3+1ACVrlIjNBhIcITMVYY66NJBYmcPTRxV+10q/vn QYYxJp4DHYgUcRqfN2EK5loqniTWGJmzTZaWIR1m2SjG0LcKsAKhnS7RO3M20rpqHZq9Id PFr7YMM5dUyCKM69dBVPBf8ySxpkHig59k4qEy197rPWhHMd5O3vWxX4P67h2qwxnj7PB6 SoPyPrkFW/4BbGiL3F9XtcMx9RHQ37UEsW/wdSZ2HTf7AIHUfbSGdEIlAGC7lw== 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=1774887340; 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=NKjecw1NBVkBxlqq41lpxr/HE6Ns3CJ9R6/NVpEc70o=; b=xoFLLH+Ni3cxC++MYCDCX1HXvUB1e/B4JqmOWt+9188tBkmrye8Bgjg7aMsRLWVzM4amtV gWifaRGi9X68rLbE1UdSsDHizLcIkJSnsAri3+PNFgNFy6JMH0A404I4Ecpi4e3haT1Tru 4KfslurGL7VBvaerBrubahG+x13PtI8AwfgHVENsVot9IeQs+CPvv+KJ2rrCg7t2H66op7 HH5Vm0cxkLkA6wJ90B52QpFIaUyk/uWxZez5T9WT754EyB7FnJCx8Am1bZaRPb8XVnZ1ns TNG4+OLxs2tucb4TlVTuQPnmgEuncb/dTYp4hUzSjhexZjEWxu4haYEnYWSvjQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkxDr1mtnzqwP for ; Mon, 30 Mar 2026 16:15:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3c306 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 16:15:40 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 4c486fe40267 - main - ip_mroute: FIBify 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 4c486fe402673c49443293cfb70ad4da61d39916 Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 16:15:40 +0000 Message-Id: <69caa1ac.3c306.1426a84@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=4c486fe402673c49443293cfb70ad4da61d39916 commit 4c486fe402673c49443293cfb70ad4da61d39916 Author: Mark Johnston AuthorDate: 2026-03-30 13:31:29 +0000 Commit: Mark Johnston CommitDate: 2026-03-30 16:08:21 +0000 ip_mroute: FIBify Modify the control plane (ioctl and socket option handlers) to use the routing socket FIB to index into the mfctable array. Modify the forwarding plane to use the mbuf's FIB to determine which routing table to use. MFC after: 2 weeks Sponsored by: Stormshield Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D55241 --- sys/netinet/in_mcast.c | 3 +- sys/netinet/ip_mroute.c | 319 +++++++++++++++++++++++++----------------------- sys/netinet/ip_mroute.h | 5 +- sys/netinet/ip_output.c | 11 +- sys/netinet/raw_ip.c | 4 +- 5 files changed, 180 insertions(+), 162 deletions(-) diff --git a/sys/netinet/in_mcast.c b/sys/netinet/in_mcast.c index 20e6f9d8b322..6b9bb599a475 100644 --- a/sys/netinet/in_mcast.c +++ b/sys/netinet/in_mcast.c @@ -2702,7 +2702,8 @@ inp_setmoptions(struct inpcb *inp, struct sockopt *sopt) error = sooptcopyin(sopt, &vifi, sizeof(int), sizeof(int)); if (error) break; - if (!legal_vif_num(vifi) && (vifi != -1)) { + if (!legal_vif_num(inp->inp_socket->so_fibnum, vifi) && + vifi != -1) { error = EINVAL; break; } diff --git a/sys/netinet/ip_mroute.c b/sys/netinet/ip_mroute.c index 9ecaa9a669d6..6f2bf8248dd8 100644 --- a/sys/netinet/ip_mroute.c +++ b/sys/netinet/ip_mroute.c @@ -306,32 +306,35 @@ static struct pim_encap_pimhdr pim_encap_pimhdr = { * Private variables. */ -static u_long X_ip_mcast_src(int); +static u_long X_ip_mcast_src(int, int); static int X_ip_mforward(struct ip *, struct ifnet *, struct mbuf *, struct ip_moptions *); static void X_ip_mrouter_done(struct socket *); static int X_ip_mrouter_get(struct socket *, struct sockopt *); static int X_ip_mrouter_set(struct socket *, struct sockopt *); -static int X_legal_vif_num(int); +static int X_legal_vif_num(int, int); static int X_mrt_ioctl(u_long, caddr_t, int); -static int add_bw_upcall(struct bw_upcall *); -static int add_mfc(struct mfcctl2 *); -static int add_vif(struct vifctl *); +static int add_bw_upcall(struct mfctable *, struct bw_upcall *); +static int add_mfc(struct mfctable *, struct mfcctl2 *); +static int add_vif(struct mfctable *, int, struct vifctl *); static void bw_meter_prepare_upcall(struct bw_meter *, struct timeval *); static void bw_meter_geq_receive_packet(struct bw_meter *, int, struct timeval *); -static void bw_upcalls_send(void); -static int del_bw_upcall(struct bw_upcall *); -static int del_mfc(struct mfcctl2 *); -static int del_vif(vifi_t); -static int del_vif_locked(vifi_t, struct ifnet **, struct ifnet **); +static void bw_upcalls_send(struct mfctable *); +static void bw_upcalls_send_all(void); +static int del_bw_upcall(struct mfctable *, struct bw_upcall *); +static int del_mfc(struct mfctable *, struct mfcctl2 *); +static int del_vif(struct mfctable *, vifi_t); +static int del_vif_locked(struct mfctable *, vifi_t, struct ifnet **, + struct ifnet **); static void expire_bw_upcalls_send(void *); static void expire_mfc(struct mfc *); -static void expire_upcalls(void *); +static void expire_upcalls(struct mfctable *); +static void expire_upcalls_all(void *); static void free_bw_list(struct bw_meter *); -static int get_sg_cnt(struct sioc_sg_req *); -static int get_vif_cnt(struct sioc_vif_req *); +static int get_sg_cnt(struct mfctable *, struct sioc_sg_req *); +static int get_vif_cnt(struct mfctable *, struct sioc_vif_req *); static void if_detached_event(void *, struct ifnet *); static int ip_mdq(struct mfctable *, struct mbuf *, struct ifnet *, struct mfc *, vifi_t); @@ -344,13 +347,13 @@ static struct mbuf * pim_register_prepare(struct ip *, struct mbuf *); static int pim_register_send(struct mfctable *, struct ip *, struct vif *, struct mbuf *, struct mfc *); -static int pim_register_send_rp(struct ip *, struct vif *, - struct mbuf *, struct mfc *); -static int pim_register_send_upcall(struct ip *, struct vif *, - struct mbuf *, struct mfc *); +static int pim_register_send_rp(struct mfctable *, struct ip *, + struct vif *, struct mbuf *, struct mfc *); +static int pim_register_send_upcall(struct mfctable *, struct ip *, + struct vif *, struct mbuf *, struct mfc *); static void send_packet(struct vif *, struct mbuf *); -static int set_api_config(uint32_t *); -static int set_assert(int); +static int set_api_config(struct mfctable *, uint32_t *); +static int set_assert(struct mfctable *, int); static int socket_send(struct socket *, struct mbuf *, struct sockaddr_in *); @@ -406,6 +409,17 @@ mfc_alloc(void) return rt; } +static struct mfctable * +somfctable(struct socket *so) +{ + int fib; + + fib = atomic_load_int(&so->so_fibnum); + KASSERT(fib >= 0 && fib < V_nmfctables, + ("%s: so_fibnum %d out of range", __func__, fib)); + return (&V_mfctables[fib]); +} + /* * Handle MRT setsockopt commands to modify the multicast forwarding tables. */ @@ -420,7 +434,7 @@ X_ip_mrouter_set(struct socket *so, struct sockopt *sopt) struct bw_upcall bw_upcall; uint32_t i; - mfct = &V_mfctables[0]; + mfct = somfctable(so); if (so != mfct->router && sopt->sopt_name != MRT_INIT) return EPERM; @@ -439,13 +453,13 @@ X_ip_mrouter_set(struct socket *so, struct sockopt *sopt) error = sooptcopyin(sopt, &vifc, sizeof vifc, sizeof vifc); if (error) break; - error = add_vif(&vifc); + error = add_vif(mfct, so->so_fibnum, &vifc); break; case MRT_DEL_VIF: error = sooptcopyin(sopt, &vifi, sizeof vifi, sizeof vifi); if (error) break; - error = del_vif(vifi); + error = del_vif(mfct, vifi); break; case MRT_ADD_MFC: case MRT_DEL_MFC: @@ -465,22 +479,22 @@ X_ip_mrouter_set(struct socket *so, struct sockopt *sopt) if (error) break; if (sopt->sopt_name == MRT_ADD_MFC) - error = add_mfc(&mfc); + error = add_mfc(mfct, &mfc); else - error = del_mfc(&mfc); + error = del_mfc(mfct, &mfc); break; case MRT_ASSERT: error = sooptcopyin(sopt, &optval, sizeof optval, sizeof optval); if (error) break; - set_assert(optval); + set_assert(mfct, optval); break; case MRT_API_CONFIG: error = sooptcopyin(sopt, &i, sizeof i, sizeof i); if (!error) - error = set_api_config(&i); + error = set_api_config(mfct, &i); if (!error) error = sooptcopyout(sopt, &i, sizeof i); break; @@ -492,9 +506,9 @@ X_ip_mrouter_set(struct socket *so, struct sockopt *sopt) if (error) break; if (sopt->sopt_name == MRT_ADD_BW_UPCALL) - error = add_bw_upcall(&bw_upcall); + error = add_bw_upcall(mfct, &bw_upcall); else - error = del_bw_upcall(&bw_upcall); + error = del_bw_upcall(mfct, &bw_upcall); break; default: @@ -513,8 +527,7 @@ X_ip_mrouter_get(struct socket *so, struct sockopt *sopt) struct mfctable *mfct; int error; - mfct = &V_mfctables[0]; - + mfct = somfctable(so); switch (sopt->sopt_name) { case MRT_VERSION: error = sooptcopyout(sopt, &mrt_api_version, @@ -543,20 +556,23 @@ X_ip_mrouter_get(struct socket *so, struct sockopt *sopt) * Handle ioctl commands to obtain information from the cache */ static int -X_mrt_ioctl(u_long cmd, caddr_t data, int fibnum __unused) +X_mrt_ioctl(u_long cmd, caddr_t data, int fibnum) { + struct mfctable *mfct; int error; error = priv_check(curthread, PRIV_NETINET_MROUTE); if (error) return (error); + + mfct = &V_mfctables[fibnum]; switch (cmd) { - case (SIOCGETVIFCNT): - error = get_vif_cnt((struct sioc_vif_req *)data); + case SIOCGETVIFCNT: + error = get_vif_cnt(mfct, (struct sioc_vif_req *)data); break; - case (SIOCGETSGCNT): - error = get_sg_cnt((struct sioc_sg_req *)data); + case SIOCGETSGCNT: + error = get_sg_cnt(mfct, (struct sioc_sg_req *)data); break; default: @@ -570,12 +586,12 @@ X_mrt_ioctl(u_long cmd, caddr_t data, int fibnum __unused) * returns the packet, byte, rpf-failure count for the source group provided */ static int -get_sg_cnt(struct sioc_sg_req *req) +get_sg_cnt(struct mfctable *mfct, struct sioc_sg_req *req) { struct mfc *rt; MRW_RLOCK(); - rt = mfc_find(&V_mfctables[0], &req->src, &req->grp); + rt = mfc_find(mfct, &req->src, &req->grp); if (rt == NULL) { MRW_RUNLOCK(); req->pktcnt = req->bytecnt = req->wrong_if = 0xffffffff; @@ -592,13 +608,11 @@ get_sg_cnt(struct sioc_sg_req *req) * returns the input and output packet and byte counts on the vif provided */ static int -get_vif_cnt(struct sioc_vif_req *req) +get_vif_cnt(struct mfctable *mfct, struct sioc_vif_req *req) { - struct mfctable *mfct; struct vif *vif; vifi_t vifi; - mfct = &V_mfctables[0]; vifi = req->vifi; MRW_RLOCK(); @@ -619,35 +633,26 @@ get_vif_cnt(struct sioc_vif_req *req) return 0; } -static void -if_detached_event(void *arg __unused, struct ifnet *ifp) +/* + * Tear down multicast forwarder state associated with this ifnet. + * 1. Walk the vif list, matching vifs against this ifnet. + * 2. Walk the multicast forwarding cache (mfc) looking for + * inner matches with this vif's index. + * 3. Expire any matching multicast forwarding cache entries. + * 4. Free vif state. This should disable ALLMULTI on the interface. + */ +static int +detach_ifnet(struct mfctable *mfct, struct ifnet *ifp) { - struct mfctable *mfct; - vifi_t vifi; - u_long i, vifi_cnt = 0; struct ifnet *free_ptr, *multi_leave; + int count; - mfct = &V_mfctables[0]; - - MRW_WLOCK(); - if (!V_ip_mrouting_enabled) { - MRW_WUNLOCK(); - return; - } - - /* - * Tear down multicast forwarder state associated with this ifnet. - * 1. Walk the vif list, matching vifs against this ifnet. - * 2. Walk the multicast forwarding cache (mfc) looking for - * inner matches with this vif's index. - * 3. Expire any matching multicast forwarding cache entries. - * 4. Free vif state. This should disable ALLMULTI on the interface. - */ + count = 0; restart: - for (vifi = 0; vifi < mfct->numvifs; vifi++) { + for (vifi_t vifi = 0; vifi < mfct->numvifs; vifi++) { if (mfct->viftable[vifi].v_ifp != ifp) continue; - for (i = 0; i < mfchashsize; i++) { + for (u_long i = 0; i < mfchashsize; i++) { struct mfc *rt, *nrt; LIST_FOREACH_SAFE(rt, &mfct->mfchashtbl[i], mfc_hash, @@ -657,9 +662,9 @@ restart: } } } - del_vif_locked(vifi, &multi_leave, &free_ptr); + del_vif_locked(mfct, vifi, &multi_leave, &free_ptr); if (free_ptr != NULL) - vifi_cnt++; + count++; if (multi_leave) { MRW_WUNLOCK(); if_allmulti(multi_leave, 0); @@ -667,15 +672,26 @@ restart: goto restart; } } + return (count); +} + +static void +if_detached_event(void *arg __unused, struct ifnet *ifp) +{ + int count; + + MRW_WLOCK(); + if (!V_ip_mrouting_enabled) { + MRW_WUNLOCK(); + return; + } + count = 0; + for (int i = 0; i < V_nmfctables; i++) + count += detach_ifnet(&V_mfctables[i], ifp); MRW_WUNLOCK(); - /* - * Free IFP. We don't have to use free_ptr here as it is the same - * that ifp. Perform free as many times as required in case - * refcount is greater than 1. - */ - for (i = 0; i < vifi_cnt; i++) + for (int i = 0; i < count; i++) if_free(ifp); } @@ -685,7 +701,7 @@ ip_mrouter_upcall_thread(void *arg, int pending __unused) CURVNET_SET((struct vnet *) arg); MRW_WLOCK(); - bw_upcalls_send(); + bw_upcalls_send_all(); MRW_WUNLOCK(); CURVNET_RESTORE(); @@ -704,7 +720,7 @@ ip_mrouter_init(struct socket *so, int version) if (version != 1) return ENOPROTOOPT; - mfct = &V_mfctables[0]; + mfct = somfctable(so); MRW_TEARDOWN_WLOCK(); MRW_WLOCK(); @@ -743,7 +759,7 @@ ip_mrouter_init(struct socket *so, int version) taskqueue_cancel(V_task_queue, &V_task, NULL); taskqueue_unblock(V_task_queue); - callout_reset(&V_expire_upcalls_ch, EXPIRE_TIMEOUT, expire_upcalls, + callout_reset(&V_expire_upcalls_ch, EXPIRE_TIMEOUT, expire_upcalls_all, curvnet); callout_reset(&V_bw_upcalls_ch, BW_UPCALLS_PERIOD, expire_bw_upcalls_send, curvnet); @@ -774,7 +790,7 @@ X_ip_mrouter_done(struct socket *so) vifi_t vifi; struct bw_upcall *bu; - mfct = &V_mfctables[0]; + mfct = somfctable(so); MRW_TEARDOWN_WLOCK(); if (so != mfct->router) { @@ -835,9 +851,6 @@ X_ip_mrouter_done(struct socket *so) mfct->numvifs = 0; mfct->pim_assert_enabled = 0; - callout_stop(&V_expire_upcalls_ch); - callout_stop(&V_bw_upcalls_ch); - /* * Free all multicast forwarding cache entries. * Do not use hashdestroy(), as we must perform other cleanup. @@ -873,12 +886,12 @@ X_ip_mrouter_done(struct socket *so) * Set PIM assert processing global */ static int -set_assert(int i) +set_assert(struct mfctable *mfct, int i) { if ((i != 1) && (i != 0)) return EINVAL; - V_mfctables[0].pim_assert_enabled = i; + mfct->pim_assert_enabled = i; return 0; } @@ -887,9 +900,8 @@ set_assert(int i) * Configure API capabilities */ int -set_api_config(uint32_t *apival) +set_api_config(struct mfctable *mfct, uint32_t *apival) { - struct mfctable *mfct; u_long i; /* @@ -899,7 +911,6 @@ set_api_config(uint32_t *apival) * - pim_assert is not enabled * - the MFC table is empty */ - mfct = &V_mfctables[0]; if (mfct->numvifs > 0) { *apival = 0; return EPERM; @@ -931,9 +942,8 @@ set_api_config(uint32_t *apival) * Add a vif to the vif table */ static int -add_vif(struct vifctl *vifcp) +add_vif(struct mfctable *mfct, int fibnum, struct vifctl *vifcp) { - struct mfctable *mfct; struct vif *vifp; struct sockaddr_in sin = {sizeof sin, AF_INET}; struct ifaddr *ifa; @@ -943,7 +953,6 @@ add_vif(struct vifctl *vifcp) if (vifcp->vifc_vifi >= MAXVIFS) return EINVAL; - mfct = &V_mfctables[0]; vifp = &mfct->viftable[vifcp->vifc_vifi]; /* rate limiting is no longer supported by this code */ @@ -974,6 +983,10 @@ add_vif(struct vifctl *vifcp) return EADDRNOTAVAIL; } ifp = ifa->ifa_ifp; + if (ifp->if_fib != fibnum) { + NET_EPOCH_EXIT(et); + return EADDRNOTAVAIL; + } /* XXX FIXME we need to take a ref on ifp and cleanup properly! */ NET_EPOCH_EXIT(et); } @@ -1039,12 +1052,11 @@ add_vif(struct vifctl *vifcp) * Delete a vif from the vif table */ static int -del_vif_locked(vifi_t vifi, struct ifnet **ifp_multi_leave, struct ifnet **ifp_free) +del_vif_locked(struct mfctable *mfct, vifi_t vifi, + struct ifnet **ifp_multi_leave, struct ifnet **ifp_free) { - struct mfctable *mfct; struct vif *vifp; - mfct = &V_mfctables[0]; *ifp_free = NULL; *ifp_multi_leave = NULL; @@ -1086,13 +1098,13 @@ del_vif_locked(vifi_t vifi, struct ifnet **ifp_multi_leave, struct ifnet **ifp_f } static int -del_vif(vifi_t vifi) +del_vif(struct mfctable *mfct, vifi_t vifi) { int cc; struct ifnet *free_ptr, *multi_leave; MRW_WLOCK(); - cc = del_vif_locked(vifi, &multi_leave, &free_ptr); + cc = del_vif_locked(mfct, vifi, &multi_leave, &free_ptr); MRW_WUNLOCK(); if (multi_leave) @@ -1170,17 +1182,14 @@ expire_mfc(struct mfc *rt) * Add an mfc entry */ static int -add_mfc(struct mfcctl2 *mfccp) +add_mfc(struct mfctable *mfct, struct mfcctl2 *mfccp) { struct mfc *rt; - struct mfctable *mfct; struct rtdetq *rte; u_long hash = 0; u_short nstl; struct epoch_tracker et; - mfct = &V_mfctables[0]; - MRW_WLOCK(); rt = mfc_find(mfct, &mfccp->mfcc_origin, &mfccp->mfcc_mcastgrp); @@ -1273,9 +1282,8 @@ add_mfc(struct mfcctl2 *mfccp) * Delete an mfc entry */ static int -del_mfc(struct mfcctl2 *mfccp) +del_mfc(struct mfctable *mfct, struct mfcctl2 *mfccp) { - struct mfctable *mfct; struct in_addr origin; struct in_addr mcastgrp; struct mfc *rt; @@ -1286,7 +1294,6 @@ del_mfc(struct mfcctl2 *mfccp) CTR3(KTR_IPMF, "%s: delete mfc orig 0x%08x group %lx", __func__, ntohl(origin.s_addr), (u_long)ntohl(mcastgrp.s_addr)); - mfct = &V_mfctables[0]; MRW_WLOCK(); LIST_FOREACH(rt, &mfct->mfchashtbl[MFCHASH(origin, mcastgrp)], @@ -1371,12 +1378,15 @@ X_ip_mforward(struct ip *ip, struct ifnet *ifp, struct mbuf *m, return (1); } - mfct = &V_mfctables[0]; + mfct = &V_mfctables[M_GETFIB(m)]; /* * BEGIN: MCAST ROUTING HOT PATH */ MRW_RLOCK(); + if (__predict_false(mfct->router == NULL)) + return (EADDRNOTAVAIL); + if (imo && ((vifi = imo->imo_multicast_vif) < mfct->numvifs)) { if (ip->ip_ttl < MAXTTL) ip->ip_ttl++; /* compensate for -1 in *_send routines */ @@ -1556,21 +1566,10 @@ mfc_find_retry: return 0; } -/* - * Clean up the cache entry if upcall is not serviced - */ static void -expire_upcalls(void *arg) +expire_upcalls(struct mfctable *mfct) { - struct mfctable *mfct; - u_long i; - - CURVNET_SET((struct vnet *) arg); - - MRW_LOCK_ASSERT(); - - mfct = &V_mfctables[0]; - for (i = 0; i < mfchashsize; i++) { + for (u_long i = 0; i < mfchashsize; i++) { struct mfc *rt, *nrt; if (mfct->nexpire[i] == 0) @@ -1591,8 +1590,22 @@ expire_upcalls(void *arg) expire_mfc(rt); } } +} + +/* + * Clean up the cache entry if upcall is not serviced + */ +static void +expire_upcalls_all(void *arg) +{ + CURVNET_SET((struct vnet *)arg); + + MRW_LOCK_ASSERT(); + + for (int i = 0; i < V_nmfctables; i++) + expire_upcalls(&V_mfctables[i]); - callout_reset(&V_expire_upcalls_ch, EXPIRE_TIMEOUT, expire_upcalls, + callout_reset(&V_expire_upcalls_ch, EXPIRE_TIMEOUT, expire_upcalls_all, curvnet); CURVNET_RESTORE(); @@ -1757,16 +1770,18 @@ ip_mdq(struct mfctable *mfct, struct mbuf *m, struct ifnet *ifp, struct mfc *rt, * Check if a vif number is legal/ok. This is used by in_mcast.c. */ static int -X_legal_vif_num(int vif) +X_legal_vif_num(int fibnum, int vif) { + struct mfctable *mfct; int ret; ret = 0; if (vif < 0) return (ret); + mfct = &V_mfctables[fibnum]; MRW_RLOCK(); - if (vif < V_mfctables[0].numvifs) + if (vif < mfct->numvifs) ret = 1; MRW_RUNLOCK(); @@ -1777,17 +1792,19 @@ X_legal_vif_num(int vif) * Return the local address used by this vif */ static u_long -X_ip_mcast_src(int vifi) +X_ip_mcast_src(int fibnum, int vifi) { + struct mfctable *mfct; in_addr_t addr; addr = INADDR_ANY; if (vifi < 0) return (addr); + mfct = &V_mfctables[fibnum]; MRW_RLOCK(); - if (vifi < V_mfctables[0].numvifs) - addr = V_mfctables[0].viftable[vifi].v_lcl_addr.s_addr; + if (vifi < mfct->numvifs) + addr = mfct->viftable[vifi].v_lcl_addr.s_addr; MRW_RUNLOCK(); return (addr); @@ -1838,8 +1855,6 @@ send_packet(struct vif *vifp, struct mbuf *m) * the loopback interface, thus preventing looping. */ error = ip_output(m, NULL, NULL, IP_FORWARDING, &imo, NULL); - CTR3(KTR_IPMF, "%s: vif %td err %d", __func__, - (ptrdiff_t)(vifp - V_mfctables[0].viftable), error); } /* @@ -1945,9 +1960,8 @@ expire_bw_meter_leq(void *arg) * Add a bw_meter entry */ static int -add_bw_upcall(struct bw_upcall *req) +add_bw_upcall(struct mfctable *mfct, struct bw_upcall *req) { - struct mfctable *mfct; struct mfc *mfc; struct timeval delta = { BW_UPCALL_THRESHOLD_INTERVAL_MIN_SEC, BW_UPCALL_THRESHOLD_INTERVAL_MIN_USEC }; @@ -1955,8 +1969,6 @@ add_bw_upcall(struct bw_upcall *req) struct bw_meter *x, **bwm_ptr; uint32_t flags; - mfct = &V_mfctables[0]; - if (!(mfct->api_config & MRT_MFC_BW_UPCALL)) return EOPNOTSUPP; @@ -1978,7 +1990,7 @@ add_bw_upcall(struct bw_upcall *req) * Find if we have already same bw_meter entry */ MRW_WLOCK(); - mfc = mfc_find(&V_mfctables[0], &req->bu_src, &req->bu_dst); + mfc = mfc_find(mfct, &req->bu_src, &req->bu_dst); if (mfc == NULL) { MRW_WUNLOCK(); return EADDRNOTAVAIL; @@ -2022,6 +2034,7 @@ add_bw_upcall(struct bw_upcall *req) x->bm_flags = flags; x->bm_time_next = NULL; x->bm_mfc = mfc; + x->bm_mfctable = mfct; x->arg = curvnet; sprintf(x->bm_mtx_name, "BM mtx %p", x); mtx_init(&x->bm_mtx, x->bm_mtx_name, NULL, MTX_DEF); @@ -2063,14 +2076,11 @@ free_bw_list(struct bw_meter *list) * Delete one or multiple bw_meter entries */ static int -del_bw_upcall(struct bw_upcall *req) +del_bw_upcall(struct mfctable *mfct, struct bw_upcall *req) { - struct mfctable *mfct; struct mfc *mfc; struct bw_meter *x, **bwm_ptr; - mfct = &V_mfctables[0]; - if (!(mfct->api_config & MRT_MFC_BW_UPCALL)) return EOPNOTSUPP; @@ -2191,14 +2201,11 @@ bw_meter_geq_receive_packet(struct bw_meter *x, int plen, struct timeval *nowp) static void bw_meter_prepare_upcall(struct bw_meter *x, struct timeval *nowp) { - struct mfctable *mfct; struct timeval delta; struct bw_upcall *u; MRW_LOCK_ASSERT(); - mfct = &V_mfctables[0]; - /* * Compute the measured time interval */ @@ -2231,9 +2238,9 @@ bw_meter_prepare_upcall(struct bw_meter *x, struct timeval *nowp) if (x->bm_flags & BW_METER_LEQ) u->bu_flags |= BW_UPCALL_LEQ; - if (buf_ring_enqueue(mfct->bw_upcalls, u)) + if (buf_ring_enqueue(x->bm_mfctable->bw_upcalls, u)) log(LOG_WARNING, "bw_meter_prepare_upcall: cannot enqueue upcall\n"); - if (buf_ring_count(mfct->bw_upcalls) > (BW_UPCALLS_MAX / 2)) { + if (buf_ring_count(x->bm_mfctable->bw_upcalls) > (BW_UPCALLS_MAX / 2)) { taskqueue_enqueue(V_task_queue, &V_task); } } @@ -2241,9 +2248,8 @@ bw_meter_prepare_upcall(struct bw_meter *x, struct timeval *nowp) * Send the pending bandwidth-related upcalls */ static void -bw_upcalls_send(void) +bw_upcalls_send(struct mfctable *mfct) { - struct mfctable *mfct; struct mbuf *m; int len = 0; struct bw_upcall *bu; @@ -2259,8 +2265,6 @@ bw_upcalls_send(void) { 0 } /* im_dst */ }; - mfct = &V_mfctables[0]; - MRW_LOCK_ASSERT(); if (buf_ring_empty(mfct->bw_upcalls)) @@ -2295,6 +2299,18 @@ bw_upcalls_send(void) } } +static void +bw_upcalls_send_all(void) +{ + for (int i = 0; i < V_nmfctables; i++) { + struct mfctable *mfct; + + mfct = &V_mfctables[i]; + if (mfct->router != NULL) + bw_upcalls_send(mfct); + } +} + /* * A periodic function for sending all upcalls that are pending delivery */ @@ -2305,7 +2321,7 @@ expire_bw_upcalls_send(void *arg) /* This callout is run with MRW_RLOCK taken */ - bw_upcalls_send(); + bw_upcalls_send_all(); callout_reset(&V_bw_upcalls_ch, BW_UPCALLS_PERIOD, expire_bw_upcalls_send, curvnet); @@ -2350,9 +2366,10 @@ pim_register_send(struct mfctable *mfct, struct ip *ip, struct vif *vifp, ip = mtod(mm, struct ip *); if ((mfct->api_config & MRT_MFC_RP) && !in_nullhost(rt->mfc_rp)) { - pim_register_send_rp(ip, vifp, mm, rt); + pim_register_send_rp(mfct, ip, vifp, mm, rt); } else { - pim_register_send_upcall(ip, vifp, mm, rt); + pim_register_send_upcall(mfct, ip, vifp, mm, + rt); } } } @@ -2414,10 +2431,9 @@ pim_register_prepare(struct ip *ip, struct mbuf *m) * Send an upcall with the data packet to the user-level process. */ static int -pim_register_send_upcall(struct ip *ip, struct vif *vifp, +pim_register_send_upcall(struct mfctable *mfct, struct ip *ip, struct vif *vifp, struct mbuf *mb_copy, struct mfc *rt) { - struct mfctable *mfct; struct mbuf *mb_first; int len = ntohs(ip->ip_len); struct igmpmsg *im; @@ -2425,8 +2441,6 @@ pim_register_send_upcall(struct ip *ip, struct vif *vifp, MRW_LOCK_ASSERT(); - mfct = &V_mfctables[0]; - /* * Add a new mbuf with an upcall header */ @@ -2469,10 +2483,9 @@ pim_register_send_upcall(struct ip *ip, struct vif *vifp, * Encapsulate the data packet in PIM Register message and send it to the RP. */ static int -pim_register_send_rp(struct ip *ip, struct vif *vifp, struct mbuf *mb_copy, - struct mfc *rt) +pim_register_send_rp(struct mfctable *mfct, struct ip *ip, struct vif *vifp, + struct mbuf *mb_copy, struct mfc *rt) { - struct mfctable *mfct; struct mbuf *mb_first; struct ip *ip_outer; struct pim_encap_pimhdr *pimhdr; @@ -2481,7 +2494,6 @@ pim_register_send_rp(struct ip *ip, struct vif *vifp, struct mbuf *mb_copy, MRW_LOCK_ASSERT(); - mfct = &V_mfctables[0]; if (vifi >= mfct->numvifs || in_nullhost(mfct->viftable[vifi].v_lcl_addr)) { m_freem(mb_copy); @@ -2572,7 +2584,7 @@ pim_input(struct mbuf *m, int off, int proto, void *arg __unused) int datalen = ntohs(ip->ip_len) - iphlen; int ip_tos; - mfct = &V_mfctables[0]; + mfct = &V_mfctables[M_GETFIB(m)]; /* Keep statistics */ PIMSTAT_INC(pims_rcv_total_msgs); @@ -2789,7 +2801,7 @@ sysctl_mfctable(SYSCTL_HANDLER_ARGS) if (req->newptr) return (EPERM); - mfct = &V_mfctables[0]; + mfct = &V_mfctables[curthread->td_proc->p_fibnum]; if (mfct->mfchashtbl == NULL) /* XXX unlocked */ return (0); error = sysctl_wire_old_buffer(req, 0); @@ -2828,7 +2840,7 @@ sysctl_viflist(SYSCTL_HANDLER_ARGS) if (error) return (error); - mfct = &V_mfctables[0]; + mfct = &V_mfctables[curthread->td_proc->p_fibnum]; MRW_RLOCK(); /* Copy out user-visible portion of vif entry. */ for (i = 0; i < MAXVIFS; i++) { @@ -2909,6 +2921,9 @@ vnet_mroute_uninit(const void *unused __unused) free(mfct->nexpire, M_MRTABLE); } free(V_mfctables, M_MRTABLE); + + callout_drain(&V_expire_upcalls_ch); + callout_drain(&V_bw_upcalls_ch); } VNET_SYSUNINIT(vnet_mroute_uninit, SI_SUB_PROTO_MC, SI_ORDER_MIDDLE, vnet_mroute_uninit, NULL); diff --git a/sys/netinet/ip_mroute.h b/sys/netinet/ip_mroute.h index 5c2527ea64e5..d7e53b678474 100644 --- a/sys/netinet/ip_mroute.h +++ b/sys/netinet/ip_mroute.h @@ -348,6 +348,7 @@ struct bw_meter { struct bw_data bm_measured; /* the measured bw */ struct timeval bm_start_time; /* abs. time */ #ifdef _KERNEL + struct mfctable *bm_mfctable; /* Routing table */ struct callout bm_meter_callout; /* Periodic callout */ void* arg; /* custom argument */ struct mtx bm_mtx; /* meter lock */ @@ -366,7 +367,7 @@ struct mbuf; struct socket; struct sockopt; -extern u_long (*ip_mcast_src)(int); +extern u_long (*ip_mcast_src)(int, int); extern int (*ip_mforward)(struct ip *, struct ifnet *, struct mbuf *, struct ip_moptions *); extern void (*ip_mrouter_done)(struct socket *); @@ -376,7 +377,7 @@ extern int (*ip_mrouter_set)(struct socket *, struct sockopt *); extern void (*ip_rsvp_force_done)(struct socket *); extern int (*ip_rsvp_vif)(struct socket *, struct sockopt *); -extern int (*legal_vif_num)(int); +extern int (*legal_vif_num)(int, int); extern int (*mrt_ioctl)(u_long, caddr_t, int); extern int (*rsvp_input_p)(struct mbuf **, int *, int); #endif /* _KERNEL */ diff --git a/sys/netinet/ip_output.c b/sys/netinet/ip_output.c index 9431d5f0d7b2..200f281f34a7 100644 --- a/sys/netinet/ip_output.c +++ b/sys/netinet/ip_output.c @@ -561,12 +561,13 @@ again: * See if the caller provided any multicast options */ if (imo != NULL) { + int vif; + + vif = imo->imo_multicast_vif; ip->ip_ttl = imo->imo_multicast_ttl; - if (imo->imo_multicast_vif != -1) - ip->ip_src.s_addr = - ip_mcast_src ? - ip_mcast_src(imo->imo_multicast_vif) : - INADDR_ANY; + if (vif != -1) + ip->ip_src.s_addr = ip_mcast_src ? + ip_mcast_src(fibnum, vif) : INADDR_ANY; } else ip->ip_ttl = IP_DEFAULT_MULTICAST_TTL; /* diff --git a/sys/netinet/raw_ip.c b/sys/netinet/raw_ip.c index 9b17d0d80327..a8a4fc1df9e2 100644 --- a/sys/netinet/raw_ip.c +++ b/sys/netinet/raw_ip.c @@ -118,8 +118,8 @@ void (*ip_mrouter_done)(struct socket *); int (*ip_mforward)(struct ip *, struct ifnet *, struct mbuf *, struct ip_moptions *); int (*mrt_ioctl)(u_long, caddr_t, int); -int (*legal_vif_num)(int); -u_long (*ip_mcast_src)(int); +int (*legal_vif_num)(int, int); +u_long (*ip_mcast_src)(int, int); int (*rsvp_input_p)(struct mbuf **, int *, int); int (*ip_rsvp_vif)(struct socket *, struct sockopt *); From nobody Mon Mar 30 16:15:41 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 4fkxDs4Mh1z6WjB0 for ; Mon, 30 Mar 2026 16:15:41 +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 4fkxDs2Y4Pz49pc for ; Mon, 30 Mar 2026 16:15:41 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774887341; 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=kq9hTY49LSY+OSCs3FFnIt9YE/HtUaJXP9xjI4lX94I=; b=mdxZYOvrbGTp0TwkuAlnYuF7uVk3oxWGhgjLnzTGkVNPuATopqksRmY0MB8wUqq2i0WsNM cH6YzqTpfRoNIPQRZiSXeBCcTiEdj0r3WZxPPXz6pPsWnzD70Xxcbx5oy6Btomm2LKOZEp HV51279eV5qoUpDUhQbOIkLvtZAPlXc9z7mrUrvHxRPZtJHsNkgX+4oEIaNRzFJp09vzfQ /PRyCGCiQVvrSC3eOpkSoeFsTqTIZm0FzMtPV+rU3T86AjrY4+7KL05pjEnocsW5VMDK2b Yg6xMh4jeqGceueDEj5as2n857fyalVJy5TNEJDyRuPQOaYQ+OrWmcwhloHb1Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774887341; a=rsa-sha256; cv=none; b=TjjcE4hZJSeEsESG/i65ZKAC+G/okn1MgFRiMWTyrEEIAC/BaiQirX7xPxif5mZ+zBbR/d lVvKXU6GvclP9amJ7SswfEbsG5hCKWGhbHwd6T9Yg8mJe2dirSLjD9BgXXe7gFkFrSnCf/ U5E+AXnUtyse9Yb1RY6UMIXaR898CWkZP6kKJMkn2eMM+MSS3W1bitR+nufwTTfJphObnT Q0cvKvkGe+NCjb/NanJbms/Kec9sgRRl2f7ImemVA+x3IsF7rzcgcYcB2nXykg3dKhNqmf Y1ardIvMjubFgJSXfV6OZw2+g0O7cn6D2IxzUmQ59/+W04fwkD+k8g+h/t+p6w== 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=1774887341; 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=kq9hTY49LSY+OSCs3FFnIt9YE/HtUaJXP9xjI4lX94I=; b=aiNxnUM3Lzmiq9oOnhDz8yC0g6lQWZutCkH22u3WGTDFcX+l0IcYYR3KHRNFt/VYGGyBLI v2S+28aBltlDBB/d3gzYz6I17tKTXln/bCnPZ07MxbizmYf9LfwEER0uzd+SYdf5XGZhIr PLA3B1NctgfqyQBlNvARMEvSK70y9TBhsMhuHaZlojWLXeKffKHmoUmaNJ+Hq6P10PNtkP aXJxJTw4BfdgEom9dwvKFA1JLWIE9nTtlWUTG5RLYcAECcS4kXOaPEKL9MeTHyZ4ihhbKG 0Ai8q55El1pz/O0zD9/8jvuETafXp/V7ySbeV2c/46MHFbOS5m7qKnG9yoTagQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkxDs25nJzqtl for ; Mon, 30 Mar 2026 16:15:41 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3c307 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 16:15:41 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 0bb9c2b665d9 - main - ip6_mroute: FIBify 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0bb9c2b665d90934ae16eee152b6b4f4f4be0dd5 Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 16:15:41 +0000 Message-Id: <69caa1ad.3c307.55d18a69@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=0bb9c2b665d90934ae16eee152b6b4f4f4be0dd5 commit 0bb9c2b665d90934ae16eee152b6b4f4f4be0dd5 Author: Mark Johnston AuthorDate: 2026-03-30 13:31:55 +0000 Commit: Mark Johnston CommitDate: 2026-03-30 16:08:21 +0000 ip6_mroute: FIBify Modify the control plane (ioctl and socket option handlers) to use the routing socket FIB to index into the mfctable array. Modify the forwarding plane to use the mbuf's FIB to determine which routing table to use. MFC after: 2 weeks Sponsored by: Stormshield Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D55242 --- sys/netinet6/in6.c | 17 +++--- sys/netinet6/ip6_mroute.c | 131 +++++++++++++++++++++++++++------------------- sys/netinet6/ip6_mroute.h | 2 +- sys/netinet6/raw_ip6.c | 2 +- 4 files changed, 85 insertions(+), 67 deletions(-) diff --git a/sys/netinet6/in6.c b/sys/netinet6/in6.c index eb6c327de76f..cf2720cac036 100644 --- a/sys/netinet6/in6.c +++ b/sys/netinet6/in6.c @@ -279,17 +279,6 @@ in6_control_ioctl(u_long cmd, void *data, ifra->ifra_vhid = 0; } - switch (cmd) { - case SIOCGETSGCNT_IN6: - case SIOCGETMIFCNT_IN6: - /* - * XXX mrt_ioctl has a 3rd, unused, FIB argument in route.c. - * We cannot see how that would be needed, so do not adjust the - * KPI blindly; more likely should clean up the IPv4 variant. - */ - return (mrt6_ioctl ? mrt6_ioctl(cmd, data) : EOPNOTSUPP); - } - switch (cmd) { case SIOCAADDRCTL_POLICY: case SIOCDADDRCTL_POLICY: @@ -615,6 +604,12 @@ int in6_control(struct socket *so, u_long cmd, void *data, struct ifnet *ifp, struct thread *td) { + switch (cmd) { + case SIOCGETSGCNT_IN6: + case SIOCGETMIFCNT_IN6: + return (mrt6_ioctl ? + mrt6_ioctl(cmd, data, so->so_fibnum) : EOPNOTSUPP); + } return (in6_control_ioctl(cmd, data, ifp, td ? td->td_ucred : NULL)); } diff --git a/sys/netinet6/ip6_mroute.c b/sys/netinet6/ip6_mroute.c index fff68a7ff47d..52fd319ba4f4 100644 --- a/sys/netinet6/ip6_mroute.c +++ b/sys/netinet6/ip6_mroute.c @@ -216,8 +216,11 @@ static eventhandler_tag rtnumfibs_change_tag; static int sysctl_mfctable(SYSCTL_HANDLER_ARGS) { - return (SYSCTL_OUT(req, &V_mfctables[0].mfchashtbl, - sizeof(V_mfctables[0].mfchashtbl))); + int fibnum; + + fibnum = curthread->td_proc->p_fibnum; + return (SYSCTL_OUT(req, &V_mfctables[fibnum].mfchashtbl, + sizeof(struct mfc6c *) * MF6CTBLSIZ)); } SYSCTL_PROC(_net_inet6_ip6, OID_AUTO, mf6ctable, CTLTYPE_OPAQUE | CTLFLAG_RD, @@ -229,13 +232,15 @@ static int sysctl_mif6table(SYSCTL_HANDLER_ARGS) { struct mif6_sctl *out; + struct mf6ctable *mfct; int error; + mfct = &V_mfctables[curthread->td_proc->p_fibnum]; out = malloc(sizeof(struct mif6_sctl) * MAXMIFS, M_TEMP, M_WAITOK | M_ZERO); for (int i = 0; i < MAXMIFS; i++) { struct mif6_sctl *outp = &out[i]; - struct mif6 *mifp = &V_mfctables[0].miftable[i]; + struct mif6 *mifp = &mfct->miftable[i]; outp->m6_flags = mifp->m6_flags; outp->m6_rate_limit = mifp->m6_rate_limit; @@ -287,7 +292,8 @@ VNET_DEFINE_STATIC(u_int, mrt6debug) = 0; /* debug level */ #define MRT6_DLOG(m, fmt, ...) #endif -static void expire_upcalls(void *); +static void expire_upcalls(struct mf6ctable *); +static void expire_upcalls_all(void *); #define EXPIRE_TIMEOUT (hz / 4) /* 4x / second */ #define UPCALL_EXPIRE 6 /* number of timeouts */ @@ -342,13 +348,13 @@ static void collate(struct timeval *); #endif /* UPCALL_TIMING */ static int ip6_mrouter_init(struct socket *, int, int); -static int add_m6fc(struct mf6cctl *); -static int add_m6if(struct mif6ctl *); -static int del_m6fc(struct mf6cctl *); -static int del_m6if(mifi_t *); -static int del_m6if_locked(mifi_t *); -static int get_mif6_cnt(struct sioc_mif_req6 *); -static int get_sg_cnt(struct sioc_sg_req6 *); +static int add_m6fc(struct mf6ctable *, struct mf6cctl *); +static int add_m6if(struct mf6ctable *, int, struct mif6ctl *); +static int del_m6fc(struct mf6ctable *, struct mf6cctl *); +static int del_m6if(struct mf6ctable *, mifi_t *); +static int del_m6if_locked(struct mf6ctable *, mifi_t *); +static int get_mif6_cnt(struct mf6ctable *, struct sioc_mif_req6 *); +static int get_sg_cnt(struct mf6ctable *, struct sioc_sg_req6 *); VNET_DEFINE_STATIC(struct callout, expire_upcalls_ch); #define V_expire_upcalls_ch VNET(expire_upcalls_ch) @@ -357,7 +363,7 @@ static int X_ip6_mforward(struct ip6_hdr *, struct ifnet *, struct mbuf *); static void X_ip6_mrouter_done(struct socket *); static int X_ip6_mrouter_set(struct socket *, struct sockopt *); static int X_ip6_mrouter_get(struct socket *, struct sockopt *); -static int X_mrt6_ioctl(u_long, caddr_t); +static int X_mrt6_ioctl(u_long, caddr_t, int); static struct mf6c * mf6c_find(const struct mf6ctable *mfct, const struct in6_addr *origin, @@ -376,6 +382,17 @@ mf6c_find(const struct mf6ctable *mfct, const struct in6_addr *origin, return (NULL); } +static struct mf6ctable * +somfctable(struct socket *so) +{ + int fib; + + fib = atomic_load_int(&so->so_fibnum); + KASSERT(fib >= 0 && fib < V_nmfctables, + ("%s: so_fibnum %d out of range", __func__, fib)); + return (&V_mfctables[fib]); +} + /* * Handle MRT setsockopt commands to modify the multicast routing tables. */ @@ -389,7 +406,7 @@ X_ip6_mrouter_set(struct socket *so, struct sockopt *sopt) struct mf6cctl mfcc; mifi_t mifi; - mfct = &V_mfctables[0]; + mfct = somfctable(so); if (so != mfct->router && sopt->sopt_name != MRT6_INIT) return (EPERM); @@ -411,25 +428,25 @@ X_ip6_mrouter_set(struct socket *so, struct sockopt *sopt) error = sooptcopyin(sopt, &mifc, sizeof(mifc), sizeof(mifc)); if (error) break; - error = add_m6if(&mifc); + error = add_m6if(mfct, so->so_fibnum, &mifc); break; case MRT6_ADD_MFC: error = sooptcopyin(sopt, &mfcc, sizeof(mfcc), sizeof(mfcc)); if (error) break; - error = add_m6fc(&mfcc); + error = add_m6fc(mfct, &mfcc); break; case MRT6_DEL_MFC: error = sooptcopyin(sopt, &mfcc, sizeof(mfcc), sizeof(mfcc)); if (error) break; - error = del_m6fc(&mfcc); + error = del_m6fc(mfct, &mfcc); break; case MRT6_DEL_MIF: error = sooptcopyin(sopt, &mifi, sizeof(mifi), sizeof(mifi)); if (error) break; - error = del_m6if(&mifi); + error = del_m6if(mfct, &mifi); break; case MRT6_PIM: error = sooptcopyin(sopt, &optval, sizeof(optval), @@ -455,7 +472,7 @@ X_ip6_mrouter_get(struct socket *so, struct sockopt *sopt) struct mf6ctable *mfct; int error = 0; - mfct = &V_mfctables[0]; + mfct = somfctable(so); if (so != mfct->router) return (EACCES); @@ -471,24 +488,27 @@ X_ip6_mrouter_get(struct socket *so, struct sockopt *sopt) * Handle ioctl commands to obtain information from the cache */ static int -X_mrt6_ioctl(u_long cmd, caddr_t data) +X_mrt6_ioctl(u_long cmd, caddr_t data, int fibnum) { + struct mf6ctable *mfct; int error; error = priv_check(curthread, PRIV_NETINET_MROUTE); if (error) return (error); - error = EINVAL; + + mfct = &V_mfctables[fibnum]; switch (cmd) { case SIOCGETSGCNT_IN6: - error = get_sg_cnt((struct sioc_sg_req6 *)data); + error = get_sg_cnt(mfct, (struct sioc_sg_req6 *)data); break; case SIOCGETMIFCNT_IN6: - error = get_mif6_cnt((struct sioc_mif_req6 *)data); + error = get_mif6_cnt(mfct, (struct sioc_mif_req6 *)data); break; default: + error = EINVAL; break; } @@ -499,7 +519,7 @@ X_mrt6_ioctl(u_long cmd, caddr_t data) * returns the packet, byte, rpf-failure count for the source group provided */ static int -get_sg_cnt(struct sioc_sg_req6 *req) +get_sg_cnt(struct mf6ctable *mfct, struct sioc_sg_req6 *req) { struct mf6c *rt; int ret; @@ -507,8 +527,7 @@ get_sg_cnt(struct sioc_sg_req6 *req) ret = 0; MFC6_LOCK(); - rt = mf6c_find(&V_mfctables[0], &req->src.sin6_addr, - &req->grp.sin6_addr); + rt = mf6c_find(mfct, &req->src.sin6_addr, &req->grp.sin6_addr); if (rt == NULL) { ret = ESRCH; } else { @@ -525,16 +544,14 @@ get_sg_cnt(struct sioc_sg_req6 *req) * returns the input and output packet and byte counts on the mif provided */ static int -get_mif6_cnt(struct sioc_mif_req6 *req) +get_mif6_cnt(struct mf6ctable *mfct, struct sioc_mif_req6 *req) { - struct mf6ctable *mfct; mifi_t mifi; int ret; ret = 0; mifi = req->mifi; - mfct = &V_mfctables[0]; MIF6_LOCK(); if (mifi >= mfct->nummifs) { @@ -559,6 +576,7 @@ set_pim6(int *i) if ((*i != 1) && (*i != 0)) return (EINVAL); + /* XXX-MJ */ V_pim6 = *i; return (0); @@ -577,7 +595,7 @@ ip6_mrouter_init(struct socket *so, int v, int cmd) if (v != 1) return (ENOPROTOOPT); - mfct = &V_mfctables[0]; + mfct = somfctable(so); MROUTER6_LOCK(); if (mfct->router != NULL) { @@ -595,7 +613,7 @@ ip6_mrouter_init(struct socket *so, int v, int cmd) V_pim6 = 0;/* used for stubbing out/in pim stuff */ - callout_reset(&V_expire_upcalls_ch, EXPIRE_TIMEOUT, expire_upcalls, + callout_reset(&V_expire_upcalls_ch, EXPIRE_TIMEOUT, expire_upcalls_all, curvnet); MFC6_UNLOCK(); @@ -618,7 +636,7 @@ X_ip6_mrouter_done(struct socket *so) struct mf6c *rt; struct rtdetq *rte; - mfct = &V_mfctables[0]; + mfct = somfctable(so); MROUTER6_LOCK(); if (mfct->router != so) { @@ -690,9 +708,8 @@ static struct sockaddr_in6 sin6 = { sizeof(sin6), AF_INET6 }; * Add a mif to the mif table */ static int -add_m6if(struct mif6ctl *mifcp) +add_m6if(struct mf6ctable *mfct, int fibnum, struct mif6ctl *mifcp) { - struct mf6ctable *mfct; struct epoch_tracker et; struct mif6 *mifp; struct ifnet *ifp; @@ -704,7 +721,6 @@ add_m6if(struct mif6ctl *mifcp) MIF6_UNLOCK(); return (EINVAL); } - mfct = &V_mfctables[0]; mifp = &mfct->miftable[mifcp->mif6c_mifi]; if (mifp->m6_ifp != NULL) { MIF6_UNLOCK(); @@ -743,6 +759,10 @@ add_m6if(struct mif6ctl *mifcp) MIF6_UNLOCK(); return (EOPNOTSUPP); } + if (ifp->if_fib != fibnum) { + MIF6_UNLOCK(); + return (EADDRNOTAVAIL); + } error = if_allmulti(ifp, 1); if (error) { @@ -775,16 +795,14 @@ add_m6if(struct mif6ctl *mifcp) * Delete a mif from the mif table */ static int -del_m6if_locked(mifi_t *mifip) +del_m6if_locked(struct mf6ctable *mfct, mifi_t *mifip) { - struct mf6ctable *mfct; struct mif6 *mifp; mifi_t mifi; struct ifnet *ifp; MIF6_LOCK_ASSERT(); - mfct = &V_mfctables[0]; if (*mifip >= mfct->nummifs) return (EINVAL); mifp = &mfct->miftable[*mifip]; @@ -818,12 +836,12 @@ del_m6if_locked(mifi_t *mifip) } static int -del_m6if(mifi_t *mifip) +del_m6if(struct mf6ctable *mfct, mifi_t *mifip) { int cc; MIF6_LOCK(); - cc = del_m6if_locked(mifip); + cc = del_m6if_locked(mfct, mifip); MIF6_UNLOCK(); return (cc); @@ -833,17 +851,14 @@ del_m6if(mifi_t *mifip) * Add an mfc entry */ static int -add_m6fc(struct mf6cctl *mfccp) +add_m6fc(struct mf6ctable *mfct, struct mf6cctl *mfccp) { - struct mf6ctable *mfct; struct mf6c *rt; u_long hash; struct rtdetq *rte; u_short nstl; char ip6bufo[INET6_ADDRSTRLEN], ip6bufg[INET6_ADDRSTRLEN]; - mfct = &V_mfctables[0]; - MFC6_LOCK(); rt = mf6c_find(mfct, &mfccp->mf6cc_origin.sin6_addr, &mfccp->mf6cc_mcastgrp.sin6_addr); @@ -1004,19 +1019,17 @@ collate(struct timeval *t) * Delete an mfc entry */ static int -del_m6fc(struct mf6cctl *mfccp) +del_m6fc(struct mf6ctable *mfct, struct mf6cctl *mfccp) { #ifdef MRT6DEBUG char ip6bufo[INET6_ADDRSTRLEN], ip6bufg[INET6_ADDRSTRLEN]; #endif - struct mf6ctable *mfct; struct sockaddr_in6 origin; struct sockaddr_in6 mcastgrp; struct mf6c *rt; struct mf6c **nptr; u_long hash; - mfct = &V_mfctables[0]; origin = mfccp->mf6cc_origin; mcastgrp = mfccp->mf6cc_mcastgrp; hash = MF6CHASH(origin.sin6_addr, mcastgrp.sin6_addr); @@ -1139,7 +1152,7 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m) return (0); } - mfct = &V_mfctables[0]; + mfct = &V_mfctables[M_GETFIB(m)]; MFC6_LOCK(); /* @@ -1331,20 +1344,17 @@ X_ip6_mforward(struct ip6_hdr *ip6, struct ifnet *ifp, struct mbuf *m) * Call from the Slow Timeout mechanism, every half second. */ static void -expire_upcalls(void *arg) +expire_upcalls(struct mf6ctable *mfct) { #ifdef MRT6DEBUG char ip6bufo[INET6_ADDRSTRLEN], ip6bufg[INET6_ADDRSTRLEN]; #endif - struct mf6ctable *mfct; struct rtdetq *rte; struct mf6c *mfc, **nptr; u_long i; MFC6_LOCK_ASSERT(); - CURVNET_SET((struct vnet *)arg); - mfct = &V_mfctables[0]; for (i = 0; i < MF6CTBLSIZ; i++) { if (mfct->nexpire[i] == 0) continue; @@ -1382,8 +1392,21 @@ expire_upcalls(void *arg) } } } - callout_reset(&V_expire_upcalls_ch, EXPIRE_TIMEOUT, - expire_upcalls, curvnet); +} + +/* + * Clean up the cache entry if upcall is not serviced + */ +static void +expire_upcalls_all(void *arg) +{ + CURVNET_SET((struct vnet *)arg); + + for (int i = 0; i < V_nmfctables; i++) + expire_upcalls(&V_mfctables[i]); + + callout_reset(&V_expire_upcalls_ch, EXPIRE_TIMEOUT, expire_upcalls_all, + curvnet); CURVNET_RESTORE(); } @@ -1753,7 +1776,7 @@ pim6_input(struct mbuf *m, int off, int proto, void *arg __unused) int pimlen; int minlen; - mfct = &V_mfctables[0]; + mfct = &V_mfctables[M_GETFIB(m)]; PIM6STAT_INC(pim6s_rcv_total); diff --git a/sys/netinet6/ip6_mroute.h b/sys/netinet6/ip6_mroute.h index fda8c4308e86..c8388c3836bb 100644 --- a/sys/netinet6/ip6_mroute.h +++ b/sys/netinet6/ip6_mroute.h @@ -288,7 +288,7 @@ extern int (*ip6_mrouter_set)(struct socket *so, struct sockopt *sopt); extern int (*ip6_mrouter_get)(struct socket *so, struct sockopt *sopt); extern void (*ip6_mrouter_done)(struct socket *so); -extern int (*mrt6_ioctl)(u_long, caddr_t); +extern int (*mrt6_ioctl)(u_long, caddr_t, int); #endif /* _KERNEL */ #endif /* !_NETINET6_IP6_MROUTE_H_ */ diff --git a/sys/netinet6/raw_ip6.c b/sys/netinet6/raw_ip6.c index 9e51005d7c2e..a92035831c6c 100644 --- a/sys/netinet6/raw_ip6.c +++ b/sys/netinet6/raw_ip6.c @@ -145,7 +145,7 @@ int (*ip6_mrouter_set)(struct socket *, struct sockopt *); int (*ip6_mrouter_get)(struct socket *, struct sockopt *); void (*ip6_mrouter_done)(struct socket *); int (*ip6_mforward)(struct ip6_hdr *, struct ifnet *, struct mbuf *); -int (*mrt6_ioctl)(u_long, caddr_t); +int (*mrt6_ioctl)(u_long, caddr_t, int); struct rip6_inp_match_ctx { struct ip6_hdr *ip6; From nobody Mon Mar 30 16:15:42 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 4fkxDt6QN1z6WyXc for ; Mon, 30 Mar 2026 16:15:42 +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 4fkxDt3PzTz4B1Q for ; Mon, 30 Mar 2026 16:15:42 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774887342; 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=XEz7d73ucQk9d8jcKKu24XOX68wUaXJLECF85QALbEk=; b=s2ePrrfPpoUJxGnOlLO95esA7EOMIeN0BRoFd5K+aajV7wpfhiFtJTg5rM8aIGeE1JnnWg WdSWVSVtcBTx7mvbf/V/OuQGohjTaWjGCEnGItFHMzOBSFWcjNvnwvSJdmGFeWThAbA6XP 2FVaSOVvvX6FeSr7NXOGGgN8tpeFZNf9qorY11QUBgFYCIG3H+Ll1aIC6+hbWovbasQ4jK p4Th4qmxxiNsd0VFRYtaMxWsM+Zv3vgn3Maz7952vEkvmKPLWA05y5Cva2QtyjFoCGQMur 5M5uqcSeKfKx8hGspLoTdgoZicta7Vubf55mOXhm3cDGJPec+gvtfWtLzZPuRg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774887342; a=rsa-sha256; cv=none; b=gQMMt3W+KfIL/aCHxVcUQEHtnjZ471Qpspm2bTvyxsqDCAPapUfDPiN3xCRx4k9SCuyyqg 8Ooe35+mfUprFC4IE/O5lj0EVjLWTruDrL0teeA6elNMin/ejNJnzus0mfFzBGrGX52U58 aJqz9fNwjega83VnFVuN7GWzW/7D8AMqCWu6fGYwZXdNn+xiKcxjIpLkM9EH+Naq41+VPL 2MRUi2JqJF1R+XJVZM+Ty0kxoxEf8eWTzP7tXebi2ppMWbIyp0VxlBJvPaCZMPjgMuZZtk yEFfNZHkpA1TSo4hslqUE0b7tPXaGLeLVTjPJ3I4RxcJGgW3ZzQWGtgjcjndUQ== 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=1774887342; 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=XEz7d73ucQk9d8jcKKu24XOX68wUaXJLECF85QALbEk=; b=eqjr6eyaTa9LsEH/Ghjg+Fd/8vew/x3HM2mwZJQBGzioA56oZxzqNzH4uxsBDlK9hzjrx8 T5NJX5HF73h2E+aLTqMnisPc1nnHVOHUOZwiI4hqi5WKEd91NX4hwJ0Na4lQifZseFX3Es mA0O+tMAUvve3LH5vMQf6V1XHG5zc5xuFjV8PJxM+fTOOlmMQVT6+OzYIYaLT5hVEpDlEm uzay3reWfafPHEWpwvr6tX+OzrbO6MLPCIR1aGZZMNrCOEtN5P3PhiCujZ3+SG5f5Tny5K uBBMZpqv/yTTre/b5rjmVRFXGBUqOA0Cu5UNPKy1V47woOaVCwS+0g6J45U+Pw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkxDt2tn7zqtn for ; Mon, 30 Mar 2026 16:15:42 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 39bbb by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 16:15:42 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: d4339cebbe8e - main - ip6_mroute: Make ip6_mroute.h more self-contained 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d4339cebbe8e0b26f92a74eb5d4d9a20403c2ad1 Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 16:15:42 +0000 Message-Id: <69caa1ae.39bbb.8e9a71e@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=d4339cebbe8e0b26f92a74eb5d4d9a20403c2ad1 commit d4339cebbe8e0b26f92a74eb5d4d9a20403c2ad1 Author: Mark Johnston AuthorDate: 2026-03-30 13:32:13 +0000 Commit: Mark Johnston CommitDate: 2026-03-30 16:08:21 +0000 ip6_mroute: Make ip6_mroute.h more self-contained MFC after: 2 weeks Sponsored by: Stormshield Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D55243 --- sys/netinet6/ip6_mroute.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sys/netinet6/ip6_mroute.h b/sys/netinet6/ip6_mroute.h index c8388c3836bb..8ae98678934b 100644 --- a/sys/netinet6/ip6_mroute.h +++ b/sys/netinet6/ip6_mroute.h @@ -48,6 +48,9 @@ #ifndef _NETINET6_IP6_MROUTE_H_ #define _NETINET6_IP6_MROUTE_H_ +#include +#include + /* * Multicast Routing set/getsockopt commands. */ From nobody Mon Mar 30 16:15:43 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 4fkxDv659Yz6Wyd8 for ; Mon, 30 Mar 2026 16:15:43 +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 4fkxDv4BHrz49vW for ; Mon, 30 Mar 2026 16:15:43 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774887343; 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=KllWILuUYQFjLq2DFuWT3ASMKiZtP7ihwfh0rmjtEgU=; b=uiGUIUhq0Tt6MVa2NW6M6Qb5LIXjBeniE+gXWy1T3/xOHV1pOqfXwe52teqOQ55aDEMRKb Npo2uz2GYt/krxOBcfkDQu7EGGdCVlKq093/NQ8+4faVDzgIWhHDMCIHUTahH3KWj6L17f RLCTPCcGddBzIxbvTgb+S8nJAPEy5tcpCYwrNn5CU9v6Cs8q+4pfPMzfxcPOHwtR1abFJK uaEKkJj53xUsx05Ipbp5owftxfrCGrMOQR+LwSzXZlntcQhUnvYCgdmFIr2AnVZ8FGiUVH 3eIkqgFJrS6tMibbCIygUgc4J2Nef5SyuJDThMaP//VXA5ZxhPIZuDuAwLVROw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774887343; a=rsa-sha256; cv=none; b=L/lWMQ6tFe5F41nrz7b+R4CuI8Txp6FOGImm4veN3oLs//B2gnNu3gI9dywi+pC4bcJHHq R6HIJwzcG9I+lzz0jaS531HiYh8/hTQyodIAyzag8YzstgtmqpKtCxbHyGKnSdyaOiQowF ARImpLkXPIw2CkmBIBuLovD1yDjJWm/NlEkInhuZeSLVb2CUyILajFSJUMcOV+X3QsQuke iLB7pvMIxWy15dWfh1v9OhkW4pTAvQdEZMJMJ1AbO+Yz9RDwEYry6e91Dj24FPcftlN1OO pcRSIn5aswRKW0udosZ4UnTAdstZVkcdZhnPtr5LItf+u/n2Ucf7TTVQCI5z1w== 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=1774887343; 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=KllWILuUYQFjLq2DFuWT3ASMKiZtP7ihwfh0rmjtEgU=; b=hKrnUpE1KeCeAU200zzHVt8DB9zfNNRzC2QKLM/A8sk7owbDZmygc1/41t6itLcocWDjX7 Ldax3jj5kNJlR2cqPyKCULkq8dc6xruk0gqw/GobN/BAQ246ZVrn5UCSSnkLLURTTxGjrH rtcvDAPU/1TxDly0lHsGBXtptPuC7XLW2djBtCARIwBVLtEeBpDKXxOCqUH+79qrbqBJC3 2RNJEOjvo/Nh4oa+YyoMM7GBdRfjTLgAweDRYs1Jca8ZAWGFn0eFFsEO4HEtasYPR00MIT S0AQ/h0J92wW2T+6nM3CxvLjVKlMpQccDk3asB3DdzB/b9oKNYsuJAEcIqupBQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkxDv3kZPzqwR for ; Mon, 30 Mar 2026 16:15:43 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3bdf7 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 16:15:43 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 09e702ad40af - main - tests: Add some simple regression tests for ip_mroute 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 09e702ad40af0067017613070b42d72cbc2bec3a Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 16:15:43 +0000 Message-Id: <69caa1af.3bdf7.24600de@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=09e702ad40af0067017613070b42d72cbc2bec3a commit 09e702ad40af0067017613070b42d72cbc2bec3a Author: Mark Johnston AuthorDate: 2026-03-30 13:32:35 +0000 Commit: Mark Johnston CommitDate: 2026-03-30 16:08:21 +0000 tests: Add some simple regression tests for ip_mroute These use atf_python to create a number of hosts linked to a router. The router runs pimd (for IPv4) or ip6_mrouter (simplistic IPv6 multicast router that I wrote since I couldn't find one in the ports tree). The vnet_host*_handler() methods are invoked in different VNET jails connected to the router; they register the connected epair with a multicast group and verify that they can send messages to each other. The tests are synchronized by sending messages over a unix domain socket. The flow is something like: 1) test startup_method() is called, the unix socket is created, 2) the superclass creates jails and links them together using the declared topology, 3) we wait for all child jails to start up and send a message on the unix socket indicating that they are ready 4) we start the routing daemon in the main jail, 5) the test actually starts; starttest() kicks off the vnet_host*_handlers(), which mostly just verify that they can send messages to each other using multicast packets 6) once they finish running, they signal their completion, and waittest() returns once they're all done There are two tests, repeated for v4 and v6. One just exchanges packets between two hosts, and the other has four hosts divided across two FIBs. MFC after: 2 weeks Sponsored by: Stormshield Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D55244 --- tests/sys/netinet/Makefile | 13 +- tests/sys/netinet/ip6_mrouted.c | 191 ++++++++++++++++++ tests/sys/netinet/ip_mroute.py | 428 ++++++++++++++++++++++++++++++++++++++++ tests/sys/netinet6/Makefile | 1 + 4 files changed, 629 insertions(+), 4 deletions(-) diff --git a/tests/sys/netinet/Makefile b/tests/sys/netinet/Makefile index 42906aa2dd93..a13b0b42e2bc 100644 --- a/tests/sys/netinet/Makefile +++ b/tests/sys/netinet/Makefile @@ -29,9 +29,10 @@ ATF_TESTS_SH= arp \ output \ redirect -ATF_TESTS_PYTEST+= carp.py -ATF_TESTS_PYTEST+= igmp.py -ATF_TESTS_PYTEST+= tcp_hpts_test.py +ATF_TESTS_PYTEST+= carp.py \ + igmp.py \ + ip_mroute.py \ + tcp_hpts_test.py LIBADD.so_reuseport_lb_test= pthread LIBADD.udp_bindings= pthread @@ -54,7 +55,11 @@ TEST_METADATA.raw+= execenv="jail" \ execenv_jail_params="vnet allow.raw_sockets" TEST_METADATA.redirect+= required_programs="python" -PROGS= udp_dontroute tcp_user_cookie multicast-send multicast-receive +PROGS= ip6_mrouted \ + multicast-send \ + multicast-receive \ + tcp_user_cookie \ + udp_dontroute ${PACKAGE}FILES+= redirect.py diff --git a/tests/sys/netinet/ip6_mrouted.c b/tests/sys/netinet/ip6_mrouted.c new file mode 100644 index 000000000000..f3df8330df10 --- /dev/null +++ b/tests/sys/netinet/ip6_mrouted.c @@ -0,0 +1,191 @@ +/* + * Copyright (c) 2026 Stormshield + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +/* + * A dead-simple IPv6 multicast routing daemon. It registers itself with the + * multicast routing code and then waits for messages from the kernel. Received + * messages are handled by installing multicast routes. + */ + +#include +#include +#include +#include + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +struct mif { + const char *name; + int mifi; + int pifi; + STAILQ_ENTRY(mif) next; +}; +static STAILQ_HEAD(, mif) miflist = STAILQ_HEAD_INITIALIZER(miflist); + +static void * +xmalloc(size_t size) +{ + void *ptr; + + ptr = malloc(size); + if (ptr == NULL) + err(1, "malloc"); + return (ptr); +} + +static void +usage(void) +{ + fprintf(stderr, + "usage: %s [-i ] [-m //]\n", + getprogname()); + exit(1); +} + +static void +add_route(int sd, const struct in6_addr *src, const struct in6_addr *group, + mifi_t mifi) +{ + struct mf6cctl mfcc; + struct mif *mif; + int error; + + memset(&mfcc, 0, sizeof(mfcc)); + mfcc.mf6cc_parent = mifi; + mfcc.mf6cc_origin.sin6_family = AF_INET6; + mfcc.mf6cc_origin.sin6_len = sizeof(struct sockaddr_in6); + mfcc.mf6cc_origin.sin6_addr = *src; + mfcc.mf6cc_mcastgrp.sin6_family = AF_INET6; + mfcc.mf6cc_mcastgrp.sin6_len = sizeof(struct sockaddr_in6); + mfcc.mf6cc_mcastgrp.sin6_addr = *group; + + STAILQ_FOREACH(mif, &miflist, next) { + if (mif->mifi != mifi) + IF_SET(mif->mifi, &mfcc.mf6cc_ifset); + } + + error = setsockopt(sd, IPPROTO_IPV6, MRT6_ADD_MFC, + &mfcc, sizeof(mfcc)); + if (error != 0) + err(1, "setsockopt(MRT6_ADD_MFC)"); +} + +static void +handle_upcalls(int sd) +{ + struct kevent ev; + int kq; + + kq = kqueue(); + if (kq < 0) + err(1, "kqueue"); + EV_SET(&ev, sd, EVFILT_READ, EV_ADD | EV_ENABLE, 0, 0, NULL); + if (kevent(kq, &ev, 1, NULL, 0, NULL) < 0) + err(1, "kevent"); + + for (;;) { + char buf1[INET6_ADDRSTRLEN], buf2[INET6_ADDRSTRLEN]; + struct mrt6msg msg; + ssize_t len; + int n; + + n = kevent(kq, NULL, 0, &ev, 1, NULL); + if (n < 0) { + if (errno == EINTR) + break; + err(1, "kevent"); + } + if (n == 0) + continue; + assert(n == 1); + assert(ev.filter == EVFILT_READ); + + len = recv(sd, &msg, sizeof(msg), 0); + if (len < 0) + err(1, "recv"); + if ((size_t)len < sizeof(msg)) { + warnx("short read on upcall, %zd bytes", len); + continue; + } + + printf("upcall received:\n"); + printf("msgtype=%d mif=%d src=%s dst=%s\n", + msg.im6_msgtype, msg.im6_mif, + inet_ntop(AF_INET6, &msg.im6_src, buf1, sizeof(buf1)), + inet_ntop(AF_INET6, &msg.im6_dst, buf2, sizeof(buf2))); + + add_route(sd, &msg.im6_src, &msg.im6_dst, msg.im6_mif); + } + + close(kq); +} + +int +main(int argc, char **argv) +{ + struct mif *mif; + int ch, error, mifi, sd, v; + + mifi = 0; + while ((ch = getopt(argc, argv, "i:m:")) != -1) { + switch (ch) { + case 'i': + mif = xmalloc(sizeof(*mif)); + mif->name = strdup(optarg); + mif->mifi = mifi++; + mif->pifi = if_nametoindex(optarg); + if (mif->pifi == 0) + errx(1, "unknown interface %s", optarg); + STAILQ_INSERT_TAIL(&miflist, mif, next); + break; + default: + usage(); + /* NOTREACHED */ + } + } + argc -= optind; + argv += optind; + + sd = socket(AF_INET6, SOCK_RAW, IPPROTO_ICMPV6); + if (sd < 0) + err(1, "socket"); + + v = 1; + error = setsockopt(sd, IPPROTO_IPV6, MRT6_INIT, &v, sizeof(v)); + if (error != 0) + err(1, "setsockopt(MRT6_INIT)"); + + STAILQ_FOREACH(mif, &miflist, next) { + struct mif6ctl mifc; + + mifc.mif6c_mifi = mif->mifi; + mifc.mif6c_pifi = mif->pifi; + mifc.mif6c_flags = 0; + error = setsockopt(sd, IPPROTO_IPV6, MRT6_ADD_MIF, + &mifc, sizeof(mifc)); + if (error != 0) + err(1, "setsockopt(MRT6_ADD_MIF) on %s", mif->name); + } + + handle_upcalls(sd); + + error = setsockopt(sd, IPPROTO_IPV6, MRT6_DONE, NULL, 0); + if (error != 0) + err(1, "setsockopt(MRT6_DONE)"); + + return (0); +} diff --git a/tests/sys/netinet/ip_mroute.py b/tests/sys/netinet/ip_mroute.py new file mode 100644 index 000000000000..5416d824d3c2 --- /dev/null +++ b/tests/sys/netinet/ip_mroute.py @@ -0,0 +1,428 @@ +# +# Copyright (c) 2025 Stormshield +# +# SPDX-License-Identifier: BSD-2-Clause +# + +import pytest +import socket +import struct +import subprocess +import time +from pathlib import Path + +from atf_python.sys.net.vnet import VnetTestTemplate + + +class MRouteTestTemplate(VnetTestTemplate): + """ + Helper class for multicast routing tests. Test classes should inherit from this one. + """ + COORD_SOCK = "coord.sock" + + @staticmethod + def _msgwait(sock: socket.socket, expected: bytes): + msg = sock.recv(1024) + assert msg == expected + + @staticmethod + def sendmsg(msg: bytes, path: str): + s = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) + s.sendto(msg, path) + s.close() + + @staticmethod + def _makesock(path: str): + s = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM) + s.bind(path) + return s + + @staticmethod + def mcast_join_INET6(addr: str, port: int): + pass + + def jointest(self, vnet): + """Let the coordinator know that we're ready, and wait for go-ahead.""" + coord = self._makesock(vnet.alias + ".sock") + self.sendmsg(b"ok " + vnet.alias.encode(), self.COORD_SOCK) + self._msgwait(coord, b"join") + + def donetest(self): + """Let the coordinator that we completed successfully.""" + self.sendmsg(b"done", self.COORD_SOCK) + + def starttest(self, vnets: list[str]): + self.vnets = vnets + for vnet in vnets: + self.sendmsg(b"join", vnet + ".sock") + + def waittest(self): + for vnet in self.vnets: + self._msgwait(self.coord, b"done") + + def setup_method(self, method): + self.coord = self._makesock(self.COORD_SOCK) + super().setup_method(method) + + # Loop until all other hosts have sent the ok message. + received = set() + vnet_names = set(self.vnet_map.keys()) - {self.vnet.alias} + while len(received) < len(vnet_names): + msg = self.coord.recv(1024) + received.add(msg) + assert received == {b"ok " + name.encode() for name in vnet_names} + + +class MRouteINETTestTemplate(MRouteTestTemplate): + @staticmethod + def run_pimd(ident: str, ifaces: list[str], rpaddr: str, group: str, fib=0): + conf = f"pimd-{ident}.conf" + with open(conf, "w") as conf_file: + conf_file.write("no phyint\n") + for iface in ifaces: + conf_file.write(f"phyint {iface} enable\n") + conf_file.write(f"rp-address {rpaddr} {group}\n") + + cmd = f"setfib {fib} pimd -i {ident} -f {conf} -p pimd-{ident}.pid -n" + return subprocess.Popen(cmd.split(), stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL) + + @staticmethod + def mcast_join(addr: str, port: int): + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + mreq = struct.pack("4si", socket.inet_aton(addr), socket.INADDR_ANY) + s.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq) + s.bind((addr, port)) + time.sleep(1) # Give the kernel a bit of time to join the group. + return s + + @staticmethod + def mcast_sendto(addr: str, port: int, iface: str, msg: bytes): + s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + mreqn = struct.pack("iii", socket.INADDR_ANY, socket.INADDR_ANY, + socket.if_nametoindex(iface)) + s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_IF, mreqn) + s.setsockopt(socket.IPPROTO_IP, socket.IP_MULTICAST_TTL, 64) + s.sendto(msg, (addr, port)) + s.close() + + def setup_method(self, method): + self.require_module("ip_mroute") + super().setup_method(method) + + +class MRouteINET6TestTemplate(MRouteTestTemplate): + @staticmethod + def run_ip6_mrouted(ident: str, ifaces: list[str], fib=0): + ifaces_str = ' '.join(f"-i {iface}" for iface in ifaces) + exepath = Path(__file__).parent / "ip6_mrouted" + cmd = f"setfib {fib} {exepath} {ifaces_str}" + return subprocess.Popen(cmd.split(), stdout=subprocess.DEVNULL, + stderr=subprocess.DEVNULL) + + @staticmethod + def mcast_join(addr: str, port: int, iface: str): + s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + mreq = struct.pack("16si", socket.inet_pton(socket.AF_INET6, addr), + socket.if_nametoindex(iface)) + s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_JOIN_GROUP, mreq) + s.bind((addr, port)) + time.sleep(1) # Give the kernel a bit of time to join the + return s + + @staticmethod + def mcast_sendto(addr: str, port: int, iface: str, msg: bytes): + s = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM, socket.IPPROTO_UDP) + mreq = struct.pack("i", socket.if_nametoindex(iface)) + s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_IF, mreq) + s.setsockopt(socket.IPPROTO_IPV6, socket.IPV6_MULTICAST_HOPS, 64) + s.sendto(msg, (addr, port)) + s.close() + + def setup_method(self, method): + self.require_module("ip6_mroute") + super().setup_method(method) + + +class Test1RBasicINET(MRouteINETTestTemplate): + """Basic multicast routing setup with 2 hosts connected via a router.""" + + TOPOLOGY = { + "vnet_router": {"ifaces": ["if1", "if2"]}, + "vnet_host1": {"ifaces": ["if1"]}, + "vnet_host2": {"ifaces": ["if2"]}, + "if1": {"prefixes4": [("192.168.1.1/24", "192.168.1.2/24")]}, + "if2": {"prefixes4": [("192.168.2.1/24", "192.168.2.2/24")]}, + } + MULTICAST_ADDR = "239.0.0.1" + + def setup_method(self, method): + # Create VNETs and start the handlers. + super().setup_method(method) + + ifaces = [self.vnet.iface_alias_map[i].name for i in ["if1", "if2"]] + self.pimd = self.run_pimd("test", ifaces, "127.0.0.1", self.MULTICAST_ADDR + "/32") + time.sleep(3) # Give pimd a bit of time to get itself together. + + def vnet_host1_handler(self, vnet): + self.jointest(vnet) + + self.sock = self.mcast_join(self.MULTICAST_ADDR, 12345) + + # Wait for host 2 to send a message, then send a reply. + self._msgwait(self.sock, b"Hello, Multicast!") + self.mcast_sendto(self.MULTICAST_ADDR, 12345, vnet.ifaces[0].name, + b"Goodbye, Multicast!") + self._msgwait(self.sock, b"Goodbye, Multicast!") + self.donetest() + + def vnet_host2_handler(self, vnet): + self.jointest(vnet) + + self.sock = self.mcast_join(self.MULTICAST_ADDR, 12345) + + # Send a message to host 1, then wait for a reply. + self.mcast_sendto(self.MULTICAST_ADDR, 12345, vnet.ifaces[0].name, + b"Hello, Multicast!") + self._msgwait(self.sock, b"Hello, Multicast!") + self._msgwait(self.sock, b"Goodbye, Multicast!") + self.donetest() + + @pytest.mark.require_user("root") + @pytest.mark.require_progs(["pimd"]) + @pytest.mark.timeout(30) + def test(self): + self.starttest(["vnet_host1", "vnet_host2"]) + self.waittest() + + +class Test1RCrissCrossINET(MRouteINETTestTemplate): + """ + Test a router connected to four hosts, with pairs of interfaces + in different FIBs. + """ + + TOPOLOGY = { + "vnet_router": {"ifaces": ["if1", "if2", "if3", "if4"]}, + "vnet_host1": {"ifaces": ["if1"]}, + "vnet_host2": {"ifaces": ["if2"]}, + "vnet_host3": {"ifaces": ["if3"]}, + "vnet_host4": {"ifaces": ["if4"]}, + "if1": { + "prefixes4": [("192.168.1.1/24", "192.168.1.2/24")], + "prefixes6": [], + "fib": (0, 0), + }, + "if2": { + "prefixes4": [("192.168.2.1/24", "192.168.2.2/24")], + "prefixes6": [], + "fib": (0, 0), + }, + "if3": { + "prefixes4": [("192.168.3.1/24", "192.168.3.2/24")], + "prefixes6": [], + "fib": (1, 0), + }, + "if4": { + "prefixes4": [("192.168.4.1/24", "192.168.4.2/24")], + "prefixes6": [], + "fib": (1, 0), + }, + } + MULTICAST_ADDR = "239.0.0.1" + + def setup_method(self, method): + # Create VNETs and start the handlers. + super().setup_method(method) + + # Start a pimd instance per FIB. + ifaces = [self.vnet.iface_alias_map[i].name for i in ["if1", "if2"]] + self.pimd0 = self.run_pimd("test0", ifaces, "127.0.0.1", self.MULTICAST_ADDR + "/32", + fib=0) + ifaces = [self.vnet.iface_alias_map[i].name for i in ["if3", "if4"]] + self.pimd1 = self.run_pimd("test1", ifaces, "127.0.0.1", self.MULTICAST_ADDR + "/32", + fib=1) + time.sleep(3) # Give pimd a bit of time to get itself together. + + def vnet_host1_handler(self, vnet): + self.jointest(vnet) + + self.sock = self.mcast_join(self.MULTICAST_ADDR, 12345) + self._msgwait(self.sock, b"Hello, Multicast on FIB 0!") + self.mcast_sendto(self.MULTICAST_ADDR, 12345, vnet.ifaces[0].name, + b"Goodbye, Multicast on FIB 0!") + self.donetest() + + def vnet_host2_handler(self, vnet): + self.jointest(vnet) + self.sock = self.mcast_join(self.MULTICAST_ADDR, 12345) + self.mcast_sendto(self.MULTICAST_ADDR, 12345, vnet.ifaces[0].name, + b"Hello, Multicast on FIB 0!") + self._msgwait(self.sock, b"Hello, Multicast on FIB 0!") + self._msgwait(self.sock, b"Goodbye, Multicast on FIB 0!") + self.donetest() + + def vnet_host3_handler(self, vnet): + self.jointest(vnet) + self.sock = self.mcast_join(self.MULTICAST_ADDR, 12345) + self._msgwait(self.sock, b"Hello, Multicast on FIB 1!") + self.mcast_sendto(self.MULTICAST_ADDR, 12345, + vnet.ifaces[0].name, b"Goodbye, Multicast on FIB 1!") + self.donetest() + + def vnet_host4_handler(self, vnet): + self.jointest(vnet) + self.sock = self.mcast_join(self.MULTICAST_ADDR, 12345) + time.sleep(1) + self.mcast_sendto(self.MULTICAST_ADDR, 12345, vnet.ifaces[0].name, + b"Hello, Multicast on FIB 1!") + self._msgwait(self.sock, b"Hello, Multicast on FIB 1!") + self._msgwait(self.sock, b"Goodbye, Multicast on FIB 1!") + self.donetest() + + @pytest.mark.require_user("root") + @pytest.mark.require_progs(["pimd"]) + @pytest.mark.timeout(30) + def test(self): + self.starttest(["vnet_host1", "vnet_host2", "vnet_host3", "vnet_host4"]) + self.waittest() + + +class Test1RBasicINET6(MRouteINET6TestTemplate): + """Basic multicast routing setup with 2 hosts connected via a router.""" + + TOPOLOGY = { + "vnet_router": {"ifaces": ["if1", "if2"]}, + "vnet_host1": {"ifaces": ["if1"]}, + "vnet_host2": {"ifaces": ["if2"]}, + "if1": { + "prefixes6": [("2001:db8:0:1::1/64", "2001:db8:0:1::2/64")] + }, + "if2": { + "prefixes6": [("2001:db8:0:2::1/64", "2001:db8:0:2::2/64")] + }, + } + MULTICAST_ADDR = "ff05::1" + + def setup_method(self, method): + # Create VNETs and start the handlers. + super().setup_method(method) + + ifaces = [self.vnet.iface_alias_map[i].name for i in ["if1", "if2"]] + self.mrouted = self.run_ip6_mrouted("test", ifaces) + time.sleep(1) + + def vnet_host1_handler(self, vnet): + self.jointest(vnet) + + self.sock = self.mcast_join(self.MULTICAST_ADDR, 12345, vnet.ifaces[0].name) + + # Wait for host 2 to send a message, then send a reply. + self._msgwait(self.sock, b"Hello, Multicast!") + self.mcast_sendto(self.MULTICAST_ADDR, 12345, vnet.ifaces[0].name, + b"Goodbye, Multicast!") + self._msgwait(self.sock, b"Goodbye, Multicast!") + self.donetest() + + def vnet_host2_handler(self, vnet): + self.jointest(vnet) + + self.sock = self.mcast_join(self.MULTICAST_ADDR, 12345, vnet.ifaces[0].name) + + # Send a message to host 1, then wait for a reply. + self.mcast_sendto(self.MULTICAST_ADDR, 12345, vnet.ifaces[0].name, + b"Hello, Multicast!") + self._msgwait(self.sock, b"Hello, Multicast!") + self._msgwait(self.sock, b"Goodbye, Multicast!") + self.donetest() + + @pytest.mark.require_user("root") + @pytest.mark.timeout(30) + def test(self): + self.starttest(["vnet_host1", "vnet_host2"]) + self.waittest() + + +class Test1RCrissCrossINET6(MRouteINET6TestTemplate): + """ + Test a router connected to four hosts, with pairs of interfaces + in different FIBs. + """ + + TOPOLOGY = { + "vnet_router": {"ifaces": ["if1", "if2", "if3", "if4"]}, + "vnet_host1": {"ifaces": ["if1"]}, + "vnet_host2": {"ifaces": ["if2"]}, + "vnet_host3": {"ifaces": ["if3"]}, + "vnet_host4": {"ifaces": ["if4"]}, + "if1": { + "prefixes6": [("2001:db8:0:1::1/64", "2001:db8:0:1::2/64")], + "fib": (0, 0), + }, + "if2": { + "prefixes6": [("2001:db8:0:2::1/64", "2001:db8:0:2::2/64")], + "fib": (0, 0), + }, + "if3": { + "prefixes6": [("2001:db8:0:3::1/64", "2001:db8:0:3::2/64")], + "fib": (1, 0), + }, + "if4": { + "prefixes6": [("2001:db8:0:4::1/64", "2001:db8:0:4::2/64")], + "fib": (1, 0), + }, + } + MULTICAST_ADDR = "ff05::1" + + def setup_method(self, method): + # Create VNETs and start the handlers. + super().setup_method(method) + + # Start an ip6_mrouted instance per FIB. + ifaces = [self.vnet.iface_alias_map[i].name for i in ["if1", "if2"]] + self.pimd0 = self.run_ip6_mrouted("test0", ifaces, fib=0) + ifaces = [self.vnet.iface_alias_map[i].name for i in ["if3", "if4"]] + self.pimd1 = self.run_ip6_mrouted("test1", ifaces, fib=1) + time.sleep(1) # Give ip6_mrouted a bit of time to get itself together. + + def vnet_host1_handler(self, vnet): + self.jointest(vnet) + + self.sock = self.mcast_join(self.MULTICAST_ADDR, 12345, vnet.ifaces[0].name) + self._msgwait(self.sock, b"Hello, Multicast on FIB 0!") + self.mcast_sendto(self.MULTICAST_ADDR, 12345, vnet.ifaces[0].name, + b"Goodbye, Multicast on FIB 0!") + self.donetest() + + def vnet_host2_handler(self, vnet): + self.jointest(vnet) + self.sock = self.mcast_join(self.MULTICAST_ADDR, 12345, vnet.ifaces[0].name) + self.mcast_sendto(self.MULTICAST_ADDR, 12345, vnet.ifaces[0].name, + b"Hello, Multicast on FIB 0!") + self._msgwait(self.sock, b"Hello, Multicast on FIB 0!") + self._msgwait(self.sock, b"Goodbye, Multicast on FIB 0!") + self.donetest() + + def vnet_host3_handler(self, vnet): + self.jointest(vnet) + self.sock = self.mcast_join(self.MULTICAST_ADDR, 12345, vnet.ifaces[0].name) + self._msgwait(self.sock, b"Hello, Multicast on FIB 1!") + self.mcast_sendto(self.MULTICAST_ADDR, 12345, + vnet.ifaces[0].name, b"Goodbye, Multicast on FIB 1!") + self.donetest() + + def vnet_host4_handler(self, vnet): + self.jointest(vnet) + self.sock = self.mcast_join(self.MULTICAST_ADDR, 12345, vnet.ifaces[0].name) + time.sleep(1) + self.mcast_sendto(self.MULTICAST_ADDR, 12345, vnet.ifaces[0].name, + b"Hello, Multicast on FIB 1!") + self._msgwait(self.sock, b"Hello, Multicast on FIB 1!") + self._msgwait(self.sock, b"Goodbye, Multicast on FIB 1!") + self.donetest() + + @pytest.mark.require_user("root") + @pytest.mark.timeout(30) + def test(self): + self.starttest(["vnet_host1", "vnet_host2", "vnet_host3", "vnet_host4"]) + self.waittest() diff --git a/tests/sys/netinet6/Makefile b/tests/sys/netinet6/Makefile index 26f1a18a8d32..f5a04a299dc6 100644 --- a/tests/sys/netinet6/Makefile +++ b/tests/sys/netinet6/Makefile @@ -1,6 +1,7 @@ PACKAGE= tests TESTSDIR= ${TESTSBASE}/sys/netinet6 +BINDIR= ${TESTSDIR} FILESDIR= ${TESTSDIR} ATF_TESTS_PYTEST= test_ip6_output.py From nobody Mon Mar 30 16:15:44 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 4fkxDw6q2sz6Wyb7 for ; Mon, 30 Mar 2026 16:15:44 +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 4fkxDw52Bmz49n9 for ; Mon, 30 Mar 2026 16:15:44 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774887344; 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=Eu5veCcytXzV+kdh+9OkMhCBMspATGSE9aUF4A6vm84=; b=gYauoaFvaZ8v50WluiEMGybsjCidfRw3svx+BGaC8fA9QBTQABGxFDQACVjWi+wrOTGHs1 scbJa59KcvhhW6lfqaXGkrexF+ACNi9vB9fYI/AU+BEXu7Wh4n5YUSi9eKfmejLfZrNidN aqQzkvCNO/O8YgUkVOdEeslnknpCUnvhncnziQYI7cd6jLeduwJ6OyXHpjcgE1dnyBxwkW xGPwzuclcXcytkkWz7HWT/w0nqMoXu95waIEe8588v4VdL1RHrWm0zHRrkCgeIvRi6ncuG f/Lq91+LPAUle+Sno5uml7uPjl4CbPKgmQlutZxIrMmF0dvIazMQDwjfeat38w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774887344; a=rsa-sha256; cv=none; b=fvOqB7zMKB1okRuwYyMuDXisFNc0RNu5DS6UlHOxjNoa+D2GLdba9L+8ZlusPErGv/YwOW 6Ia6Fx7rUHgzhR7PYqDvK4s4rMt0F+ETs4LeIwLH8wJ7aOx/XoURmuv6B9Hc7aH7eEOv3L HSkDmEPwzJYKSsS9TmTK5ww2MgOPLWkzM6jRBG3ZELJbitsabrbp1XtmHDHorTGBDEhKSZ pku4vgAJS5N1lZEZweGDV/pPI5D6lisyka1AwmiBGM380BXT5/MznRKQsvDl/ow8nBuGTh kPcYsbtBHRL7kuqncI4fPSdT+vkh51GGghfmUsoIcwkeDLaT0qzOoOSgaxvm2g== 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=1774887344; 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=Eu5veCcytXzV+kdh+9OkMhCBMspATGSE9aUF4A6vm84=; b=fGmYFW/ROS330vue2Ydrkfj4XHWGA3lhcppbrMEZ/ZbFEN64umCommPYyYRx6/jRvDppLt 4WauneCjii/Mc4W8CX6KOtIh/ZW3POvsfhu0cTkzNuKP51gjP3+8gozqcNgbmBdwByZQYJ 1dctyOqJc+mZOfGUImcRB1eIhlul567qUdJDotNeiqRfV48dbkp9QJf9KTn0s/YaZ149aa v0dr87CBzXu6tbHAwkpkSb2TMWrrBjqnMWybBRvQmH3DUX/JWNj8Ajg+gkJYUSCpF9ysbP T3uisVulL4iIfEp4HivBfyr2PPpzK0zzHzKMOoUwqANZD5I7JsDAvK+QYv3M8w== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkxDw4ZBhzqkd for ; Mon, 30 Mar 2026 16:15:44 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3bf42 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 16:15:44 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 82272cbf56aa - main - ip6_mroute: Pass the multicast interface number directly to del_m6if() 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 82272cbf56aa5646611c6f1049501cc345fcf6ec Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 16:15:44 +0000 Message-Id: <69caa1b0.3bf42.2c9af642@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=82272cbf56aa5646611c6f1049501cc345fcf6ec commit 82272cbf56aa5646611c6f1049501cc345fcf6ec Author: Mark Johnston AuthorDate: 2026-03-30 13:33:11 +0000 Commit: Mark Johnston CommitDate: 2026-03-30 16:08:21 +0000 ip6_mroute: Pass the multicast interface number directly to del_m6if() There's no need to pass a pointer to the interface number. No functional change intended. MFC after: 2 weeks Sponsored by: Stormshield Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D55245 --- sys/netinet6/ip6_mroute.c | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/sys/netinet6/ip6_mroute.c b/sys/netinet6/ip6_mroute.c index 52fd319ba4f4..f9541203a747 100644 --- a/sys/netinet6/ip6_mroute.c +++ b/sys/netinet6/ip6_mroute.c @@ -351,8 +351,8 @@ static int ip6_mrouter_init(struct socket *, int, int); static int add_m6fc(struct mf6ctable *, struct mf6cctl *); static int add_m6if(struct mf6ctable *, int, struct mif6ctl *); static int del_m6fc(struct mf6ctable *, struct mf6cctl *); -static int del_m6if(struct mf6ctable *, mifi_t *); -static int del_m6if_locked(struct mf6ctable *, mifi_t *); +static int del_m6if(struct mf6ctable *, mifi_t); +static int del_m6if_locked(struct mf6ctable *, mifi_t); static int get_mif6_cnt(struct mf6ctable *, struct sioc_mif_req6 *); static int get_sg_cnt(struct mf6ctable *, struct sioc_sg_req6 *); @@ -446,7 +446,7 @@ X_ip6_mrouter_set(struct socket *so, struct sockopt *sopt) error = sooptcopyin(sopt, &mifi, sizeof(mifi), sizeof(mifi)); if (error) break; - error = del_m6if(mfct, &mifi); + error = del_m6if(mfct, mifi); break; case MRT6_PIM: error = sooptcopyin(sopt, &optval, sizeof(optval), @@ -795,17 +795,17 @@ add_m6if(struct mf6ctable *mfct, int fibnum, struct mif6ctl *mifcp) * Delete a mif from the mif table */ static int -del_m6if_locked(struct mf6ctable *mfct, mifi_t *mifip) +del_m6if_locked(struct mf6ctable *mfct, mifi_t mifi) { struct mif6 *mifp; - mifi_t mifi; + mifi_t tmp; struct ifnet *ifp; MIF6_LOCK_ASSERT(); - if (*mifip >= mfct->nummifs) + if (mifi >= mfct->nummifs) return (EINVAL); - mifp = &mfct->miftable[*mifip]; + mifp = &mfct->miftable[mifi]; if (mifp->m6_ifp == NULL) return (EINVAL); @@ -826,22 +826,22 @@ del_m6if_locked(struct mf6ctable *mfct, mifi_t *mifip) bzero(mifp, sizeof(*mifp)); /* Adjust nummifs down */ - for (mifi = mfct->nummifs; mifi > 0; mifi--) - if (mfct->miftable[mifi - 1].m6_ifp != NULL) + for (tmp = mfct->nummifs; tmp > 0; tmp--) + if (mfct->miftable[tmp - 1].m6_ifp != NULL) break; - mfct->nummifs = mifi; - MRT6_DLOG(DEBUG_ANY, "mif %d, nummifs %d", *mifip, mfct->nummifs); + mfct->nummifs = tmp; + MRT6_DLOG(DEBUG_ANY, "mif %d, nummifs %d", mifi, mfct->nummifs); return (0); } static int -del_m6if(struct mf6ctable *mfct, mifi_t *mifip) +del_m6if(struct mf6ctable *mfct, mifi_t mifi) { int cc; MIF6_LOCK(); - cc = del_m6if_locked(mfct, mifip); + cc = del_m6if_locked(mfct, mifi); MIF6_UNLOCK(); return (cc); From nobody Mon Mar 30 16:15:45 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 4fkxDy3hMpz6WyXp for ; Mon, 30 Mar 2026 16:15:46 +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 4fkxDx6KGJz49nH for ; Mon, 30 Mar 2026 16:15:45 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774887346; 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=lht8sjD/RbZUEW15F5rufW6BSUF2D/1a4FLiq8KlnoY=; b=vleSCcxQuLYmE88I/KeCCTq3dnhzkYH+QK1tuBtetLTtqeBqEOx5o34tt7Sbz/ZNpW2j2t 8yEaxUjiuSLM2pjDmxeq6jL9V4bHiQPWcFcEFBEDMP5XYXZvcATTCiWPCKSCZ/Nt4sA8DJ m7mIeJAsf0/h0vq+zWwe1jZD5/g7mbOGlWh0TGOMcTxFC7K+z7Qzmbtypb6zZ/APT/55kO 2HHN3WbuLUWQogySQZXXm+w8+uY5OggapknbtiJKfAvtgHWRlVKroJUWKc/P717siSzLvo 1epdoNDrL7GEpzZp5DFCnhuL5nUbVtPCfxcJ73B7mHO9ZFqpXBh+/d4QnPzSVw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774887346; a=rsa-sha256; cv=none; b=e6PDjZJbl/4J1+gQOkYgFYMp/CJWPnqMGnWZf8DYcWJUEEPWDAmdN515coV7S4/YfzxRjF KRWdsatt7lJ0ZsmHu/cmW3kgCY1hj2nxsftaobpFo15l2mSsje/9GZkL8dMQW8gh4VCwEf DVAVbYA7Dovo5/e6DKVR1B6qVJqHJeoyHM8RNycrJLZH1F3fGWpmt1UooNpytX7S/cBYj8 sB6bchOlxxsc95v1xchZRmqK0v630OnsjMQ9KtAyzNgbdMVxxWcPECIqwzta589zpnPOzC tqBtglhb3B0UoovV6B0Yfo3kDW8Ws/7/uWhGyUYrVpk/AuIuxlrrLreSpVLBaw== 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=1774887346; 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=lht8sjD/RbZUEW15F5rufW6BSUF2D/1a4FLiq8KlnoY=; b=st5xh198XUOnQP59bTgKPyQAQ/PK3y6JIJtoKK6KJ1lgvFJjuqRbHHMcCSxcZkRVWVgN4p DSijJDHMo/74CFmwied9GK06ZvaEiT+dWzEaTp/y+l0oGmRTJSbAvUIGXbS65wrTn4ZN8G m4Uwq7BVSf551PQZ7eOd2e6by+xrqhBh06yzTXIA/nt27N3dfd0yMhQv/B60YlLJzF43Nz W3jenBdr8iLobMnYW4vak+PplniM2n1p6jExmnq4DTL91pU8z74KIGS+fENcdRd6pEEGhp OPrZKxBHdMrjCKvKml1meajYVCEiRuRRcEw6254b7ewcQtVz0nM9KOBQxFcPaA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkxDx5Lc6zqMC for ; Mon, 30 Mar 2026 16:15:45 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3b8ac by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 16:15:45 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: a1c042a9641c - main - ip6_mroute: Handle interface detach events 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: a1c042a9641c9df08010e87d0928703849ff9853 Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 16:15:45 +0000 Message-Id: <69caa1b1.3b8ac.5985faa4@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=a1c042a9641c9df08010e87d0928703849ff9853 commit a1c042a9641c9df08010e87d0928703849ff9853 Author: Mark Johnston AuthorDate: 2026-03-30 13:33:32 +0000 Commit: Mark Johnston CommitDate: 2026-03-30 16:08:21 +0000 ip6_mroute: Handle interface detach events When an interface goes away we need to make sure the v6 multicast routing tables don't carry any dangling references to the ifnet. The v4 code handles this already. Copy the approach there and use an eventhandler to purge the corresponding MIF, if one exists, and further go through all routes in the FIB and remove references to the interface. MFC after: 2 weeks Sponsored by: Stormshield Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D55246 --- sys/netinet6/ip6_mroute.c | 69 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 67 insertions(+), 2 deletions(-) diff --git a/sys/netinet6/ip6_mroute.c b/sys/netinet6/ip6_mroute.c index f9541203a747..9a7f611b8b4c 100644 --- a/sys/netinet6/ip6_mroute.c +++ b/sys/netinet6/ip6_mroute.c @@ -211,7 +211,7 @@ VNET_DEFINE_STATIC(struct mf6ctable *, mfctables); VNET_DEFINE_STATIC(uint32_t, nmfctables); #define V_nmfctables VNET(nmfctables) -static eventhandler_tag rtnumfibs_change_tag; +static eventhandler_tag ifdetach_tag, rtnumfibs_change_tag; static int sysctl_mfctable(SYSCTL_HANDLER_ARGS) @@ -791,6 +791,20 @@ add_m6if(struct mf6ctable *mfct, int fibnum, struct mif6ctl *mifcp) return (0); } +static void +expire_mf6c(struct mf6c *mfc) +{ + struct rtdetq *rte; + + while ((rte = mfc->mf6c_stall) != NULL) { + mfc->mf6c_stall = rte->next; + m_freem(rte->m); + free(rte, M_MRTABLE6); + } + + free(mfc, M_MRTABLE6); +} + /* * Delete a mif from the mif table */ @@ -810,9 +824,29 @@ del_m6if_locked(struct mf6ctable *mfct, mifi_t mifi) return (EINVAL); if (!(mifp->m6_flags & MIFF_REGISTER)) { - /* XXX: TODO: Maintain an ALLMULTI refcount in struct ifnet. */ ifp = mifp->m6_ifp; if_allmulti(ifp, 0); + + MFC6_LOCK(); + for (int i = 0; i < MF6CTBLSIZ; i++) { + struct mf6c *mfc, **nmfc; + + nmfc = &mfct->mfchashtbl[i]; + while ((mfc = *nmfc) != NULL) { + if (mfc->mf6c_parent == mifi) { + *nmfc = mfc->mf6c_next; + if (mfc->mf6c_expire) + mfct->nexpire[i]--; + expire_mf6c(mfc); + } else { + /* Remove this mif from the ifset */ + if (IF_ISSET(mifi, &mfc->mf6c_ifset)) + IF_CLR(mifi, &mfc->mf6c_ifset); + nmfc = &mfc->mf6c_next; + } + } + } + MFC6_UNLOCK(); } else { if (mfct->register_mif != (mifi_t)-1 && mfct->register_if != NULL) { @@ -1954,6 +1988,32 @@ pim6_input(struct mbuf *m, int off, int proto, void *arg __unused) return (rip6_input(&m, &off, proto)); } +static void +ip6_mrouter_ifdetach(void *arg __unused, struct ifnet *ifp) +{ + struct mf6ctable *mfct; + + if (!V_ip6_mrouting_enabled) + return; + for (int i = 0; i < V_nmfctables; i++) { + mfct = &V_mfctables[i]; + + MIF6_LOCK(); +restart: + for (mifi_t mifi = 0; mifi < mfct->nummifs; mifi++) { + int error __diagused; + + if (mfct->miftable[mifi].m6_ifp != ifp) + continue; + error = del_m6if_locked(mfct, mifi); + KASSERT(error == 0, + ("del_m6if_locked(%s) %d", ifp->if_xname, error)); + goto restart; + } + MIF6_UNLOCK(); + } +} + static void ip6_mroute_rtnumfibs_change(void *arg __unused, uint32_t ntables) { @@ -2010,6 +2070,9 @@ ip6_mroute_modevent(module_t mod, int type, void *unused) MFC6_LOCK_INIT(); MIF6_LOCK_INIT(); + ifdetach_tag = EVENTHANDLER_REGISTER( + ifnet_departure_event, ip6_mrouter_ifdetach, + NULL, EVENTHANDLER_PRI_ANY); rtnumfibs_change_tag = EVENTHANDLER_REGISTER( rtnumfibs_change, ip6_mroute_rtnumfibs_change, NULL, EVENTHANDLER_PRI_ANY); @@ -2035,6 +2098,8 @@ ip6_mroute_modevent(module_t mod, int type, void *unused) if (V_ip6_mrouting_enabled) return (EBUSY); + EVENTHANDLER_DEREGISTER(ifnet_departure_event, + ifdetach_tag); EVENTHANDLER_DEREGISTER(rtnumfibs_change, rtnumfibs_change_tag); From nobody Mon Mar 30 17:01:06 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 4fkyFY4XVMz6X3j7; Mon, 30 Mar 2026 17:01:21 +0000 (UTC) (envelope-from zlei@FreeBSD.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (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 "smtp.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fkyFY4Ck8z3QCF; Mon, 30 Mar 2026 17:01:21 +0000 (UTC) (envelope-from zlei@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774890081; 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: in-reply-to:in-reply-to:references:references; bh=RsHti/YNEolCE8eN0ClzLBX9WdJSGxHEdnm2qRkC7ak=; b=GW4RCVo+hGq7KtmyhVe0B+hnBLxJDzcay+DfUQYxDB+DfJkjiLYliWNxbZS/ynB4pFAiKm GcE9ACwlEOLctSmzokkx1BqCzRPA80Hmz1Yr3nHyYzUJjCQs5dJTxhszpWctjUX502kEqB YTbXTSdRl3wy7P9l++RT5xps16Ve/J8a3mAcMLyWr1y51eMM+lK5aKoNkZIgREHimyHh/U 0RnwDcc5kCRP/4m2ivWl337fle6Te+E3igStEEdg6wTLpC3mkfdfIPxzoYWq8S9ZgY8Ale 2HyhL2FXt25O5toOLfSp3kbbsTvxXl7pCgpVWyNrDuedILOf5z/5uTa10OBlfQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774890081; a=rsa-sha256; cv=none; b=nvsFuj4jdZ27YOKWw9c3t/Ms9ckva28iweI/QSj0bLWuWjlscm3T3z0JpRqF2zkOFXLqre bPgic+Mtm0OuCG73TN+CpYMp7/qYva5FrR/tP+TrnUO12j3yYN/iE0C15sYhq5AfBJsORj UHDI63WYxAH12X37Nf4RSFff2tiWvCuphnreCWsNTYMF/jeKNETCfBhfhjntTBaPrDtlEN AQUNxSS40bdDCZiLlOxxlqu0TaQHA0lfcLIOnplrn1UpDQvwH0UeccrYY836dC7GZx8ktw vPRkTtJPqKoysO9fXd6zkQuNq/h054fOGsofECSbD9vtLyotLyiFUzuQzE9y2Q== 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=1774890081; 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: in-reply-to:in-reply-to:references:references; bh=RsHti/YNEolCE8eN0ClzLBX9WdJSGxHEdnm2qRkC7ak=; b=qTwGrRJKCk7HU81Y/FKpBoU0GepzyAjbjOyIlSyqpbWpZy7ohd2Aee451p/XaBc7pVDkN2 8FMpUWf+jqj1mhbSmpBjDzeX8QJnTSvyzH7H8ZIn9NcjnXbVsI1Z/0uOPbKmnDMJYr4Ihx EK//irajgxaSsb5yeGaU35nAVkV8TbTwexLT3y4TyBIldbBfHSO/CyeTNNPyGVi+Fxx/jy kwSQ+/iA3Kz1RE0mD2Mb76zr/emmSBP1ZHed//1fSuDLCe7Z9/h7Cjc20R+2E06s+muRXS BDeu8AyHKgNCZjmjz0EQpkpnpodsicPlVEv3QUNhsi0mIK3RGa42pOYN4MOrDQ== Received: from smtpclient.apple (ns1.oxydns.net [45.32.91.63]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) (Authenticated sender: zlei/mail) by smtp.freebsd.org (Postfix) with ESMTPSA id 4fkyFR57D4zPf1; Mon, 30 Mar 2026 17:01:15 +0000 (UTC) (envelope-from zlei@FreeBSD.org) From: Zhenlei Huang Message-Id: Content-Type: multipart/alternative; boundary="Apple-Mail=_39E69894-D44E-4325-8241-8609EC36E87E" 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 Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3696.120.41.1.10\)) Subject: Re: git: d9c55b2e8cd6 - main - rss: Enable portions of RSS globally to enable symmetric hashing Date: Tue, 31 Mar 2026 01:01:06 +0800 In-Reply-To: <377ropo1-734p-q318-3p95-2179222sn9oq@mnoonqbm.arg> Cc: Andrew Gallatin , "src-committers@freebsd.org" , "dev-commits-src-all@freebsd.org" , "dev-commits-src-main@freebsd.org" To: "Bjoern A. Zeeb" References: <6921c91b.2f53c.60323437@gitrepo.freebsd.org> <377ropo1-734p-q318-3p95-2179222sn9oq@mnoonqbm.arg> X-Mailer: Apple Mail (2.3696.120.41.1.10) --Apple-Mail=_39E69894-D44E-4325-8241-8609EC36E87E Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=us-ascii > On Mar 30, 2026, at 6:41 PM, Bjoern A. Zeeb = wrote: >=20 > On Sat, 22 Nov 2025, Andrew Gallatin wrote: >=20 >> The branch main has been updated by gallatin: >>=20 >> URL: = https://cgit.FreeBSD.org/src/commit/?id=3Dd9c55b2e8cd6b79f6926278e10a79f1b= cca27a4b >>=20 >> commit d9c55b2e8cd6b79f6926278e10a79f1bcca27a4b >> Author: Andrew Gallatin >> AuthorDate: 2025-11-22 14:29:31 +0000 >> Commit: Andrew Gallatin >> CommitDate: 2025-11-22 14:29:31 +0000 >>=20 >> rss: Enable portions of RSS globally to enable symmetric hashing >>=20 >> We use the fact that all NICs that support hashing are using the >> same hash algorithm and hash key to enable symmetic hashing in >> TCP, where a software version of the same hash is used to >> establish hashes on outgoing connections. >>=20 >> Sponsored by: Netflix >> Reviewed by: adrian, zlei (both early version) >> Differential Revision: https://reviews.freebsd.org/D53089 >> --- >> sys/conf/files | 8 +++--- >> sys/net/rss_config.c | 66 = +++++++++++++++++++++++++++++++------------------- >> sys/net/rss_config.h | 20 +++++++++------ >> sys/netinet/in_rss.c | 3 +++ >> sys/netinet6/in6_rss.c | 3 +++ >> 5 files changed, 63 insertions(+), 37 deletions(-) >>=20 >> diff --git a/sys/conf/files b/sys/conf/files >> index 53fcb80f2b8d..3314274b47a8 100644 >> --- a/sys/conf/files >> +++ b/sys/conf/files >> @@ -4238,10 +4238,10 @@ net/route/route_rtentry.c standard >> net/route/route_subscription.c standard >> net/route/route_tables.c standard >> net/route/route_temporal.c standard >> -net/rss_config.c optional inet rss | inet6 rss >> +net/rss_config.c standard >=20 > Given this relies on toeplitz_hash which is inet | inet6 it doesn't = work for NO-IP > kernels: >=20 > 3 >>> Kernel build for LINT-NOIP started on Mon Mar 30 06:39:36 = UTC 2026 > .. > 36 linking kernel > 37 ld: error: undefined symbol: toeplitz_hash > 38 >>> referenced by rss_config.c > 39 >>> rss_config.o:(rss_hash) > 40 --- kernel --- > 41 *** [kernel] Error code 1 >=20 > Either this needs to be optional inet | inet6 or the topelitz parts = need to be > #if defined(INET6) || defined(INET) in the rss_config.c The net/toeplitz.c is independent with inet or inet6. So maybe it is = better to make it standard ? >=20 >=20 >=20 > Don't ask me why this is visible now but tells something about the = state of LINT > in the last months maybe? >=20 >> net/rtsock.c standard >> net/slcompress.c optional netgraph_vjc >> -net/toeplitz.c optional inet rss | inet6 rss | = route_mpath >> +net/toeplitz.c optional inet | inet6 | = route_mpath >> net/vnet.c optional vimage >> net80211/ieee80211.c optional wlan >> net80211/ieee80211_acl.c optional wlan wlan_acl >=20 > --=20 > Bjoern A. Zeeb = r15:7 Best regards, Zhenlei --Apple-Mail=_39E69894-D44E-4325-8241-8609EC36E87E Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=us-ascii

On Mar 30, 2026, at 6:41 PM, Bjoern A. Zeeb <bzeeb-lists@lists.zabbadoz.net> wrote:

On Sat, 22 Nov 2025, Andrew Gallatin wrote:

The = branch main has been updated by gallatin:

URL: https://cgit.FreeBSD.org/src/commit/?id=3Dd9c55b2e8cd6b79f69262= 78e10a79f1bcca27a4b

commit = d9c55b2e8cd6b79f6926278e10a79f1bcca27a4b
Author: =     Andrew Gallatin <gallatin@FreeBSD.org>
AuthorDate: = 2025-11-22 14:29:31 +0000
Commit: =     Andrew Gallatin <gallatin@FreeBSD.org>
CommitDate: = 2025-11-22 14:29:31 +0000

  rss: = Enable portions of RSS globally to enable symmetric hashing

  We use the fact that all NICs that = support hashing are using the
  same hash = algorithm and hash key to enable symmetic hashing in
  TCP, where a software version of the same hash is = used to
  establish hashes on outgoing = connections.

  Sponsored by: = Netflix
  Reviewed by: adrian, zlei (both early = version)
  Differential Revision:  https://reviews.freebsd.org/D53089
---
sys/conf/files =         |  8 +++---
sys/net/rss_config.c   | 66 = +++++++++++++++++++++++++++++++-------------------
sys/net/rss_config.h   | 20 +++++++++------
sys/netinet/in_rss.c   |  3 +++
sys/netinet6/in6_rss.c |  3 +++
5 files = changed, 63 insertions(+), 37 deletions(-)

diff --git a/sys/conf/files b/sys/conf/files
index 53fcb80f2b8d..3314274b47a8 100644
--- = a/sys/conf/files
+++ b/sys/conf/files
@@ = -4238,10 +4238,10 @@ net/route/route_rtentry.c = standard
net/route/route_subscription.c = standard
net/route/route_tables.c = standard
net/route/route_temporal.c = standard
-net/rss_config.c optional = inet rss | inet6 rss
+net/rss_config.c = standard

Given this relies on toeplitz_hash which is inet | inet6 it = doesn't work for NO-IP
kernels:

     3 >>> Kernel build for = LINT-NOIP started on Mon Mar 30 06:39:36 UTC 2026
..
    36 linking kernel
    37 ld: error: undefined symbol: = toeplitz_hash
    38 >>> referenced by = rss_config.c
    39 >>> =             &n= bsp; rss_config.o:(rss_hash)
    40 --- kernel ---
    41 *** [kernel] Error code = 1

Either this = needs to be optional inet | inet6   or the topelitz parts need = to be
#if = defined(INET6) || defined(INET) in the rss_config.c

The net/toeplitz.c is independent with inet = or inet6. So maybe it is better to make it standard ?




Don't ask me = why this is visible now but tells something about the state of = LINT
in the last = months maybe?

net/rtsock.c standard
net/slcompress.c optional netgraph_vjc
-net/toeplitz.c optional inet rss | inet6 rss | = route_mpath
+net/toeplitz.c optional inet | inet6 | = route_mpath
net/vnet.c optional vimage
net80211/ieee80211.c optional wlan
net80211/ieee80211_acl.c optional wlan wlan_acl

-- Bjoern A. = Zeeb =             &n= bsp;           &nbs= p;            =             &n= bsp;  r15:7

Best regards,
Zhenlei

= --Apple-Mail=_39E69894-D44E-4325-8241-8609EC36E87E-- From nobody Mon Mar 30 17:15:37 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 4fkyZ12xn0z6X5WT for ; Mon, 30 Mar 2026 17:15:37 +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 4fkyZ12GMDz3T22 for ; Mon, 30 Mar 2026 17:15:37 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774890937; 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=XDi/2d8+UGwz34LQZE12jWZJDuWBlUTqLp1wNauGA+Q=; b=wW/UHnth5+prvaGfa/CDLxu1X0Z+EcpGYI+ur0rH2gbSVw5e65SqS+SURK6UuQJww0Z3il s4xIHhoR8SflSyScZG/lDLU1muvNNU8U3hR6Xqwme/hxlwtoc3DMG/lmlzSsTdrA8KRl0n ZIXLi4MGOgwHnDYR9d1v+YJ0GTyD5RvYwTXpZxv04CCbd0natKU8cu8ppgMpcOWqqWfzrq fghTVPVd9rKatbSim/CbpXGVEQcDgCGHJfnpGcVPRr9ZKHe1Ly3mIWj8HK9Ka6DRJvy7km NPQwR4u+FH4iZ9rq98z+78acqTZcsRODkYgtizhEcnPicA/qgIlzsge46T+z2Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774890937; a=rsa-sha256; cv=none; b=f8NM8PUSFrRB7bbw111KbsoBzh9aNhFfVdymDk3QxZrXcr+wzOgxqrdt1kAitaqCS1OsN2 N6R+0+2fLnLK4Kfl3lCSL1XL1BEedUFfSQpPSfioqWI/KbYWAb11qophozMYluoO4K4PqV I73XnI+YfWjO38GAkd6FIe5S7ELQAckRmhsrt8Uh00fYVC3BeAAnBOQDyrdZy5n2oMHE8P wugwWT66mmEMAnqSSGctx3QUh/MpJN+s/S8ELzFNpVhE0buvi45h0KcCuxm2j6k8YnXHSV I0cp54H1EqZiyVu6Nk7VExgaKcGV+l26rx7NZ3ErxXWcP2d/HUUC2oM0n295dw== 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=1774890937; 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=XDi/2d8+UGwz34LQZE12jWZJDuWBlUTqLp1wNauGA+Q=; b=jtPFGhL6K4zN7OYCAM1tRS15GNdw/Jr4Xm+hFryqOjghhH5cYumiJbJzBwMReXqq5imktT B+j6MAFmCFH/hkblhDS87v+XzKYi0M1PaIEDRtczQlZiSl4bdeGJGS43GMCDtLPw0sfAIp aMlSD7Avvq5DkY4eiTP6gufXThH0iYrhQ3sT387u/7fY9Uv8ED/fF47LHKKGUmoGAvK15o 7NAfvTQpmoVBI+zDFsVdYHfAPnhEr1ByXw1QG/8eUi/vRO3hb20LAWUnGAtuOaQlkDnaPS CsIejS4pTWFNISuU7Nb3cSeHJ57eSjqkL9yMcR7RTGF+Bj+1Jms1CMQUwy09Rw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkyZ11nNYzsCt for ; Mon, 30 Mar 2026 17:15:37 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 41be9 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 17:15:37 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 7cfffe25da3f - main - rtld: check for overflow in parse_integer() 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 7cfffe25da3fbc2db4bcf073ff2d240f84233973 Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 17:15:37 +0000 Message-Id: <69caafb9.41be9.20a25bdb@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=7cfffe25da3fbc2db4bcf073ff2d240f84233973 commit 7cfffe25da3fbc2db4bcf073ff2d240f84233973 Author: Konstantin Belousov AuthorDate: 2026-03-29 22:45:13 +0000 Commit: Konstantin Belousov CommitDate: 2026-03-30 16:56:52 +0000 rtld: check for overflow in parse_integer() Reviewed by: dim, emaste, markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D56151 --- libexec/rtld-elf/rtld.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c index e0de6d2e2214..1cf0d3e9ba28 100644 --- a/libexec/rtld-elf/rtld.c +++ b/libexec/rtld-elf/rtld.c @@ -6492,7 +6492,11 @@ parse_integer(const char *str) if (c < '0' || c > '9') return (-1); + if (n > INT_MAX / RADIX) + return (-1); n *= RADIX; + if (n > INT_MAX - (c - '0')) + return (-1); n += c - '0'; } From nobody Mon Mar 30 17:15:38 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 4fkyZ251Djz6X4y8 for ; Mon, 30 Mar 2026 17:15:38 +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 4fkyZ234psz3TCW for ; Mon, 30 Mar 2026 17:15:38 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774890938; 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=cfIILmeznote8oFR8wxEhNkiMiVM07ncqu4kcpPesys=; b=fK2r18B99PXxAxyFdihbqOCdBkvPB1ybQR+sH3xqjW/WlzEbAMH0SFzGdr4QTfuREKYUtZ wURECUnRA6+X/SUdSrzk1ft0pimDvJaqeR58DGdB1AF/jRdKUbKCnQZdS7ui+qgyvo61aY U1gMpNefo2FPjYH5k0RMUIA4DE0z2Ld4depOP0yh0D7SF9L3oyIPSNFYAsmnS0AZX7zR4o Ay2ZnXZFrXSSFBpwtG0bNGp4xJ63F3/VzF4dvvrawMz2KM95stlKMe940b6XIe9ogU/UNR qluEnEeU+pYaHo4keNHPtGb8guwd55zgYenemrTsu+BlI/m49h98+xmr6/a21g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774890938; a=rsa-sha256; cv=none; b=D6jqhXueZeeO0LpkILQVVghDlXXYSBGq7JLGdRryhmZ8PQVJhVs3nkQJnb3rC4cYDr/hp2 UcalLqsXCNI2NjrHAS7eipfbHXydveCegDcYjFlhsmllEDioW9sdWW2MfF1Oe7QN2garjO 3cQovvPoI11C0HF58M1o1oBd7aQcW0GlEvDF8ywAcOeg/qqsw9kv6IEQP+mr4vy+e6M6ZY 3Fro1vYx6TggUO+cG5xI3OiDyjyeqMriLjSPPNaduXFlo0Ok+ZeEZfPjptYKsMGR/8OcaS 3hQHIK8d2RSRDTqluIrQ0qsHpvMPc6hBfQHlrbJlQ4RR2u9JEvigCoeucrD1Ig== 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=1774890938; 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=cfIILmeznote8oFR8wxEhNkiMiVM07ncqu4kcpPesys=; b=LqlhfHEkKWhJaVTrGalSMoO8NczXQO9cnwY7hxAVNMzWLjEZORDe67YW0zRAC2kI2HNZJy xDltrQiWYS8KUU2IBWzJ1wwpeVtxsH3mbipOYgwsccFNPy+5UsqHnoBi6SOuo2vVl+fCE8 dAZ+PZv69LfL/0qha1L/hSeCtS4yOEMrTj7m1YGhXtFvESknmY/itHoJMN27ozs4PR3ydF EwZG7Oe92ALYvVow717d6dCXkqPPzJqvlRmYO9rNYIdcR60uCxMTxWnnZOvyPxORrVn5ip mKbgFJ7kiM9EpWnVAhlVVLniGMDT50+8fO15Xz0sR1u+Kjry3I3dSSwMomK02Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkyZ22f2xzsRV for ; Mon, 30 Mar 2026 17:15:38 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 41f04 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 17:15:38 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 5bc64b7d417d - main - msun/x86: convert rest of the extern inline fenv functions to proper linkage 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5bc64b7d417dd1f105755e093f8e807bcdc2a666 Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 17:15:38 +0000 Message-Id: <69caafba.41f04.6cb73a9a@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=5bc64b7d417dd1f105755e093f8e807bcdc2a666 commit 5bc64b7d417dd1f105755e093f8e807bcdc2a666 Author: Konstantin Belousov AuthorDate: 2026-03-28 22:36:55 +0000 Commit: Konstantin Belousov CommitDate: 2026-03-30 16:57:00 +0000 msun/x86: convert rest of the extern inline fenv functions to proper linkage namely fegetexceptflag(3) fetestexcept(3) fesetround(3) fegetround(3) fesetenv(3) Same as it was done in f39754d51b7dc65c4cf9f for feclearexcept(3). PR: 277958 Reviewed by: dim Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D56139 --- lib/msun/amd64/fenv.c | 32 +++++++++++++++++++++++++++----- lib/msun/i387/fenv.c | 32 +++++++++++++++++++++++++++----- lib/msun/x86/fenv.h | 29 ++++++++++++++++++++--------- 3 files changed, 74 insertions(+), 19 deletions(-) diff --git a/lib/msun/amd64/fenv.c b/lib/msun/amd64/fenv.c index cd3b83d11585..5dd122cf457c 100644 --- a/lib/msun/amd64/fenv.c +++ b/lib/msun/amd64/fenv.c @@ -52,7 +52,11 @@ int return (__feclearexcept_int(excepts)); } -extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts); +int +(fegetexceptflag)(fexcept_t *flagp, int excepts) +{ + return (__fegetexceptflag_int(flagp, excepts)); +} int fesetexceptflag(const fexcept_t *flagp, int excepts) @@ -82,9 +86,23 @@ feraiseexcept(int excepts) return (0); } -extern inline int fetestexcept(int __excepts); -extern inline int fegetround(void); -extern inline int fesetround(int __round); +int +(fetestexcept)(int excepts) +{ + return (__fetestexcept_int(excepts)); +} + +int +(fegetround)(void) +{ + return (__fegetround_int()); +} + +int +(fesetround)(int round) +{ + return (__fesetround_int(round)); +} int fegetenv(fenv_t *envp) @@ -115,7 +133,11 @@ feholdexcept(fenv_t *envp) return (0); } -extern inline int fesetenv(const fenv_t *__envp); +int +(fesetenv)(const fenv_t *envp) +{ + return (__fesetenv_int(envp)); +} int feupdateenv(const fenv_t *envp) diff --git a/lib/msun/i387/fenv.c b/lib/msun/i387/fenv.c index e0485a3597f6..d3cdc2e1cafb 100644 --- a/lib/msun/i387/fenv.c +++ b/lib/msun/i387/fenv.c @@ -94,7 +94,11 @@ int return (__feclearexcept_int(excepts)); } -extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts); +int +(fegetexceptflag)(fexcept_t *flagp, int excepts) +{ + return (__fegetexceptflag_int(flagp, excepts)); +} int fesetexceptflag(const fexcept_t *flagp, int excepts) @@ -127,9 +131,23 @@ feraiseexcept(int excepts) return (0); } -extern inline int fetestexcept(int __excepts); -extern inline int fegetround(void); -extern inline int fesetround(int __round); +int +(fetestexcept)(int excepts) +{ + return (__fetestexcept_int(excepts)); +} + +int +(fegetround)(void) +{ + return (__fegetround_int()); +} + +int +(fesetround)(int round) +{ + return (__fesetround_int(round)); +} int fegetenv(fenv_t *envp) @@ -166,7 +184,11 @@ feholdexcept(fenv_t *envp) return (0); } -extern inline int fesetenv(const fenv_t *__envp); +int +(fesetenv)(const fenv_t *envp) +{ + return (__fesetenv_int(envp)); +} int feupdateenv(const fenv_t *envp) diff --git a/lib/msun/x86/fenv.h b/lib/msun/x86/fenv.h index b806222e5ef6..b5da37902083 100644 --- a/lib/msun/x86/fenv.h +++ b/lib/msun/x86/fenv.h @@ -108,7 +108,7 @@ int feraiseexcept(int __excepts); int feupdateenv(const fenv_t *__envp); __fenv_static inline int -fegetround(void) +__fegetround_int(void) { __uint16_t __control; @@ -144,7 +144,18 @@ fegetexcept(void) #endif /* __BSD_VISIBLE */ int feclearexcept(int); +int fegetexceptflag(fexcept_t *, int); +int fetestexcept(int); +int fesetround(int); +int fegetround(void); +int fesetenv(const fenv_t *); + #define feclearexcept(a) __feclearexcept_int(a) +#define fegetexceptflag(e, a) __fegetexceptflag_int(e, a) +#define fetestexcept(a) __fetestexcept_int(a) +#define fesetround(a) __fesetround_int(a) +#define fegetround() __fegetround_int() +#define fesetenv(a) __fesetenv_int(a) #ifdef __i386__ @@ -188,7 +199,7 @@ __feclearexcept_int(int __excepts) } __fenv_static inline int -fegetexceptflag(fexcept_t *__flagp, int __excepts) +__fegetexceptflag_int(fexcept_t *__flagp, int __excepts) { __uint32_t __mxcsr; __uint16_t __status; @@ -203,7 +214,7 @@ fegetexceptflag(fexcept_t *__flagp, int __excepts) } __fenv_static inline int -fetestexcept(int __excepts) +__fetestexcept_int(int __excepts) { __uint32_t __mxcsr; __uint16_t __status; @@ -217,7 +228,7 @@ fetestexcept(int __excepts) } __fenv_static inline int -fesetround(int __round) +__fesetround_int(int __round) { __uint32_t __mxcsr; __uint16_t __control; @@ -241,7 +252,7 @@ fesetround(int __round) } __fenv_static inline int -fesetenv(const fenv_t *__envp) +__fesetenv_int(const fenv_t *__envp) { fenv_t __env = *__envp; __uint32_t __mxcsr; @@ -283,7 +294,7 @@ __feclearexcept_int(int __excepts) } __fenv_static inline int -fegetexceptflag(fexcept_t *__flagp, int __excepts) +__fegetexceptflag_int(fexcept_t *__flagp, int __excepts) { __uint32_t __mxcsr; __uint16_t __status; @@ -295,7 +306,7 @@ fegetexceptflag(fexcept_t *__flagp, int __excepts) } __fenv_static inline int -fetestexcept(int __excepts) +__fetestexcept_int(int __excepts) { __uint32_t __mxcsr; __uint16_t __status; @@ -306,7 +317,7 @@ fetestexcept(int __excepts) } __fenv_static inline int -fesetround(int __round) +__fesetround_int(int __round) { __uint32_t __mxcsr; __uint16_t __control; @@ -328,7 +339,7 @@ fesetround(int __round) } __fenv_static inline int -fesetenv(const fenv_t *__envp) +__fesetenv_int(const fenv_t *__envp) { /* From nobody Mon Mar 30 17:15:39 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 4fkyZ35p7Bz6X5dR for ; Mon, 30 Mar 2026 17:15:39 +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 4fkyZ33wfTz3TCf for ; Mon, 30 Mar 2026 17:15:39 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774890939; 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=irhnqA48VuUR3EypiJthEMdPASI1p8BVV8UKUVCw60g=; b=I9mdDuw4q9BVjZC8ghWuMFuJL+BlcnDg5wzjV1OqaYKjn8bnmRaNpA19fVua0HNuVr1TAm qT8Qftdzmy0GT7waawQcSdtO3Ql2ATdk38nTf7nC4k4awkabMvjrYamqzdOv7+hcNn8tle Yj7ewl6LUfsgYTAKzT91zWy79ugOxHYL2IC2oeLBJVyoElXWTR/JxsdVSi7OIZ2d1xpxki UJdDtY8vwsea0F69sNzp7xgB0XYYbxSlTuMwkqQTEcXs9E/ubinRGKD64lrhJ8ha6ZcSCU pA5CQ9ksoXZLdF91OHTa3rZfEsQsZEx0M/CLeTxWasX5bvhm/lmB7+y9BvoB2Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774890939; a=rsa-sha256; cv=none; b=wji/bl2r+r7NzLtfL/HjrqLAxJT1zyYk4zFcPxHE5tBZIfoX6Fsm7BEEVq4qMHH50YcpbI gJkjcCFWDU66nDiX77v3qTjZowapUtfEgOzTOBL6xiWpEGnacfrOAd19a0YvZNULbVFDcH 5TcOHN6SC8gVBpHfvzvL+jfFbVYSEKSqL1UdDpcVprDI+pJI+f9WMhqlBcXoBg3vbDeOIC z1hZDyxsqxlPLUcePYog60ZR9OWAs06IrmPs92vvQR1KSn26aM4uQ4/v3SDcPPenhehQQ1 +RJtQWObFrCVafcoQQBa39uXzqYy12IG9xeB85BUOVtRieRu6pFkR2tbzZMMDA== 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=1774890939; 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=irhnqA48VuUR3EypiJthEMdPASI1p8BVV8UKUVCw60g=; b=NWDHMZPd5YTJPQlnGOSn35sv4CBIClt/cCih23tUzuJzoXNMXnbcQxy9CauWsF8K7nn0yu LijARloW39x7cYJHCyTPpHcwPOS5PpSGITZdVr90JYAoamfqoZTzu86wplMiPC1NnHrohD TulrY4u3M7YsnEuGSJ9SzZDP07g9Q30aFzETkqPP6DQHXdm8jgNr7cHRLQuuwP95IFXlh3 xPx63/xqCqRJo03aoLn4lfV5DfWoNbFVsZw8iQ7Kp5HfBRHHBRMqXE7jJXyfqrAsA0Y7jN jwOpJi6y44RMOcBDdcmGbBujs3LaVhCjuH4gfp8fMjL4K0/mnbXKoXdkD77Dwg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkyZ33Qg8zsBM for ; Mon, 30 Mar 2026 17:15:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 408c4 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 17:15:39 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 3a01e1e1a50c - main - msun/aarch64: convert fenv functions to proper linkage 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 3a01e1e1a50cb9a9594aac2148dc920a6b295428 Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 17:15:39 +0000 Message-Id: <69caafbb.408c4.7b20a1e1@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=3a01e1e1a50cb9a9594aac2148dc920a6b295428 commit 3a01e1e1a50cb9a9594aac2148dc920a6b295428 Author: Konstantin Belousov AuthorDate: 2026-03-28 23:13:44 +0000 Commit: Konstantin Belousov CommitDate: 2026-03-30 16:57:00 +0000 msun/aarch64: convert fenv functions to proper linkage namely fegetexceptflag(3) fesetexceptflag(3) feraiseexcept(3) fetestexcept(3) fegetround(3) fesetround(3) fegetenv(3) feholdexcept(3) fesetenv(3) feupdateenv(3) feenableexcept(3) fedisableexcept(3) fegetexcept(3) PR: 277958 Reviewed by: dim Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D56139 --- lib/msun/aarch64/fenv.c | 72 ++++++++++++++++++++++++++++++++++++++++--------- lib/msun/aarch64/fenv.h | 41 +++++++++++++++++++++------- 2 files changed, 90 insertions(+), 23 deletions(-) diff --git a/lib/msun/aarch64/fenv.c b/lib/msun/aarch64/fenv.c index 4c54656be7d3..5d626f66516f 100644 --- a/lib/msun/aarch64/fenv.c +++ b/lib/msun/aarch64/fenv.c @@ -44,16 +44,62 @@ int return (__feclearexcept_int(excepts)); } -extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts); -extern inline int fesetexceptflag(const fexcept_t *__flagp, int __excepts); -extern inline int feraiseexcept(int __excepts); -extern inline int fetestexcept(int __excepts); -extern inline int fegetround(void); -extern inline int fesetround(int __round); -extern inline int fegetenv(fenv_t *__envp); -extern inline int feholdexcept(fenv_t *__envp); -extern inline int fesetenv(const fenv_t *__envp); -extern inline int feupdateenv(const fenv_t *__envp); -extern inline int feenableexcept(int __mask); -extern inline int fedisableexcept(int __mask); -extern inline int fegetexcept(void); +int +(fegetexceptflag)(fexcept_t *flagp, int excepts) +{ + return (__fegetexceptflag_int(flagp, excepts)); +} + +int +(fesetexceptflag)(const fexcept_t *flagp, int excepts) +{ + return (__fesetexceptflag_int(flagp, excepts)); +} + +int +(feraiseexcept)(int excepts) +{ + return (__feraiseexcept_int(excepts)); +} + +int +(fetestexcept)(int excepts) +{ + return (__fetestexcept_int(excepts)); +} + +int +(fegetround)(void) +{ + return (__fegetround_int()); +} + +int +(fesetround)(int round) +{ + return (__fesetround_int(round)); +} + +int +(fegetenv)(fenv_t *envp) +{ + return (__fegetenv_int(envp)); +} + +int +(feholdexcept)(fenv_t *envp) +{ + return (__feholdexcept_int(envp)); +} + +int +(fesetenv)(const fenv_t *envp) +{ + return (__fesetenv_int(envp)); +} + +int +(feupdateenv)(const fenv_t *envp) +{ + return (__feupdateenv_int(envp)); +} diff --git a/lib/msun/aarch64/fenv.h b/lib/msun/aarch64/fenv.h index d125978b887b..32a03ee1eb49 100644 --- a/lib/msun/aarch64/fenv.h +++ b/lib/msun/aarch64/fenv.h @@ -82,7 +82,28 @@ extern const fenv_t __fe_dfl_env; #define __msr_fpsr(__r) __asm __volatile("msr fpsr, %0" : : "r" (__r)) int feclearexcept(int); +int fegetexceptflag(fexcept_t *, int); +int fesetexceptflag(const fexcept_t *, int); +int feraiseexcept(int); +int fetestexcept(int); +int fegetround(void); +int fesetround(int); +int fegetenv(fenv_t *); +int feholdexcept(fenv_t *); +int fesetenv(const fenv_t *); +int feupdateenv(const fenv_t *); + #define feclearexcept(a) __feclearexcept_int(a) +#define fegetexceptflag(e, a) __fegetexceptflag_int(e, a) +#define fesetexceptflag(e, a) __fesetexceptflag_int(e, a) +#define feraiseexcept(a) __feraiseexcept_int(a) +#define fetestexcept(a) __fetestexcept_int(a) +#define fegetround() __fegetround_int() +#define fesetround(a) __fesetround_int(a) +#define fegetenv(e) __fegetenv_int(e) +#define feholdexcept(e) __feholdexcept_int(e) +#define fesetenv(e) __fesetenv_int(e) +#define feupdateenv(e) __feupdateenv_int(e) __fenv_static inline int __feclearexcept_int(int __excepts) @@ -96,7 +117,7 @@ __feclearexcept_int(int __excepts) } __fenv_static inline int -fegetexceptflag(fexcept_t *__flagp, int __excepts) +__fegetexceptflag_int(fexcept_t *__flagp, int __excepts) { fexcept_t __r; @@ -106,7 +127,7 @@ fegetexceptflag(fexcept_t *__flagp, int __excepts) } __fenv_static inline int -fesetexceptflag(const fexcept_t *__flagp, int __excepts) +__fesetexceptflag_int(const fexcept_t *__flagp, int __excepts) { fexcept_t __r; @@ -118,7 +139,7 @@ fesetexceptflag(const fexcept_t *__flagp, int __excepts) } __fenv_static inline int -feraiseexcept(int __excepts) +__feraiseexcept_int(int __excepts) { fexcept_t __r; @@ -129,7 +150,7 @@ feraiseexcept(int __excepts) } __fenv_static inline int -fetestexcept(int __excepts) +__fetestexcept_int(int __excepts) { fexcept_t __r; @@ -138,7 +159,7 @@ fetestexcept(int __excepts) } __fenv_static inline int -fegetround(void) +__fegetround_int(void) { fenv_t __r; @@ -147,7 +168,7 @@ fegetround(void) } __fenv_static inline int -fesetround(int __round) +__fesetround_int(int __round) { fenv_t __r; @@ -161,7 +182,7 @@ fesetround(int __round) } __fenv_static inline int -fegetenv(fenv_t *__envp) +__fegetenv_int(fenv_t *__envp) { __uint64_t fpcr; __uint64_t fpsr; @@ -174,7 +195,7 @@ fegetenv(fenv_t *__envp) } __fenv_static inline int -feholdexcept(fenv_t *__envp) +__feholdexcept_int(fenv_t *__envp) { fenv_t __r; @@ -191,7 +212,7 @@ feholdexcept(fenv_t *__envp) } __fenv_static inline int -fesetenv(const fenv_t *__envp) +__fesetenv_int(const fenv_t *__envp) { __msr_fpcr((*__envp) >> 32); @@ -200,7 +221,7 @@ fesetenv(const fenv_t *__envp) } __fenv_static inline int -feupdateenv(const fenv_t *__envp) +__feupdateenv_int(const fenv_t *__envp) { fexcept_t __r; From nobody Mon Mar 30 17:15:40 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 4fkyZ5045jz6X5R0 for ; Mon, 30 Mar 2026 17:15:41 +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 4fkyZ44kqbz3TT5 for ; Mon, 30 Mar 2026 17:15:40 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774890940; 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=oNQ+mfUgFVnyIz+3WapqV7Z3Ku9eGDCm1z1ebHBCYbo=; b=VuW+lJ6fGSIgszYG8zrRikwUjQ7+OY1Ns8/grrikOJLwsAUXxnzvnZqaRR3bsBw6rH4Dum ulhQLFC0Z3YGl5gbl7yL6J3MElxeLdJPDCYjrXLs2re/xBDRHMxVVybqe1XsWuxKVWsqmM AS6qaw4Bj3CFoAe0hhItrytS/y0kLjR8fcFGktfInG7TWt13hLv7uyOoYq+oTi8lFfCiP2 fKX+mdJmH00w0RLAlLkYEeUxtW4HgsPaMOK9AJ+Id/GPXdeZdwYRxfGrqxkLWidmvJtxBw Efxn3rjU+KUbm9pdgadopwyM2Q7KKVW26gVrzUB8UzZIpeuWjtsbm3VRkhbCYQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774890940; a=rsa-sha256; cv=none; b=P10MpaYJfoCOhlEJxyPRr7Iub5tlUUsVmbZjvoyzuJ63eA0H4zFktd0ND2oIvm+effITpT cqG7Zw94cV3eOlxwYaisoH4IQX5FiCzx2BhQ96HNUO0l2JzqDwXdH6JulVYeCnFbrm/Rn2 XQjmVRfOHw4iu90TtcT0daJnmCYqZIgHpzNlo2bceTL+hgOFfGHJiMspfRhykxljiC0tGD zyA7DXdjzQYhDpugPoNRrsct5HZ4sW0jARjR4EmWVOx2BzIzboyYcd8qo7+5fSYRgXmn93 3fcU0ihUAR+gvfgI7/HyuD4auyS/jIf1erXxq9HyynKIOJuB4HKwkPYVa90ElQ== 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=1774890940; 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=oNQ+mfUgFVnyIz+3WapqV7Z3Ku9eGDCm1z1ebHBCYbo=; b=sHQ8NuXB+PsVsTKN88ejafNorLj0G3wVhQpTOj7piPpdVJsrJJe6SZFCRXDmYdI0JNKuvE haj03KMsizQawuS9W0ywiEXdSbSkGHlOYPUqHeJTIVU2vx92GXsjtLaPfs65j+IFTiGTUO e11dTFEF/Vp/9/LlAP0izTqyiLNNHwzmE/u2T6FdGCm1mLdpzaL5AbbBGlpTpM/rhbIjUU k9cK13VPICJvu14fYPByqpHgNGIvn8HmiDRlwi5HEpN8eCYrXUYdSJLrJHUF16oNDDpvR1 bCxDaxyJY+r1c+KbcLClziNFDdnqsSY1N2dSSrcB0CYdnjULXi+rs46KUPnvOw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkyZ44FKjzsGf for ; Mon, 30 Mar 2026 17:15:40 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 41a15 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 17:15:40 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 6b89f5360f84 - main - msun/riscv: convert fenv functions to proper linkage 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6b89f5360f8441ffd1a3e8db7375ed3ccdba7d2a Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 17:15:40 +0000 Message-Id: <69caafbc.41a15.30d6ab0d@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=6b89f5360f8441ffd1a3e8db7375ed3ccdba7d2a commit 6b89f5360f8441ffd1a3e8db7375ed3ccdba7d2a Author: Konstantin Belousov AuthorDate: 2026-03-29 01:27:30 +0000 Commit: Konstantin Belousov CommitDate: 2026-03-30 16:57:01 +0000 msun/riscv: convert fenv functions to proper linkage namely fegetexceptflag(3) fesetexceptflag(3) feraiseexcept(3) fetestexcept(3) fegetround(3) fesetround(3) fegetenv(3) feholdexcept(3) fesetenv(3) feupdateenv(3) feenableexcept(3) fedisableexcept(3) fegetexcept(3) PR: 277958 Reviewed by: dim Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D56139 --- lib/msun/riscv/fenv.c | 84 +++++++++++++++++++++++++++++++++++++++++++-------- lib/msun/riscv/fenv.h | 51 +++++++++++++++++++++++-------- 2 files changed, 110 insertions(+), 25 deletions(-) diff --git a/lib/msun/riscv/fenv.c b/lib/msun/riscv/fenv.c index 4d1b2cb2f611..1f1f8eddc2d6 100644 --- a/lib/msun/riscv/fenv.c +++ b/lib/msun/riscv/fenv.c @@ -43,16 +43,74 @@ int return (__feclearexcept_int(excepts)); } -extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts); -extern inline int fesetexceptflag(const fexcept_t *__flagp, int __excepts); -extern inline int feraiseexcept(int __excepts); -extern inline int fetestexcept(int __excepts); -extern inline int fegetround(void); -extern inline int fesetround(int __round); -extern inline int fegetenv(fenv_t *__envp); -extern inline int feholdexcept(fenv_t *__envp); -extern inline int fesetenv(const fenv_t *__envp); -extern inline int feupdateenv(const fenv_t *__envp); -extern inline int feenableexcept(int __mask); -extern inline int fedisableexcept(int __mask); -extern inline int fegetexcept(void); +int +(fegetexceptflag)(fexcept_t *flagp, int excepts) +{ + return (__fegetexceptflag_int(flagp, excepts)); +} + +int +(fesetexceptflag)(const fexcept_t *flagp, int excepts) +{ + return (__fesetexceptflag_int(flagp, excepts)); +} + +int +(feraiseexcept)(int excepts) +{ + return (__feraiseexcept_int(excepts)); +} + +int +(fetestexcept)(int excepts) +{ + return (__fetestexcept_int(excepts)); +} + +int +(fegetround)(void) +{ + return (__fegetround_int()); +} + +int +(fesetround)(int round) +{ + return (__fesetround_int(round)); +} + +int +(fegetenv)(fenv_t *envp) +{ + return (__fegetenv_int(envp)); +} + +int +(feholdexcept)(fenv_t *envp) +{ + return (__feholdexcept_int(envp)); +} + +int +(fesetenv)(const fenv_t *envp) +{ + return (__fesetenv_int(envp)); +} + +int +(feupdateenv)(const fenv_t *envp) +{ + return (__feupdateenv_int(envp)); +} + +int +(feenableexcept)(int mask) +{ + return (__feenableexcept_int(mask)); +} + +int +(fedisableexcept)(int mask) +{ + return (__fedisableexcept_int(mask)); +} diff --git a/lib/msun/riscv/fenv.h b/lib/msun/riscv/fenv.h index 4e8f81aa04c1..1059744941f3 100644 --- a/lib/msun/riscv/fenv.h +++ b/lib/msun/riscv/fenv.h @@ -80,7 +80,28 @@ extern const fenv_t __fe_dfl_env; #define __wfs(__fcsr) __asm __volatile("csrw fcsr, %0" :: "r" (__fcsr)) int feclearexcept(int); +int fegetexceptflag(fexcept_t *, int); +int fesetexceptflag(const fexcept_t *, int); +int feraiseexcept(int); +int fetestexcept(int); +int fegetround(void); +int fesetround(int); +int fegetenv(fenv_t *); +int feholdexcept(fenv_t *); +int fesetenv(const fenv_t *); +int feupdateenv(const fenv_t *); + #define feclearexcept(a) __feclearexcept_int(a) +#define fegetexceptflag(e, a) __fegetexceptflag_int(e, a) +#define fesetexceptflag(e, a) __fesetexceptflag_int(e, a) +#define feraiseexcept(a) __feraiseexcept_int(a) +#define fetestexcept(a) __fetestexcept_int(a) +#define fegetround() __fegetround_int() +#define fesetround(a) __fesetround_int(a) +#define fegetenv(e) __fegetenv_int(e) +#define feholdexcept(e) __feholdexcept_int(e) +#define fesetenv(e) __fesetenv_int(e) +#define feupdateenv(e) __feupdateenv_int(e) __fenv_static inline int __feclearexcept_int(int __excepts) @@ -92,7 +113,7 @@ __feclearexcept_int(int __excepts) } __fenv_static inline int -fegetexceptflag(fexcept_t *__flagp, int __excepts) +__fegetexceptflag_int(fexcept_t *__flagp, int __excepts) { fexcept_t __fcsr; @@ -103,7 +124,7 @@ fegetexceptflag(fexcept_t *__flagp, int __excepts) } __fenv_static inline int -fesetexceptflag(const fexcept_t *__flagp, int __excepts) +__fesetexceptflag_int(const fexcept_t *__flagp, int __excepts) { fexcept_t __fcsr; @@ -115,7 +136,7 @@ fesetexceptflag(const fexcept_t *__flagp, int __excepts) } __fenv_static inline int -feraiseexcept(int __excepts) +__feraiseexcept_int(int __excepts) { __asm __volatile("csrs fflags, %0" :: "r"(__excepts)); @@ -124,7 +145,7 @@ feraiseexcept(int __excepts) } __fenv_static inline int -fetestexcept(int __excepts) +__fetestexcept_int(int __excepts) { fexcept_t __fcsr; @@ -134,7 +155,7 @@ fetestexcept(int __excepts) } __fenv_static inline int -fegetround(void) +__fegetround_int(void) { fexcept_t __fcsr; @@ -144,7 +165,7 @@ fegetround(void) } __fenv_static inline int -fesetround(int __round) +__fesetround_int(int __round) { fexcept_t __fcsr; @@ -160,7 +181,7 @@ fesetround(int __round) } __fenv_static inline int -fegetenv(fenv_t *__envp) +__fegetenv_int(fenv_t *__envp) { __rfs(*__envp); @@ -169,7 +190,7 @@ fegetenv(fenv_t *__envp) } __fenv_static inline int -feholdexcept(fenv_t *__envp __unused) +__feholdexcept_int(fenv_t *__envp __unused) { /* No exception traps. */ @@ -178,7 +199,7 @@ feholdexcept(fenv_t *__envp __unused) } __fenv_static inline int -fesetenv(const fenv_t *__envp) +__fesetenv_int(const fenv_t *__envp) { __wfs(*__envp); @@ -187,7 +208,7 @@ fesetenv(const fenv_t *__envp) } __fenv_static inline int -feupdateenv(const fenv_t *__envp) +__feupdateenv_int(const fenv_t *__envp) { fexcept_t __fcsr; @@ -200,8 +221,14 @@ feupdateenv(const fenv_t *__envp) #if __BSD_VISIBLE +int feenableexcept(int); +int fedisableexcept(int); + +#define feenableexcept(a) __feenableexcept_int(a) +#define fedisableexcept(a) __fedisableexcept_int(a) + __fenv_static inline int -feenableexcept(int __mask __unused) +__feenableexcept_int(int __mask __unused) { /* No exception traps. */ @@ -210,7 +237,7 @@ feenableexcept(int __mask __unused) } __fenv_static inline int -fedisableexcept(int __mask __unused) +__fedisableexcept_int(int __mask __unused) { /* No exception traps. */ From nobody Mon Mar 30 17:15:41 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 4fkyZ62fxSz6X5Wm for ; Mon, 30 Mar 2026 17:15:42 +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 4fkyZ55TKsz3TQs for ; Mon, 30 Mar 2026 17:15:41 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774890941; 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=3yOXkQVdxqoWfLrDNogpWj6t8JR0ViApXNlFQwVmpq8=; b=boscmRD1CO8xwWYhwCxqOkKW06j7C8HXOfmZCnLsPVxPWFM3Jxg09fQnsF69d8mPXc12Gy AldUxrGUlSMUTnY47ltxdKDZAS5eCBQlWZ3qbuE2a9UGlEV0LI6qW6oHUTVlnfmleUmsEN oC9rcn72tIeWRbkgKGZHgxUktvjE/nvZ9dzwkhw8jcFzndzWf0KBUtCrsraPA1q7S0AX/0 w5ogTdmlKcxP2Ifzub3ffTsYRbitD2V+JWs/2KUecXAfBmeignT8ahZGC+ewaxoc5Vx8XG DE9QtL5J5YPb22hKc3/Nnp3CQMw5O7xY4bUhdSO+dNju2Vn1JIPKrXGkqnLXWg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774890941; a=rsa-sha256; cv=none; b=V6qbwFzGFyeaIoA4mKJ2J7GVYNDm5j3QTn4IK7uDZdUSHLNBOGcuE5TfEFTn4gooOAZYV4 zYCGyAp/fSsKVaiy0Sx4grfQwcyao/O71KuNGpl6CF0ObbkWJjttMio6CYsxbgc1U9sDNT 7YDMTGBNZ5pJcG9jHnL2dUAWdDKhSVunEg1fxyrtT10xb9ZVgMyoCccwzP8tkNRLKBKtJB U8HxBrgnJpd3PY/9VHkSmIpMjfJzCAWYQM8rKsrgU9SWeZW2N29NV0eIB/QLXuSLJrNDd5 CQmXOikPTXi03v8EX17pCsCalMmpOkpo+65B+EJP+1v8DUQ4UCCHKZvDD7GV1Q== 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=1774890941; 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=3yOXkQVdxqoWfLrDNogpWj6t8JR0ViApXNlFQwVmpq8=; b=O1vGZwzu7BqmsEMbGZajnl8pzgFWDN6I3wxESRMgDUzUEw+tx+1PNNnACQO/bKkQktd7IS pJQJKWyD6071vkd1v0VHEgr44WRwJ45hmhPUIZupLJqC23uU9UnwOsiWl17OWVJlvqR/K3 HRa630e2qPhsHmx0lhVVxgQaxEEJZR/FcSuBVXYFRWPLrsONqUa57QhO2mou6uCF7k4H3+ nKiPvC1BrAkJeAFSfqmuuomziKVaOpqfBjozz0CWVU5/+1s47jlHLFBWAHYBteIN9vflN/ KhUnFZouVsxBVpiXMGfFiFfpQcVRs486IRBsWLpXfKOp+Zol1X/2TUPfsO/rCg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkyZ54kD1zsGg for ; Mon, 30 Mar 2026 17:15:41 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 41bed by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 17:15:41 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: e4505a58a77f - main - msun/powerpc: convert fenv functions to proper linkage 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: e4505a58a77f6f4f2df60d26ea99710af6c6b3cf Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 17:15:41 +0000 Message-Id: <69caafbd.41bed.3c70cfd0@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=e4505a58a77f6f4f2df60d26ea99710af6c6b3cf commit e4505a58a77f6f4f2df60d26ea99710af6c6b3cf Author: Konstantin Belousov AuthorDate: 2026-03-29 02:06:02 +0000 Commit: Konstantin Belousov CommitDate: 2026-03-30 16:57:01 +0000 msun/powerpc: convert fenv functions to proper linkage namely fegetexceptflag(3) fesetexceptflag(3) feraiseexcept(3) fetestexcept(3) fegetround(3) fesetround(3) fegetenv(3) feholdexcept(3) fesetenv(3) feupdateenv(3) feenableexcept(3) fedisableexcept(3) fegetexcept(3) PR: 277958 Reviewed by: dim Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D56139 --- lib/msun/powerpc/fenv.c | 83 ++++++++++++++++++++++++++++++++++++++++++------- lib/msun/powerpc/fenv.h | 51 +++++++++++++++++++++++------- 2 files changed, 110 insertions(+), 24 deletions(-) diff --git a/lib/msun/powerpc/fenv.c b/lib/msun/powerpc/fenv.c index bcf78d5c096e..d1926155d087 100644 --- a/lib/msun/powerpc/fenv.c +++ b/lib/msun/powerpc/fenv.c @@ -41,15 +41,74 @@ int return (__feclearexcept_int(excepts)); } -extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts); -extern inline int fesetexceptflag(const fexcept_t *__flagp, int __excepts); -extern inline int feraiseexcept(int __excepts); -extern inline int fetestexcept(int __excepts); -extern inline int fegetround(void); -extern inline int fesetround(int __round); -extern inline int fegetenv(fenv_t *__envp); -extern inline int feholdexcept(fenv_t *__envp); -extern inline int fesetenv(const fenv_t *__envp); -extern inline int feupdateenv(const fenv_t *__envp); -extern inline int feenableexcept(int __mask); -extern inline int fedisableexcept(int __mask); +int +(fegetexceptflag)(fexcept_t *flagp, int excepts) +{ + return (__fegetexceptflag_int(flagp, excepts)); +} + +int +(fesetexceptflag)(const fexcept_t *flagp, int excepts) +{ + return (__fesetexceptflag_int(flagp, excepts)); +} + +int +(feraiseexcept)(int excepts) +{ + return (__feraiseexcept_int(excepts)); +} + +int +(fetestexcept)(int excepts) +{ + return (__fetestexcept_int(excepts)); +} + +int +(fegetround)(void) +{ + return (__fegetround_int()); +} + +int +(fesetround)(int round) +{ + return (__fesetround_int(round)); +} + +int +(fegetenv)(fenv_t *envp) +{ + return (__fegetenv_int(envp)); +} + +int +(feholdexcept)(fenv_t *envp) +{ + return (__feholdexcept_int(envp)); +} + +int +(fesetenv)(const fenv_t *envp) +{ + return (__fesetenv_int(envp)); +} + +int +(feupdateenv)(const fenv_t *envp) +{ + return (__feupdateenv_int(envp)); +} + +int +(feenableexcept)(int mask) +{ + return (__feenableexcept_int(mask)); +} + +int +(fedisableexcept)(int mask) +{ + return (__fedisableexcept_int(mask)); +} diff --git a/lib/msun/powerpc/fenv.h b/lib/msun/powerpc/fenv.h index 74a71ef39e5a..f6fb354470c7 100644 --- a/lib/msun/powerpc/fenv.h +++ b/lib/msun/powerpc/fenv.h @@ -112,7 +112,28 @@ union __fpscr { }; int feclearexcept(int); +int fegetexceptflag(fexcept_t *, int); +int fesetexceptflag(const fexcept_t *, int); +int feraiseexcept(int); +int fetestexcept(int); +int fegetround(void); +int fesetround(int); +int fegetenv(fenv_t *); +int feholdexcept(fenv_t *); +int fesetenv(const fenv_t *); +int feupdateenv(const fenv_t *); + #define feclearexcept(a) __feclearexcept_int(a) +#define fegetexceptflag(e, a) __fegetexceptflag_int(e, a) +#define fesetexceptflag(e, a) __fesetexceptflag_int(e, a) +#define feraiseexcept(a) __feraiseexcept_int(a) +#define fetestexcept(a) __fetestexcept_int(a) +#define fegetround() __fegetround_int() +#define fesetround(a) __fesetround_int(a) +#define fegetenv(e) __fegetenv_int(e) +#define feholdexcept(e) __feholdexcept_int(e) +#define fesetenv(e) __fesetenv_int(e) +#define feupdateenv(e) __feupdateenv_int(e) __fenv_static inline int __feclearexcept_int(int __excepts) @@ -128,7 +149,7 @@ __feclearexcept_int(int __excepts) } __fenv_static inline int -fegetexceptflag(fexcept_t *__flagp, int __excepts) +__fegetexceptflag_int(fexcept_t *__flagp, int __excepts) { union __fpscr __r; @@ -138,7 +159,7 @@ fegetexceptflag(fexcept_t *__flagp, int __excepts) } __fenv_static inline int -fesetexceptflag(const fexcept_t *__flagp, int __excepts) +__fesetexceptflag_int(const fexcept_t *__flagp, int __excepts) { union __fpscr __r; @@ -152,7 +173,7 @@ fesetexceptflag(const fexcept_t *__flagp, int __excepts) } __fenv_static inline int -feraiseexcept(int __excepts) +__feraiseexcept_int(int __excepts) { union __fpscr __r; @@ -165,7 +186,7 @@ feraiseexcept(int __excepts) } __fenv_static inline int -fetestexcept(int __excepts) +__fetestexcept_int(int __excepts) { union __fpscr __r; @@ -174,7 +195,7 @@ fetestexcept(int __excepts) } __fenv_static inline int -fegetround(void) +__fegetround_int(void) { union __fpscr __r; @@ -183,7 +204,7 @@ fegetround(void) } __fenv_static inline int -fesetround(int __round) +__fesetround_int(int __round) { union __fpscr __r; @@ -197,7 +218,7 @@ fesetround(int __round) } __fenv_static inline int -fegetenv(fenv_t *__envp) +__fegetenv_int(fenv_t *__envp) { union __fpscr __r; @@ -207,7 +228,7 @@ fegetenv(fenv_t *__envp) } __fenv_static inline int -feholdexcept(fenv_t *__envp) +__feholdexcept_int(fenv_t *__envp) { union __fpscr __r; @@ -219,7 +240,7 @@ feholdexcept(fenv_t *__envp) } __fenv_static inline int -fesetenv(const fenv_t *__envp) +__fesetenv_int(const fenv_t *__envp) { union __fpscr __r; @@ -229,7 +250,7 @@ fesetenv(const fenv_t *__envp) } __fenv_static inline int -feupdateenv(const fenv_t *__envp) +__feupdateenv_int(const fenv_t *__envp) { union __fpscr __r; @@ -242,8 +263,14 @@ feupdateenv(const fenv_t *__envp) #if __BSD_VISIBLE +int feenableexcept(int); +int fedisableexcept(int); + +#define feenableexcept(a) __feenableexcept_int(a) +#define fedisableexcept(a) __fedisableexcept_int(a) + __fenv_static inline int -feenableexcept(int __mask) +__feenableexcept_int(int __mask) { union __fpscr __r; fenv_t __oldmask; @@ -256,7 +283,7 @@ feenableexcept(int __mask) } __fenv_static inline int -fedisableexcept(int __mask) +__fedisableexcept_int(int __mask) { union __fpscr __r; fenv_t __oldmask; From nobody Mon Mar 30 17:15:42 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 4fkyZ714Fmz6X5mj for ; Mon, 30 Mar 2026 17:15:43 +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 4fkyZ65n15z3TTT for ; Mon, 30 Mar 2026 17:15:42 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774890942; 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=eMcmYOrnnO6VnIq/saRBqzFvb9fVyYNQQreyfZH9si4=; b=W7BHeea9br/XubEHjIyjsK9Q5xWnol1hUF2RnDULQA+0apih3K6aeyhSyYFjnx1kHpJdgN E9BtQ9IBQ8AHJlW6ZEy3SehMMSeekPsIpR5KmBW16KtWAvXOFUVHKvxEzzyxH+oH5il0iw 2JL5hivemCwaKNUzFjGuKgAdZdSs44VzBkRk/vfg2VF3dcH8x/iCxIYAnsQGLaDkAjiMCR pMVu2oovyGEbynx4SLTUWpo3W3zvedSZ8Sq7SvaUX7ZocI+vDE5XjW2PdawJEABZPWE4aG HQfReIV7rPMzlP4I3Uz7Te6xZae3R+N9ala/aDbzejftM1NX6ZWHNPNfMuuNIg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774890942; a=rsa-sha256; cv=none; b=PCD7m1jt2dftS+J4BxqNLk1/toEl3vq9hbzaa9g2GPuNqys9xtvey8nGpuPpPUqLfsIR/l zGG3reh+3ZqPOipfPApkfYlVU/y984GtYXWj8rQ6kK+AeJBOXftOGdQWKYlhSSljF43otD tfAaNJkNezrcQknNt8Tr0yURRAI799J/wD9jxjOjeM382UgrhC2PNKPIeEMqArt7KUZpID txYm/fP2U3COPdDQNDtV8oWtbjctlP0nKo1M328VDJoLcIHZ4nHuqQSAggwycwXLzoUfTx vedweffxK6P/Rpj46ExwfgUMWoeCjZRpHudDHRIDwu/HPXpCG3uowFQzSIxdBw== 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=1774890942; 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=eMcmYOrnnO6VnIq/saRBqzFvb9fVyYNQQreyfZH9si4=; b=j709bTFmhnY7GiTn5z49FW/QapHzexqMX5Knr+Yl6HGBbgfgFzUS1GlyGlOvxW42abC3XT k51M8rSDu9rXAx29yM7tMsVaczJ/PAHuzns8kpvgbIg9QGnu8yiEt5b8mETFd8zPyn8DAz AeRnj5U27bZmRDeFgyp3+Kvu02wFAj0YfkGw+FS1Ql0fbPr7mF/ycridDpg59DtM8ylztg GrqvcYKpJEOUhnoQPkcSjzew21F5QHxQ2pNbEzHEBozfkakr92VH9tT60txHNpc/nGr8Oj X++uKP5d/LeXtsHNgu1yqr5U9gozjdVT6w4VMqZfMWkox6VdDVjrUGOdqSzdAg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkyZ6563nzsBQ for ; Mon, 30 Mar 2026 17:15:42 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3ff6d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 17:15:42 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: 70674434e242 - main - msun/arm: convert fenv functions to proper linkage 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 70674434e2424d61262322702d0415e54d8cc1a2 Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 17:15:42 +0000 Message-Id: <69caafbe.3ff6d.6d944250@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=70674434e2424d61262322702d0415e54d8cc1a2 commit 70674434e2424d61262322702d0415e54d8cc1a2 Author: Konstantin Belousov AuthorDate: 2026-03-29 03:10:18 +0000 Commit: Konstantin Belousov CommitDate: 2026-03-30 16:57:01 +0000 msun/arm: convert fenv functions to proper linkage namely fegetexceptflag(3) fesetexceptflag(3) feraiseexcept(3) fetestexcept(3) fegetround(3) fesetround(3) fegetenv(3) feholdexcept(3) fesetenv(3) feupdateenv(3) feenableexcept(3) fedisableexcept(3) fegetexcept(3) PR: 277958 Reviewed by: dim Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D56139 --- lib/msun/arm/fenv.c | 133 +++++++++++++++++++++++++++++++++++++++++----------- lib/msun/arm/fenv.h | 58 ++++++++++++++++++----- 2 files changed, 150 insertions(+), 41 deletions(-) diff --git a/lib/msun/arm/fenv.c b/lib/msun/arm/fenv.c index c8edf3fef037..620a05d51b90 100644 --- a/lib/msun/arm/fenv.c +++ b/lib/msun/arm/fenv.c @@ -76,19 +76,83 @@ int return (__feclearexcept_int(excepts)); } -extern inline int fegetexceptflag(fexcept_t *__flagp, int __excepts); -extern inline int fesetexceptflag(const fexcept_t *__flagp, int __excepts); -extern inline int feraiseexcept(int __excepts); -extern inline int fetestexcept(int __excepts); -extern inline int fegetround(void); -extern inline int fesetround(int __round); -extern inline int fegetenv(fenv_t *__envp); -extern inline int feholdexcept(fenv_t *__envp); -extern inline int fesetenv(const fenv_t *__envp); -extern inline int feupdateenv(const fenv_t *__envp); -extern inline int feenableexcept(int __mask); -extern inline int fedisableexcept(int __mask); -extern inline int fegetexcept(void); +int +(fegetexceptflag)(fexcept_t *flagp, int excepts) +{ + return (__fegetexceptflag_int(flagp, excepts)); +} + +int +(fesetexceptflag)(const fexcept_t *flagp, int excepts) +{ + return (__fesetexceptflag_int(flagp, excepts)); +} + +int +(feraiseexcept)(int excepts) +{ + return (__feraiseexcept_int(excepts)); +} + +int +(fetestexcept)(int excepts) +{ + return (__fetestexcept_int(excepts)); +} + +int +(fegetround)(void) +{ + return (__fegetround_int()); +} + +int +(fesetround)(int round) +{ + return (__fesetround_int(round)); +} + +int +(fegetenv)(fenv_t *envp) +{ + return (__fegetenv_int(envp)); +} + +int +(feholdexcept)(fenv_t *envp) +{ + return (__feholdexcept_int(envp)); +} + +int +(fesetenv)(const fenv_t *envp) +{ + return (__fesetenv_int(envp)); +} + +int +(feupdateenv)(const fenv_t *envp) +{ + return (__feupdateenv_int(envp)); +} + +int +(feenableexcept)(int mask) +{ + return (__feenableexcept_int(mask)); +} + +int +(fedisableexcept)(int mask) +{ + return (__fedisableexcept_int(mask)); +} + +int +(fegetexcept)(void) +{ + return (__fegetexcept_int()); +} #else /* !FENV_MANGLE && SOFTFP_ABI */ /* Set by libc when the VFP unit is enabled */ @@ -158,7 +222,8 @@ __softfp_round_from_vfp(int round) } } -int feclearexcept(int __excepts) +int +(feclearexcept)(int __excepts) { if (_libc_arm_fpu_present) @@ -168,7 +233,8 @@ int feclearexcept(int __excepts) return (0); } -int fegetexceptflag(fexcept_t *__flagp, int __excepts) +int +(fegetexceptflag)(fexcept_t *__flagp, int __excepts) { fexcept_t __vfp_flagp; @@ -182,7 +248,8 @@ int fegetexceptflag(fexcept_t *__flagp, int __excepts) return (0); } -int fesetexceptflag(const fexcept_t *__flagp, int __excepts) +int +(fesetexceptflag)(const fexcept_t *__flagp, int __excepts) { if (_libc_arm_fpu_present) @@ -192,7 +259,8 @@ int fesetexceptflag(const fexcept_t *__flagp, int __excepts) return (0); } -int feraiseexcept(int __excepts) +int +(feraiseexcept)(int __excepts) { if (_libc_arm_fpu_present) @@ -202,7 +270,8 @@ int feraiseexcept(int __excepts) return (0); } -int fetestexcept(int __excepts) +int +(fetestexcept)(int __excepts) { int __got_excepts; @@ -214,7 +283,8 @@ int fetestexcept(int __excepts) return (__got_excepts); } -int fegetround(void) +int +(fegetround)(void) { if (_libc_arm_fpu_present) @@ -222,7 +292,8 @@ int fegetround(void) return __softfp_fegetround(); } -int fesetround(int __round) +int +(fesetround)(int __round) { if (_libc_arm_fpu_present) @@ -232,7 +303,8 @@ int fesetround(int __round) return (0); } -int fegetenv(fenv_t *__envp) +int +(fegetenv)(fenv_t *__envp) { fenv_t __vfp_envp; @@ -245,7 +317,8 @@ int fegetenv(fenv_t *__envp) return (0); } -int feholdexcept(fenv_t *__envp) +int +(feholdexcept)(fenv_t *__envp) { fenv_t __vfp_envp; @@ -258,7 +331,8 @@ int feholdexcept(fenv_t *__envp) return (0); } -int fesetenv(const fenv_t *__envp) +int +(fesetenv)(const fenv_t *__envp) { if (_libc_arm_fpu_present) @@ -268,7 +342,8 @@ int fesetenv(const fenv_t *__envp) return (0); } -int feupdateenv(const fenv_t *__envp) +int +(feupdateenv)(const fenv_t *__envp) { if (_libc_arm_fpu_present) @@ -278,7 +353,8 @@ int feupdateenv(const fenv_t *__envp) return (0); } -int feenableexcept(int __mask) +int +(feenableexcept)(int __mask) { int __unmasked; @@ -290,7 +366,8 @@ int feenableexcept(int __mask) return (__unmasked); } -int fedisableexcept(int __mask) +int +(fedisableexcept)(int __mask) { int __unmasked; @@ -302,7 +379,8 @@ int fedisableexcept(int __mask) return (__unmasked); } -int fegetexcept(void) +int +(fegetexcept)(void) { int __unmasked; @@ -315,4 +393,3 @@ int fegetexcept(void) } #endif - diff --git a/lib/msun/arm/fenv.h b/lib/msun/arm/fenv.h index 14638dd33aa7..78ca9ef0f589 100644 --- a/lib/msun/arm/fenv.h +++ b/lib/msun/arm/fenv.h @@ -112,7 +112,39 @@ int fegetexcept(void); #define _FPU_MASK_SHIFT 8 int feclearexcept(int); +int fegetexceptflag(fexcept_t *, int); +int fesetexceptflag(const fexcept_t *, int); +int feraiseexcept(int); +int fetestexcept(int); +int fegetround(void); +int fesetround(int); +int fegetenv(fenv_t *); +int feholdexcept(fenv_t *); +int fesetenv(const fenv_t *); +int feupdateenv(const fenv_t *); +int fegetexcept(void); +#if __BSD_VISIBLE +int feenableexcept(int); +int fedisableexcept(int); +int fegetexcept(void); +#endif + #define feclearexcept(a) __feclearexcept_int(a) +#define fegetexceptflag(e, a) __fegetexceptflag_int(e, a) +#define fesetexceptflag(e, a) __fesetexceptflag_int(e, a) +#define feraiseexcept(a) __feraiseexcept_int(a) +#define fetestexcept(a) __fetestexcept_int(a) +#define fegetround() __fegetround_int() +#define fesetround(a) __fesetround_int(a) +#define fegetenv(e) __fegetenv_int(e) +#define feholdexcept(e) __feholdexcept_int(e) +#define fesetenv(e) __fesetenv_int(e) +#define feupdateenv(e) __feupdateenv_int(e) +#if __BSD_VISIBLE +#define feenableexcept(a) __feenableexcept_int(a) +#define fedisableexcept(a) __fedisableexcept_int(a) +#define fegetexcept() __fegetexcept_int() +#endif __fenv_static inline int __feclearexcept_int(int __excepts) @@ -126,7 +158,7 @@ __feclearexcept_int(int __excepts) } __fenv_static inline int -fegetexceptflag(fexcept_t *__flagp, int __excepts) +__fegetexceptflag_int(fexcept_t *__flagp, int __excepts) { fexcept_t __fpsr; @@ -136,7 +168,7 @@ fegetexceptflag(fexcept_t *__flagp, int __excepts) } __fenv_static inline int -fesetexceptflag(const fexcept_t *__flagp, int __excepts) +__fesetexceptflag_int(const fexcept_t *__flagp, int __excepts) { fexcept_t __fpsr; @@ -148,7 +180,7 @@ fesetexceptflag(const fexcept_t *__flagp, int __excepts) } __fenv_static inline int -feraiseexcept(int __excepts) +__feraiseexcept_int(int __excepts) { fexcept_t __ex = __excepts; @@ -157,7 +189,7 @@ feraiseexcept(int __excepts) } __fenv_static inline int -fetestexcept(int __excepts) +__fetestexcept_int(int __excepts) { fexcept_t __fpsr; @@ -166,7 +198,7 @@ fetestexcept(int __excepts) } __fenv_static inline int -fegetround(void) +__fegetround_int(void) { fenv_t __fpsr; @@ -175,7 +207,7 @@ fegetround(void) } __fenv_static inline int -fesetround(int __round) +__fesetround_int(int __round) { fenv_t __fpsr; @@ -187,7 +219,7 @@ fesetround(int __round) } __fenv_static inline int -fegetenv(fenv_t *__envp) +__fegetenv_int(fenv_t *__envp) { vmrs_fpscr(*__envp); @@ -195,7 +227,7 @@ fegetenv(fenv_t *__envp) } __fenv_static inline int -feholdexcept(fenv_t *__envp) +__feholdexcept_int(fenv_t *__envp) { fenv_t __env; @@ -207,7 +239,7 @@ feholdexcept(fenv_t *__envp) } __fenv_static inline int -fesetenv(const fenv_t *__envp) +__fesetenv_int(const fenv_t *__envp) { vmsr_fpscr(*__envp); @@ -215,7 +247,7 @@ fesetenv(const fenv_t *__envp) } __fenv_static inline int -feupdateenv(const fenv_t *__envp) +__feupdateenv_int(const fenv_t *__envp) { fexcept_t __fpsr; @@ -230,7 +262,7 @@ feupdateenv(const fenv_t *__envp) /* We currently provide no external definitions of the functions below. */ __fenv_static inline int -feenableexcept(int __mask) +__feenableexcept_int(int __mask) { fenv_t __old_fpsr, __new_fpsr; @@ -242,7 +274,7 @@ feenableexcept(int __mask) } __fenv_static inline int -fedisableexcept(int __mask) +__fedisableexcept_int(int __mask) { fenv_t __old_fpsr, __new_fpsr; @@ -254,7 +286,7 @@ fedisableexcept(int __mask) } __fenv_static inline int -fegetexcept(void) +__fegetexcept_int(void) { fenv_t __fpsr; From nobody Mon Mar 30 17:15:43 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 4fkyZ84DmYz6X5h3 for ; Mon, 30 Mar 2026 17:15:44 +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 4fkyZ76NcYz3TWn for ; Mon, 30 Mar 2026 17:15:43 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774890943; 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=t2JWxHrxvJ8gwBw7YPkWF64ctWZIqQ1+rCucvciGLp4=; b=sY6sgbo3SvmaNPXVQd3ZDROpG5I7GgvVzUhNVyI1Fkz/v+Bc4qomE+Kc44T/xKdxU1aVrl R7sd5yMD5KFIJicYnyTEfECDg8kt7bxTuJwnzsDKW97KvsNxAz3RXwfTPf/JAq4WHUK0zp 3L9p9AFoW82c6q1aEvfghl8tdxmKz4UoEfjP/n3185I4Zl9NApYqgNy19QCdXaMR/MFAbJ Hk4rgz3DZnPbslJKekxPjUiBMrKa8z2alFBJgA/MYf/I54tD4fQBV+oz/vO1M117fvnijO /pyh/J9SLgQF7vR4ndddt0fSSB4ZEmTu2HLqRShZ9+4W37AiHgCpvU4jfSAXSQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774890943; a=rsa-sha256; cv=none; b=QEF9a/d6Es7fqqTASu654HW7RF2zpNNaohd7m+4hnFkuxTnzgNO8iL8EjYrlZVavj4aKoP RTqGT+c+YZQIsREf3BbROmgSQJU7TklVXyJCl7XJAWB3Ip361BxkvggmaNuXqV+7MU4sgq 5oplpL59KQDQlpo4g3Dbm87UecmAscrZvP1gdTpMsIB7XGLammQ64gFOof3S3h49Cz4i0P Y7DKxGAxbCTALRfA4xbRIIsBcAKSvux7l/w7IbaUqPGMrtusTGPPb2w2zNyOdv5PVQe6ZY t6Dq+q3MHWS3V0oO7ZEcOQk+iB5q6j45r7i1V8eLFo+jCQ5uNYiFEWPWdO3KIg== 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=1774890943; 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=t2JWxHrxvJ8gwBw7YPkWF64ctWZIqQ1+rCucvciGLp4=; b=IWio108clh2DdQ/n3Zg0kinrd/V4z3NuhAS3YbaTxWHN46RsFb0cBkrscZpOTWHhE2q/m/ C+pNfYXuCVBtWC0D/dozsAmA5tGmOqr3Mbrv94w1rHO0hg/j/IGU4I4ICf7dAo5pCXfxrS A88RKHlCOxx4wH9pyGFEvdKMs71Amf93qno1aa/xBwKiUGxW4usu1Lk4W4JU+D10/QD3LO Og8jRau/lVAKcOpM277odavVIZT7nGc+kULyP4tguQzYJsWmEImk4sm8zFvPgzy41mJDY9 9nL47qIFdSnAPG6vQ0tgjSlv75ImwOCqP8tBiGCqr1Gv3hAPNMlr1HxWi/zGsQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fkyZ75wWbzsCw for ; Mon, 30 Mar 2026 17:15:43 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 42681 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Mon, 30 Mar 2026 17:15:43 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Konstantin Belousov Subject: git: d15733065c42 - main - msun: remove requirement to have C99 inline semantic 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: kib X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: d15733065c4221dcd5bb3622d225760f271f6fc9 Auto-Submitted: auto-generated Date: Mon, 30 Mar 2026 17:15:43 +0000 Message-Id: <69caafbf.42681.4bf1f330@gitrepo.freebsd.org> The branch main has been updated by kib: URL: https://cgit.FreeBSD.org/src/commit/?id=d15733065c4221dcd5bb3622d225760f271f6fc9 commit d15733065c4221dcd5bb3622d225760f271f6fc9 Author: Konstantin Belousov AuthorDate: 2026-03-29 01:30:03 +0000 Commit: Konstantin Belousov CommitDate: 2026-03-30 16:57:01 +0000 msun: remove requirement to have C99 inline semantic The 'extern inline' usage is removed. PR: 277958 Reviewed by: dim Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D56139 --- lib/msun/aarch64/fenv.c | 5 ----- lib/msun/amd64/fenv.c | 5 ----- lib/msun/arm/fenv.c | 5 ----- lib/msun/i387/fenv.c | 5 ----- lib/msun/powerpc/fenv.c | 5 ----- lib/msun/riscv/fenv.c | 5 ----- 6 files changed, 30 deletions(-) diff --git a/lib/msun/aarch64/fenv.c b/lib/msun/aarch64/fenv.c index 5d626f66516f..a428a9d8a271 100644 --- a/lib/msun/aarch64/fenv.c +++ b/lib/msun/aarch64/fenv.c @@ -25,7 +25,6 @@ * SUCH DAMAGE. */ -#define __fenv_static #include "fenv.h" /* @@ -34,10 +33,6 @@ */ const fenv_t __fe_dfl_env = 0; -#ifdef __GNUC_GNU_INLINE__ -#error "This file must be compiled with C99 'inline' semantics" -#endif - int (feclearexcept)(int excepts) { diff --git a/lib/msun/amd64/fenv.c b/lib/msun/amd64/fenv.c index 5dd122cf457c..fe9ecfff3b83 100644 --- a/lib/msun/amd64/fenv.c +++ b/lib/msun/amd64/fenv.c @@ -29,13 +29,8 @@ #include #include -#define __fenv_static #include "fenv.h" -#ifdef __GNUC_GNU_INLINE__ -#error "This file must be compiled with C99 'inline' semantics" -#endif - const fenv_t __fe_dfl_env = { { 0xffff0000 | __INITIAL_FPUCW__, 0xffff0000, diff --git a/lib/msun/arm/fenv.c b/lib/msun/arm/fenv.c index 620a05d51b90..2cf5bbdea28f 100644 --- a/lib/msun/arm/fenv.c +++ b/lib/msun/arm/fenv.c @@ -27,7 +27,6 @@ * SUCH DAMAGE. */ -#define __fenv_static #include "fenv.h" #include @@ -66,10 +65,6 @@ const fenv_t __fe_dfl_env = 0; #include "fenv-softfloat.h" #endif -#ifdef __GNUC_GNU_INLINE__ -#error "This file must be compiled with C99 'inline' semantics" -#endif - int (feclearexcept)(int excepts) { diff --git a/lib/msun/i387/fenv.c b/lib/msun/i387/fenv.c index d3cdc2e1cafb..bae8de2fb969 100644 --- a/lib/msun/i387/fenv.c +++ b/lib/msun/i387/fenv.c @@ -29,13 +29,8 @@ #include #include -#define __fenv_static #include "fenv.h" -#ifdef __GNUC_GNU_INLINE__ -#error "This file must be compiled with C99 'inline' semantics" -#endif - const fenv_t __fe_dfl_env = { __INITIAL_NPXCW__, 0x0000, diff --git a/lib/msun/powerpc/fenv.c b/lib/msun/powerpc/fenv.c index d1926155d087..3104b59d4dfb 100644 --- a/lib/msun/powerpc/fenv.c +++ b/lib/msun/powerpc/fenv.c @@ -26,13 +26,8 @@ * SUCH DAMAGE. */ -#define __fenv_static #include "fenv.h" -#ifdef __GNUC_GNU_INLINE__ -#error "This file must be compiled with C99 'inline' semantics" -#endif - const fenv_t __fe_dfl_env = 0x00000000; int diff --git a/lib/msun/riscv/fenv.c b/lib/msun/riscv/fenv.c index 1f1f8eddc2d6..7fdedca1f09c 100644 --- a/lib/msun/riscv/fenv.c +++ b/lib/msun/riscv/fenv.c @@ -24,13 +24,8 @@ * SUCH DAMAGE. */ -#define __fenv_static #include "fenv.h" -#ifdef __GNUC_GNU_INLINE__ -#error "This file must be compiled with C99 'inline' semantics" -#endif - /* * Hopefully the system ID byte is immutable, so it's valid to use * this as a default environment. From nobody Mon Mar 30 22:35:36 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 4fl5gK6Q8kz6Xdlh for ; Mon, 30 Mar 2026 22:35:41 +0000 (UTC) (envelope-from oliver.pntr@gmail.com) Received: from mail-yx1-xb12e.google.com (mail-yx1-xb12e.google.com [IPv6:2607:f8b0:4864:20::b12e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "smtp.gmail.com", Issuer "WR4" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fl5gJ0wT6z3G8s for ; Mon, 30 Mar 2026 22:35:40 +0000 (UTC) (envelope-from oliver.pntr@gmail.com) Authentication-Results: mx1.freebsd.org; dkim=pass header.d=gmail.com header.s=20251104 header.b=WzCUwUSp; dmarc=pass (policy=none) header.from=gmail.com; arc=pass ("google.com:s=arc-20240605:i=1"); spf=pass (mx1.freebsd.org: domain of oliver.pntr@gmail.com designates 2607:f8b0:4864:20::b12e as permitted sender) smtp.mailfrom=oliver.pntr@gmail.com Received: by mail-yx1-xb12e.google.com with SMTP id 956f58d0204a3-6501d242e3fso2872821d50.0 for ; Mon, 30 Mar 2026 15:35:40 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774910138; cv=none; d=google.com; s=arc-20240605; b=AzFL1BAtFI9URET41KGZN+/jRsP4wlfeATN8uei7LirjgbaRWuWE3Wll950orKl7xP lb2zE0W3wf0mfvmIzvx7wT0haHRQzCqwaaJ/t5bgRO9Q40MHDCulHOEMmRYv9obRhw16 MlghtWoYUp7qK2sz6NY6eDb5wgwikTO0ZQzBQVptN2zf73Y1aSfAScFzkEB5GetBvjzW Rb5drCqT0IS1GdNsUyqTphvecnFP3Lug2iNRRuDEnrLqcc4T5Ycd5sL+/nHIOdYysb22 KrGltEpOCw1ijX7bEfiO+S+KpyBLHv4nvZ+oSU60Fw+fOI+B3mRy0giHy7zlz503uMJA rquw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:references:in-reply-to :mime-version:dkim-signature; bh=6pZN1rbb06+pRlxgOUdhheT7hnLkT1phAcUE9/uA79A=; fh=GwNNXh4m8Ky7Pwzb2nJ98PeGbC4YMAow1KKhdZO7Ylg=; b=ZwE+Vu1LRKOcE/y+nsbH5+6WzwtJ3n2pOlNMLAmOp82zZQv8jQKEveud3k89OXYucA F5AUgC+grhx778sgF8PonIYRsJR7yVeJzVr4FhGS8GnH4+s8DYn+41x6Rc6d0+1QOaxm Aq4G47sgHYNyvFHXoZT+B6OdSU3ceTjp04LPD8YMysMdJQjalHLacOJy4NyeesNuQI0k /HpGSIdkZpYknAIX2LYNCJpNP31uXfFeHNgiJFzxaO1OeedIUpFi3nKnj3ioa26iCmYM c1nSEIwCsZb/tZw53cLcHQ1/LUjGdrx+IvinuhIaEg2cHZBdt4OjftjjQTlZmIHAxat5 9bJA==; darn=freebsd.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1774910138; x=1775514938; darn=freebsd.org; h=cc:to:subject:message-id:date:from:references:in-reply-to :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=6pZN1rbb06+pRlxgOUdhheT7hnLkT1phAcUE9/uA79A=; b=WzCUwUSpvenH2GG0YTOELGlAIqFXDl9c1RWIFB9s6lsUXaCNgcsR9XnMl+NLLpycMm 0M6a4ejcF2/AgFO1aeXCGnz6FF9BMpRxmnpjBn0MVVpmEi7aE0j3zBAmY2W2Dm7HA21V Ds5b57boxbMKeuWZYlgtVfkUBd05gj5e8Xwbq0HbhAMknjsqgt/WPG0fA5VBUD9Tt31q KNGxczyUA/HXJRAEfnuKi3uybgNwOSlhwpWaAJUyP/DKKh4oAPGNUWNNuhsEOchQyXEr utBSjn9UGuDJo7JHtXzKnNpSPW7mTHHw2V11D/2zb3ByVxgLYjk7lhKR/vKNTjc04FM4 DoZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774910138; x=1775514938; h=cc:to:subject:message-id:date:from:references:in-reply-to :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=6pZN1rbb06+pRlxgOUdhheT7hnLkT1phAcUE9/uA79A=; b=fl0FJ6HBK/5xFIlJ9Xr2UpFD9gq/4Q0znQNXuSWFh7cPT3cGcgGzxSPuKoe4CHPQJh vxLcY22BbMV5TPvZ7xY1veTr71jhFCl1xrvp6Sahj7JJd7Zqm+zalZMzbQWahaLdvu6C Ls/T0WcTmL+nlLzkO8/HiqsUvfm47I4nx+Jnh7cAp0ZDz82o1vN8LBqzPu1k1vY6+8t4 +SzNpcHjZYtEfa8jdigSAzNlKLWVzHASYEJ4s021f+bqCIQ5ZMPfduPL7upLBK11TOdP GKIwnlUkFRdKhgjVheGdy/UE5IuD0GghNG7I+yN/yVc0017sbMwgw2jE7XZphxL9/0Bk +hTQ== X-Forwarded-Encrypted: i=1; AJvYcCULh6QYxrzGFDWt0vhdzm8QH/t4NFf8eloQUS0n+EsXpzIsi1YUZWRslcN4p2Ya5tuLANu8gWXieJTo6TWVIdBoGDnExw==@freebsd.org X-Gm-Message-State: AOJu0YwDqdUMnm2R3cyRPBtLtVdXr/zfIMMkf7Ravw/JO5ruYPryNhL4 Gym1GadIdukv+t5HdHFUJ/ulHD5FOWKhRraGtyq0e43HgcODJYwo7IlDn1Rh4iw/udLch47TmfZ y2GZI7UfR6Twkza4FFmScCNLy0vzWcX0= X-Gm-Gg: ATEYQzwHkdjuOPsRhGTtVZ3nnMeK1VcXD1LxKUXW1Y2zMOgF9hSQqVefgpBhViOFxnB RNcgCalS7N7FWMyB8+EeELC0uApby9NBek0pUBMlSL1uhqKuqZTZ38byHsx2AYTL/xNpbC247aR ANeje47MOKG+O5LP0Dv1aM1meYdp4ifE7J+voVrPZk8y3UZ+gAz3mSfCH2axameFab2c2Hp/Owl BkaxSs/71vpSTAG/Nqot6XjU+OTNtxrBHwEzvj1ipvziidWALXGUx8j/vtJh4FX74G6c0faV9Ju Ag4Z4HrorsTVngb2wVfq1OgSuc/R8b5f0R2TGJAOMQ== X-Received: by 2002:a05:690e:1484:b0:650:1d21:d681 with SMTP id 956f58d0204a3-6501d21da2amr4314449d50.39.1774910138213; Mon, 30 Mar 2026 15:35:38 -0700 (PDT) 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 MIME-Version: 1.0 Received: by 2002:a05:7011:4893:b0:50c:2fa8:3e4e with HTTP; Mon, 30 Mar 2026 15:35:36 -0700 (PDT) In-Reply-To: <69c92678.206ec.39f0d32e@gitrepo.freebsd.org> References: <69c92678.206ec.39f0d32e@gitrepo.freebsd.org> From: Oliver Pinter Date: Mon, 30 Mar 2026 23:35:36 +0100 X-Gm-Features: AQROBzAKEmhlJAQvs5l96QQ91LmzAdr7lkWYXMyX-yNFIfbbdIQoMPibUj2q3No Message-ID: Subject: Re: git: bb8230f838c8 - main - hkbd(4): add some extra handy fn key bindings To: Vladimir Kondratyev Cc: "src-committers@freebsd.org" , "dev-commits-src-all@freebsd.org" , "dev-commits-src-main@freebsd.org" , Toby Slight Content-Type: multipart/alternative; boundary="0000000000004be9e7064e4578e5" X-Spamd-Result: default: False [-4.65 / 15.00]; ARC_ALLOW(-1.00)[google.com:s=arc-20240605:i=1]; NEURAL_HAM_MEDIUM(-1.00)[-1.000]; NEURAL_HAM_LONG(-1.00)[-1.000]; NEURAL_HAM_SHORT(-0.65)[-0.651]; DMARC_POLICY_ALLOW(-0.50)[gmail.com,none]; R_SPF_ALLOW(-0.20)[+ip6:2607:f8b0:4864::/56:c]; R_DKIM_ALLOW(-0.20)[gmail.com:s=20251104]; MIME_GOOD(-0.10)[multipart/alternative,text/plain]; TAGGED_FROM(0.00)[]; RCVD_TLS_LAST(0.00)[]; RCVD_IN_DNSWL_NONE(0.00)[2607:f8b0:4864:20::b12e:from]; MIME_TRACE(0.00)[0:+,1:+,2:~]; FREEMAIL_ENVFROM(0.00)[gmail.com]; TO_DN_EQ_ADDR_SOME(0.00)[]; FREEMAIL_FROM(0.00)[gmail.com]; TO_DN_SOME(0.00)[]; DKIM_TRACE(0.00)[gmail.com:+]; ASN(0.00)[asn:15169, ipnet:2607:f8b0::/32, country:US]; DWL_DNSWL_NONE(0.00)[gmail.com:dkim]; RCVD_COUNT_TWO(0.00)[2]; FROM_EQ_ENVFROM(0.00)[]; FROM_HAS_DN(0.00)[]; MISSING_XM_UA(0.00)[]; TO_MATCH_ENVRCPT_SOME(0.00)[]; MID_RHS_MATCH_FROMTLD(0.00)[]; PREVIOUSLY_DELIVERED(0.00)[dev-commits-src-main@freebsd.org]; MLMMJ_DEST(0.00)[dev-commits-src-main@freebsd.org]; RCPT_COUNT_FIVE(0.00)[5] X-Rspamd-Queue-Id: 4fl5gJ0wT6z3G8s X-Spamd-Bar: ---- --0000000000004be9e7064e4578e5 Content-Type: text/plain; charset="UTF-8" Hi! Would you like to add these to man page as well? Thanks, Oliver On Sunday, March 29, 2026, Vladimir Kondratyev wrote: > The branch main has been updated by wulf: > > URL: https://cgit.FreeBSD.org/src/commit/?id= > bb8230f838c8d5f8d362a0dad4809908b44ae379 > > commit bb8230f838c8d5f8d362a0dad4809908b44ae379 > Author: Toby Slight > AuthorDate: 2026-03-29 13:16:57 +0000 > Commit: Vladimir Kondratyev > CommitDate: 2026-03-29 13:16:57 +0000 > > hkbd(4): add some extra handy fn key bindings > > - Fn+S for ScrollLock as it's very useful to have ScrollLock on > FreeBSD's TTY. > - Fn+P for PrtSc/SysRq, as it's another very handy but sadly missing > key on Macbooks. > - Some other Fn+ combinations duplicating existing keys. > > Apply the change to ukbd(4) as well. > > Signed-off-by: Toby Slight > > Reviewed by: wulf > MFC after: 1 month > Pull Request: https://github.com/freebsd/freebsd-src/pull/1998 > --- > sys/dev/hid/hkbd.c | 10 ++++++++++ > sys/dev/usb/input/ukbd.c | 10 ++++++++++ > 2 files changed, 20 insertions(+) > > diff --git a/sys/dev/hid/hkbd.c b/sys/dev/hid/hkbd.c > index 9ab02e940089..c98f4be69169 100644 > --- a/sys/dev/hid/hkbd.c > +++ b/sys/dev/hid/hkbd.c > @@ -623,6 +623,16 @@ static uint32_t > hkbd_apple_fn(uint32_t keycode) > { > switch (keycode) { > + case 0x0b: return 0x50; /* H -> LEFT ARROW */ > + case 0x0d: return 0x51; /* J -> DOWN ARROW */ > + case 0x0e: return 0x52; /* K -> UP ARROW */ > + case 0x0f: return 0x4f; /* L -> RIGHT ARROW */ > + case 0x36: return 0x4a; /* COMMA -> HOME */ > + case 0x37: return 0x4d; /* DOT -> END */ > + case 0x18: return 0x4b; /* U -> PGUP */ > + case 0x07: return 0x4e; /* D -> PGDN */ > + case 0x16: return 0x47; /* S -> SCROLLLOCK */ > + case 0x13: return 0x46; /* P -> SYSRQ/PRTSC */ > case 0x28: return 0x49; /* RETURN -> INSERT */ > case 0x2a: return 0x4c; /* BACKSPACE -> DEL */ > case 0x50: return 0x4a; /* LEFT ARROW -> HOME */ > diff --git a/sys/dev/usb/input/ukbd.c b/sys/dev/usb/input/ukbd.c > index 3ebdf1e9747d..37deb5c56fbd 100644 > --- a/sys/dev/usb/input/ukbd.c > +++ b/sys/dev/usb/input/ukbd.c > @@ -677,6 +677,16 @@ static uint32_t > ukbd_apple_fn(uint32_t keycode) > { > switch (keycode) { > + case 0x0b: return 0x50; /* H -> LEFT ARROW */ > + case 0x0d: return 0x51; /* J -> DOWN ARROW */ > + case 0x0e: return 0x52; /* K -> UP ARROW */ > + case 0x0f: return 0x4f; /* L -> RIGHT ARROW */ > + case 0x36: return 0x4a; /* COMMA -> HOME */ > + case 0x37: return 0x4d; /* DOT -> END */ > + case 0x18: return 0x4b; /* U -> PGUP */ > + case 0x07: return 0x4e; /* D -> PGDN */ > + case 0x16: return 0x47; /* S -> SCROLLLOCK */ > + case 0x13: return 0x46; /* P -> SYSRQ/PRTSC */ > case 0x28: return 0x49; /* RETURN -> INSERT */ > case 0x2a: return 0x4c; /* BACKSPACE -> DEL */ > case 0x50: return 0x4a; /* LEFT ARROW -> HOME */ > > --0000000000004be9e7064e4578e5 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi!

Would you like to add these to man page as well?

Thanks,
Oliver=C2=A0

On Sunday, Marc= h 29, 2026, Vladimir Kondratyev <wul= f@freebsd.org> wrote:
The branch m= ain has been updated by wulf:

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

commit bb8230f838c8d5f8d362a0dad4809908b44ae379
Author:=C2=A0 =C2=A0 =C2=A0Toby Slight <tslight@pm.me>
AuthorDate: 2026-03-29 13:16:57 +0000
Commit:=C2=A0 =C2=A0 =C2=A0Vladimir Kondratyev <wulf@FreeBSD.org>
CommitDate: 2026-03-29 13:16:57 +0000

=C2=A0 =C2=A0 hkbd(4): add some extra handy fn key bindings

=C2=A0 =C2=A0 - Fn+S for ScrollLock as it's very useful to have ScrollL= ock on
=C2=A0 =C2=A0 =C2=A0 FreeBSD's TTY.
=C2=A0 =C2=A0 - Fn+P for PrtSc/SysRq, as it's another very handy but sa= dly missing
=C2=A0 =C2=A0 =C2=A0 key on Macbooks.
=C2=A0 =C2=A0 - Some other Fn+<key> combinations duplicating existing= keys.

=C2=A0 =C2=A0 Apply the change to ukbd(4) as well.

=C2=A0 =C2=A0 Signed-off-by: Toby Slight <tslight@pm.me>

=C2=A0 =C2=A0 Reviewed by:=C2=A0 =C2=A0 wulf
=C2=A0 =C2=A0 MFC after:=C2=A0 =C2=A0 =C2=A0 1 month
=C2=A0 =C2=A0 Pull Request:=C2=A0 =C2=A0https://github.com/freebsd/freebsd-src/pull/1998
---
=C2=A0sys/dev/hid/hkbd.c=C2=A0 =C2=A0 =C2=A0 =C2=A0| 10 ++++++++++
=C2=A0sys/dev/usb/input/ukbd.c | 10 ++++++++++
=C2=A02 files changed, 20 insertions(+)

diff --git a/sys/dev/hid/hkbd.c b/sys/dev/hid/hkbd.c
index 9ab02e940089..c98f4be69169 100644
--- a/sys/dev/hid/hkbd.c
+++ b/sys/dev/hid/hkbd.c
@@ -623,6 +623,16 @@ static uint32_t
=C2=A0hkbd_apple_fn(uint32_t keycode)
=C2=A0{
=C2=A0 =C2=A0 =C2=A0 =C2=A0 switch (keycode) {
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x0b: return 0x50; /* H -> LEFT ARROW *= /
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x0d: return 0x51; /* J -> DOWN ARROW *= /
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x0e: return 0x52; /* K -> UP ARROW */<= br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x0f: return 0x4f; /* L -> RIGHT ARROW = */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x36: return 0x4a; /* COMMA -> HOME */<= br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x37: return 0x4d; /* DOT -> END */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x18: return 0x4b; /* U -> PGUP */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x07: return 0x4e; /* D -> PGDN */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x16: return 0x47; /* S -> SCROLLLOCK *= /
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x13: return 0x46; /* P -> SYSRQ/PRTSC = */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case 0x28: return 0x49; /* RETURN -> INSERT = */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case 0x2a: return 0x4c; /* BACKSPACE -> DEL = */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case 0x50: return 0x4a; /* LEFT ARROW -> HOM= E */
diff --git a/sys/dev/usb/input/ukbd.c b/sys/dev/usb/input/ukbd.c
index 3ebdf1e9747d..37deb5c56fbd 100644
--- a/sys/dev/usb/input/ukbd.c
+++ b/sys/dev/usb/input/ukbd.c
@@ -677,6 +677,16 @@ static uint32_t
=C2=A0ukbd_apple_fn(uint32_t keycode)
=C2=A0{
=C2=A0 =C2=A0 =C2=A0 =C2=A0 switch (keycode) {
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x0b: return 0x50; /* H -> LEFT ARROW *= /
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x0d: return 0x51; /* J -> DOWN ARROW *= /
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x0e: return 0x52; /* K -> UP ARROW */<= br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x0f: return 0x4f; /* L -> RIGHT ARROW = */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x36: return 0x4a; /* COMMA -> HOME */<= br> +=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x37: return 0x4d; /* DOT -> END */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x18: return 0x4b; /* U -> PGUP */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x07: return 0x4e; /* D -> PGDN */
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x16: return 0x47; /* S -> SCROLLLOCK *= /
+=C2=A0 =C2=A0 =C2=A0 =C2=A0case 0x13: return 0x46; /* P -> SYSRQ/PRTSC = */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case 0x28: return 0x49; /* RETURN -> INSERT = */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case 0x2a: return 0x4c; /* BACKSPACE -> DEL = */
=C2=A0 =C2=A0 =C2=A0 =C2=A0 case 0x50: return 0x4a; /* LEFT ARROW -> HOM= E */

--0000000000004be9e7064e4578e5-- From nobody Tue Mar 31 02:32:51 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 4flBwz5QgNz6WgZ9 for ; Tue, 31 Mar 2026 02:32:51 +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 4flBwz3hJNz3qW7 for ; Tue, 31 Mar 2026 02:32:51 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774924371; 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=lwxVvhM6mcvRp0l8N+Db7hij/x+JJabq/rXAOHaeFcY=; b=qrRUt99R9V5Zd84ziN+n+40RjF/R0j6ti7/RoKTso5sy4b6c6scSxbeTyCiPCrnoMHQWxn eB21323Od7ZwPzb1jSWmluksNVwIcfG4DnJVZeG1/+eFT7VP535hwUbxilwxeqxGxpT5Rc r4ngMu3omdks2p2hynY4XpnVGBXIkGuFmvsYv4TaRjVPXlrhFDpN50ixMyEAutnOgdHdad QGmFajmSZ/Tyhe2gwiy01RkGQWjg5jR8Bq2f6DyqQDoVR6QIqy5G8T2TbcDpxRRBc1eZcl ZgFC7d7HgDRkSl+TCelFkYihVJl+vYT/Y/twdm6TrFcf7GWlt/anAeKFdeqwrQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774924371; a=rsa-sha256; cv=none; b=rRh7Sy6ryVFIYyWWC8CAa1j9hTJQi4yz5L73sQ2bm7tAlKx30+ECJXQGrjC2aGzMHsra8a Kw5N4xTs/k5MHIonNo2Yaf4psTseXagzmYvvD0B0o4urBVBrnTZMcMq92YfUiEZk2Es6Fz d0uQwuG65EPxgmkNT5nrOJ81ADFNWnRVw2aPFYovDINB5KxgF9BgLhmDImkWcBSMZwfnzU Ato0GjVYv6z/9DFeu/fvAaxAWIMl8NJSdJcyAl0LBPZVfpeMOcCrTRkhkqENtWDzuTeLZv PpIJezc/SEgV6+U1QYrFlVzXwz56bRwhHNHJwzZihubtkzJjBaqQfePlA5UWsA== 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=1774924371; 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=lwxVvhM6mcvRp0l8N+Db7hij/x+JJabq/rXAOHaeFcY=; b=m/pC5ieDnRNBLUH3uIbgU2yCWV5Ze4Jm5LQMcUwnwYz1GmL5kRotZ4qycOOjEIYYTgM1ke JogAont4BeLCYB4aRVdUlU7UyQNI9MnGRNyAGyCt1QdkH6bfoxLXPnn1J4I0yDL1++DLRI P2oja7izdEcL0LTdlqHY3UWlGXnh1MwUArcw2DiJHWkA0ixtVyndRjVyC/2WHNIPwhAmph +OcGUb2/QjdPF1+uJYRXPZmnfV2h+KmDSJXpk7FNNi2VTbiaBbUCEmJYew8L4HIrTeAY6V 8Y1K8C/n3qMfWnxwP9aG8TYB7mHYqapcA0Mul7entLISZMLtTFJwVHfd2j4YzQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4flBwz3991z18my for ; Tue, 31 Mar 2026 02:32:51 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 240c9 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 31 Mar 2026 02:32:51 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Christos Longros From: Alexander Ziaee Subject: git: 59cb18f35617 - main - vmgenc.4: Add VM Generation ID Counter manual 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: ziaee X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 59cb18f35617d3a53f7d7e142b4f91ad7951f5e0 Auto-Submitted: auto-generated Date: Tue, 31 Mar 2026 02:32:51 +0000 Message-Id: <69cb3253.240c9.73903bbb@gitrepo.freebsd.org> The branch main has been updated by ziaee: URL: https://cgit.FreeBSD.org/src/commit/?id=59cb18f35617d3a53f7d7e142b4f91ad7951f5e0 commit 59cb18f35617d3a53f7d7e142b4f91ad7951f5e0 Author: Christos Longros AuthorDate: 2026-03-31 02:24:16 +0000 Commit: Alexander Ziaee CommitDate: 2026-03-31 02:31:43 +0000 vmgenc.4: Add VM Generation ID Counter manual Document the vmgenc(4) ACPI driver which detects virtual machine cloning and snapshot restoration via the VM Generation ID specification. The driver reseeds the kernel entropy pool when a generation change is detected. MFC after: 3 days Reviewed by: cem (previous), ziaee Signed-off-by: Christos Longros Differential Revision: https://reviews.freebsd.org/D56011 --- share/man/man4/Makefile | 1 + share/man/man4/vmgenc.4 | 62 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile index ade0168cb0a6..c35859b30b60 100644 --- a/share/man/man4/Makefile +++ b/share/man/man4/Makefile @@ -624,6 +624,7 @@ MAN= aac.4 \ virtio_random.4 \ virtio_scsi.4 \ ${_vmci.4} \ + vmgenc.4 \ vkbd.4 \ vlan.4 \ vxlan.4 \ diff --git a/share/man/man4/vmgenc.4 b/share/man/man4/vmgenc.4 new file mode 100644 index 000000000000..1938e7f70eac --- /dev/null +++ b/share/man/man4/vmgenc.4 @@ -0,0 +1,62 @@ +.\" +.\" Copyright (c) 2026 Christos Longros +.\" +.\" SPDX-License-Identifier: BSD-2-Clause +.\" +.Dd March 21, 2026 +.Dt VMGENC 4 +.Os +.Sh NAME +.Nm vmgenc +.Nd ACPI virtual machine generation ID counter +.Sh SYNOPSIS +.Cd device vmgenc +.Pp +In +.Xr loader.conf 5 : +.Cd vmgenc_load="YES" +.Sh DESCRIPTION +The +.Nm +driver provides support for the Virtual Machine Generation ID, +a 128-bit unique identifier exposed by the hypervisor via ACPI. +The hypervisor changes this identifier whenever the virtual machine +is cloned, restored from a snapshot, or otherwise duplicated. +.Pp +When a generation ID change is detected, the +.Nm +driver feeds the new identifier into the kernel entropy pool via +.Xr random 4 , +ensuring that duplicated virtual machines do not share +cryptographic state. +The driver also sends a +.Xr devctl 4 +event and an internal kernel notification so that other subsystems +can respond to the duplication. +.Pp +The Virtual Machine Generation ID specification is supported by +QEMU, VMware ESXi, Microsoft Hyper-V, and Xen. +.Sh SYSCTL VARIABLES +The following variable is available: +.Bl -tag -width indent +.It Va dev.vmgenc.%d.guid +The current cached VM generation counter as a 128-bit value. +This value is updated each time the hypervisor signals a +generation change. +.El +.Sh SEE ALSO +.Xr acpi 4 , +.Xr random 4 +.Sh HISTORY +The +.Nm +driver first appeared in +.Fx 13.0 . +.Sh AUTHORS +The +.Nm +driver was written by +.An Conrad Meyer Aq Mt cem@FreeBSD.org . +.Pp +This manual page was written by +.An Christos Longros Aq Mt chris.longros@gmail.com . From nobody Tue Mar 31 04:51:26 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 4flG0v0XSWz6XBKQ for ; Tue, 31 Mar 2026 04:51:27 +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 4flG0t6ddsz4689 for ; Tue, 31 Mar 2026 04:51:26 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774932686; 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=jnABuUxGcx5y8DXEwpiW48Tqt3MDF6BGqqV3j/bMAVQ=; b=E3fSmZ1sVz+5GVh0xDM2KVR+EHjYFtsqY9mwp5ll0DXpkTs22MAd4xmc47QDXbf3skdFDH +E8/wK0FOSySF5w7/kro5NUImrUAOA39fvaOTE3KJazgQ1Q+CjIHii0fb9GNOSZv/KxbHx juLoQp22iD639LbMcgnjh2Pgj0XqwffPS6FftzCKU76HM3BDskFPmtAKNPGWBfIYWxztKz GPQ4RKiVhGhQcQtGV5k7Hw1npPN63YzAD1gOwbtZ8LsuLZ6R6QBdCYNqTYAiP0SLJf1gLe JSnfbflgT0WXh5tSfDJWMk2n87c7uy9fxLc2/29+AEBh1+QmYRn47v5IbbaVgg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774932686; a=rsa-sha256; cv=none; b=gAF3YDRK1BcFHikDHCgZdVpWW1MaEuWzxBe/iYpezMgRWYsdh4XAU+TSj3FhJHseZG13yO fQZKhdAmh84TWQo0EaxCcLTCBHaQ3/FHs1rb5p6PLwf8SFVzhqsy+Umg1TJYxYgzJA95bo p+QmvjXeSShHP6FS9jfXmyNRV9MnBQ9bBYZJ47/bqAsVFz1fumeJvJKLur4YjADu/M2CHM BfKa7HwfLwXyMlqpk50XTnfcYSQNPnhMMfJpbHWyrc1mJen3lfxR8k8C+B7lav72I+pbtu VWL4i5072q3dy08wSiGO/qy7F7CiK9K2jkjvudWn2q26jjXIe6vvbwEZHhDhNg== 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=1774932686; 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=jnABuUxGcx5y8DXEwpiW48Tqt3MDF6BGqqV3j/bMAVQ=; b=B5s2fPJmTLknj0yUgL/LfE9ZTZHVqCzlQDluquZj9ZTmmE4GeWgBMqaG9haIxDXbcQogMh gw1qCkVKKf+979h7p0Q+LkTpL5fymSBWWxgIFqOq4Cv3RY8B0E0Rzej5IImguMLZtzERfs RjhRF6BWpknwctpe5hDlema6KD8zb9k3u82NYBUXwUsa4IwillnhtPLgGmhuJXfxjpy9Fa oNCagW62LPNIat23kcAS/Ie4BBfS9qj3gxfK/ODI9wJqVUxDt1uU8KbSBGjoqFD++zRNlm NXFBZySGZxI2dS9MVKausATPdtFPqPbByAjqQKZsfh5aL5FXcXD1Aop/7J/gKw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4flG0t6FS4z1CHG for ; Tue, 31 Mar 2026 04:51:26 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3bc58 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 31 Mar 2026 04:51:26 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Aymeric Wibo Subject: git: 69124109c5a0 - main - amdsmu: Cezanne support 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: obiwac X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 69124109c5a00bb748cd8d3e9ede7291b34b577c Auto-Submitted: auto-generated Date: Tue, 31 Mar 2026 04:51:26 +0000 Message-Id: <69cb52ce.3bc58.6b33821b@gitrepo.freebsd.org> The branch main has been updated by obiwac: URL: https://cgit.FreeBSD.org/src/commit/?id=69124109c5a00bb748cd8d3e9ede7291b34b577c commit 69124109c5a00bb748cd8d3e9ede7291b34b577c Author: Aymeric Wibo AuthorDate: 2026-02-28 15:43:26 +0000 Commit: Aymeric Wibo CommitDate: 2026-03-31 04:48:59 +0000 amdsmu: Cezanne support Add support for Cezanne chips. The only real difference vs Rembrandt/Phoenix is the idlemask register. Also simplify getting IP block count by having this straight in struct amdsmu_product and remove Strix Point from the list for now, as that doesn't support S0ix and our driver can't handle that. Reviewed by: mckusick Approved by: mckusick Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D55594 --- sys/dev/amdsmu/amdsmu.c | 34 ++++++++++++---------------------- sys/dev/amdsmu/amdsmu.h | 19 +++++++++++++++---- sys/dev/amdsmu/amdsmu_reg.h | 5 ++++- 3 files changed, 31 insertions(+), 27 deletions(-) diff --git a/sys/dev/amdsmu/amdsmu.c b/sys/dev/amdsmu/amdsmu.c index 9a6873b43517..7b97888887c5 100644 --- a/sys/dev/amdsmu/amdsmu.c +++ b/sys/dev/amdsmu/amdsmu.c @@ -58,9 +58,12 @@ amdsmu_identify(driver_t *driver, device_t parent) static int amdsmu_probe(device_t dev) { + struct amdsmu_softc *sc; + if (resource_disabled("amdsmu", 0)) return (ENXIO); - if (!amdsmu_match(device_get_parent(dev), NULL)) + sc = device_get_softc(dev); + if (!amdsmu_match(device_get_parent(dev), &sc->product)) return (ENXIO); device_set_descf(dev, "AMD System Management Unit"); @@ -154,28 +157,11 @@ static int amdsmu_get_ip_blocks(device_t dev) { struct amdsmu_softc *sc = device_get_softc(dev); - const uint16_t deviceid = pci_get_device(dev); int err; struct amdsmu_metrics *m = &sc->metrics; bool active; char sysctl_descr[32]; - /* Get IP block count. */ - switch (deviceid) { - case PCI_DEVICEID_AMD_REMBRANDT_ROOT: - sc->ip_block_count = 12; - break; - case PCI_DEVICEID_AMD_PHOENIX_ROOT: - sc->ip_block_count = 21; - break; - /* TODO How many IP blocks does Strix Point (and the others) have? */ - case PCI_DEVICEID_AMD_STRIX_POINT_ROOT: - default: - sc->ip_block_count = nitems(amdsmu_ip_blocks_names); - } - KASSERT(sc->ip_block_count <= nitems(amdsmu_ip_blocks_names), - ("too many IP blocks for array")); - /* Get and print out IP blocks. */ err = amdsmu_cmd(dev, SMU_MSG_GET_SUP_CONSTRAINTS, 0, &sc->active_ip_blocks); @@ -184,13 +170,13 @@ amdsmu_get_ip_blocks(device_t dev) return (err); } device_printf(dev, "Active IP blocks: "); - for (size_t i = 0; i < sc->ip_block_count; i++) { + for (size_t i = 0; i < sc->product->ip_block_count; i++) { active = (sc->active_ip_blocks & (1 << i)) != 0; sc->ip_blocks_active[i] = active; if (!active) continue; printf("%s%s", amdsmu_ip_blocks_names[i], - i + 1 < sc->ip_block_count ? " " : "\n"); + i + 1 < sc->product->ip_block_count ? " " : "\n"); } /* Create a sysctl node for IP blocks. */ @@ -203,7 +189,7 @@ amdsmu_get_ip_blocks(device_t dev) } /* Create a sysctl node for each IP block. */ - for (size_t i = 0; i < sc->ip_block_count; i++) { + for (size_t i = 0; i < sc->product->ip_block_count; i++) { /* Create the sysctl node itself for the IP block. */ snprintf(sysctl_descr, sizeof sysctl_descr, "Metrics about the %s AMD IP block", @@ -293,7 +279,7 @@ amdsmu_fetch_idlemask(device_t dev) { struct amdsmu_softc *sc = device_get_softc(dev); - sc->idlemask = amdsmu_read4(sc, SMU_REG_IDLEMASK); + sc->idlemask = amdsmu_read4(sc, sc->product->idlemask_reg); } static void @@ -301,6 +287,10 @@ amdsmu_suspend(device_t dev, enum power_stype stype) { if (stype != POWER_STYPE_SUSPEND_TO_IDLE) return; + /* + * XXX It seems that Cezanne needs a special workaround here for + * firmware versions < 64.53. See amd_pmc_verify_czn_rtc() in Linux. + */ if (amdsmu_cmd(dev, SMU_MSG_SLEEP_HINT, true, NULL) != 0) device_printf(dev, "failed to hint to SMU to enter sleep"); } diff --git a/sys/dev/amdsmu/amdsmu.h b/sys/dev/amdsmu/amdsmu.h index 857fa21cba4e..4286d515ae77 100644 --- a/sys/dev/amdsmu/amdsmu.h +++ b/sys/dev/amdsmu/amdsmu.h @@ -25,10 +25,20 @@ static const struct amdsmu_product { uint16_t amdsmu_vendorid; uint16_t amdsmu_deviceid; + int16_t idlemask_reg; + size_t ip_block_count; } amdsmu_products[] = { - { CPU_VENDOR_AMD, PCI_DEVICEID_AMD_REMBRANDT_ROOT }, - { CPU_VENDOR_AMD, PCI_DEVICEID_AMD_PHOENIX_ROOT }, - { CPU_VENDOR_AMD, PCI_DEVICEID_AMD_STRIX_POINT_ROOT }, + { CPU_VENDOR_AMD, PCI_DEVICEID_AMD_CEZANNE_ROOT, + SMU_REG_IDLEMASK_CEZANNE, 12 }, + { CPU_VENDOR_AMD, PCI_DEVICEID_AMD_REMBRANDT_ROOT, + SMU_REG_IDLEMASK_PHOENIX, 12 }, + { CPU_VENDOR_AMD, PCI_DEVICEID_AMD_PHOENIX_ROOT, + SMU_REG_IDLEMASK_PHOENIX, 21 }, + /* + * XXX Strix Point (PCI_DEVICEID_AMD_STRIX_POINT_ROOT) doesn't support + * S0i3 and thus doesn't have an idlemask. Since our driver doesn't + * yet understand this, don't attach to Strix Point for the time being. + */ }; static const char *const amdsmu_ip_blocks_names[] = { @@ -59,6 +69,8 @@ static const char *const amdsmu_ip_blocks_names[] = { CTASSERT(nitems(amdsmu_ip_blocks_names) <= 32); struct amdsmu_softc { + const struct amdsmu_product *product; + struct sysctl_ctx_list *sysctlctx; struct sysctl_oid *sysctlnode; @@ -76,7 +88,6 @@ struct amdsmu_softc { uint32_t active_ip_blocks; struct sysctl_oid *ip_blocks_sysctlnode; - size_t ip_block_count; struct sysctl_oid *ip_block_sysctlnodes[ nitems(amdsmu_ip_blocks_names)]; bool ip_blocks_active[ diff --git a/sys/dev/amdsmu/amdsmu_reg.h b/sys/dev/amdsmu/amdsmu_reg.h index d45fa60941d5..6afbcf006535 100644 --- a/sys/dev/amdsmu/amdsmu_reg.h +++ b/sys/dev/amdsmu/amdsmu_reg.h @@ -16,6 +16,7 @@ * out? Also, there are way more of these. I couldn't find a centralized place * which lists them though. */ +#define PCI_DEVICEID_AMD_CEZANNE_ROOT 0x1630 #define PCI_DEVICEID_AMD_REMBRANDT_ROOT 0x14B5 #define PCI_DEVICEID_AMD_PHOENIX_ROOT 0x14E8 #define PCI_DEVICEID_AMD_STRIX_POINT_ROOT 0x14A4 @@ -32,7 +33,9 @@ #define SMU_REG_MESSAGE 0x538 #define SMU_REG_RESPONSE 0x980 #define SMU_REG_ARGUMENT 0x9BC -#define SMU_REG_IDLEMASK 0xD14 + +#define SMU_REG_IDLEMASK_CEZANNE 0x94 +#define SMU_REG_IDLEMASK_PHOENIX 0xD14 enum amdsmu_res { SMU_RES_WAIT = 0x00, From nobody Tue Mar 31 10:02:28 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 4flNvn16nmz6WdDY for ; Tue, 31 Mar 2026 10:02:29 +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 4flNvn04m6z3tSt for ; Tue, 31 Mar 2026 10:02:29 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774951349; 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=3Bxd9y0SRFL5J4VxJUsUINvAnPhP6NIJlZR5TED6q9o=; b=doOFMfP6YoQFcokCo44uVqIKinO/SgLh7BKz+RQ3p3cbjbaLfZg0OrR8WJNqtPjrUo0nSr 9T9Ewh2s2b/EiEfaWgGgeYsY98nIRR7poj457yTSDjva/G91XyY+kO3tSJyi6rpju/H+7a ergbB+QZLhE3Y4tFm4uaf0YVE9qM+wwokKWZ+5Q1+uX22FQRYLDNf712HW+t7EuuNWGAcm mybkAwNfGg9sbyciWuc973qz5h8BuxXKTZ7zJqTFOSY7TIfsFKhqCDz78C+HLvCGZNJ68U N0pEIBka0Qs+LHclNXIZ4+Xv7kVWSjr9sF6JRj2K5oE07HWh91yP5tGTjpDhFA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774951349; a=rsa-sha256; cv=none; b=mp+MlCcsAvnOJpAGx8BAuwOxRz6zlfD1IOEwCR3eaj0NFNqGQhV+9UGtp0W3p9GnLN36Yp Kwd2OKagrZ4S4vccOFE401zceI3q5bL8amOUD3uKuRQH/+qIMaJvVTkr0xfcAA4l/FSvOa Db2TRPLqjjiCy5GxIGHd9ieY89q8vynYjwg1k/HsAqAZjMNZDkkFZ2WxaoymWbn11chwAZ /3KnqfyXK059eP1m+vPDKcqui0Y73v4WRYLBqdvspKPJkrK5KARpqQ8+KLeGpOi6wmE1BT AVTjN2WbrqW3zMAbIVnlG9jXFgE2CFrzVpc9fFAe0vE83YKTvlS2U6sG4WDMgA== 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=1774951349; 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=3Bxd9y0SRFL5J4VxJUsUINvAnPhP6NIJlZR5TED6q9o=; b=f8z2Y8ED+g52ufQQpyKy32tuLhRdruDImoo+SxnGGmabaClS++G7Hyos6MqYjVSThbHYYq cm/w4yoAncMzOOhY7z3AV45N3nRykVhSp7hLh9Iq3LhkfxojxVxA0clLWUSGg3wUjx1/BD X9JHSr94aLErvB3JYXIo89fvYNnoSqiZx+FQ0QV1y5DXfHcNOrtexGHXKJaL9tOWsf1v6y x0/9wuJ+gBDAYWo0Kxps+CX5jc9Cl4hhmyCXwAikUd54sqlAp+Azxzky1LO4XcMtcZufXl S6e1advsnoFlQRFkyk81e3WErHRvmXrgoNOTuwvXtI83+t4TDq9iaJYg6INW0w== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4flNvm6kSXz8jn for ; Tue, 31 Mar 2026 10:02:28 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3d86f by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 31 Mar 2026 10:02:28 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Aymeric Wibo Subject: git: 33e095ee097d - main - acpi_spmc: Improve device description 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: obiwac X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 33e095ee097d6a18dca95b8fae4edbda405bbb20 Auto-Submitted: auto-generated Date: Tue, 31 Mar 2026 10:02:28 +0000 Message-Id: <69cb9bb4.3d86f.38a9a2cd@gitrepo.freebsd.org> The branch main has been updated by obiwac: URL: https://cgit.FreeBSD.org/src/commit/?id=33e095ee097d6a18dca95b8fae4edbda405bbb20 commit 33e095ee097d6a18dca95b8fae4edbda405bbb20 Author: Aymeric Wibo AuthorDate: 2026-03-31 10:01:08 +0000 Commit: Aymeric Wibo CommitDate: 2026-03-31 10:01:10 +0000 acpi_spmc: Improve device description "Low Power S0 Idle" doesn't mean that much. "System Power Management Controller" is what "SPMC" stands for in the first place. Sponsored by: The FreeBSD Foundation --- sys/dev/acpica/acpi_spmc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sys/dev/acpica/acpi_spmc.c b/sys/dev/acpica/acpi_spmc.c index d6d4f2d34f2f..206d3a843f53 100644 --- a/sys/dev/acpica/acpi_spmc.c +++ b/sys/dev/acpica/acpi_spmc.c @@ -206,8 +206,8 @@ acpi_spmc_probe(device_t dev) if (sc->dsm_sets == 0) return (ENXIO); - device_set_descf(dev, "Low Power S0 Idle (DSM sets 0x%x)", - sc->dsm_sets); + device_set_descf(dev, "System Power Management Controller " + "(DSM sets 0x%x)", sc->dsm_sets); return (0); } From nobody Tue Mar 31 16:51:02 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 4flYzB4mXWz6WLXX for ; Tue, 31 Mar 2026 16:51:02 +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 4flYzB3ZyWz44NH for ; Tue, 31 Mar 2026 16:51:02 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774975862; 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=nKi5gosmR7eC95az/xh5Vc91tKllzB5r4xPXMA7T8Ac=; b=Y2dCZotm34lEpnGQwFgIRhgGRs63c7M70qvbmedlSqHF+gdc7EMEETCYXudEmbOHakTVa2 KOuQI9rF8L8TnrGki1Pzd7BtyHUMejkRMQfP4+12p+P/0BIbSXjjIg5vPafNLWwxC14HFl UZ5IDAXEDiPoFuNMFAjbH2D1w+qM3puQTxYBqg6nrLNSocLRv2Kh8Xpq8zZBP42MhASLvs 4xkVuTaC71GgVzYC12fSm1nBXBvjCs3M6nrOBu8C4rAbHZF9OXhyjBJRhgtRyN2h1KWGgX 656Y3UHC+HfEc2MSvggBAELKYHRo+ePiDRMA6MGqw50xU5R4i/54FN9rul0upQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774975862; a=rsa-sha256; cv=none; b=OZ4vvosDgGFxw3wYL22n4vA3PXW3fcqN2JYGEwmlgbzC0mhzW03Gw5sCWIoWl/oKabHVYN wYdBcqKymXlDSPye9wVUI+yvQU3obBgajENGanIUC5ESoxmnhyFI6DUzSI/dBGn5FDwEqu ktI7dWmMVLP71vgWTYHtu8q2S8mHeyqfsXjuPg/sCdlvaj9YlutmvS6d967aNANgyQeGjS kwj/fTvOAiAISLBVE6jQ/QYY+vBPvyBTzr+pbXztcq1f1Sf5IxtkLnByGY2zYTqocrEti+ u8Vk/j29Ziej+yvftBLqRQD9iY7xWGinijpyfbgRr0jB/RjR0ZBrX9nQqt/ziw== 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=1774975862; 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=nKi5gosmR7eC95az/xh5Vc91tKllzB5r4xPXMA7T8Ac=; b=sLR9BKlaMHSDL+YmL5KFPwvAdgqdXEF/6LcVqe9rkBuhliicapslHCRqP/KjHYgsp2s8cF ScYQDShTjZA1PezkuzH4EZ7WGcJqvDaYgcHRRmrJ2uv9ljy5J/svImteR33Pag0fFHuINN kiqBi7ajSm/SnJ/lKRKjaC3/WPo8X1HZt0APDmziOMLlR79xV5gw+so4/3IbmhjCrTGvjL Ll8RNjMQ8vWf6/RW9fLE1kFdXi6oVDmkWKoWAxwthnixN/JWk+ePSX8FvoKkV4KNzRvoCd mNwE/T8PdMMhNovKpchMIYENSBEUBAtmgyM9OWEsf3uGVxle2QJmiGIe+Mvh4g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4flYzB2xc9zdr7 for ; Tue, 31 Mar 2026 16:51:02 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 403b1 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 31 Mar 2026 16:51:02 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Gleb Smirnoff Subject: git: 407b1e498018 - main - rss: make toeplitz.c standard part of the kernel 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: glebius X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 407b1e4980189252fade78438aa08191a9883cdc Auto-Submitted: auto-generated Date: Tue, 31 Mar 2026 16:51:02 +0000 Message-Id: <69cbfb76.403b1.24e43318@gitrepo.freebsd.org> The branch main has been updated by glebius: URL: https://cgit.FreeBSD.org/src/commit/?id=407b1e4980189252fade78438aa08191a9883cdc commit 407b1e4980189252fade78438aa08191a9883cdc Author: Gleb Smirnoff AuthorDate: 2026-03-31 16:34:51 +0000 Commit: Gleb Smirnoff CommitDate: 2026-03-31 16:34:51 +0000 rss: make toeplitz.c standard part of the kernel This will fix LINT-NOIP build. This actually adds very little to the kernel text, e.g. 500 bytes on amd64. A perfect solution would be to instead declare rss_config.c as 'optional inet | inet6', but that would fail to build LINT-NOIP in several NIC drivers, that use RSS and absolutely ignore that both INET and INET6 are optional. It is very unlikely that vendors who maintain these drivers will will ever chase the holy grail of a build that doesn't support IPv4 and IPv6. Fixes: d9c55b2e8cd6b79f6926278e10a79f1bcca27a4b --- sys/conf/files | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/conf/files b/sys/conf/files index de13b76e71a4..347dadb1545f 100644 --- a/sys/conf/files +++ b/sys/conf/files @@ -4263,7 +4263,7 @@ net/route/route_temporal.c standard net/rss_config.c standard net/rtsock.c standard net/slcompress.c optional netgraph_vjc -net/toeplitz.c optional inet | inet6 +net/toeplitz.c standard net/vnet.c optional vimage net80211/ieee80211.c optional wlan net80211/ieee80211_acl.c optional wlan wlan_acl From nobody Tue Mar 31 17:16:32 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 4flZXk0m4Pz6WP7R for ; Tue, 31 Mar 2026 17:16:38 +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 4flZXj4kysz49PP for ; Tue, 31 Mar 2026 17:16:37 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774977397; 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=VwGEe+qrT4WjyUQyjyPsMoCU8Tllma+nmzj2slM5BsE=; b=T2dvVsynhiA2tMBEPEUNRxtn4fdSLFGNULnitlzOGx/Ng9KZVFloZx1wkw0yNXPnaWci5F J/PzTDaaWjwobOc6p2XZ/QqCIQ24A6NOCQUkhoWIz1SQEnMXIpplDqPPG1nH89vGpDXGbF 35V0BKNkRFHksSQszWzU/R1slxfCInY5sB3Z5EvJ7mjDZPuDpQkvcVVUWmjNmUxdBypIWH srxrQTE65gTqqWAHuEa9N5VI29z2hC0mvnKMkUEbZaJyhfWBg5+pKFh7j1UTBBKonZ1jLg PzHaYQDV9srkt5n6mmgfjy07B4JcF8cYU6p4HgFMFCAgE4BHyM8mQWiPv9O5KA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774977397; a=rsa-sha256; cv=none; b=n5Ab7s41D293Qg8wjgGRbr7sodBlsh8n8X9jSM6lxmX7lDEmtDfGLALfvP2RJixz2oGpip WXBsp0yfU7j9VGHwZCLEx60rXueu0fpzFhcmG/T1fdrHtCELjNIP1ak7PRH2z+XPuw53ys 4ICVRj9Wjv0rZah7C1mFuXwMN8cQMX3g1VpN5wEibaYpoGYmlbpML/abBKbBwiYPe8L2mB N5tC/isVf58Gc5x1Ch2oSPgOGVuLVAIvPGIj1XZITq9oBAY0Oyz+ss2AXDRiDqF4YJ24wK 3un2Q+JUcosVjRS0quIjOssDdjnaKB6onxoVuVctxd1DCHSxRJr0k0Fy7mN5Aw== 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=1774977397; 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=VwGEe+qrT4WjyUQyjyPsMoCU8Tllma+nmzj2slM5BsE=; b=AYCcksShtK5RryqjlVp1KqsN3BYutGN4gozzLfj5I2N10wcvo/HYONCsyTOqJ5gTiPzcCw hw0mmwqZur7gYgl/bKUcMhsfhDs0pWWDL1l2wwFUNMmRDv2YJlP5QxAGXODWv+sTht8X1L rViRfar0aisFYV/YkwcR4dO+KvmUjXXLjg9EZn8Dz0EYZrPZRQo952ItrKkjAGFR63xset KYgx8wRVBznldnRUkbKwdRo+P+JUsBSWPwFov7wUl/PjR3dhQkX6tx4eCO8k41quVFEWl+ v0wmaGvDyXOUS5CzrLqEpiuDn2PlTQoE1ItM/1T71MpRHTNww54pQ593AxAGpQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4flZXj3wjbzfhb for ; Tue, 31 Mar 2026 17:16:37 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 41da3 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 31 Mar 2026 17:16:32 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Artem Bunichev From: Alexander Ziaee Subject: git: c082e5656417 - main - _exit.2: Cross-reference atexit(3) 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: ziaee X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: c082e5656417945bfa567114c60969844f3d7bdf Auto-Submitted: auto-generated Date: Tue, 31 Mar 2026 17:16:32 +0000 Message-Id: <69cc0170.41da3.180fe0ca@gitrepo.freebsd.org> The branch main has been updated by ziaee: URL: https://cgit.FreeBSD.org/src/commit/?id=c082e5656417945bfa567114c60969844f3d7bdf commit c082e5656417945bfa567114c60969844f3d7bdf Author: Artem Bunichev AuthorDate: 2026-03-31 17:09:00 +0000 Commit: Alexander Ziaee CommitDate: 2026-03-31 17:13:02 +0000 _exit.2: Cross-reference atexit(3) atexit(3) is one of the cases when _exit(2) must be used instead of exit(3). MFC after: 3 days Reviewed by: mhorne, ziaee Differential Revision: https://reviews.freebsd.org/D54467 --- lib/libc/stdlib/atexit.3 | 3 ++- lib/libsys/_exit.2 | 9 +++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/lib/libc/stdlib/atexit.3 b/lib/libc/stdlib/atexit.3 index 4ff384813550..4082c887497c 100644 --- a/lib/libc/stdlib/atexit.3 +++ b/lib/libc/stdlib/atexit.3 @@ -29,7 +29,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd September 6, 2002 +.Dd March 31, 2026 .Dt ATEXIT 3 .Os .Sh NAME @@ -90,6 +90,7 @@ function was called by a program that did not supply a implementation. .El .Sh SEE ALSO +.Xr _exit 2 , .Xr at_quick_exit 3 , .Xr exit 3 .Sh STANDARDS diff --git a/lib/libsys/_exit.2 b/lib/libsys/_exit.2 index 6f038f79f6ea..6e46e65ac86e 100644 --- a/lib/libsys/_exit.2 +++ b/lib/libsys/_exit.2 @@ -25,7 +25,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd September 8, 2016 +.Dd March 31, 2026 .Dt EXIT 2 .Os .Sh NAME @@ -95,9 +95,9 @@ and all current access to the controlling terminal is revoked. .Pp Most C programs call the library routine .Xr exit 3 , -which flushes buffers, closes streams, unlinks temporary files, etc., -before -calling +which flushes buffers, closes streams, unlinks temporary files, invokes +.Xr atexit 3 +handlers, etc., before calling .Fn _exit . .Sh RETURN VALUES The @@ -108,6 +108,7 @@ can never return. .Xr fork 2 , .Xr sigaction 2 , .Xr wait 2 , +.Xr atexit 3 , .Xr exit 3 , .Xr init 8 .Sh STANDARDS From nobody Tue Mar 31 17:18:55 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 4flZbM4mcQz6WPWF for ; Tue, 31 Mar 2026 17:18:55 +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 4flZbM3g0Xz4C4v for ; Tue, 31 Mar 2026 17:18:55 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774977535; 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=ZeJMZBuu/KnLFyhPIxBvJ281k7Gfe5mUDANCW5wUuqA=; b=QGISHAGE3dFeMpvy2PVbSb0OvInFWbf8Dbqr3ijoV4qHeu0uIkA/V0OAbXoY+4ElZW+gyk 3oEkPsrjPrDyZSG8sbfdEAkL6wDJTH5zWFa4xO2k0XRuqD49w7bWq+fSmjHcmNpegoH7PR aZJ9CJ+RkGoLXogfQgfW5wBOwQ9yRUk1sLA/j0rVJosPz1EjqI6L1x6urjznZxv8l+ZJXx U5Sp22qm46gidiFZmD+er49cQ27HiGOZjV9LnQG8PVUzt7OII97fRCFwNIEBR4PBFWVcI3 L74w/JvY/JTqixSjhy4buf/sesmT8Iwr9Onyj3e9dVM5OL3UPhHqmyv0WL3cfQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774977535; a=rsa-sha256; cv=none; b=J609adzus3UpVdFDXStfnFXyJpB/9ijDX1f3f+CRQEXn36CdouNn/Jq6zUSeOoBEm6xMW0 oDrlAKSp0ZYYdaBDg/WcvLCsSTnwGEBIz/Tmu+jfSBr9RowQrzOMZpU6EP51y8baT4ExnV n5p/Vww4TLcz+/hpI2u6zK3vWWuGLnIN6S5Z+Bf+hbT10RQ+97LKJXKi+q3ttpigUo7tlf Uqp+9FvRw/CQAIJlCq8PMoFO5Cx6LwCLCbSahEMSQyt/L8kgIE4OiBDWvgTg8TAd+4zOAi EUYra3yHuiC5LXAYHMwf5Y7d9LZpiieM9YWvY8/ip53DsHj4LSQv1V9JYVw0WQ== 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=1774977535; 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=ZeJMZBuu/KnLFyhPIxBvJ281k7Gfe5mUDANCW5wUuqA=; b=MdrVvuIDCbgEiuxEpV4JiKT0cy0nHj3NhxPQIfBiHMSFs1Mab2bLgdlSqYio9zvWXj/tpL ImUqc7Pi69BYNGHOwbuIb6LzMR4JjviNPIrmSGYmP3OTCsugdOgH8spy4YZ8Nc3DH9DY9w 4GbVznttoHnWSmvlqk1Q/5F6nZQtQIuTTSVac6kB/4ymNMfwU0WQkYNR+B0SZydTvyhHAN CBrMVcn9MnpRc718darYl/H6yDIHPpacTy8uSpLQnIlSDP6ccKO5zZkBv2xYV+N0y9x5vz ydPnF+nT+IqHv5vZdtBAs1vK9E1Q5SpTCZ/Z8NoO8TxOnK/qdJEkj0La3fU0kA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4flZbM27hkzfXs for ; Tue, 31 Mar 2026 17:18:55 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 4244e by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 31 Mar 2026 17:18:55 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Ed Maste Subject: git: 9b1f77e647a8 - main - Makefile.inc1: Drop AS and RANLIB variables 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: emaste X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 9b1f77e647a8a31993491ba3f5a64090756b7398 Auto-Submitted: auto-generated Date: Tue, 31 Mar 2026 17:18:55 +0000 Message-Id: <69cc01ff.4244e.50963094@gitrepo.freebsd.org> The branch main has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=9b1f77e647a8a31993491ba3f5a64090756b7398 commit 9b1f77e647a8a31993491ba3f5a64090756b7398 Author: Ed Maste AuthorDate: 2026-03-18 17:06:36 +0000 Commit: Ed Maste CommitDate: 2026-03-31 17:18:32 +0000 Makefile.inc1: Drop AS and RANLIB variables These are not used in our world and kernel build targets. We use the compiler driver for assembly, and ar adds the archive index (symbol table) automatically. Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D55964 --- Makefile.inc1 | 10 +++++----- share/man/man5/src.conf.5 | 1 - tools/build/options/WITHOUT_LLVM_BINUTILS_BOOTSTRAP | 1 - 3 files changed, 5 insertions(+), 7 deletions(-) diff --git a/Makefile.inc1 b/Makefile.inc1 index 9c6ca7cbc882..92e01389b4cd 100644 --- a/Makefile.inc1 +++ b/Makefile.inc1 @@ -224,7 +224,7 @@ MK_SYSTEM_LINKER= no .if defined(CROSS_TOOLCHAIN_PREFIX) CROSS_BINUTILS_PREFIX?=${CROSS_TOOLCHAIN_PREFIX} .endif -XBINUTILS= AS AR ELFCTL LD NM OBJCOPY RANLIB SIZE STRINGS STRIPBIN +XBINUTILS= AR ELFCTL LD NM OBJCOPY SIZE STRINGS STRIPBIN .for BINUTIL in ${XBINUTILS} .if defined(CROSS_BINUTILS_PREFIX) && \ exists(${CROSS_BINUTILS_PREFIX}/${${BINUTIL}}) @@ -240,8 +240,8 @@ MK_LLD_BOOTSTRAP= no .endif # If full paths to all standard bintuils are given, don't build LLVM binutils. -.if ${XAR:M/*} && ${XNM:M/*} && ${XOBJCOPY:M/*} && ${XRANLIB:M/*} && \ - ${XSIZE:M/*} && ${XSTRINGS:M/*} && ${XSTRIPBIN:M/*} +.if ${XAR:M/*} && ${XNM:M/*} && ${XOBJCOPY:M/*} && ${XSIZE:M/*} && \ + ${XSTRINGS:M/*} && ${XSTRIPBIN:M/*} MK_LLVM_BINUTILS_BOOTSTRAP= no .endif @@ -855,9 +855,9 @@ HMAKE+= PATH=${TMPPATH:Q} METALOG=${METALOG} -DNO_ROOT CROSSENV+= CC="${XCC} ${XCFLAGS}" CXX="${XCXX} ${XCXXFLAGS} ${XCFLAGS}" \ CPP="${XCPP} ${XCFLAGS}" \ - AS="${XAS}" AR="${XAR}" ELFCTL="${XELFCTL}" LD="${XLD}" \ + AR="${XAR}" ELFCTL="${XELFCTL}" LD="${XLD}" \ LLVM_LINK="${XLLVM_LINK}" NM=${XNM} OBJCOPY="${XOBJCOPY}" \ - RANLIB=${XRANLIB} STRINGS=${XSTRINGS} \ + STRINGS=${XSTRINGS} \ SIZE="${XSIZE}" STRIPBIN="${XSTRIPBIN}" .if defined(CROSS_BINUTILS_PREFIX) && exists(${CROSS_BINUTILS_PREFIX}) diff --git a/share/man/man5/src.conf.5 b/share/man/man5/src.conf.5 index 33ce061a1114..c277647a925f 100644 --- a/share/man/man5/src.conf.5 +++ b/share/man/man5/src.conf.5 @@ -1013,7 +1013,6 @@ To be able to build the system alternate binary utilities must be provided via .Ev XAR , .Ev XNM , .Ev XOBJCOPY , -.Ev XRANLIB , .Ev XSIZE , .Ev XSTRINGS , and diff --git a/tools/build/options/WITHOUT_LLVM_BINUTILS_BOOTSTRAP b/tools/build/options/WITHOUT_LLVM_BINUTILS_BOOTSTRAP index 141679d4f6a9..b30e8135d28d 100644 --- a/tools/build/options/WITHOUT_LLVM_BINUTILS_BOOTSTRAP +++ b/tools/build/options/WITHOUT_LLVM_BINUTILS_BOOTSTRAP @@ -4,7 +4,6 @@ To be able to build the system alternate binary utilities must be provided via .Ev XAR , .Ev XNM , .Ev XOBJCOPY , -.Ev XRANLIB , .Ev XSIZE , .Ev XSTRINGS , and From nobody Tue Mar 31 17:23:30 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 4flZhf5sGGz6WPqc for ; Tue, 31 Mar 2026 17:23:30 +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 4flZhf5725z4FPm for ; Tue, 31 Mar 2026 17:23:30 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774977810; 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=qzDEJc073YJaPHbZvDyB8rDEsCR0Jqgf0TlOuHK4SxE=; b=Z+qMmBvuEdMgtEWLEXUnjiPlZfrAAH7jM8XpIxJd5UBPJ64V1FZcEz+77MB87Ilw2INCfY Zb/Z3JMpwlH8ukCQfJBJmVFRAlOtKqAWb6WRASEFlvWbpsRnT15FuMbG7/4joOimQgLQ/M +VxYrzqYaEv5123D6hBwEj4SCN5S9nHnRf4VZl/FGqzhvAlXbQKfnCpwgTJK4V/xoAvjCm hAfaS2fbjsLRcsu7rPW2/5uCBCZaUxWzthvWNh/sI+LyFJJkhhuDi59xJN5T88WaA9yhKR laDgMSVZvCL8M4oRKK5oNQd2QlSZ86JON9/UHMI37xDpmdeolbQd8a7LBqnQxQ== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774977810; a=rsa-sha256; cv=none; b=Iq4h1jOml9FZj5UYfaSFjD1cmYIDr4kXHxSYKjDN965pSkTbfN3kxnux9z/BjMGlJ0m8aF x3nAN90g1ynMwhW3IPaK9iVJW7cRfPn15JzMmqlfo/zUDE4Zas1n1gbKGRoZAEALUGSmm0 HulDYexX50yGKhnzbejIfEyKvdcn36LV1CKgEaKiNsTe6/lbRRgOqNgKZqDxTxRNXLLEzm 4FQxidY7ysV5DVoksZ8Oi9Cm6OR7qKIC0MEh0OyRR4vJQdcm/8hiwcqd1XGNXCSsYdX5NG KcCHbvt2NOYumWwD8l+RgrcADmui82ewdNWZxFlkh6Q4QZ/t1TaJKQzx1Lplug== 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=1774977810; 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=qzDEJc073YJaPHbZvDyB8rDEsCR0Jqgf0TlOuHK4SxE=; b=VZIanNlYQ/fWJqaqOVzZu7ZPQbb0dXV8Ga28r8udFH+tSuI0DJR73qLAjuKq0bzN2o0j8Q HvnwFgYO5rs68pe+qRw1q0JhSj4lcJLcQJkipRrucz32OWD8g27pmQgN3yak29cZPwoMiX liTeA9BUR/KRhWx6cLdg6t78LZKoAD7TRWdass0rZGJHfETcfcrkB46kZdT5p9KnvQKSYW YZuUdCZk8kIs0bj+xqjoi1z4qVPCmWWfI0fL0wZ1ibOmA6sdlcvG9ZPDpAkpay1xHRSrPA fERFwkWfPngNoO/27EoV2GnLY5oLdaGOLXLdi15nIBTpEzJhBmh0E0WAOqCdZg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4flZhf4h8VzfSL for ; Tue, 31 Mar 2026 17:23:30 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 43d02 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 31 Mar 2026 17:23:30 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Alexander Leidinger Subject: git: 6087050ef52c - main - Jail sysctls: deprecate generic sysctls in favour of allow-flags 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: netchild X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 6087050ef52c4e45eeec5ffd773fcc25c9c768c9 Auto-Submitted: auto-generated Date: Tue, 31 Mar 2026 17:23:30 +0000 Message-Id: <69cc0312.43d02.7e1d559a@gitrepo.freebsd.org> The branch main has been updated by netchild: URL: https://cgit.FreeBSD.org/src/commit/?id=6087050ef52c4e45eeec5ffd773fcc25c9c768c9 commit 6087050ef52c4e45eeec5ffd773fcc25c9c768c9 Author: Alexander Leidinger AuthorDate: 2026-03-31 17:20:25 +0000 Commit: Alexander Leidinger CommitDate: 2026-03-31 17:23:26 +0000 Jail sysctls: deprecate generic sysctls in favour of allow-flags - add a missing sysctl to the deprecated list - add a comment to not add new generic sysctls and point to SYSCTL_JAIL_PARAM instead Reviewed by: jamie Differential Revision: https://reviews.freebsd.org/D51150 --- sys/kern/kern_jail.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sys/kern/kern_jail.c b/sys/kern/kern_jail.c index 369b6aca926c..9f78cb42aeb1 100644 --- a/sys/kern/kern_jail.c +++ b/sys/kern/kern_jail.c @@ -4988,6 +4988,10 @@ sysctl_jail_default_allow(SYSCTL_HANDLER_ARGS) return (0); } +/* + * Do not add more here. Use SYSCTL_JAIL_PARAM (allow flags for jails) + * instead. + */ SYSCTL_PROC(_security_jail, OID_AUTO, set_hostname_allowed, CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, PR_ALLOW_SET_HOSTNAME, sysctl_jail_default_allow, "I", @@ -5015,7 +5019,7 @@ SYSCTL_PROC(_security_jail, OID_AUTO, mount_allowed, SYSCTL_PROC(_security_jail, OID_AUTO, mlock_allowed, CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_MPSAFE, NULL, PR_ALLOW_MLOCK, sysctl_jail_default_allow, "I", - "Processes in jail can lock/unlock physical pages in memory"); + "Processes in jail can lock/unlock physical pages in memory (deprecated)"); static int sysctl_jail_default_level(SYSCTL_HANDLER_ARGS) From nobody Tue Mar 31 19:56:58 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 4flf5k6WbZz6Ww1B for ; Tue, 31 Mar 2026 19:56:58 +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 4flf5k5tFKz3Mvp for ; Tue, 31 Mar 2026 19:56:58 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774987018; 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=tdhwBtxwT928GBxm3dmTWdmBTqRHsD2OMuyf+eWoIQ0=; b=uA4XGNB2SOtk20Kg9i4elceEpkIe4dMJi+wNHs/JK6+FgttnG1wfO0LhgB+7cmDukZebTi Sd+RFhVgF58DC6W3zy/RgfU6KNPoyYjCEnzRlBSElQ6Qu61yX4wLxELufG30V5JtGxLb4C TWLVYsxuw9ORJ0SNHRRGmK0vJ7dVSd95daW8vhybdLKp5Rwa97GMWrIHKkslJIO0ZjkjE5 GtBePhcwGznRtt1ybBRIJ497hUquKvyr1m4HBxfEWca363hTUudRMUDDyGOtaezHyrI7iU d/P024IN+rVEUlsLuEc/ASw8LbVkcNWcp2UJMWMLcMgEhdqijub7nDC6HgqpAw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774987018; a=rsa-sha256; cv=none; b=wApOwU9A7dj2C+wDtVJqOwHYPH0kvrNL+WHmzt2rUP6It/2Uc1VmevzW1InnymccleQtxU b2onz2+R8pySy/NHCQgajMe7fo5C2JW6Sl5zHlmMvyjYn3ZPxuwu4U5Y0bzOZu3z5NfEE0 Q++kwvNVgDSbZd1t076rKMxk6Moehg2S0DoIogckisdS6+EqivR7YcRbCqHAtkS0bzPBht izOZnyUW2vD3vieaEYJl9OQ4LIQRoxm0BhoOnf6r8OGm0WJg1eWvDp2kxfvAkL00eCaW7y NSLpTd4MfScH9zyRLjNsSPdGTiJN9vlz0uX1pIt1fyQdkrK6nEXiX/2mfYrV+g== 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=1774987018; 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=tdhwBtxwT928GBxm3dmTWdmBTqRHsD2OMuyf+eWoIQ0=; b=q7wof6ZKgDg+mCszaxXmaaxMC3V3R2PSaE+kJAx6DCAgwzfF3lPbv8Jidn+qYbQyNQO0IH YZEwlLwrfZLQO9erFYP5eIfzP1RqOXZj/9UthY0YCQvIQEN0FFqFjih6fUk5KNf0xxXmVL G5z3tW7MD4uLvUZbr2moae5CfACwtrEUkcYsqsAXMlyWvLpXGnboLWBD7kIVok5g0xBSh8 sJvOtzuD8L7tQfrnTxyYhGvTH6ZlJqk0giPqZjKPVrK47F9dpkd/xlzgMJ6PFOFaqZwFpR T39szKe/ENVs6dzxNlIPGzxdFOzZUtPL0h1toK4/TjC5q21sHLVUdSnbiqonrQ== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4flf5k5BBfzkCb for ; Tue, 31 Mar 2026 19:56:58 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 21feb by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 31 Mar 2026 19:56:58 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mitchell Horne Subject: git: be79a42275ca - main - malloc.9: adjust flag table indentation 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mhorne X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: be79a42275cad21c6087d8bbd6a328735ea813fa Auto-Submitted: auto-generated Date: Tue, 31 Mar 2026 19:56:58 +0000 Message-Id: <69cc270a.21feb.13c11683@gitrepo.freebsd.org> The branch main has been updated by mhorne: URL: https://cgit.FreeBSD.org/src/commit/?id=be79a42275cad21c6087d8bbd6a328735ea813fa commit be79a42275cad21c6087d8bbd6a328735ea813fa Author: Mitchell Horne AuthorDate: 2026-03-31 19:42:55 +0000 Commit: Mitchell Horne CommitDate: 2026-03-31 19:55:37 +0000 malloc.9: adjust flag table indentation The current indentation is shorter than all but one of these flags. This renders much more nicely. MFC after: 3 days --- share/man/man9/malloc.9 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/share/man/man9/malloc.9 b/share/man/man9/malloc.9 index 01d224fc3cb3..06f5ed4ef360 100644 --- a/share/man/man9/malloc.9 +++ b/share/man/man9/malloc.9 @@ -222,7 +222,7 @@ The argument further qualifies .Fn malloc Ns 's operational characteristics as follows: -.Bl -tag -width indent +.Bl -tag -width "M_USE_RESERVE" .It Dv M_ZERO Causes the allocated memory to be set to all zeros. .It Dv M_NODUMP From nobody Tue Mar 31 19:56:57 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 4flf5q311vz6Wvxr for ; Tue, 31 Mar 2026 19:57:03 +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 4flf5q0ZTjz3NFq for ; Tue, 31 Mar 2026 19:57:03 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1774987023; 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=RpNiBK0OFMXEky3WtGFc+w2zEq2wyNtti7OW426G2NE=; b=nqq7XRHHi7pH2jNOPN5kkzAnZO0Bm7WjuJv1N/GuyOK75i/53I2PhoO0AHK6AuMOkuNrgG 28W5dWg9QK+tsSqQp5XL9VfcHbnJ+8Zh0/t5WeP+ssmXwFb3G2qDnVTlNFKW1JDdzeY2zC uJlbTrWPIjN/R1Pi+SF6Bm+jvcUcd3znpjx3bL9kSQ/l14KOAMoYPVZ3u/TIhSnWMqNSNQ uybPTBpekYbhrQCut68nE3xL8YS884c84OT6nPSWADIXQ1Lx09HXUbUkZmNRwSnY8KOU/O ASMcDJW5MR0xvI3rVwaNtzpubaWOcDiOdTgFnTLfrFJ1D1K8CC+ZtAwQQO3RDA== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1774987023; a=rsa-sha256; cv=none; b=NirVasuamY+skAi9ng302e5Cs9/HZH1eIFRynwDpdF6XxIK27PWgM6ervgcNWVNFcbhzgs JPpRf9e7PnCTSG+YITblkm1HaUmOnJ/pv7smJ0EVT3OgaJFjxUmqcmZPGWpYygFymU8Qe3 YRA+Ubk3O3IdbUuHqHgesh6fpYjUeKK8PgKjkGsNlRUg4YFNKcyUdPhNrVg2kfpAyuzhKf dTo7sIVSrzXYwL1KB2mCrCZ0AmWDA6FSW5v0C//lFwIPO+R4EgwcqAUeob9pFWN2oIbxkF FUlR7yQFcnPZtUdq/7qf10+xgUGGa3opQVAcykLZq5rQJbF/j85nzEfmVZi9cA== 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=1774987023; 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=RpNiBK0OFMXEky3WtGFc+w2zEq2wyNtti7OW426G2NE=; b=W9cmm8BYXIFztkERo1rcY/aPRGsoyAeqBC0ZiYf5DBrpB2Xs6TnQvTPAuYwFZVi81KstgY 2yKHZLdClfUAAs21tJ252Fnyo0ZTIC3lacOuY0aN7fE5SoRgOdI/92Hf6cl1JJsUPFxugJ IINAcxJR4XgzpjECFRPM11MHmEu5x4wzy2FJDNXA/BtofPY6+o+QqT8xh9cO+7E4Zl27Gb vlQ6WwXdisWzVPDphw0RByt1nWtgSayYXfUWi7I0XciLeUXNuLqAIxVBn0NO5XWO+kyH9Y SQhv23gVkmwfFr2h6FsVTe2tUKMZUMm4M1BQzYF7kYtGLRTiuu+SFzRKdwN8dA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4flf5p5cq2zkmQ for ; Tue, 31 Mar 2026 19:57:02 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 23772 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Tue, 31 Mar 2026 19:56:57 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Tetsuya Uemura From: Mitchell Horne Subject: git: 84c68dbb59df - main - bcm2835_virtgpio: Add driver for virtual GPIO controller on some RPi models 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: mhorne X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 84c68dbb59df81d5371f0d1eea888d30561d428d Auto-Submitted: auto-generated Date: Tue, 31 Mar 2026 19:56:57 +0000 Message-Id: <69cc2709.23772.7a69904e@gitrepo.freebsd.org> The branch main has been updated by mhorne: URL: https://cgit.FreeBSD.org/src/commit/?id=84c68dbb59df81d5371f0d1eea888d30561d428d commit 84c68dbb59df81d5371f0d1eea888d30561d428d Author: Tetsuya Uemura AuthorDate: 2026-03-30 15:24:38 +0000 Commit: Mitchell Horne CommitDate: 2026-03-31 19:54:21 +0000 bcm2835_virtgpio: Add driver for virtual GPIO controller on some RPi models This driver enables bcm2835-virtgpio GPIO controller found on RPi3B and some CM boards. On which, the ACT (green) LED is connected to this controller. It is essential for FreeBSD to have this driver to control this LED. It will be exposed via gpioled(4). Reviewed by: mhorne MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D51456 --- sys/arm/broadcom/bcm2835/bcm2835_firmware.h | 12 + sys/arm/broadcom/bcm2835/raspberrypi_virtgpio.c | 347 ++++++++++++++++++++++++ sys/conf/files.arm64 | 1 + 3 files changed, 360 insertions(+) diff --git a/sys/arm/broadcom/bcm2835/bcm2835_firmware.h b/sys/arm/broadcom/bcm2835/bcm2835_firmware.h index 8c77dac7d710..13116999d38c 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_firmware.h +++ b/sys/arm/broadcom/bcm2835/bcm2835_firmware.h @@ -195,6 +195,18 @@ union msg_set_gpio_config { } resp; }; +#define BCM2835_FIRMWARE_TAG_GET_GPIOVIRTBUF 0x00040010 +#define BCM2835_FIRMWARE_TAG_SET_GPIOVIRTBUF 0x00048020 + +union msg_gpiovirtbuf { + struct { + uint32_t addr; + } req; + struct { + uint32_t addr; + } resp; +}; + int bcm2835_firmware_property(device_t, uint32_t, void *, size_t); #endif diff --git a/sys/arm/broadcom/bcm2835/raspberrypi_virtgpio.c b/sys/arm/broadcom/bcm2835/raspberrypi_virtgpio.c new file mode 100644 index 000000000000..64ce6fda6306 --- /dev/null +++ b/sys/arm/broadcom/bcm2835/raspberrypi_virtgpio.c @@ -0,0 +1,347 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2025 Tetsuya Uemura + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * This is a driver for bcm2835-virtgpio GPIO controller device found on some + * Raspberry Pi models (listed below but not limited to). On which, the green + * LED (ACT) is connected to this controller. With the help of this driver, a + * node corresponding to the green LED will be created under /dev/led, allowing + * us to control it. + * + * Applicable models (according to the FDTs of those models): + * Compute Module 2 (CM2) + * 3 Model B (not 3B+) + * Compute Module 3 (CM3) and possibly 3+ (CM3+) + * Compute Module 4 SODIMM (CM4S) + */ + +#include "opt_platform.h" + +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include +#include + +#include "gpio_if.h" + +#define RPI_VIRT_GPIO_PINS 2 + +struct rpi_virt_gpio_softc { + device_t busdev; + device_t firmware; + struct mtx sc_mtx; + + void *vaddr; /* Virtual address. */ + vm_paddr_t paddr; /* Physical address. */ + + struct gpio_pin gpio_pins[RPI_VIRT_GPIO_PINS]; + uint32_t state[RPI_VIRT_GPIO_PINS]; +}; + +#define RPI_VIRT_GPIO_LOCK(_sc) mtx_lock_spin(&(_sc)->sc_mtx) +#define RPI_VIRT_GPIO_UNLOCK(_sc) mtx_unlock_spin(&(_sc)->sc_mtx) + +static struct ofw_compat_data compat_data[] = { + {"brcm,bcm2835-virtgpio", 1}, + {NULL, 0} +}; + +static device_t +rpi_virt_gpio_get_bus(device_t dev) +{ + struct rpi_virt_gpio_softc *sc; + + sc = device_get_softc(dev); + + return (sc->busdev); +} + +static int +rpi_virt_gpio_pin_max(device_t dev, int *maxpin) +{ + *maxpin = RPI_VIRT_GPIO_PINS - 1; + + return (0); +} + +static int +rpi_virt_gpio_pin_getcaps(device_t dev, uint32_t pin, uint32_t *caps) +{ + if (pin >= RPI_VIRT_GPIO_PINS) + return (EINVAL); + + *caps = GPIO_PIN_OUTPUT; + + return (0); +} + +static int +rpi_virt_gpio_pin_getflags(device_t dev, uint32_t pin, uint32_t *flags) +{ + if (pin >= RPI_VIRT_GPIO_PINS) + return (EINVAL); + + *flags = GPIO_PIN_OUTPUT; + + return (0); +} + +static int +rpi_virt_gpio_pin_set(device_t dev, uint32_t pin, uint32_t value) +{ + struct rpi_virt_gpio_softc *sc; + uint32_t *ptr; + uint16_t on, off; + + if (pin >= RPI_VIRT_GPIO_PINS) + return (EINVAL); + + sc = device_get_softc(dev); + + RPI_VIRT_GPIO_LOCK(sc); + on = (uint16_t)(sc->state[pin] >> 16); + off = (uint16_t)sc->state[pin]; + + if (bootverbose) + device_printf(dev, "on: %hu, off: %hu, now: %d -> %u\n", + on, off, on - off, value); + + if ((value > 0 && on - off != 0) || (value == 0 && on - off == 0)) { + RPI_VIRT_GPIO_UNLOCK(sc); + return (0); + } + + if (value > 0) + ++on; + else + ++off; + + sc->state[pin] = (on << 16 | off); + ptr = (uint32_t *)sc->vaddr; + ptr[pin] = sc->state[pin]; + RPI_VIRT_GPIO_UNLOCK(sc); + + return (0); +} + +static int +rpi_virt_gpio_pin_get(device_t dev, uint32_t pin, uint32_t *val) +{ + struct rpi_virt_gpio_softc *sc; + uint32_t *ptr, v; + + if (pin >= RPI_VIRT_GPIO_PINS) + return (EINVAL); + + sc = device_get_softc(dev); + + ptr = (uint32_t *)sc->vaddr; + RPI_VIRT_GPIO_LOCK(sc); + v = ptr[pin]; + RPI_VIRT_GPIO_UNLOCK(sc); + *val = ((uint16_t)(v >> 16) - (uint16_t)v) == 0 ? 0 : 1; + + return (0); +} + +static int +rpi_virt_gpio_pin_toggle(device_t dev, uint32_t pin) +{ + int rv; + unsigned int val; + + if (pin >= RPI_VIRT_GPIO_PINS) + return (EINVAL); + + rv = rpi_virt_gpio_pin_get(dev, pin, &val); + if (rv != 0) + return (rv); + + rv = rpi_virt_gpio_pin_set(dev, pin, val == 0 ? 1 : 0); + + return (rv); +} + +static int +rpi_virt_gpio_probe(device_t dev) +{ + device_t firmware; + phandle_t gpio; + union msg_gpiovirtbuf cfg; + int rv; + + if (ofw_bus_status_okay(dev) == 0) + return (ENXIO); + + if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) + return (ENXIO); + + gpio = ofw_bus_get_node(dev); + if (OF_hasprop(gpio, "gpio-controller") == 0) + return (ENXIO); + + /* Check whether the firmware is ready. */ + firmware = device_get_parent(dev); + rv = bcm2835_firmware_property(firmware, + BCM2835_FIRMWARE_TAG_GET_GPIOVIRTBUF, &cfg, sizeof(cfg)); + if (rv != 0) + return (ENXIO); + + device_set_desc(dev, "Raspberry Pi Virtual GPIO controller"); + + return (BUS_PROBE_DEFAULT); +} + +static int +rpi_virt_gpio_attach(device_t dev) +{ + struct rpi_virt_gpio_softc *sc; + union msg_gpiovirtbuf cfg; + int i, rv; + + sc = device_get_softc(dev); + sc->firmware = device_get_parent(dev); + mtx_init(&sc->sc_mtx, "Raspberry Pi virtgpio", NULL, MTX_SPIN); + + /* + * According to the Linux source at: + * https://github.com/raspberrypi/linux/blob/rpi-6.12.y/drivers/gpio/gpio-bcm-virt.c + * it first attempts to set the pre-allocated physical memory address + * in the firmware. If it is successfully acquired, access virtgpio via + * the virtual memory address mapped to that physical address. + * + * If the above fails, then as a fallback, attempts to obtain a + * physical memory address for accessing virtgpio from the firmware. + * And if obtained, link it to a virtual memory address and access + * virtgpio via it. + * + * An OpenWRT virtgpio driver I happened to see at first only + * implemented the fallback method. Then I implemented this method on + * FreeBSD and tested it with the 20240429 firmware, but it didn't + * work. + * + * At this point, I realised the first method in the source above. So I + * implemented this method on FreeBSD and tested it, and it worked. In + * my opinion, the second method was used until some time prior to + * 20240429, and then the firmware was modified and the first method + * was introduced. In my driver, only the first method exists. + */ + + /* Allocate a physical memory range for accessing virtgpio. */ + sc->vaddr = contigmalloc( + PAGE_SIZE, /* size */ + M_DEVBUF, M_ZERO, /* type, flags */ + 0, BCM2838_PERIPH_MAXADDR, /* low, high */ + PAGE_SIZE, 0); /* alignment, boundary */ + if (sc->vaddr == NULL) { + device_printf(dev, "Failed to allocate memory.\n"); + return ENOMEM; + } + sc->paddr = vtophys(sc->vaddr); + /* Mark it uncacheable. */ + pmap_change_attr((vm_offset_t)sc->vaddr, PAGE_SIZE, + VM_MEMATTR_UNCACHEABLE); + + if (bootverbose) + device_printf(dev, + "KVA alloc'd: virtual: %p, phys: %#jx\n", + sc->vaddr, (uintmax_t)sc->paddr); + + /* Set this address in firmware. */ + cfg.req.addr = (uint32_t)sc->paddr; + rv = bcm2835_firmware_property(sc->firmware, + BCM2835_FIRMWARE_TAG_SET_GPIOVIRTBUF, &cfg, sizeof(cfg)); + if (bootverbose) + device_printf(dev, "rv: %d, addr: 0x%x\n", rv, cfg.resp.addr); + if (rv != 0 || cfg.resp.addr != 0) + goto fail; + + /* Pins only support output. */ + for (i = 0; i < RPI_VIRT_GPIO_PINS; i++) { + sc->gpio_pins[i].gp_pin = i; + sc->gpio_pins[i].gp_caps = sc->gpio_pins[i].gp_flags + = GPIO_PIN_OUTPUT; + } + sc->busdev = gpiobus_add_bus(dev); + if (sc->busdev == NULL) + goto fail; + + bus_attach_children(dev); + return (0); + +fail: + /* Release resource if necessary. */ + free(sc->vaddr, M_DEVBUF); + mtx_destroy(&sc->sc_mtx); + + return (ENXIO); +} + +static int +rpi_virt_gpio_detach(device_t dev) +{ + return (EBUSY); +} + +static device_method_t rpi_virt_gpio_methods[] = { + /* Device interface */ + DEVMETHOD(device_probe, rpi_virt_gpio_probe), + DEVMETHOD(device_attach, rpi_virt_gpio_attach), + DEVMETHOD(device_detach, rpi_virt_gpio_detach), + + /* GPIO protocol */ + DEVMETHOD(gpio_get_bus, rpi_virt_gpio_get_bus), + DEVMETHOD(gpio_pin_max, rpi_virt_gpio_pin_max), + DEVMETHOD(gpio_pin_getcaps, rpi_virt_gpio_pin_getcaps), + DEVMETHOD(gpio_pin_getflags, rpi_virt_gpio_pin_getflags), + DEVMETHOD(gpio_pin_set, rpi_virt_gpio_pin_set), + DEVMETHOD(gpio_pin_get, rpi_virt_gpio_pin_get), + DEVMETHOD(gpio_pin_toggle, rpi_virt_gpio_pin_toggle), + + DEVMETHOD_END +}; + +static driver_t rpi_virt_gpio_driver = { + "gpio", + rpi_virt_gpio_methods, + sizeof(struct rpi_virt_gpio_softc), +}; + +EARLY_DRIVER_MODULE(rpi_virt_gpio, bcm2835_firmware, rpi_virt_gpio_driver, + 0, 0, BUS_PASS_INTERRUPT + BUS_PASS_ORDER_LATE); diff --git a/sys/conf/files.arm64 b/sys/conf/files.arm64 index cb326a2229a4..2a607748db8d 100644 --- a/sys/conf/files.arm64 +++ b/sys/conf/files.arm64 @@ -629,6 +629,7 @@ arm/broadcom/bcm2835/bcm283x_dwc_fdt.c optional dwcotg fdt soc_brcm_bcm2837 | arm/broadcom/bcm2835/bcm2838_pci.c optional soc_brcm_bcm2838 fdt pci arm/broadcom/bcm2835/bcm2838_xhci.c optional soc_brcm_bcm2838 fdt pci xhci arm/broadcom/bcm2835/raspberrypi_gpio.c optional soc_brcm_bcm2837 gpio fdt | soc_brcm_bcm2838 gpio fdt +arm/broadcom/bcm2835/raspberrypi_virtgpio.c optional soc_brcm_bcm2837 gpio fdt | soc_brcm_bcm2838 gpio fdt contrib/vchiq/interface/compat/vchi_bsd.c optional vchiq soc_brcm_bcm2837 fdt \ compile-with "${NORMAL_C} -DUSE_VCHIQ_ARM -D__VCCOREVER__=0x04000000 -I$S/contrib/vchiq" contrib/vchiq/interface/vchiq_arm/vchiq_2835_arm.c optional vchiq soc_brcm_bcm2837 fdt \ From nobody Wed Apr 1 01:47:36 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 4flntP21BCz6YVlq for ; Wed, 01 Apr 2026 01:47:41 +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 4flntP1Dtfz43q8 for ; Wed, 01 Apr 2026 01:47:41 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775008061; 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=nS08LRf6WvIgHCINkirX4Z/cgkaxt+malPcqD82ZjnA=; b=VSzcIVBY7bYsLP0ACydffYAaIkX1hOVOxldXdvXORieQML+T+g6uy8aPvnzFDItlsFoTAH VW3or2RDLDJ+K8MOjScYgl3/n5zjcVUB4MeNys9QPGKu8jHSkzIFUJNyBgiJVEQa4lLuZk 6oEhJeegmccXRQ17MAY0Brq8+3Jr0nBWStTQtIZN/PMo2fQDSPekAmcccNjdphT1ooTshf KTTnfnpbAUw+no2XYV8GqJVQQgK7tlT7SP6CC2Aod0h2U3jjjmumgo8ddvEpVi5Xi1UqmX 65aTGKxTpiQy3saziI3AaKUSY/rfkKAE2+wFyNTUjCRZrDzcochS7ACub49e0A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775008061; a=rsa-sha256; cv=none; b=KYGlnioeafo9HDVvjtqj+p6KEUgS2gynYX39kYZq6CZ9PbWYPg/bKnyHJb2ZFzHO8tFUK0 eFB4o5pFm/17hqrB9Tbx2nEo9ZXvUps3dSyNEPXivRmgRmfi8DnxNPSZw7Q2NK/7QrKPuN y9BobkwZvmjhuT5ZQyluKlQqJ52BU67pSkcu8P/Rcub5mJyF0iLFEy+Heoebh2sJgqTwso oOa5rHEoUbRlO1HJdmOXLrZA/8mUPzsS0J5502gvIzjI/3uI6Bfv9/TCnk1r8vimk/SSWW tlJRcALjD/AcsMlxMIgKIKgoEGnYUesy+NE5a7x/595F36IVZuyzXNpgiiGiCA== 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=1775008061; 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=nS08LRf6WvIgHCINkirX4Z/cgkaxt+malPcqD82ZjnA=; b=VE6RlLhRPegVFDRf8XCBCjQYQHevz9de99uWP4WBF0phplaXWN3FPgY4lAKAJ1tNjT0vk0 4JCqYpEgVQ+gps+m2lCb3ZHfU/cpnuaMYuIwllYCr8QS3Rcd8O3z3YOhTKvLdXKjiwQkL7 oRr4eFCLPk2485qJLvFxM5NQuxvC1xUsbtt912PjP06Hmeq0zCR08rkepvGqheFrH46jUQ KuwQmTqZ9FWdccKVw8Wwb8foVoc0V73y9cIDzCsWgdxuTWqrf4Afvq2J7lRImKwCaUUOlt R6niNeZUSKEI+ja1rWLg0WFOJBGIfk23EwCtZDJMBIaJoK2hqf8KOsMBErGfXg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4flntP0mv1zv7K for ; Wed, 01 Apr 2026 01:47:41 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 26c60 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 01 Apr 2026 01:47:36 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Xin LI Subject: git: f81c1f4339cd - main - MFV: xz 5.8.3. 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: delphij X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f81c1f4339cd20ea89dad51c0f7d96e0e34313a9 Auto-Submitted: auto-generated Date: Wed, 01 Apr 2026 01:47:36 +0000 Message-Id: <69cc7938.26c60.4fd59079@gitrepo.freebsd.org> The branch main has been updated by delphij: URL: https://cgit.FreeBSD.org/src/commit/?id=f81c1f4339cd20ea89dad51c0f7d96e0e34313a9 commit f81c1f4339cd20ea89dad51c0f7d96e0e34313a9 Merge: be79a42275ca 788f701923e8 Author: Xin LI AuthorDate: 2026-04-01 01:45:14 +0000 Commit: Xin LI CommitDate: 2026-04-01 01:45:14 +0000 MFV: xz 5.8.3. Security: CVE-2026-34743 MFC after: 3 days contrib/xz/ChangeLog | 477 ++++++++++++++++++++++ contrib/xz/THANKS | 5 + contrib/xz/src/common/tuklib_gettext.h | 4 +- contrib/xz/src/common/tuklib_integer.h | 19 +- contrib/xz/src/common/tuklib_mbstr_wrap.h | 4 +- contrib/xz/src/common/tuklib_open_stdxxx.h | 2 +- contrib/xz/src/liblzma/api/lzma/version.h | 2 +- contrib/xz/src/liblzma/check/crc32_fast.c | 2 +- contrib/xz/src/liblzma/check/crc_x86_clmul.h | 2 +- contrib/xz/src/liblzma/common/index.c | 21 + contrib/xz/src/liblzma/liblzma.pc.in | 1 + contrib/xz/src/liblzma/rangecoder/range_decoder.h | 1 + contrib/xz/src/xz/file_io.c | 3 +- contrib/xz/src/xz/main.c | 10 + lib/liblzma/config.h | 10 +- 15 files changed, 541 insertions(+), 22 deletions(-) diff --cc lib/liblzma/config.h index af0ee2fefb39,000000000000..db2d4e9c6a0d mode 100644,000000..100644 --- a/lib/liblzma/config.h +++ b/lib/liblzma/config.h @@@ -1,658 -1,0 +1,662 @@@ +/* config.h. Generated from config.h.in by configure. */ +/* config.h.in. Generated from configure.ac by autoheader. */ + +/* Define if building universal (internal helper macro) */ +/* #undef AC_APPLE_UNIVERSAL_BUILD */ + +/* How many MiB of RAM to assume if the real amount cannot be determined. */ +#define ASSUME_RAM 128 + +/* Define to 1 if translation of program messages to the user's native + language is requested. */ +/* FreeBSD - disabled intentionally */ +/* #undef ENABLE_NLS */ + +/* Define to 1 if ARM64 CRC32 instruction is supported. See configure.ac for + details. */ +/* #undef HAVE_ARM64_CRC32 */ + +/* Define to 1 if bswap_16 is available. */ +/* #undef HAVE_BSWAP_16 */ + +/* Define to 1 if bswap_32 is available. */ +/* #undef HAVE_BSWAP_32 */ + +/* Define to 1 if bswap_64 is available. */ +/* #undef HAVE_BSWAP_64 */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_BYTESWAP_H */ + +#ifndef WITHOUT_CAPSICUM +/* Define to 1 if you have the 'cap_rights_limit' function. */ +#define HAVE_CAP_RIGHTS_LIMIT 1 +#endif + +/* Define to 1 if the system has the type 'CC_SHA256_CTX'. */ +/* #undef HAVE_CC_SHA256_CTX */ + +/* Define to 1 if you have the 'CC_SHA256_Init' function. */ +/* #undef HAVE_CC_SHA256_INIT */ + +/* Define to 1 if you have the Mac OS X function + CFLocaleCopyPreferredLanguages in the CoreFoundation framework. */ +/* #undef HAVE_CFLOCALECOPYPREFERREDLANGUAGES */ + +/* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in + the CoreFoundation framework. */ +/* #undef HAVE_CFPREFERENCESCOPYAPPVALUE */ + +/* Define to 1 if crc32 integrity check is enabled. */ +#define HAVE_CHECK_CRC32 1 + +/* Define to 1 if crc64 integrity check is enabled. */ +#define HAVE_CHECK_CRC64 1 + +/* Define to 1 if sha256 integrity check is enabled. */ +#define HAVE_CHECK_SHA256 1 + +/* Define to 1 if you have the 'clock_gettime' function. */ +#define HAVE_CLOCK_GETTIME 1 + +/* Define to 1 if 'CLOCK_MONOTONIC' is declared in . */ +#define HAVE_CLOCK_MONOTONIC 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_COMMONCRYPTO_COMMONDIGEST_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_CPUID_H 1 + +/* Define to 1 if the 32-bit x86 CRC assembly files are used. */ +/* FreeBSD - only enabled for i386 */ +#if defined(__FreeBSD__) && defined(__i386__) +#define HAVE_CRC_X86_ASM 1 +#endif + +/* Define if the GNU dcgettext() function is already present or preinstalled. + */ +/* FreeBSD - disabled intentionally */ +/* #undef HAVE_DCGETTEXT */ + +/* Define to 1 if any of HAVE_DECODER_foo have been defined. */ +#define HAVE_DECODERS 1 + +/* Define to 1 if arm decoder is enabled. */ +#define HAVE_DECODER_ARM 1 + +/* Define to 1 if arm64 decoder is enabled. */ +#define HAVE_DECODER_ARM64 1 + +/* Define to 1 if armthumb decoder is enabled. */ +#define HAVE_DECODER_ARMTHUMB 1 + +/* Define to 1 if delta decoder is enabled. */ +#define HAVE_DECODER_DELTA 1 + +/* Define to 1 if ia64 decoder is enabled. */ +#define HAVE_DECODER_IA64 1 + +/* Define to 1 if lzma1 decoder is enabled. */ +#define HAVE_DECODER_LZMA1 1 + +/* Define to 1 if lzma2 decoder is enabled. */ +#define HAVE_DECODER_LZMA2 1 + +/* Define to 1 if powerpc decoder is enabled. */ +#define HAVE_DECODER_POWERPC 1 + +/* Define to 1 if riscv decoder is enabled. */ +#define HAVE_DECODER_RISCV 1 + +/* Define to 1 if sparc decoder is enabled. */ +#define HAVE_DECODER_SPARC 1 + +/* Define to 1 if x86 decoder is enabled. */ +#define HAVE_DECODER_X86 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_DLFCN_H 1 + +/* Define to 1 if you have the 'elf_aux_info' function. */ +/* #undef HAVE_ELF_AUX_INFO */ + +/* Define to 1 if any of HAVE_ENCODER_foo have been defined. */ +#define HAVE_ENCODERS 1 + +/* Define to 1 if arm encoder is enabled. */ +#define HAVE_ENCODER_ARM 1 + +/* Define to 1 if arm64 encoder is enabled. */ +#define HAVE_ENCODER_ARM64 1 + +/* Define to 1 if armthumb encoder is enabled. */ +#define HAVE_ENCODER_ARMTHUMB 1 + +/* Define to 1 if delta encoder is enabled. */ +#define HAVE_ENCODER_DELTA 1 + +/* Define to 1 if ia64 encoder is enabled. */ +#define HAVE_ENCODER_IA64 1 + +/* Define to 1 if lzma1 encoder is enabled. */ +#define HAVE_ENCODER_LZMA1 1 + +/* Define to 1 if lzma2 encoder is enabled. */ +#define HAVE_ENCODER_LZMA2 1 + +/* Define to 1 if powerpc encoder is enabled. */ +#define HAVE_ENCODER_POWERPC 1 + +/* Define to 1 if riscv encoder is enabled. */ +#define HAVE_ENCODER_RISCV 1 + +/* Define to 1 if sparc encoder is enabled. */ +#define HAVE_ENCODER_SPARC 1 + +/* Define to 1 if x86 encoder is enabled. */ +#define HAVE_ENCODER_X86 1 + +/* Define to 1 if __attribute__((__constructor__)) is supported for functions. + */ +#define HAVE_FUNC_ATTRIBUTE_CONSTRUCTOR 1 + +/* Define to 1 if you have the 'futimens' function. */ +#define HAVE_FUTIMENS 1 + +/* Define to 1 if you have the 'futimes' function. */ +/* #undef HAVE_FUTIMES */ + +/* Define to 1 if you have the 'futimesat' function. */ +/* #undef HAVE_FUTIMESAT */ + +/* Define to 1 if you have the 'getauxval' function. */ +/* #undef HAVE_GETAUXVAL */ + +/* Define to 1 if you have the header file. */ +#define HAVE_GETOPT_H 1 + +/* Define to 1 if you have the 'getopt_long' function. */ +#define HAVE_GETOPT_LONG 1 + +/* Define to 1 if you have the 'getrlimit' function. */ +#define HAVE_GETRLIMIT 1 + +/* Define if the GNU gettext() function is already present or preinstalled. */ +/* FreeBSD - disabled intentionally */ +/* #undef HAVE_GETTEXT */ + +/* Define to 1 if 'HWCAP_CRC32' is declared in . */ +/* #undef HAVE_HWCAP_CRC32 */ + +/* Define if you have the iconv() function and it works. */ +#define HAVE_ICONV 1 + +/* Define to 1 if you have the header file. */ +/* FreeBSD - only with clang because the base gcc does not support it */ +#if defined(__clang__) && defined(__FreeBSD__) && defined(__amd64__) +#define HAVE_IMMINTRIN_H 1 +#endif + +/* Define to 1 if you have the header file. */ +#define HAVE_INTTYPES_H 1 + +/* Define to 1 if Linux Landlock is supported. See configure.ac for details. + */ +/* #undef HAVE_LINUX_LANDLOCK */ + +/* Define to 1 if 64-bit LoongArch CRC32 instructions are supported. */ +/* #undef HAVE_LOONGARCH_CRC32 */ + +/* Define to 1 if .lz (lzip) decompression support is enabled. */ +#define HAVE_LZIP_DECODER 1 + +/* Define to 1 if mbrtowc and mbstate_t are properly declared. */ +#define HAVE_MBRTOWC 1 + +/* Define to 1 to enable bt2 match finder. */ +#define HAVE_MF_BT2 1 + +/* Define to 1 to enable bt3 match finder. */ +#define HAVE_MF_BT3 1 + +/* Define to 1 to enable bt4 match finder. */ +#define HAVE_MF_BT4 1 + +/* Define to 1 to enable hc3 match finder. */ +#define HAVE_MF_HC3 1 + +/* Define to 1 to enable hc4 match finder. */ +#define HAVE_MF_HC4 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_MINIX_CONFIG_H */ + +/* Define to 1 if getopt.h declares extern int optreset. */ +#define HAVE_OPTRESET 1 + +/* Define to 1 if you have the 'pledge' function. */ +/* #undef HAVE_PLEDGE */ + +/* Define to 1 if you have the 'posix_fadvise' function. */ +#define HAVE_POSIX_FADVISE 1 + +/* Define to 1 if 'program_invocation_name' is declared in . */ +/* #undef HAVE_PROGRAM_INVOCATION_NAME */ + +/* Define to 1 if you have the 'pthread_condattr_setclock' function. */ +#define HAVE_PTHREAD_CONDATTR_SETCLOCK 1 + +/* Have PTHREAD_PRIO_INHERIT. */ +#define HAVE_PTHREAD_PRIO_INHERIT 1 + +/* Define to 1 if you have the 'SHA256Init' function. */ +/* #undef HAVE_SHA256INIT */ + +/* Define to 1 if the system has the type 'SHA256_CTX'. */ +#define HAVE_SHA256_CTX 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SHA256_H 1 + +/* Define to 1 if you have the 'SHA256_Init' function. */ +#define HAVE_SHA256_INIT 1 + +/* Define to 1 if the system has the type 'SHA2_CTX'. */ +/* #undef HAVE_SHA2_CTX */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SHA2_H */ + +/* Define to 1 if optimizing for size. */ +/* #undef HAVE_SMALL */ + +/* Define to 1 if stdbool.h conforms to C99. */ +#define HAVE_STDBOOL_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDINT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDIO_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STDLIB_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRINGS_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_STRING_H 1 + +/* Define to 1 if 'st_atimensec' is a member of 'struct stat'. */ +#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1 + +/* Define to 1 if 'st_atimespec.tv_nsec' is a member of 'struct stat'. */ +#define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1 + +/* Define to 1 if 'st_atim.st__tim.tv_nsec' is a member of 'struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC */ + +/* Define to 1 if 'st_atim.tv_nsec' is a member of 'struct stat'. */ +#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1 + +/* Define to 1 if 'st_uatime' is a member of 'struct stat'. */ +/* #undef HAVE_STRUCT_STAT_ST_UATIME */ + +/* Define to 1 to if GNU/Linux-specific details are unconditionally wanted for + symbol versioning. Define to 2 to if these are wanted only if also PIC is + defined (allows building both shared and static liblzma at the same time + with Libtool if neither --with-pic nor --without-pic is used). This define + must be used together with liblzma_linux.map. */ +/* #undef HAVE_SYMBOL_VERSIONS_LINUX */ + +/* Define to 1 if you have the 'sysctlbyname' function. */ +/* #undef HAVE_SYSCTLBYNAME */ + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_BYTEORDER_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_CDEFS_H 1 + +/* Define to 1 if you have the header file. */ +/* #undef HAVE_SYS_ENDIAN_H */ + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_PARAM_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_STAT_H 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_SYS_TYPES_H 1 + +/* Define to 1 if the system has the type 'uintptr_t'. */ +#define HAVE_UINTPTR_T 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_UNISTD_H 1 + +/* Define to 1 if _mm_set_epi64x and _mm_clmulepi64_si128 are usable. See + configure.ac for details. */ +#if defined(__FreeBSD__) && defined(__amd64__) +#define HAVE_USABLE_CLMUL 1 +#endif + +/* Define to 1 if you have the 'utime' function. */ +/* #undef HAVE_UTIME */ + +/* Define to 1 if you have the 'utimes' function. */ +/* #undef HAVE_UTIMES */ + +/* Define to 1 if you have the 'vasprintf' function. */ +#define HAVE_VASPRINTF 1 + +/* Define to 1 or 0, depending whether the compiler supports simple visibility + declarations. */ +#define HAVE_VISIBILITY 1 + +/* Define to 1 if you have the header file. */ +#define HAVE_WCHAR_H 1 + +/* Define to 1 if you have the 'wcwidth' function. */ +#define HAVE_WCWIDTH 1 + +/* Define to 1 if the system has the type '_Bool'. */ +#define HAVE__BOOL 1 + +/* Define to 1 if you have the '_futime' function. */ +/* #undef HAVE__FUTIME */ + +/* Define to 1 if _mm_movemask_epi8 is available. */ +#if defined(__FreeBSD__) && defined(__amd64__) +#define HAVE__MM_MOVEMASK_EPI8 1 +#endif + +/* Define to 1 if the GNU C extension __builtin_assume_aligned is supported. + */ +#define HAVE___BUILTIN_ASSUME_ALIGNED 1 + +/* Define to 1 if the GNU C extensions __builtin_bswap16/32/64 are supported. + */ +#define HAVE___BUILTIN_BSWAPXX 1 + +/* Define to the sub-directory where libtool stores uninstalled libraries. */ +#define LT_OBJDIR ".libs/" + +/* Define to 1 when using POSIX threads (pthreads). */ +#define MYTHREAD_POSIX 1 + +/* Define to 1 when using Windows Vista compatible threads. This uses features + that are not available on Windows XP. */ +/* #undef MYTHREAD_VISTA */ + +/* Define to 1 when using Windows 95 (and thus XP) compatible threads. This + avoids use of features that were added in Windows Vista. */ +/* #undef MYTHREAD_WIN95 */ + +/* Define to 1 to disable debugging code. */ +#define NDEBUG 1 + +/* Name of package */ +#define PACKAGE "xz" + +/* Define to the address where bug reports for this package should be sent. */ +#define PACKAGE_BUGREPORT "xz@tukaani.org" + +/* Define to the full name of this package. */ +#define PACKAGE_NAME "XZ Utils" + +/* Define to the full name and version of this package. */ - #define PACKAGE_STRING "XZ Utils 5.8.2" ++#define PACKAGE_STRING "XZ Utils 5.8.3" + +/* Define to the one symbol short name of this package. */ +#define PACKAGE_TARNAME "xz" + +/* Define to the home page for this package. */ +#define PACKAGE_URL "https://tukaani.org/xz/" + +/* Define to the version of this package. */ - #define PACKAGE_VERSION "5.8.2" ++#define PACKAGE_VERSION "5.8.3" + +/* Define to necessary symbol if this constant uses a non-standard name on + your system. */ +/* #undef PTHREAD_CREATE_JOINABLE */ + +/* The size of 'size_t', as computed by sizeof. */ +#define SIZEOF_SIZE_T 8 + +/* Define to 1 if all of the C89 standard headers exist (not just the ones + required in a freestanding environment). This macro is provided for + backward compatibility; new code need not use it. */ +#define STDC_HEADERS 1 + +/* Define to 1 if the number of available CPU cores can be detected with + cpuset(2). */ +#define TUKLIB_CPUCORES_CPUSET 1 + +/* Define to 1 if the number of available CPU cores can be detected with + pstat_getdynamic(). */ +/* #undef TUKLIB_CPUCORES_PSTAT_GETDYNAMIC */ + +/* Define to 1 if the number of available CPU cores can be detected with + sched_getaffinity() */ +/* #undef TUKLIB_CPUCORES_SCHED_GETAFFINITY */ + +/* Define to 1 if the number of available CPU cores can be detected with + sysconf(_SC_NPROCESSORS_ONLN) or sysconf(_SC_NPROC_ONLN). */ +/* #undef TUKLIB_CPUCORES_SYSCONF */ + +/* Define to 1 if the number of available CPU cores can be detected with + sysctl(). */ +/* #undef TUKLIB_CPUCORES_SYSCTL */ + +/* Define to 1 if the system supports fast unaligned access to 16-bit, 32-bit, + and 64-bit integers. */ +/* FreeBSD - derive from __NO_STRICT_ALIGNMENT */ +/* #undef TUKLIB_FAST_UNALIGNED_ACCESS */ + +/* Define to 1 if the amount of physical memory can be detected with + _system_configuration.physmem. */ +/* #undef TUKLIB_PHYSMEM_AIX */ + +/* Define to 1 if the amount of physical memory can be detected with + getinvent_r(). */ +/* #undef TUKLIB_PHYSMEM_GETINVENT_R */ + +/* Define to 1 if the amount of physical memory can be detected with + getsysinfo(). */ +/* #undef TUKLIB_PHYSMEM_GETSYSINFO */ + +/* Define to 1 if the amount of physical memory can be detected with + pstat_getstatic(). */ +/* #undef TUKLIB_PHYSMEM_PSTAT_GETSTATIC */ + +/* Define to 1 if the amount of physical memory can be detected with + sysconf(_SC_PAGESIZE) and sysconf(_SC_PHYS_PAGES). */ +#define TUKLIB_PHYSMEM_SYSCONF 1 + +/* Define to 1 if the amount of physical memory can be detected with sysctl(). + */ +/* #undef TUKLIB_PHYSMEM_SYSCTL */ + +/* Define to 1 if the amount of physical memory can be detected with Linux + sysinfo(). */ +/* #undef TUKLIB_PHYSMEM_SYSINFO */ + +/* Define to 1 to use unsafe type punning, e.g. char *x = ...; *(int *)x = + 123; which violates strict aliasing rules and thus is undefined behavior + and might result in broken code. */ +/* #undef TUKLIB_USE_UNSAFE_TYPE_PUNNING */ + +/* Enable extensions on AIX, Interix, z/OS. */ +#ifndef _ALL_SOURCE +# define _ALL_SOURCE 1 +#endif ++/* Enable extensions on Cosmopolitan Libc. */ ++#ifndef _COSMO_SOURCE ++# define _COSMO_SOURCE 1 ++#endif +/* Enable general extensions on macOS. */ +#ifndef _DARWIN_C_SOURCE +# define _DARWIN_C_SOURCE 1 +#endif +/* Enable general extensions on Solaris. */ +#ifndef __EXTENSIONS__ +# define __EXTENSIONS__ 1 +#endif +/* Enable GNU extensions on systems that have them. */ +#ifndef _GNU_SOURCE +# define _GNU_SOURCE 1 +#endif +/* Enable X/Open compliant socket functions that do not require linking + with -lxnet on HP-UX 11.11. */ +#ifndef _HPUX_ALT_XOPEN_SOCKET_API +# define _HPUX_ALT_XOPEN_SOCKET_API 1 +#endif +/* Identify the host operating system as Minix. + This macro does not affect the system headers' behavior. + A future release of Autoconf may stop defining this macro. */ +#ifndef _MINIX +/* # undef _MINIX */ +#endif +/* Enable general extensions on NetBSD. + Enable NetBSD compatibility extensions on Minix. */ +#ifndef _NETBSD_SOURCE +# define _NETBSD_SOURCE 1 +#endif +/* Enable OpenBSD compatibility extensions on NetBSD. + Oddly enough, this does nothing on OpenBSD. */ +#ifndef _OPENBSD_SOURCE +# define _OPENBSD_SOURCE 1 +#endif +/* Define to 1 if needed for POSIX-compatible behavior. */ +#ifndef _POSIX_SOURCE +/* # undef _POSIX_SOURCE */ +#endif +/* Define to 2 if needed for POSIX-compatible behavior. */ +#ifndef _POSIX_1_SOURCE +/* # undef _POSIX_1_SOURCE */ +#endif +/* Enable POSIX-compatible threading on Solaris. */ +#ifndef _POSIX_PTHREAD_SEMANTICS +# define _POSIX_PTHREAD_SEMANTICS 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ +#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ +# define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ +#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ +# define __STDC_WANT_IEC_60559_BFP_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ +#ifndef __STDC_WANT_IEC_60559_DFP_EXT__ +# define __STDC_WANT_IEC_60559_DFP_EXT__ 1 +#endif +/* Enable extensions specified by C23 Annex F. */ +#ifndef __STDC_WANT_IEC_60559_EXT__ +# define __STDC_WANT_IEC_60559_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ +#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ +# define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1 +#endif +/* Enable extensions specified by C23 Annex H and ISO/IEC TS 18661-3:2015. */ +#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ +# define __STDC_WANT_IEC_60559_TYPES_EXT__ 1 +#endif +/* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ +#ifndef __STDC_WANT_LIB_EXT2__ +# define __STDC_WANT_LIB_EXT2__ 1 +#endif +/* Enable extensions specified by ISO/IEC 24747:2009. */ +#ifndef __STDC_WANT_MATH_SPEC_FUNCS__ +# define __STDC_WANT_MATH_SPEC_FUNCS__ 1 +#endif +/* Enable extensions on HP NonStop. */ +#ifndef _TANDEM_SOURCE +# define _TANDEM_SOURCE 1 +#endif +/* Enable X/Open extensions. Define to 500 only if necessary + to make mbstate_t available. */ +#ifndef _XOPEN_SOURCE +/* # undef _XOPEN_SOURCE */ +#endif + + +/* Version number of package */ - #define VERSION "5.8.2" ++#define VERSION "5.8.3" + +/* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most + significant byte first (like Motorola and SPARC, unlike Intel). */ +#if defined(__FreeBSD__) +#include +#if defined(__NO_STRICT_ALIGNMENT) +#define TUKLIB_FAST_UNALIGNED_ACCESS 1 +#endif +#include +#if _BYTE_ORDER == _BIG_ENDIAN +# define WORDS_BIGENDIAN 1 +#endif +#endif + +/* Number of bits in a file offset, on hosts where this is settable. */ +/* #undef _FILE_OFFSET_BITS */ + +/* Define to 1 on platforms where this makes off_t a 64-bit type. */ +/* #undef _LARGE_FILES */ + +/* Number of bits in time_t, on hosts where this is settable. */ +/* #undef _TIME_BITS */ + +/* Define for Solaris 2.5.1 so the uint32_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +/* #undef _UINT32_T */ + +/* Define for Solaris 2.5.1 so the uint64_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +/* #undef _UINT64_T */ + +/* Define for Solaris 2.5.1 so the uint8_t typedef from , + , or is not used. If the typedef were allowed, the + #define below would cause a syntax error. */ +/* #undef _UINT8_T */ + +/* Define to rpl_ if the getopt replacement functions and variables should be + used. */ +/* #undef __GETOPT_PREFIX */ + +/* Define to 1 on platforms where this makes time_t a 64-bit type. */ +/* #undef __MINGW_USE_VC2005_COMPAT */ + +/* Define to the type of a signed integer type of width exactly 32 bits if + such a type exists and the standard includes do not define it. */ +/* #undef int32_t */ + +/* Define to the type of a signed integer type of width exactly 64 bits if + such a type exists and the standard includes do not define it. */ +/* #undef int64_t */ + +/* Define to the type of an unsigned integer type of width exactly 16 bits if + such a type exists and the standard includes do not define it. */ +/* #undef uint16_t */ + +/* Define to the type of an unsigned integer type of width exactly 32 bits if + such a type exists and the standard includes do not define it. */ +/* #undef uint32_t */ + +/* Define to the type of an unsigned integer type of width exactly 64 bits if + such a type exists and the standard includes do not define it. */ +/* #undef uint64_t */ + +/* Define to the type of an unsigned integer type of width exactly 8 bits if + such a type exists and the standard includes do not define it. */ +/* #undef uint8_t */ + +/* Define to the type of an unsigned integer type wide enough to hold a + pointer, if such a type exists, and if the system does not define it. */ +/* #undef uintptr_t */ From nobody Wed Apr 1 07:29:58 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 4flxTR47JMz6W7QV for ; Wed, 01 Apr 2026 07:30:03 +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 4flxTR35hqz3dR1 for ; Wed, 01 Apr 2026 07:30:03 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775028603; 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=ur2IU8iHwZzE3GBKC0K2NA0gTpEUaEDa8uUfBnOXf7o=; b=bsjGkIlM3u9FEOlshPIiWHNkHGDdpiHwTQgACUGqdSWM6isiweZt898wGPDfwHZOLhb3Yx zj8wL0ilbwvPRwY5bOdI6Ogv8oIUfPYX48bENYIIEU9BCRqKaW4izNZgPvybsRb4W+c2XQ EZ2SI/lMu90TS8/diQrwNKrLlgPVSX993+h6bVwxfSgHKJS+0LJTBaET81N1U61trOe8Ms nPlCOzKXqS2DVPlH3xY0HXTcTt1+XM6RDW2eAGzk8ooJiw0VVCuZwiUKu7oTt1wuag3OGo DLT17zNiuqGC5JWhpyEx5TOHRir6Wznsn/H0Zz3sFF6ySds6oS+4qHGah2663A== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775028603; a=rsa-sha256; cv=none; b=Dy7tLrKOVsI4NouTFCTAUC+U1EZibMT5vq7OV0xv3L1MF8Yjt67e8VvqVWlrDJ+okQeKSX wTeSaHR7aaB9P++FQNxsII1QYQnxEPp2T2CplWYuB4BiDBzfQRQXDTf+SUiRnQhwtn/QqX DWSL9b+kSNme8XTJhqvaervGmLrTg4xD/9uqdYVZCQZ95vK2HfAtdV9/ils428N5t8Hjdr wDDA+iL/Fm+3NW1HCIBcNbzgG8gw5TA2MkQqSIPp84gq1KGvgtFJxyZQj3L0g2p8IOcPWA +1LXWZdPjWfuxAYGK3tgblA6AmK7qx2D/KDnzgBXc6gHGdywyAMpSM8lSVsK7g== 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=1775028603; 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=ur2IU8iHwZzE3GBKC0K2NA0gTpEUaEDa8uUfBnOXf7o=; b=ExsMJ+3MMiJnUv9rmfdxXAJUC9DJ4fHP2mDYvXNVMd481/fIrbfZ6v7Bb936JiWxsNyEQd fJt7kZ8dDhXI4DgBso9BtxvhnKlcLJf+PBhDrAwE+SBXIcCwg9seYUAwINPHOiuo9575xW K6HuBLRakz4g2+hHFi57e4H+MYfT2bKgxrDtJIGLcNsZeAjJNGjyKQcuuSCgaOa/p+OzHW DQ+acYfiYsj2RJwy9aLZ6e6KuKLgEOvIL7p094lfrXNuy5Ypyf2Vrjvkgm8Eqdcxr2D1ig XWsvkN1MvQKRTTZdIqYiYDxPX44SKuvQZpoNv9t5GNUkthnlJ2Q+s1ZZh64hTw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4flxTR2NDbz15WB for ; Wed, 01 Apr 2026 07:30:03 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 24e0d by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 01 Apr 2026 07:29:58 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Weixie Cui From: Enji Cooper Subject: git: f3b59bf28504 - main - bce: Fix SYSCTL_IN error check in bce_sysctl_nvram_write() 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: ngie X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f3b59bf28504f901f4fcb568004a92c02fa371ed Auto-Submitted: auto-generated Date: Wed, 01 Apr 2026 07:29:58 +0000 Message-Id: <69ccc976.24e0d.305fe761@gitrepo.freebsd.org> The branch main has been updated by ngie: URL: https://cgit.FreeBSD.org/src/commit/?id=f3b59bf28504f901f4fcb568004a92c02fa371ed commit f3b59bf28504f901f4fcb568004a92c02fa371ed Author: Weixie Cui AuthorDate: 2026-03-31 13:51:46 +0000 Commit: Enji Cooper CommitDate: 2026-04-01 07:29:46 +0000 bce: Fix SYSCTL_IN error check in bce_sysctl_nvram_write() The condition after SYSCTL_IN was inverted: success (error == 0) returned immediately and skipped the NVRAM write path, while failure fell through. Return only when SYSCTL_IN fails. Signed-off-by: Weixie Cui Reviewed-by: ngie Pull-Request: https://github.com/freebsd/freebsd-src/pull/2113 --- sys/dev/bce/if_bce.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/dev/bce/if_bce.c b/sys/dev/bce/if_bce.c index 6cf39e035ea6..84992af0c6b8 100644 --- a/sys/dev/bce/if_bce.c +++ b/sys/dev/bce/if_bce.c @@ -8861,7 +8861,7 @@ bce_sysctl_nvram_write(SYSCTL_HANDLER_ARGS) bzero(sc->nvram_buf, sc->bce_flash_size); error = SYSCTL_IN(req, sc->nvram_buf, sc->bce_flash_size); - if (error == 0) + if (error != 0) return (error); if (req->newlen == sc->bce_flash_size) From nobody Wed Apr 1 08:13:51 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 4flyS14RnRz6WCvg; Wed, 01 Apr 2026 08:13:53 +0000 (UTC) (envelope-from des@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (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 "smtp.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4flyS13fKgz3khK; Wed, 01 Apr 2026 08:13:53 +0000 (UTC) (envelope-from des@freebsd.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775031233; 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: in-reply-to:in-reply-to:references:references; bh=u2FNRcETE+5BEhkIP5ulDP+0JKUQQAoRsU+ud9B9rkA=; b=OtTdWNDjLmeDBXMbDYxJriRxI6PFlKh+WdENj3wZlRCeWHiRUekUWVemsosE15l9+ZDdDc 3cJY6gRo+8mnzEd+twa4wuOkrzRWYLmZkO4SAvqIS8dIf/EkcPlaZ4awNRNTi8FL2PKqud +IFx8b3OBgcOL969+KcjObcxivczltroN1Jo8qgCDjl+tl6hTIRf1rPx/rMFRUTB2l46ho F6o+acEgcDjLW7S6Stik0te+G+p8MqI3UqTNxPpNpkW44DSCDaU7HO9IDkJcwyBdcm+YqS UW05Aeu2UetiB5wYmxD+HPoRv/ZqGNc0AEOyoJvoLkD3+PLTVQCgf5pGH67t3g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775031233; a=rsa-sha256; cv=none; b=Nibwm3JHoyGNFJqQzBbcx8E70gZw/xEa171XgMD7bdlPwQTwHtSBPnwXa/gxw4rOJHYkSN xE2JT+b4iV5k+MBfg3OMyM/8ETuePBv9wot60vH8H31nEE7gei+LHUMxSBGT67zs+Wyv55 06L5m2iIk2DBu5LHqB+HfQ5+/nKxkBRoojWAY6oqqmEnaC5h9ZyEY4uUA5n+3361zDuEOg Y7SJmc0y/ACpHOueREvvOtllc0mwTYrZHQLkbnEx3c0okHI5ayfTGPPJqGgI1VyDDnpiiR TCgaprDFw5Cmgk3r5SS3DsiR/eV0kJuNEDFXRWoDl2uiEqEH0/gZFl9tciRC9g== 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=1775031233; 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: in-reply-to:in-reply-to:references:references; bh=u2FNRcETE+5BEhkIP5ulDP+0JKUQQAoRsU+ud9B9rkA=; b=Wh3ThlyJqOK4HIuZcNR9MsvJJr8ogXDcInjzXuzng4Hf1ob9EXLD2jU3mLSddUxnLSDGy8 lgY4JHOcDT7LQVPBBSEWMjQvKEbLeKfkiOLyGQijad4dXQGD/CMaQQpW7QTmiXDJ2FekIu JSfm5KhVrJ14BLr+WUZ48d+jk2op5bU4ROtJhnpD/CTMUvHCGSpHDWxnXxbtoZROLY4nMh HZ/H3w2C9sD0QuXyARFJM9mAgGFq+e/0oCKyznBfXuxbQ86tGDOyvDPVp+v4EeZqY7yjOH 4QS+aY/aRDqd9UCh74paL9Bu6TLg6y03F+1E8Rw5r9fZWavKtEvDGgpBVx+UcA== Received: from ltc.des.dev (lfbn-nan-1-698-103.w86-236.abo.wanadoo.fr [86.236.35.103]) (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 did not present a certificate) (Authenticated sender: des) by smtp.freebsd.org (Postfix) with ESMTPSA id 4flyS1276XzJWr; Wed, 01 Apr 2026 08:13:53 +0000 (UTC) (envelope-from des@freebsd.org) Received: by ltc.des.dev (Postfix, from userid 1001) id 88FE35CA87; Wed, 01 Apr 2026 10:13:51 +0200 (CEST) From: =?utf-8?Q?Dag-Erling_Sm=C3=B8rgrav?= To: Jessica Clarke Cc: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: Re: git: 47402c9422ec - main - cross-build: Provide mempcpy when building on macOS In-Reply-To: <69c17a22.38606.23d3192f@gitrepo.freebsd.org> (Jessica Clarke's message of "Mon, 23 Mar 2026 17:36:34 +0000") References: <69c17a22.38606.23d3192f@gitrepo.freebsd.org> User-Agent: Gnus/5.13 (Gnus v5.13) Date: Wed, 01 Apr 2026 10:13:51 +0200 Message-ID: <865x6bxfls.fsf@ltc.des.dev> 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Jessica Clarke writes: > commit 47402c9422ec6c9ba76d96414f5a08bd35a9e1fd > Author: Jessica Clarke > AuthorDate: 2026-03-23 16:56:09 +0000 > Commit: Jessica Clarke > CommitDate: 2026-03-23 16:56:09 +0000 > > cross-build: Provide mempcpy when building on macOS >=20=20=20=20=20 > We could patch the tzcode config to not use it, but it's simple to > provide an implementation of it and avoid spreading cross-build > bootstrapping special cases. >=20=20=20=20=20 > Fixes: ff2c98b30b57 ("tzcode: Update to 2026a") > MFC after: 1 week Please merge to stable/15 and stable/14 DES --=20 Dag-Erling Sm=C3=B8rgrav - des@FreeBSD.org From nobody Wed Apr 1 11:16:36 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 4fm2Vs1B4gz6WYMr for ; Wed, 01 Apr 2026 11:16:37 +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 4fm2Vs0gVkz3DCZ for ; Wed, 01 Apr 2026 11:16:37 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775042197; 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=bCDuhT7JikDs2nMSmDlw78HXx7w6yunjul3BN5HMMjI=; b=g0WXEJGvvDxSxakXP7+O/gC/2LWDJAxK2eOKBMRFph59XXW/romoq8L3atKuY1Lk1dvRUb IHQv0fSvuHso/ZTAeM3CpdnH/PejvZwICkfdr5XJzqS/Rpap/cb7l2oL38iI7i6lZ9wbvg oMaCPEPJAze6Ob9zR2Q8EKv4NmZAFDbbQZniuVHKW6Q9SS7KZdUSmBBKyzRhUcYHz9Pkw1 sHVcZ2iYrQ+5hK6W3ixQDiM/3cQV+rlhvL8pb1pFF7fusqxCITrRwqL8wNBm83OSdVgDsf CQxkvDI68XL/3QZJ3snm4xZ1s0qbYut462biiAvif25cZdHmYy+lcFYAG+FzIw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775042197; a=rsa-sha256; cv=none; b=ectcKu11NwPqEZ7aFDNhy20vpLi+8vY2WyIVYx/L3f0BcQzUHed30dwZxPmyz9oeowgIAp /4m1Wi/PC6zwJHJb4W2CGAkCF7xCpIEXaQyxzgoWSqqV3RLnNCO8xWpe2LLWIHLkBFAajj Ipyk4JrRl/m+pvOTrYou3quMWGUbcBcK7R8igktQvfKX1mjVyU65VNlQtPHosxcs6Mt5gY cX3BSfO22/1rC0LXcNQjqDoSdyg4CHqZ0SQZvAPEbinE95DiY/7Xv3u64Lml9AOI/pkVBI AMAhjt049zihMPUQ89vky6Me6BnnKOr0BlPfrMyhfT9t+yCNu3sRIWBw0gOekQ== 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=1775042197; 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=bCDuhT7JikDs2nMSmDlw78HXx7w6yunjul3BN5HMMjI=; b=j0seecHk6x3spov92tHmU3XzIcYrgd5SGQtVriIYhskpkq2NQ8QE4z3LQ5B0cMu4iHGE2L xSsyu8rx4Dz6IvRfcm+bEngaIsVXMS0sQS3wCutOqfdSxXYtWw/8sjP0L0tfenfb5t2gM4 SOSiku4TKdChzpXbMXSFv58LI9l7VKT52350KJLUP75H3cVyh/DxiKgsfz+ZAefEupLxQV SekEvABpaYFJ6fCGijBMntcyU6PKDIa/cYuSWPeOhI6eGuZ5qkpV1KXxl+sOo7Y8t3HdYZ gqvxAoUywHX46SxuuSQEGvAebntPtwyXICecE9Ym3yci1fihECxh2Wh0BPdDcA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fm2Vs0Gmcz1CbH for ; Wed, 01 Apr 2026 11:16:37 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 43cd0 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 01 Apr 2026 11:16:36 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: c6a1c1260f02 - main - pmap: Do not use PMAP_LOCK_INIT with kernel_pmap 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: c6a1c1260f02e44b7f44b1e3735ce5dbd785544d Auto-Submitted: auto-generated Date: Wed, 01 Apr 2026 11:16:36 +0000 Message-Id: <69ccfe94.43cd0.742774e2@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=c6a1c1260f02e44b7f44b1e3735ce5dbd785544d commit c6a1c1260f02e44b7f44b1e3735ce5dbd785544d Author: Mark Johnston AuthorDate: 2026-04-01 09:15:26 +0000 Commit: Mark Johnston CommitDate: 2026-04-01 11:15:42 +0000 pmap: Do not use PMAP_LOCK_INIT with kernel_pmap The kernel_pmap lock is a bit special: it does not need the DUPOK flag, and it really belongs to a different lock class. If it belongs to the same class as regular pmap locks, then witness may report warnings when performing UMA allocations under a regular pmap lock, if the allocation triggers a pmap_growkernel() call. Replace instances of PMAP_LOCK_INIT(kernel_pmap) with inline mtx_init() calls to silence some witness warnings for harmless behaviour I see with some uncommitted test programs. Reviewed by: alc, kib MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D56185 --- sys/amd64/amd64/pmap.c | 2 +- sys/arm/arm/pmap-v6.c | 2 +- sys/arm64/arm64/pmap.c | 2 +- sys/i386/i386/pmap.c | 2 +- sys/powerpc/aim/mmu_oea.c | 2 +- sys/powerpc/aim/mmu_oea64.c | 2 +- sys/powerpc/aim/mmu_radix.c | 2 +- sys/powerpc/booke/pmap.c | 2 +- sys/riscv/riscv/pmap.c | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c index 8695dd61316e..956e9c5e78d2 100644 --- a/sys/amd64/amd64/pmap.c +++ b/sys/amd64/amd64/pmap.c @@ -2127,7 +2127,7 @@ pmap_bootstrap(vm_paddr_t *firstaddr) * DMAP_TO_PHYS()/PHYS_TO_DMAP() are functional only after * kva_layout is fixed. */ - PMAP_LOCK_INIT(kernel_pmap); + mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF); if (la57) { kva_layout = kva_layout_la57; vtoptem = ((1ul << (NPTEPGSHIFT + NPDEPGSHIFT + NPDPEPGSHIFT + diff --git a/sys/arm/arm/pmap-v6.c b/sys/arm/arm/pmap-v6.c index d67267bba4e2..00f9766e9a54 100644 --- a/sys/arm/arm/pmap-v6.c +++ b/sys/arm/arm/pmap-v6.c @@ -1173,7 +1173,7 @@ pmap_bootstrap(vm_offset_t firstaddr) /* * Initialize the kernel pmap (which is statically allocated). */ - PMAP_LOCK_INIT(kernel_pmap); + mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF); kernel_l1pa = (vm_paddr_t)kern_pt1; /* for libkvm */ kernel_pmap->pm_pt1 = kern_pt1; kernel_pmap->pm_pt2tab = kern_pt2tab; diff --git a/sys/arm64/arm64/pmap.c b/sys/arm64/arm64/pmap.c index 86ef7359bbe9..678030f827dd 100644 --- a/sys/arm64/arm64/pmap.c +++ b/sys/arm64/arm64/pmap.c @@ -1347,7 +1347,7 @@ pmap_bootstrap(void) /* Set this early so we can use the pagetable walking functions */ kernel_pmap_store.pm_l0 = pagetable_l0_ttbr1; - PMAP_LOCK_INIT(kernel_pmap); + mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF); kernel_pmap->pm_l0_paddr = pmap_early_vtophys((vm_offset_t)kernel_pmap_store.pm_l0); TAILQ_INIT(&kernel_pmap->pm_pvchunk); diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c index 2f9e6ccf43a8..fd5ac272a441 100644 --- a/sys/i386/i386/pmap.c +++ b/sys/i386/i386/pmap.c @@ -630,7 +630,7 @@ __CONCAT(PMTYPE, bootstrap)(vm_paddr_t firstaddr) * Count bootstrap data as being resident in case any of this data is * later unmapped (using pmap_remove()) and freed. */ - PMAP_LOCK_INIT(kernel_pmap); + mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF); kernel_pmap->pm_pdir = IdlePTD; #ifdef PMAP_PAE_COMP kernel_pmap->pm_pdpt = IdlePDPT; diff --git a/sys/powerpc/aim/mmu_oea.c b/sys/powerpc/aim/mmu_oea.c index b1f74597aa42..adf5fd10e3de 100644 --- a/sys/powerpc/aim/mmu_oea.c +++ b/sys/powerpc/aim/mmu_oea.c @@ -878,7 +878,7 @@ moea_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend) /* * Initialize the kernel pmap (which is statically allocated). */ - PMAP_LOCK_INIT(kernel_pmap); + mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF); for (i = 0; i < 16; i++) kernel_pmap->pm_sr[i] = EMPTY_SEGMENT + i; CPU_FILL(&kernel_pmap->pm_active); diff --git a/sys/powerpc/aim/mmu_oea64.c b/sys/powerpc/aim/mmu_oea64.c index 22442c59fd30..247bd30e6bd4 100644 --- a/sys/powerpc/aim/mmu_oea64.c +++ b/sys/powerpc/aim/mmu_oea64.c @@ -1089,7 +1089,7 @@ moea64_mid_bootstrap(vm_offset_t kernelstart, vm_offset_t kernelend) CPU_FILL(&kernel_pmap->pm_active); RB_INIT(&kernel_pmap->pmap_pvo); - PMAP_LOCK_INIT(kernel_pmap); + mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF); /* * Now map in all the other buffers we allocated earlier diff --git a/sys/powerpc/aim/mmu_radix.c b/sys/powerpc/aim/mmu_radix.c index 85008de83870..1fc8a23269e5 100644 --- a/sys/powerpc/aim/mmu_radix.c +++ b/sys/powerpc/aim/mmu_radix.c @@ -1842,7 +1842,7 @@ mmu_radix_setup_pagetables(vm_size_t hwphyssz) vm_paddr_t l1phys; bzero(kernel_pmap, sizeof(struct pmap)); - PMAP_LOCK_INIT(kernel_pmap); + mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF); vm_radix_init(&kernel_pmap->pm_radix); ptpages = allocpages(3); diff --git a/sys/powerpc/booke/pmap.c b/sys/powerpc/booke/pmap.c index f76f17bd8450..08516b151e6b 100644 --- a/sys/powerpc/booke/pmap.c +++ b/sys/powerpc/booke/pmap.c @@ -901,7 +901,7 @@ mmu_booke_bootstrap(vm_offset_t start, vm_offset_t kernelend) /*******************************************************/ /* Initialize (statically allocated) kernel pmap. */ /*******************************************************/ - PMAP_LOCK_INIT(kernel_pmap); + mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF); debugf("kernel_pmap = 0x%"PRI0ptrX"\n", (uintptr_t)kernel_pmap); kernel_pte_alloc(virtual_avail, kernstart); diff --git a/sys/riscv/riscv/pmap.c b/sys/riscv/riscv/pmap.c index 3fc261a15c06..e9f88f5d653e 100644 --- a/sys/riscv/riscv/pmap.c +++ b/sys/riscv/riscv/pmap.c @@ -921,7 +921,7 @@ pmap_bootstrap(vm_paddr_t kernstart, vm_size_t kernlen) printf("pmap_bootstrap %lx %lx\n", kernstart, kernlen); - PMAP_LOCK_INIT(kernel_pmap); + mtx_init(&kernel_pmap->pm_mtx, "kernel pmap", NULL, MTX_DEF); TAILQ_INIT(&kernel_pmap->pm_pvchunk); vm_radix_init(&kernel_pmap->pm_root); From nobody Wed Apr 1 11:16:38 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 4fm2Vt56xkz6WYCC for ; Wed, 01 Apr 2026 11:16:38 +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 4fm2Vt210tz3D1Q for ; Wed, 01 Apr 2026 11:16:38 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775042198; 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=C3VsU3Tk4VmBljxXzAx0SwsGS1/EtaliJyad6UD9Db8=; b=QYOTC+Tqg6A5ug0b2WbyDF2P3dGGP4ibtoGpAi7d56sK5NTL4mS1J/ljPZY/RpYA2cDC7e ZC+hyjXjEi+a7AM7SmLoNwN1LBxgvCbEoXFFhHv30EZAQaenLfnf2B96cddTKB3CsICSF7 iLzyuuhrzezARHmUrQfkIJE7P5SShHdM7Or9AWDBVJYLPdf7RfV3Ckn7gVuJGQ1wCWw+CJ Yr5s+lwEzhQAt/dFE4lSYXDuzTB/oEJDJyQ5RgUrIw3invuHSqnMmY27TvXNYDe2+MW/vR kVupvjv/a50SlCcjUubAKInAHhFfN44AXwAVX/JvoHU1iFyrjaZld8mjNDbQ+w== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775042198; a=rsa-sha256; cv=none; b=bOywqS+oO6rB7LraAREm5jrbFGHCBFXt4Zx9GPEd9x6O6tRlFCDXLb0WE9u8ZQYH6WFr+o h9k4v87B5buFUF7hs4IMDNNeVIVMevKmefOFjxgo0t18M5nUuRpeBatTMe8fEH6VWN5Ocp +cHTpJYkGCBOKIcBlGt0IXek8/Ht9MeuqGXQOS6j+XJaZQ5Gc1FADSkx6tg1WXfdaKjWd8 YB0eUL+bZ9D/IMDReS82RMZ1ZhB7bn0B68zHqs2ZT0JeV3b1bjR/T+rJp/NOcGu+RJa2HD Rx/w7oN1mFp/1mRUEvgdWlNoIarUIuLywrMUwb6iv+B90++X1WQtMrFUCl25iw== 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=1775042198; 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=C3VsU3Tk4VmBljxXzAx0SwsGS1/EtaliJyad6UD9Db8=; b=WF9S7O2bCCXtcRETyEjKihBkCAWrp6FDb1BGnyytUh488mwD9m35zIZBSKGG3gXUnj3uaU UG3XuHIsM3pEd1wY8oQXd4Gf0laFWGP9ob/N9+O72eMqxfNccoyhXDyuefjk0uCU2Z42hK 3W+pfcbyJr5ZssY1JbRRJ4LLFUTlniODiMn/Just5NkQb7UWxw28auNKK4jTDnBdK/bjaG f+CvCCQWSuRKHGQpABWTiWfys8Mn3f32BRtsF2Ufe4+YLWNXlWwLkF3HN4ACUf3xhL3Wsb xMS59SIXS9eQjdQrwXI2Gl1tn2IvQEmMsldmo0+7RIjHzLRoNVo/+sWOmoPV0A== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fm2Vt17hlz1CRC for ; Wed, 01 Apr 2026 11:16:38 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 45285 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 01 Apr 2026 11:16:38 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: f3c772361f3b - main - vmm: Restore the ability to create VMs as root in a jail 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: f3c772361f3b6213ec7ae7de993b6953357c7b48 Auto-Submitted: auto-generated Date: Wed, 01 Apr 2026 11:16:38 +0000 Message-Id: <69ccfe96.45285.612d5bc7@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=f3c772361f3b6213ec7ae7de993b6953357c7b48 commit f3c772361f3b6213ec7ae7de993b6953357c7b48 Author: Mark Johnston AuthorDate: 2026-04-01 09:25:27 +0000 Commit: Mark Johnston CommitDate: 2026-04-01 11:16:14 +0000 vmm: Restore the ability to create VMs as root in a jail The new PRIV_VMM_CREATE and DESTROY permissions should be allowed by jails, so need to be added to the list in prison_priv_check(). Then, modify vmmdev_create() to verify that the jail was created with the allow.vmm flag. This is already verified when opening /dev/vmmctl, but checking again doesn't hurt and ensures that one can't pass the allow.vmm policy by passing a vmmctl fd along a unix domain socket from outside the jail. Rename vmm_priv_check() to vmm_jail_priv_check() to make the function's purpose more clear. Reported by: novel Reviewed by: bnovkov Fixes: d4c05edd410e ("vmm: Add privilege checks to vmmctl operations") Differential Revision: https://reviews.freebsd.org/D56119 --- sys/dev/vmm/vmm_dev.c | 16 +++++++++++----- sys/kern/kern_jail.c | 8 ++++++++ 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/sys/dev/vmm/vmm_dev.c b/sys/dev/vmm/vmm_dev.c index ed8e5b2e0777..a2775023838a 100644 --- a/sys/dev/vmm/vmm_dev.c +++ b/sys/dev/vmm/vmm_dev.c @@ -114,7 +114,7 @@ static int devmem_create_cdev(struct vmmdev_softc *sc, int id, char *devmem); static void vmmdev_destroy(struct vmmdev_softc *sc); static int -vmm_priv_check(struct ucred *ucred) +vmm_jail_priv_check(struct ucred *ucred) { if (jailed(ucred) && (ucred->cr_prison->pr_allow & pr_allow_vmm_flag) == 0) @@ -371,7 +371,7 @@ vmmdev_open(struct cdev *dev, int flags, int fmt, struct thread *td) * A jail without vmm access shouldn't be able to access vmm device * files at all, but check here just to be thorough. */ - error = vmm_priv_check(td->td_ucred); + error = vmm_jail_priv_check(td->td_ucred); if (error != 0) return (error); @@ -940,7 +940,7 @@ sysctl_vmm_destroy(SYSCTL_HANDLER_ARGS) char *buf; int error, buflen; - error = vmm_priv_check(req->td->td_ucred); + error = vmm_jail_priv_check(req->td->td_ucred); if (error) return (error); @@ -1016,6 +1016,12 @@ vmmdev_create(const char *name, uint32_t flags, struct ucred *cred) "An unprivileged user must run VMs in monitor mode")); } + if ((error = vmm_jail_priv_check(cred)) != 0) { + sx_xunlock(&vmmdev_mtx); + return (EXTERROR(error, + "VMs cannot be created in the current jail")); + } + if (!chgvmmcnt(cred->cr_ruidinfo, 1, vm_maxvmms)) { sx_xunlock(&vmmdev_mtx); return (ENOMEM); @@ -1061,7 +1067,7 @@ sysctl_vmm_create(SYSCTL_HANDLER_ARGS) if (!vmm_initialized) return (ENXIO); - error = vmm_priv_check(req->td->td_ucred); + error = vmm_jail_priv_check(req->td->td_ucred); if (error != 0) return (error); @@ -1126,7 +1132,7 @@ vmmctl_open(struct cdev *cdev, int flags, int fmt, struct thread *td) int error; struct vmmctl_priv *priv; - error = vmm_priv_check(td->td_ucred); + error = vmm_jail_priv_check(td->td_ucred); if (error != 0) return (error); diff --git a/sys/kern/kern_jail.c b/sys/kern/kern_jail.c index 9f78cb42aeb1..384825b7f8ac 100644 --- a/sys/kern/kern_jail.c +++ b/sys/kern/kern_jail.c @@ -4736,6 +4736,14 @@ prison_priv_check(struct ucred *cred, int priv) else return (EPERM); + case PRIV_VMM_CREATE: + case PRIV_VMM_DESTROY: + /* + * Jailed root can create and destroy VMs; the vmm module + * additionally checks for the allow.vmm flag. + */ + return (0); + case PRIV_VMM_PPTDEV: /* * Allow jailed root to manage passthrough devices. vmm(4) also From nobody Wed Apr 1 11:16:39 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 4fm2Vw1LPLz6WXpB for ; Wed, 01 Apr 2026 11:16:40 +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 4fm2Vv5WPxz3D6S for ; Wed, 01 Apr 2026 11:16:39 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775042199; 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=GThZ+8c+kY3/gcOfRD7iWJvrrNGk6PxwMVEED5/P+Q8=; b=YmTlwHpG+CxhpE4Dj9PU2Nn0qm/txDdZ4iLOSt1WvnUhNxlLL1oF4rCRII8IBnwNVC3i49 MqW67x3E2Bydg/3jjOQMnX3bDDP/j6X6wE3WqOIReXZcflEBmk0MlJZH2+mqwv8BDAWcGT um2WL8czIEucMkjJpCZFmCkoCEiPMuthu/4+F1ZVCTzpJkop240BtAxx3kZLAQlTQthRvh cypDYuWkL0RZgrBjSnaTzrZRfaf6yWPius+qmOJJfIcixQNkHDBmzp9zWx5MfbPvnkgJ7L ZAkoKmHcfQKUwFlDdZzKXeZRDCVB4hWg12E3lgtVLst4cH2U/zivevmlzgV6Bg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775042199; a=rsa-sha256; cv=none; b=XC0ZXksFGUIugumkJcGgOptI3gy+a7+rdcn331vJjjf1WDdYMKL2slwhOc2u1W6pXCWxJ/ ZRZzv3Y77vsSqoRGWW0dk9t1og1V2+JEdZqvJLAndjBXz3ucZrmDUm6lnXtUf2rFRSGtQH g6D4OR3pyYTEWUuJfOW6XSOsrMC8/eJA7rs0IEddv0AigurvQHleB4IT0I3TcRHltxx9aI orrJ8DTBy5s50OOTTKdcxVZBrSTkax/XWhnJvUX1J8CAQCUXZxyRnwNHpeYdS/ZkrNXbhG PLP3yyVY3U6OE9Yf4LsUM+nML1j3v4WmRKWY198b8dBAMZBCPsp+62YfhmzDvQ== 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=1775042199; 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=GThZ+8c+kY3/gcOfRD7iWJvrrNGk6PxwMVEED5/P+Q8=; b=H6QW+uhRis1Yanv+mVkp+JllODWTVHZaBvyY+Mpd9M0oR8Czkg+cboc1galcwV5p5A1pVL iiANqc7vgXS23NszBoq6HIHOFouO1CyoU6A4j0HGQ5AdM3cZUJJKJRV1AK0/HYMCdWdlo3 JeY0p8sBgDe1lf48od+6ONKu5FNIRovG+EEvRPj/i2LehOrg2RuCcrRJXR7XDRT1Tf7TLc 1pm9xs1No8MRyTESN43Mpdx5MAGP6Ays25/k039rR9vtVh+59Jwu2Ej4esWijlVC77vRa7 jqLahtF1wH/15+C+x0Dzrclvvyo3MjrRP1/TOmOoYp2ThJNFI2fltqJOq8ieTA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fm2Vv1xPSz1CRF for ; Wed, 01 Apr 2026 11:16:39 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 4441c by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 01 Apr 2026 11:16:39 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 0dbbed21a643 - main - ip6_mroute: Fix the type name in sysctl_mfctable() 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0dbbed21a643f6c95bebe23008a332ff68adb203 Auto-Submitted: auto-generated Date: Wed, 01 Apr 2026 11:16:39 +0000 Message-Id: <69ccfe97.4441c.c78ef44@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=0dbbed21a643f6c95bebe23008a332ff68adb203 commit 0dbbed21a643f6c95bebe23008a332ff68adb203 Author: Mark Johnston AuthorDate: 2026-04-01 11:13:05 +0000 Commit: Mark Johnston CommitDate: 2026-04-01 11:16:15 +0000 ip6_mroute: Fix the type name in sysctl_mfctable() No functional change since apparently it's fine to compute the size of a pointer type when the base type is undefined. Fixes: 0bb9c2b665d9 ("ip6_mroute: FIBify") --- sys/netinet6/ip6_mroute.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/netinet6/ip6_mroute.c b/sys/netinet6/ip6_mroute.c index 9a7f611b8b4c..8743673fd25a 100644 --- a/sys/netinet6/ip6_mroute.c +++ b/sys/netinet6/ip6_mroute.c @@ -220,7 +220,7 @@ sysctl_mfctable(SYSCTL_HANDLER_ARGS) fibnum = curthread->td_proc->p_fibnum; return (SYSCTL_OUT(req, &V_mfctables[fibnum].mfchashtbl, - sizeof(struct mfc6c *) * MF6CTBLSIZ)); + sizeof(struct mf6c *) * MF6CTBLSIZ)); } SYSCTL_PROC(_net_inet6_ip6, OID_AUTO, mf6ctable, CTLTYPE_OPAQUE | CTLFLAG_RD, From nobody Wed Apr 1 11:58:10 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 4fm3Qp2GwXz6Wcv5 for ; Wed, 01 Apr 2026 11:58:10 +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 4fm3Qp1kh5z3JCc for ; Wed, 01 Apr 2026 11:58:10 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775044690; 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=ECzsRFRrEnmwqaIU5QP1UpmKX++tjaYfm5a9O22jEb0=; b=emD9RWZQss3RdD8jLprvPG/mnQFpBgBrTpGgLHdo2btJjWt7TdHvzFo5lF6jDZ4GfUwkIn HPfKOowKbUj5eQeosHU/bpoWX1lfrnypwLtZs/ke2t6aNZhzxLDyJ6ZwBw6qL9DRv0JIWu ziwCvvOIy/weRqplrx05no28jxNw1gpcYGzDHYjOiECA7EO5o89MC1QXydqxtFBnYjCWpC gJSlGYkWSbdLPv9dvpZYlbxE4h76FaSXFgJSfYoxeEi9dpU6f+pAeQko9I0GFS1Iq3ABzT 0YDQ3Lt28d/0PbuGkuInGTaoDeNOPeCIQognX0QNKP/L+Fapl8HO/9iZ2QUXFw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775044690; a=rsa-sha256; cv=none; b=vAH7VxqQJwU5vuBZeUgvhCi6DQUbLarrbuRqg1kH0pHzw5PTDeO3ZptqJ5D8sRtXKB062Y fVhYPrFecLa2PZEBtu7p48m2dspXH/Mo2z5hiZwhlFqHyT63Jc4quo3XhxE7WXWBNWEpRp C8SybDjrporBe0zuZuITKVNAnYQ1oxVc7pEE/N5rOTGIAYPeQGvJg9d/9/W5DVy0YuPQM8 yVofoeAmfV4OwW2JoEi9RZJsZcaxdG3TwEakQEUrfedg5J4HMfyCl/97nm1AkAl2pk8sa1 4gGr996XRl45vGU5LCgvqxm8Se8YJCm2U+zlJwwlHbMZR/kyEOUNGZ1/MGbPzw== 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=1775044690; 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=ECzsRFRrEnmwqaIU5QP1UpmKX++tjaYfm5a9O22jEb0=; b=NE/pxCXrVQQQ7sZ17smWO1N+pfSYZbVsVoO5uZQa7PkeNbtpE9GRykIriCOIkC87FOwlcS OCJbrEMHvoXxMpoedMNbnX63fuuOtLWwWJdwOdP4fW5RItWutAT1K9c8POZaIipY1pMqYr 6LIwMk/oWDvIRyKD6AtXTUbCCa5TfgOOzOS8SPtsladzCpW3ZbS2laEgb8LAUcLf7hEkuH WHloz1xGMuWcxK+rwolwBf3SHgvcRQng6cEl0fUDcSSvSvJL4wUsU0zrLZ9SP4V2kgADRI Woxyx3EEKpTPMwUc6fAERbrbK+uvEo0FAoui+2W9LQFv2Isei8MeS3+d9Hv4TA== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fm3Qp0rVKzZf for ; Wed, 01 Apr 2026 11:58:10 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 18573 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 01 Apr 2026 11:58:10 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Aymeric Wibo Subject: git: 0307db7744d4 - main - acpi_spmc: Fail probe if acpi_spmc device already attached 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: obiwac X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 0307db7744d4cfe0d610ebece226dd20fdcc4ed5 Auto-Submitted: auto-generated Date: Wed, 01 Apr 2026 11:58:10 +0000 Message-Id: <69cd0852.18573.49d8a187@gitrepo.freebsd.org> The branch main has been updated by obiwac: URL: https://cgit.FreeBSD.org/src/commit/?id=0307db7744d4cfe0d610ebece226dd20fdcc4ed5 commit 0307db7744d4cfe0d610ebece226dd20fdcc4ed5 Author: Aymeric Wibo AuthorDate: 2026-04-01 11:54:57 +0000 Commit: Aymeric Wibo CommitDate: 2026-04-01 11:54:58 +0000 acpi_spmc: Fail probe if acpi_spmc device already attached We cannot have more than one SPMC device. Reviewed by: olce Approved by: olce Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D56062 --- sys/dev/acpica/acpi_spmc.c | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sys/dev/acpica/acpi_spmc.c b/sys/dev/acpica/acpi_spmc.c index 206d3a843f53..0c2a5d9e96a9 100644 --- a/sys/dev/acpica/acpi_spmc.c +++ b/sys/dev/acpica/acpi_spmc.c @@ -190,6 +190,11 @@ acpi_spmc_probe(device_t dev) if (ACPI_ID_PROBE(device_get_parent(dev), dev, spmc_ids, &name) > 0) return (ENXIO); + if (device_get_unit(dev) > 0) { + device_printf(dev, "shouldn't have more than one SPMC"); + return (ENXIO); + } + handle = acpi_get_handle(dev); if (handle == NULL) return (ENXIO); From nobody Wed Apr 1 11:58:11 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 4fm3Qq2ypdz6Wchn for ; Wed, 01 Apr 2026 11:58:11 +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 4fm3Qq1lVMz3JKn for ; Wed, 01 Apr 2026 11:58:11 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775044691; 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=nimhxS4d9vAA7VjJm2w2Tk9j5PgHrQznnrJln1YOsjk=; b=rsat90VSwDnduA4fVdgpTMtN4odoVEz4bdAeAYj4RZ4WzuuS78/ApB5mr5xMT3Wkfzx/da hUEomD23wgSKT0yRccwIGyb9HYClg77rwpKxgQQwEHM6CvwB23Gjs+qAuaevalbi0pjWL6 VNXhgAQdnLiJG2YV12eI6YOVOmrKUmGApiwJ62ytwujEaxbzsL7xc2aTTLbgGiLzOZ851i tbHTV1vlEsDXuGMrOCcy1MXMtEmuwH9kbYBP8VKSNvI5nAQl4TyenxZWaRilVQBPY6LMyq o4RoG3ufOde7rWU3jLzS1hmncX9TeGdPAf50gSzYa9ndF36s+xnJw49nYxqkUw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775044691; a=rsa-sha256; cv=none; b=qNprUCB6X0NioVv5XRqV28eTz99D5fqu3zhX5dlNxl6okXKIXlqRWEtB4LYvwIIZCBPNaE Hw6qb+6PgX4BKq8rkPikvYXq6bOph9X9ZfinVACgIMBWWz5iksNw8R9wGeoc1MOlAO+SMi q7RHvdqh8GeFWLAh/dn69FsJ6m5Ul6ZfQUyqDjD31/5yyHH1k1EmrcDwAN2wjHXlrPGULH aGRDKoHnFPrDkQHr1O+/iNc71JpyY7BEgiuMMJIN2waNbYLym86oyQ97p2Fyf6Jh+Fzl5a 6a2/vzRbQCiebw3aekS76YN6zfS68yNqziT+S5B0SL2pas9uflqkMSeSowT25Q== 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=1775044691; 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=nimhxS4d9vAA7VjJm2w2Tk9j5PgHrQznnrJln1YOsjk=; b=IO4bd6KAjGD+RGCyVzemuMZnUwXXjUmhlfVT5CtE0iZWRvLtEQVcmBTuVdi0sErRtAEstH CcJNOIyeHdzdAc1RDNdTWR1SWIQADem9is9v90QatShBGZH4VcS8Nm90z7O2mOwbaHyExl LSHTjQwB/bMHU+0iX1EqR55DVDzzXJvZtvj5rIIa42zFpgp/ua0NrTm1zQaNUypulM2Gl8 RP1ZJ/cUk21J8wp/doLw5AQi4AnXgaHEYpa6aAcMUyV51WhZLEH+EhRWLiQdIIn/tB2ila IzXlvwHqvJop4BLjBN7wyb4kMlz7WAl0b2uWRPGK671IGe19YDEtHhCtwHnjLw== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fm3Qq117szd7 for ; Wed, 01 Apr 2026 11:58:11 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 47440 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 01 Apr 2026 11:58:11 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Aymeric Wibo Subject: git: 683f7a8374ff - main - acpi_spmc: Call new MS turn on display DSM 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: obiwac X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 683f7a8374ff67417ac45949bd56a12c23781232 Auto-Submitted: auto-generated Date: Wed, 01 Apr 2026 11:58:11 +0000 Message-Id: <69cd0853.47440.20ef591e@gitrepo.freebsd.org> The branch main has been updated by obiwac: URL: https://cgit.FreeBSD.org/src/commit/?id=683f7a8374ff67417ac45949bd56a12c23781232 commit 683f7a8374ff67417ac45949bd56a12c23781232 Author: Aymeric Wibo AuthorDate: 2026-04-01 11:56:03 +0000 Commit: Aymeric Wibo CommitDate: 2026-04-01 11:56:04 +0000 acpi_spmc: Call new MS turn on display DSM Microsoft added a new function index (turn on display, 9) to their DSM set. This revision calls this, which fixes S0ix on certain machines, such as the Lenovo Yoga Slim 7i Aura, who's ECs use this method as a trigger to restore power to certain devices. See commit 229ecbaac6b3 ("ACPI: x86: s2idle: Invoke Microsoft _DSM Function 9 (Turn On Display)") on Linux. Also see the following: https://learn.microsoft.com/en-us/windows-hardware/design/device-experiences/modern-standby-firmware-notifications#turn-on-display-notification-function-9 Reviewed by: olce Approved by: olce Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D56062 --- sys/dev/acpica/acpi_spmc.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) diff --git a/sys/dev/acpica/acpi_spmc.c b/sys/dev/acpica/acpi_spmc.c index 0c2a5d9e96a9..ca7b3bd95ead 100644 --- a/sys/dev/acpica/acpi_spmc.c +++ b/sys/dev/acpica/acpi_spmc.c @@ -45,6 +45,7 @@ enum intel_dsm_index { /* Only for Microsoft DSM set. */ DSM_MODERN_ENTRY_NOTIF = 7, DSM_MODERN_EXIT_NOTIF = 8, + DSM_MODERN_TURN_ON_DISPLAY = 9, }; enum amd_dsm_index { @@ -67,7 +68,9 @@ struct dsm_set { const char *name; int revision; struct uuid uuid; + uint64_t dsms_supported; uint64_t dsms_expected; + uint64_t extra_dsms; }; static struct dsm_set intel_dsm_set = { @@ -107,6 +110,7 @@ static struct dsm_set ms_dsm_set = { (1 << DSM_DISPLAY_ON_NOTIF) | (1 << DSM_ENTRY_NOTIF) | (1 << DSM_EXIT_NOTIF) | (1 << DSM_MODERN_ENTRY_NOTIF) | (1 << DSM_MODERN_EXIT_NOTIF), + .extra_dsms = (1 << DSM_MODERN_TURN_ON_DISPLAY), }; static struct dsm_set amd_dsm_set = { @@ -261,6 +265,8 @@ acpi_spmc_check_dsm_set(struct acpi_spmc_softc *sc, ACPI_HANDLE handle, { uint64_t dsms_supported = acpi_DSMQuery(handle, (uint8_t *)&dsm_set->uuid, dsm_set->revision); + const uint64_t min_dsms = dsm_set->dsms_expected; + const uint64_t max_dsms = min_dsms | dsm_set->extra_dsms; /* * Check if DSM set supported at all. We do this by checking the @@ -269,14 +275,19 @@ acpi_spmc_check_dsm_set(struct acpi_spmc_softc *sc, ACPI_HANDLE handle, if ((dsms_supported & 1) == 0) return; dsms_supported &= ~1; - if ((dsms_supported & dsm_set->dsms_expected) - != dsm_set->dsms_expected) { + dsm_set->dsms_supported = dsms_supported; + sc->dsm_sets |= dsm_set->flag; + + if ((dsms_supported & min_dsms) != min_dsms) device_printf(sc->dev, "DSM set %s does not support expected " "DSMs (%#" PRIx64 " vs %#" PRIx64 "). " "Some methods may fail.\n", - dsm_set->name, dsms_supported, dsm_set->dsms_expected); - } - sc->dsm_sets |= dsm_set->flag; + dsm_set->name, dsms_supported, min_dsms); + + if ((dsms_supported & ~max_dsms) != 0) + device_printf(sc->dev, "DSM set %s supports more DSMs than " + "expected (%#" PRIx64 " vs %#" PRIx64 ").", dsm_set->name, + dsms_supported, max_dsms); } static void @@ -601,6 +612,10 @@ acpi_spmc_exit_notif(device_t dev) acpi_spmc_run_dsm(dev, &amd_dsm_set, AMD_DSM_EXIT_NOTIF); if ((sc->dsm_sets & DSM_SET_MS) != 0) { acpi_spmc_run_dsm(dev, &ms_dsm_set, DSM_EXIT_NOTIF); + if (ms_dsm_set.dsms_supported & + (1 << DSM_MODERN_TURN_ON_DISPLAY)) + acpi_spmc_run_dsm(dev, &ms_dsm_set, + DSM_MODERN_TURN_ON_DISPLAY); acpi_spmc_run_dsm(dev, &ms_dsm_set, DSM_MODERN_EXIT_NOTIF); } } From nobody Wed Apr 1 12:20:01 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 4fm3w21KxDz6WgHF for ; Wed, 01 Apr 2026 12:20:02 +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 4fm3w16mZYz3Lgk for ; Wed, 01 Apr 2026 12:20:01 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775046002; 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=f1gfLG1BlsAPqwwMkCZXkiVnBSyrsjHA3xRduCsuwVI=; b=ZwUi9DQpCDy7I0tIC5Ng0GjXUTbMakoM3y3Sn5yqJiUlWyR9yAiOZb4CD7NR1rnrHm3QlU q8tyyFWefHLrWOROXKMEmWJi0HkQu8IbaY8A4OBIrMLCj1Trju5f/9nu2EPt+t8hryteL0 srL8pD8JKz9ByGfkhQaozymmPeiP0M9IuQhv4ArCGZMavBdmxP06ZF4tfIDrScsjVOaO7G qI2fLZoqqnTvbWDh9e/c1mwK0LrbBlm6nA7gYWvwCQvI5oyzTFsSB53iZNAX8JovYo9Z7z LVy7mqihlvAJ3xzlz37+M6lS4Zq9NoaR+VPAK5z0Q0NU5TZjGZHFfJKphthh0Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775046002; a=rsa-sha256; cv=none; b=eOMI0hUweaJ15Qr5C5sVgOkAgqAtU2iZ/hIitTZtElMHhOu3/mXbJlxUTUvm0tJ+JOFTfR gXMOCdqsGr8jeiwTW3EJAEwN8YAwcTZA54ip0a6gKGNrHtJbFBU8sjp1ylm3CB8uU6DhDK jUwwUrxrLuX5Xdk6cOKtNDTSk5hglGzEZ8R97kQ1LN5AMdNC3x0wr2Tl16qJm55mQw7dSd EUi9ow7N6z0BJRZP2kGRIOErpkh27vVllyWtpf0i1YvnEbFI75VpwVk2Qh43vt9o/r5DSI gd30KsdgJCE3u4wRFVVMerqb2b7+R4XHnddagyYvlan37x3cvADuwz9yCJWHTQ== 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=1775046002; 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=f1gfLG1BlsAPqwwMkCZXkiVnBSyrsjHA3xRduCsuwVI=; b=tGpeIzMg13ciQBnQkxs/KGPHuUXaYwU5L843UzJFC89hgKC+Az5mHsUmJ406aeKGBRIJfj oaP/6xoaCnLfHnLHyQOSCtjdrgh53yIoczxnJygf3s/K/Qw6YbzFHlYf8fAJSXPftAbizK 5agL37WuV9iiWpoU0uMOEsAfM95AUcj6Xeu+ZFItQRvPukQnWIWIHZHtWVnjBQkKFOibgo dYkoHAorzN/nU1rcrh+JnYOUHNIl87Z8bnuBes05iNgyPxe80C/feQIejkYAeVRK21R95s N70g6tNhTewSJIibLI+2DDfZBahpQAu34OIxK6Kojip9E8HbvcGc6+lzo4eydg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fm3w16JmWz1Cv for ; Wed, 01 Apr 2026 12:20:01 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 1a157 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 01 Apr 2026 12:20:01 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Mark Johnston Subject: git: 607f6be6ec19 - main - rtadvd: Fix validation of the MTU parameter when parsing config 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: markj X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 607f6be6ec19f49ff595226afe1c8aa6515c59a0 Auto-Submitted: auto-generated Date: Wed, 01 Apr 2026 12:20:01 +0000 Message-Id: <69cd0d71.1a157.2cbcbd77@gitrepo.freebsd.org> The branch main has been updated by markj: URL: https://cgit.FreeBSD.org/src/commit/?id=607f6be6ec19f49ff595226afe1c8aa6515c59a0 commit 607f6be6ec19f49ff595226afe1c8aa6515c59a0 Author: Mark Johnston AuthorDate: 2026-04-01 12:14:24 +0000 Commit: Mark Johnston CommitDate: 2026-04-01 12:19:35 +0000 rtadvd: Fix validation of the MTU parameter when parsing config MFC after: 1 week --- usr.sbin/rtadvd/config.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/usr.sbin/rtadvd/config.c b/usr.sbin/rtadvd/config.c index 83b2efb68303..c0af8f76ca49 100644 --- a/usr.sbin/rtadvd/config.c +++ b/usr.sbin/rtadvd/config.c @@ -619,7 +619,7 @@ getconfig_free_pfx: get_prefix(rai); MAYHAVE(val64, "mtu", 0); - if (val < 0 || val64 > 0xffffffff) { + if (val64 < 0 || val64 > 0xffffffff) { syslog(LOG_ERR, "<%s> mtu (%" PRIu64 ") on %s out of range", __func__, val64, ifi->ifi_ifname); From nobody Wed Apr 1 13:26:23 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 4fm5Ng0DMHz6WmNl; Wed, 01 Apr 2026 13:26:27 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from smtp.freebsd.org (smtp.freebsd.org [IPv6:2610:1c1:1:606c::24b:4]) (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 "smtp.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fm5Nf6Znlz3TWn; Wed, 01 Apr 2026 13:26:26 +0000 (UTC) (envelope-from bz@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775049987; 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: in-reply-to:in-reply-to:references:references; bh=HsUwYrOlW/MFUCFmMSukW9VZzR88p7W0NZ6y83aFHT4=; b=t0iKrEISxhRt28lGvzgtf1N9kXx02e3Sh07Bl5tKFYNtldkQfscb07ZdmsF4MwjJiQ/b4i aZEun+ovlb89Hk3mUNVwvrcwukRhcgPxiQC6TUEqwhFJhkB6T7St1XboAv1+pwZzkfAi4m /xPsd/2e5ekhkSMwJtGIC9uqYRputuhQAMfvb62sbmVZrPQfrInUpRs1PyQVs55AVoTAAO wWIWp2VQNjw1X1ClpdZBp2AM8bQwgkdfd/XF1pTHgb6Tu8MTGczTFDkUsjl4ExD0RQbt78 8doVdJKzx5E4A8w0KK7pFh0roDvuw8gG3x7draouN5WMs26z/oRCRATIsvEuLw== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775049987; a=rsa-sha256; cv=none; b=V9GWSVnmpcy8+65IxoKHqaTOK9h8vybn4JntUFhRTwCJZAP7+5L3oG3P03775Ug+at5Voe AhzpWMmWBJ+00bf0eYN7jm7qFz7VmlRdTeJ9BCgnZ6Ddjo9g4+LLUqJjP4vkf/svysqdTo uFsB8GM2V3ixoRfckJVFuphJMCcp1M6OU+fjD8GEwmPrl1i+TmVFMae4OJGHcq1yG1IAT0 spvVQr3rfmWoPSV6k0TDWnKRzzXpb2NidHIkoh/pPtWW6kDuLrgOTAJwLEDR2VvqShdSP8 o40K1mUuJKrgP9cG5ODzhVVPcwpy4SnhD26G5hEmWJP5I0Rwm8bHQJ9Dz/7fkw== 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=1775049987; 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: in-reply-to:in-reply-to:references:references; bh=HsUwYrOlW/MFUCFmMSukW9VZzR88p7W0NZ6y83aFHT4=; b=VJ4sj80IGYzWE1+ntc/tK6LhY6rPZoioRx9qgjE44N4h8lQLBRB6YaXMHg2T/TYupn80ue j1bNJ5lROVW+rL2ne0lgo7FSeXIZktKDjzm7O0KbPecppYKKyw08IpFTZ8sEI0O5jryn+g 2BPRZ7U3PMpQyuNUW8HHySnAT7M6wotFGQujecYfPKf9jBq/5mcR3XVHtHNNTFcCEz1TBA gI4L++jeLy6cz2IH6v19pAk2aXIdHaem8l50+vRE8zSKPjyHWfl5ZmrSLpZvLBWG+vVVqa wMhobBptZOM538zBpisUmCk7IRt1ZnwpNbcl1BktzOSJXJQcDQYnIQupms2/fw== Received: from mx-01.divo.sbone.de (mx-01.divo.sbone.de [IPv6:2003:a:140a:2200:6:594:fffe:19]) (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 ECDSA (prime256v1) client-digest SHA256) (Client CN "mx-01.divo.sbone.de", Issuer "E7" (not verified)) (Authenticated sender: bz/mail) by smtp.freebsd.org (Postfix) with ESMTPSA id 4fm5Nf4xYdzQnT; Wed, 01 Apr 2026 13:26:26 +0000 (UTC) (envelope-from bz@FreeBSD.org) Received: from mail.sbone.de (mail.sbone.de [IPv6:fde9:577b:c1a9:4902:0:7404:2:1025]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (prime256v1) server-digest SHA256) (No client certificate requested) by mx-01.divo.sbone.de (Postfix) with ESMTPS id 53F64A64805; Wed, 01 Apr 2026 13:26:03 +0000 (UTC) Received: from content-filter.t4-02.sbone.de (content-filter.t4-02.sbone.de [IPv6:fde9:577b:c1a9:4902:0:7404:2:2742]) (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) (No client certificate requested) by mail.sbone.de (Postfix) with ESMTPS id 4BB632D029E9; Wed, 1 Apr 2026 13:26:24 +0000 (UTC) X-Virus-Scanned: amavisd-new at sbone.de Received: from mail.sbone.de ([IPv6:fde9:577b:c1a9:4902:0:7404:2:1025]) by content-filter.t4-02.sbone.de (content-filter.t4-02.sbone.de [IPv6:fde9:577b:c1a9:4902:0:7404:2:2742]) (amavisd-new, port 10024) with ESMTP id G3kdzqxxSd8Z; Wed, 1 Apr 2026 13:26:23 +0000 (UTC) Received: from nv.t4-02.sbone.de (nv.t4-02.sbone.de [IPv6:fde9:577b:c1a9:4902:0:7404:2:22]) (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) (No client certificate requested) by mail.sbone.de (Postfix) with ESMTPSA id 42CA82D029D8; Wed, 1 Apr 2026 13:26:23 +0000 (UTC) Date: Wed, 1 Apr 2026 13:26:23 +0000 (UTC) From: "Bjoern A. Zeeb" To: Gleb Smirnoff cc: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: Re: git: 407b1e498018 - main - rss: make toeplitz.c standard part of the kernel In-Reply-To: <69cbfb76.403b1.24e43318@gitrepo.freebsd.org> Message-ID: References: <69cbfb76.403b1.24e43318@gitrepo.freebsd.org> X-OpenPGP-Key-Id: 0x14003F198FEFA3E77207EE8D2B58B8F83CCF1842 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 MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII; format=flowed On Tue, 31 Mar 2026, Gleb Smirnoff wrote: > The branch main has been updated by glebius: > > URL: https://cgit.FreeBSD.org/src/commit/?id=407b1e4980189252fade78438aa08191a9883cdc > > commit 407b1e4980189252fade78438aa08191a9883cdc > Author: Gleb Smirnoff > AuthorDate: 2026-03-31 16:34:51 +0000 > Commit: Gleb Smirnoff > CommitDate: 2026-03-31 16:34:51 +0000 > > rss: make toeplitz.c standard part of the kernel > > This will fix LINT-NOIP build. This actually adds very little to the > kernel text, e.g. 500 bytes on amd64. A perfect solution would be to > instead declare rss_config.c as 'optional inet | inet6', but that would > fail to build LINT-NOIP in several NIC drivers, that use RSS and > absolutely ignore that both INET and INET6 are optional. It is very > unlikely that vendors who maintain these drivers will will ever chase the > holy grail of a build that doesn't support IPv4 and IPv6. Well, we had this sorted for LRO and other bits and had made them conditional depending on INET6 or INET in drivers, which in the end brought no-IP compiling for free. Given we these days do not support any non-IP protocol in-tree anymore it seems, it is very unlikely we want any of these drivers with NO-IP either. > Fixes: d9c55b2e8cd6b79f6926278e10a79f1bcca27a4b > --- > sys/conf/files | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/sys/conf/files b/sys/conf/files > index de13b76e71a4..347dadb1545f 100644 > --- a/sys/conf/files > +++ b/sys/conf/files > @@ -4263,7 +4263,7 @@ net/route/route_temporal.c standard > net/rss_config.c standard > net/rtsock.c standard > net/slcompress.c optional netgraph_vjc > -net/toeplitz.c optional inet | inet6 > +net/toeplitz.c standard > net/vnet.c optional vimage > net80211/ieee80211.c optional wlan > net80211/ieee80211_acl.c optional wlan wlan_acl > > -- Bjoern A. Zeeb r15:7 From nobody Wed Apr 1 15:10:39 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 4fm7j11jg0z6XyDb for ; Wed, 01 Apr 2026 15:10:45 +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 4fm7j06hJ8z3dnP for ; Wed, 01 Apr 2026 15:10:44 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775056244; 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=gT3h1ZI2eoSga2rGbAVqUZHAd7BSjREupkZ2c9+Inx4=; b=nit/k37tO5cwA4+3VuPvjHuxhQRtUCDPxhjR3GTtkjCS1gpw5qsLOglbcL2FBYGwTmmQX7 bTFST0JG+nw5pPLQBuLRm/Co6UcnPEudOYn+qOWzYcOiN2knGuLztkMxcLZCwO/njypleB jrxmclcSUtH368v0T9ceIdwiEkHKqwfIU2ho0MolW1QO+4LZbKpO97tDTCM8bFkVUKC56q /hy5FGNECwStiVnM6q0bbM3wKjdguuffLem+ez+DTSyqPKsNLOxaz323RPMJchxATflY0Z NohviZk3Kf1iTB7lHTp43zQr1+eUwN0zhJwszTDJhB8ZMd1i4kYyAiyzXkzpZg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775056244; a=rsa-sha256; cv=none; b=qsCwARw2UcJB+nVi5eF+jHdliOsXfkwTerL7UAxNp1alDIv8pKJlwo7ry6emFH89HISe+A spQvOsSeyfdyhU3CHTC3e7NK9WsY8StFbQ5CDXn9BTact6BjEY3TrBC+GXMxY3znKCEkz6 FCWu1Df+Skux6TkA1NpXuWDtLmG7GuYkt/J4Y7Kw6oSlBknGGaHJH+m29vZ5qSKKYJqUM7 0tttX5IhakkEgC8NTS9TOSAHM3X6g8n6kZ2ShYHnSKFG6TPszw/dcVu1vLUR5F8tKLmaBx YvdbJ4x5yMwVDJZtQzPua/tvZ+Z8RFryEI827sIflhGnOYU4vXAMclGZeMRrmQ== 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=1775056244; 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=gT3h1ZI2eoSga2rGbAVqUZHAd7BSjREupkZ2c9+Inx4=; b=pST6tnhyzkAyaS/CTvlAO6/sgfFlHoSPemgWu3VUULSe3RsuEGxoNvU0TjnlfwdWvA9qua ll+UCN9Np6zGetF1R2LhSZFiMQmDNKLz0FFOjp2PufrL35khl7rbxMuDKo/nMpBSSk7vdC HkE4hGuCLtC8OP7SkmjuqjfwLaC1HsErz8I1b8byPPysTMnmljemPNHbNc7dB2wdpgnYU+ ANSi/oOvaQL+Is5Yfv+MQ8cKGHln91mEYugfDCHi0A3xOMjPCsVCVKPAHhfjgtS2OTQfpj R4tch4P8Y/AwcFEKVz7HYElLInByNvrzbj8zRo+gStYL1+PdyxLiWQDyCfVC1Q== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fm7j05c3rz4qK for ; Wed, 01 Apr 2026 15:10:44 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 35c4a by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 01 Apr 2026 15:10:39 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Cc: Jean-=?utf-8?Q?S=C3=A9bast?==?utf-8?Q?ien P=C3=A9?=dron From: Ed Maste Subject: git: 5bb0f6302066 - main - linuxkpi: Handle bin attributes in sysfs attribute groups 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: emaste X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 5bb0f63020669bd3675c651ba7745fc4356edc1a Auto-Submitted: auto-generated Date: Wed, 01 Apr 2026 15:10:39 +0000 Message-Id: <69cd356f.35c4a.3eb58a3a@gitrepo.freebsd.org> The branch main has been updated by emaste: URL: https://cgit.FreeBSD.org/src/commit/?id=5bb0f63020669bd3675c651ba7745fc4356edc1a commit 5bb0f63020669bd3675c651ba7745fc4356edc1a Author: Jean-Sébastien Pédron AuthorDate: 2026-02-08 10:11:39 +0000 Commit: Ed Maste CommitDate: 2026-04-01 15:10:12 +0000 linuxkpi: Handle bin attributes in sysfs attribute groups For instance, this is used by DRM drivers to declare the EDID property of an GPU output connector: sysctl -b sys.device.drmn1.card0.card0-DP-1.edid | edid-decode ... Block 0, Base EDID: EDID Structure Version & Revision: 1.4 Vendor & Product Identification: Manufacturer: SAM Model: 29814 Serial Number: 810635354 (0x3051505a) Made in: week 15 of 2025 ... Reviewed by: bz, emaste, wulf Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D55176 --- sys/compat/linuxkpi/common/include/linux/sysfs.h | 34 +++++++++++++++++------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/sys/compat/linuxkpi/common/include/linux/sysfs.h b/sys/compat/linuxkpi/common/include/linux/sysfs.h index 470c224a9778..7c8c4e2e32b9 100644 --- a/sys/compat/linuxkpi/common/include/linux/sysfs.h +++ b/sys/compat/linuxkpi/common/include/linux/sysfs.h @@ -43,13 +43,6 @@ struct sysfs_ops { size_t); }; -struct attribute_group { - const char *name; - mode_t (*is_visible)(struct kobject *, - struct attribute *, int); - struct attribute **attrs; -}; - struct bin_attribute { struct attribute attr; size_t size; @@ -59,6 +52,14 @@ struct bin_attribute { struct bin_attribute *, char *, loff_t, size_t); }; +struct attribute_group { + const char *name; + mode_t (*is_visible)(struct kobject *, + struct attribute *, int); + struct attribute **attrs; + struct bin_attribute **bin_attrs; +}; + #define __ATTR(_name, _mode, _show, _store) { \ .attr = { .name = __stringify(_name), .mode = _mode }, \ .show = _show, .store = _store, \ @@ -370,6 +371,7 @@ static inline int sysfs_create_group(struct kobject *kobj, const struct attribute_group *grp) { struct attribute **attr; + struct bin_attribute **bin_attr; struct sysctl_oid *oidp; /* Don't create the group node if grp->name is undefined. */ @@ -378,11 +380,19 @@ sysfs_create_group(struct kobject *kobj, const struct attribute_group *grp) OID_AUTO, grp->name, CTLFLAG_RD|CTLFLAG_MPSAFE, NULL, grp->name); else oidp = kobj->oidp; - for (attr = grp->attrs; *attr != NULL; attr++) { + for (attr = grp->attrs; attr != NULL && *attr != NULL; attr++) { SYSCTL_ADD_OID(NULL, SYSCTL_CHILDREN(oidp), OID_AUTO, (*attr)->name, CTLTYPE_STRING|CTLFLAG_RW|CTLFLAG_MPSAFE, kobj, (uintptr_t)*attr, sysctl_handle_attr, "A", ""); } + for (bin_attr = grp->bin_attrs; + bin_attr != NULL && *bin_attr != NULL; + bin_attr++) { + SYSCTL_ADD_OID(NULL, SYSCTL_CHILDREN(oidp), OID_AUTO, + (*bin_attr)->attr.name, + CTLTYPE_OPAQUE|CTLFLAG_RW|CTLFLAG_MPSAFE, + kobj, (uintptr_t)*bin_attr, sysctl_handle_bin_attr, "", ""); + } return (0); } @@ -434,14 +444,20 @@ static inline void sysfs_unmerge_group(struct kobject *kobj, const struct attribute_group *grp) { struct attribute **attr; + struct bin_attribute **bin_attr; struct sysctl_oid *oidp; SYSCTL_FOREACH(oidp, SYSCTL_CHILDREN(kobj->oidp)) { if (strcmp(oidp->oid_name, grp->name) != 0) continue; - for (attr = grp->attrs; *attr != NULL; attr++) { + for (attr = grp->attrs; attr != NULL && *attr != NULL; attr++) { sysctl_remove_name(oidp, (*attr)->name, 1, 1); } + for (bin_attr = grp->bin_attrs; + bin_attr != NULL && *bin_attr != NULL; + bin_attr++) { + sysctl_remove_name(oidp, (*bin_attr)->attr.name, 1, 1); + } } } From nobody Wed Apr 1 15:57:43 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 4fm8lK2TL0z6Y334 for ; Wed, 01 Apr 2026 15:57:49 +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 4fm8lK0TTkz3mkN for ; Wed, 01 Apr 2026 15:57:49 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775059069; 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=9nPbIcjZzcZyiAauIjCG6wq1DrHNlTd35eyot5ZjtJM=; b=olMrHbCSkaULXRi1XPH6lc/Z48JWEFwy+V+c6j6QZB896/lFeUVBUjRNiStw8kyYQD5PNn n1g6NgtiFfwfizo9P8NyqTAaO/09uQrbLGK4VCSW5stAEd8XdQBXmO6OpxjRiaYzL0HTaj YLlCcPzFmBwgLcXco8Ig/IHRtEJDl9ZA2Y6BL9R4AC87CdhuEbKyx0JHM7LAjA06nOB0hs yy0qTJ7B3J5JmO06KsMAaotr/ns+4G5mQ6cw2Bhh8kJb2PPGKa0E7nTxh+NpCmwVIq8qiN HtMkVtn7zxMEYB4rT9e7fGvltJwuQ5BjZ6eGebkBYRCzAoAh+ohUCNsonvb34Q== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775059069; a=rsa-sha256; cv=none; b=m2YSc9R0SwczIAw/d1bv5mxI35QmRc5GPmaaTRovDIExtEOnyAUxapqmUdMklG8SrRqxCy sm9mgSRf+Ds8rKktTWk4OcLcAfhxgGkr9MxvCRZBXtHTinYC9YxJwbePWUKSYX4RgItLnQ xMXJDW5K4rOR5ueG5Uz+/Al7BxJo1NnkLmOzTLNzINsFkmppxc/EqMNT1FcKi+zuH1T/dO 7cWW5uZREZbtGSlv6saS/aSmg0OsYbS2J5IRfF3mfmlHG6pDoPJDlvmCggELkOB/ZjdSMq SysVmNhQn2RrtMfeM7xT/wbGs+SJUjWDdE26vwZtNUXH/lQ3j/9d2zN/V+/mHw== 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=1775059069; 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=9nPbIcjZzcZyiAauIjCG6wq1DrHNlTd35eyot5ZjtJM=; b=W4F9TY+u4D7Fy2M0lTxmHDZ27/h/LEVd0ntlCzGg+M603zJM0vDZJIWBrkHrhpHs6UG6Ro WKhgv459duSoddTSeITsB81zRGuF+cdLajDxbPsqluClujGrqpn8+zgCyDrBeKDRGeOvR5 N7r/C2meCp9pl93jJ8fFQw/lsQAra3DntExYIMC16jFZ5qZdOJbwtubLmJ7Z0NBHCABsg+ n+jJc/8p2LIbeagjVCj8HcwBWY7DSBDJKK9g5RGy9y6Yyl2tR7ohQ950QC0Y57crWWk934 /7uqCNhwvy4ipkAtDyRs59D0hsL+cxRgipkwOeA4KEjCMsKLZZ47GoqKH30+Yg== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) by mxrelay.nyi.freebsd.org (Postfix) with ESMTP id 4fm8lJ6fWBz6WK for ; Wed, 01 Apr 2026 15:57:48 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from git (uid 1279) (envelope-from git@FreeBSD.org) id 3a9a8 by gitrepo.freebsd.org (DragonFly Mail Agent v0.13+ on gitrepo.freebsd.org); Wed, 01 Apr 2026 15:57:43 +0000 To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Pouria Mousavizadeh Tehrani Subject: git: 759d8a13a3b4 - main - route(8): Show weight of nexthop in multipath routes 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 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: pouria X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 759d8a13a3b4510b7fab4d6c32e5a8de5ab056e7 Auto-Submitted: auto-generated Date: Wed, 01 Apr 2026 15:57:43 +0000 Message-Id: <69cd4077.3a9a8.322f5eed@gitrepo.freebsd.org> The branch main has been updated by pouria: URL: https://cgit.FreeBSD.org/src/commit/?id=759d8a13a3b4510b7fab4d6c32e5a8de5ab056e7 commit 759d8a13a3b4510b7fab4d6c32e5a8de5ab056e7 Author: Pouria Mousavizadeh Tehrani AuthorDate: 2026-03-31 19:50:51 +0000 Commit: Pouria Mousavizadeh Tehrani CommitDate: 2026-04-01 15:56:19 +0000 route(8): Show weight of nexthop in multipath routes Reviewed by: zlei, markj Differential Revision: https://reviews.freebsd.org/D56202 --- sbin/route/route_netlink.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sbin/route/route_netlink.c b/sbin/route/route_netlink.c index e3ddbf81e62c..01817dcbb850 100644 --- a/sbin/route/route_netlink.c +++ b/sbin/route/route_netlink.c @@ -472,7 +472,7 @@ static void print_nlmsg_route_nhop(struct nl_helper *h, struct snl_parsed_route *r, struct rta_mpath_nh *nh, bool first) { - // gw 10.0.0.1 ifp vtnet0 mtu 1500 table inet.0 + // gw 10.0.0.1 iface vtnet0 weight 100 mtu 1500 expire 3600 table inet.0 if (nh->gw != NULL) { char gwbuf[128]; print_prefix(h, gwbuf, sizeof(gwbuf), nh->gw, -1); @@ -486,6 +486,7 @@ print_nlmsg_route_nhop(struct nl_helper *h, struct snl_parsed_route *r, if (nh->rtax_mtu == 0) nh->rtax_mtu = link.ifla_mtu; printf("iface %s ", link.ifla_ifname); + printf("weight %d ", nh->rtnh_weight); if (nh->rtax_mtu != 0) printf("mtu %d ", nh->rtax_mtu); if (nh->rta_expire > 0) From nobody Wed Apr 1 16:03:14 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 4fm8sh0sQtz6Y3JD; Wed, 01 Apr 2026 16:03:20 +0000 (UTC) (envelope-from markj@freebsd.org) Received: from smtp.freebsd.org (smtp.freebsd.org [96.47.72.83]) (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 "smtp.freebsd.org", Issuer "R13" (not verified)) by mx1.freebsd.org (Postfix) with ESMTPS id 4fm8sg5Yp4z3nR6; Wed, 01 Apr 2026 16:03:19 +0000 (UTC) (envelope-from markj@freebsd.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1775059399; 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: in-reply-to:in-reply-to:references:references; bh=vQrt1QIJVz30ol9q3OQCMjVPrcVRyIStH5nc1k6b8pg=; b=UNGZr1XW4Jao8G7DMYGA6uB2amt8ybWw+uG+qbdnBWwGToIE1mpRBZOMz7Iv+5sVG4CBB+ kGXfLsPwCOP+P874rCVgoOPMixrYiWiOctI0FxZ15HAraN8YdCAaC59lQo8nd7sePRl/jE 8OsmotTJ6kvO6U6MDWlmeTj9F5BT7WGQgIv9iX8uKO9ZzRSqR9bS4izBNfrq+BzMRE2hyb flIyH54bViX6lqv1IsmQvZK/fJlGaIyVvPdvfMotQPttRUTMAx3afOSLZnzWeLVeKXzHCJ XlnCfwzDyeJpVZ2rsAUZcl77UtfgyDBKs8ON1nkeJz7R2rZxbsL5rmTl+ZEY3g== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1775059399; a=rsa-sha256; cv=none; b=X3ScHS1uJsoMVQMHrQnSCdmndyqyqVs09fWwmBECPIC0fYKjXpfqg+CoaYd9c43l0TqDeh 03Xj9UIfoegqn/Rt6+mqp/dmuERXb2AsfqpVOKn4GIsLe3JR2kUq8TtFK8j9OnNMULfadC qBz7+fX2pketVSI1833NqSRqmTZpuH6JinnGkOPzFnfjxzbbI/XvAW2/2rPl8XBoxrgbeW Gr/fXdlJE8ujjXpcj9DMkKT1IV/L3LzgPWC9W9JQ8nX7BTyqrQfY7bqs91x9P5miHrtz9i Xi25Iy1SnEQy5FRE3dH0NL8vGCFwxa4Gd2YzlEZl3F/hXeyqRPvJ2MCN7TU9VA== 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=1775059399; 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: in-reply-to:in-reply-to:references:references; bh=vQrt1QIJVz30ol9q3OQCMjVPrcVRyIStH5nc1k6b8pg=; b=EAKAkL82VTfmqnoztRNBxg2OOwr4yX9Z8+Qs6HYyhi9dgJnqfQJ2Gel+Ukl+1BYL3gPyPO fzYwtl6M66YF9bkZvUl7PKb7dIvuL58qyZoVv4kgauUSeygaZVN3Eh67iUS94P5Vytb5zH lP8Vw2c2lirBMzHL3kVd6EyGO6i1Key/7zTGs0wF49ZCpwCxO+24zAZmg06DVNIsu/+Xm8 OwOmx5Prnv8Xzih38RAWO1vwmWI/vbg0kCAI2Ix0oaNBRpOtPWwoOqTM7jo8X6Yxe2lG6h fK1Lgy9OGIeXl4CzSL6wKJfycNpdYgzKpOmroPRC9JzlLehEMjq8cvB5GlodFA== Received: from framework (61-227-204-72.dynamic-ip.hinet.net [61.227.204.72]) (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 did not present a certificate) (Authenticated sender: markj) by smtp.freebsd.org (Postfix) with ESMTPSA id 4fm8sf2ZGDzjvs; Wed, 01 Apr 2026 16:03:18 +0000 (UTC) (envelope-from markj@freebsd.org) Date: Wed, 1 Apr 2026 12:03:14 -0400 From: Mark Johnston To: "Bjoern A. Zeeb" Cc: src-committers@freebsd.org, dev-commits-src-all@freebsd.org, dev-commits-src-main@freebsd.org Subject: Re: git: 607f6be6ec19 - main - rtadvd: Fix validation of the MTU parameter when parsing config Message-ID: References: <69cd0d71.1a157.2cbcbd77@gitrepo.freebsd.org> <8npqp22o-247n-ps59-65qr-n7n79n935s0@mnoonqbm.arg> 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 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <8npqp22o-247n-ps59-65qr-n7n79n935s0@mnoonqbm.arg> On Wed, Apr 01, 2026 at 03:25:44PM +0000, Bjoern A. Zeeb wrote: > On Wed, 1 Apr 2026, Mark Johnston wrote: > > > The branch main has been updated by markj: > > > > URL: https://cgit.FreeBSD.org/src/commit/?id=607f6be6ec19f49ff595226afe1c8aa6515c59a0 > > > > commit 607f6be6ec19f49ff595226afe1c8aa6515c59a0 > > Author: Mark Johnston > > AuthorDate: 2026-04-01 12:14:24 +0000 > > Commit: Mark Johnston > > CommitDate: 2026-04-01 12:19:35 +0000 > > > > rtadvd: Fix validation of the MTU parameter when parsing config > > > > MFC after: 1 week > > --- > > usr.sbin/rtadvd/config.c | 2 +- > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > diff --git a/usr.sbin/rtadvd/config.c b/usr.sbin/rtadvd/config.c > > index 83b2efb68303..c0af8f76ca49 100644 > > --- a/usr.sbin/rtadvd/config.c > > +++ b/usr.sbin/rtadvd/config.c > > @@ -619,7 +619,7 @@ getconfig_free_pfx: > > get_prefix(rai); > > > > MAYHAVE(val64, "mtu", 0); > > - if (val < 0 || val64 > 0xffffffff) { > > + if (val64 < 0 || val64 > 0xffffffff) { > > Forgive me for asking, but would a reasonable check possibly cap this > right away at 0xffff as I cannot see us having interfaces with an > MTU larger than that. > We just removed IPv6 Jumbograms (or still in review?) for similar reasons? The code does this several lines later, after truncating the value to a 32-bit integer. > > syslog(LOG_ERR, > > "<%s> mtu (%" PRIu64 ") on %s out of range", > > __func__, val64, ifi->ifi_ifname); > > > > > > -- > Bjoern A. Zeeb r15:7