This is a display of mostly-automatically-classified git commits from 2026-07-01 to 2026-09-30.
This report is still in progress.
DEBUG: This version of the report is primarily for checking the classifiers, and therefore contains extra information (in this colour).
Table of contents and commits per category:
| (28) | Highlighted commits (these are copies, not in stats) | |
| 28 | 2.3% | Userland programs |
| 56 | 4.5% | Documentation |
| 460 | 37.0% | Hardware support |
| 103 | 8.3% | Networking |
| 96 | 7.7% | System administration |
| 70 | 5.6% | Libraries |
| 22 | 1.8% | Filesystems |
| 234 | 18.8% | Kernel |
| 33 | 2.7% | Build system |
| 25 | 2.0% | Internal organizational stuff |
| 47 | 3.8% | Testing |
| 26 | 2.1% | Style, typos, and comments |
| 29 | 2.3% | Contrib code |
| 13 | 1.0% | Reverted commits |
| 0 | 0.0% | Unclassified commits |
| 1243 | 100% | total |
| Technical notes about this page |
debug: info about the automatic classification
| num | % | num changed | stage |
|---|---|---|---|
| 13 | 1.0% | 0 | 00-reverts |
| 29 | 2.3% | 0 | 01-style |
| 78 | 6.3% | 0 | 02-filenames_wildcards |
| 37 | 3.0% | 0 | 02b-filenames_wildcards2 |
| 676 | 54.4% | 0 | 03-filenames_plain1 |
| 342 | 27.5% | 0 | 04-filenames_plain2 |
| 29 | 2.3% | 0 | 05-summary-prefix |
| 37 | 3.0% | 0 | Manually-classified commits |
| 2 | 0.2% | 0 | Unclassified commits |
debug: more stats
| num | % | stage |
|---|---|---|
| 0 | 0.0% | Misclassified commits |
| 1204 | 96.9% | Classified commits, no corrections |
debug: groups
| 8 | 0.6% | num in revert |
| 17 | 1.4% | num in fixes |
| 335 | 27.0% | num in consecutive |
| 360 | 29.0% | Commits in groups |
For extra visibility, these are copies of commits found in
other sections. Most (if not all) come from the commit message
containing "Relnotes:", or commits modifying
UPDATING.
TLS receive offload is really only beneficial for in-kernel use cases (such as NFS over TLS) or when using a hardware offload. In addition, several recent SAs have involved the TLS receive path, but the only current mitigation for those is to disable TLS offload entirely. Reviewed by: ziaee, gallatin, markj Relnotes: yes Sponsored by: Netflix Sponsored by: Chelsio Communications Co-authored-by: John Baldwin <jhb@FreeBSD.org> Differential Revision: https://reviews.freebsd.org/D57974
debug: classified in
04-filenames_plain2 by 'sys/'
Start the loop by finding the end of the option name, the name-value separator (if any), and the end of the option. Use those pointers to simplify matching the option name and parsing the option value, and validate option names and values more strictly. This means that: * We no longer accept trailing garbage in an option name or value. For instance, we would previously interpret “edns0123” as “edns0” and “timeout:3xyz” as “timeout:3”. This was actually quite lucky because we also failed to recognize the newline at the end of the option line as a whitespace character. * For options that take a numerical argument, we would previously accept negative values and treat non-numerical arguments as 0, while large numerical arguments would be capped to the option's maximum permitted value. Now, any failure to parse the argument, including overflow, results in the option being left unchanged. MFC after: 1 week Relnotes: yes Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D57923
debug: classified in
04-filenames_plain2 by 'lib/'
When we switched from the BIND4 resolver to the BIND9 resolver, the sortlist parser was inadvertently disabled due to a missing #define, and nobody seemed to notice. The sorting code remained enabled in the resolver, but there was no way to set a sort order. Reimplement the sortlist parser, but correctly, and update the manual accordingly. The new parser accepts IPv4 and IPv6 addresses with or without a mask or prefix length, just like the old one, except IPv6 support was a bit wonky in the original code. Fixes: https://cgit.freebsd.org/src/commit/?id=5342d17f09a8 ("Update the resolver in libc to BIND9's one.") Relnotes: yes Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D57925
debug: classified in
04-filenames_plain2 by 'lib/'
If a nhop gets an interface event, revalidate the nhops and immediately try to recompile existing nexthop groups by replacing unreachable nexthops with reachable ones. If none are available, recompile them back to their normal position in nexthop group slots. Reviewed by: glebius Discussed with: markj Relnotes: yes Differential Revision: https://reviews.freebsd.org/D57389
debug: classified in
03-filenames_plain1 by
'sys/net/'
The tcp_bblog facility provides structured logging of TCP stack activity for debugging and performance analysis. It is implemented in the kernel and allows per-connection tracing of TCP events with low overhead. Reviewed by: tuexen, ziaee MFC after: 1 week Relnotes: yes Differential Revision: https://reviews.freebsd.org/D56252
debug: classified in
02-filenames_wildcards by
'.*Makefile'
This internet draft (which is close to being an RFC) specifies a new NFSv4.2 attribute which tells the NFSv4.2 client to not cache file data. (Similar to O_DIRECT, but triggered by this attribute set on the file on the NFSv4.2 server and not by the application's open(2).) https://datatracker.ietf.org/doc/draft-ietf-nfsv4-uncacheable-files/ This patch adds a new chflags(1) flag called UF_DONTCACHE to implement this. Patches for NFS and ZFS will be done separately. Reviewed by: kib MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58181
debug: Commit manually moved from "unknown" to "userland".
Add the option "oemstring" to allow setting the DMI type 11 ("OEM
Strings") SMBIOS structure. These are free-form strings, available for
any purpose, but can be especially useful to pass configuration,
secrets, and credential information into a Linux guest and consumed by
systemd.
MFC after: 1 month
Relnotes: yes
Reviewed by: markj
Differential Revision: https://reviews.freebsd.org/D57516
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
Point out which features are non-POSIX and thus can not be safely assumed to be portable and exist in other implementations. Relnotes: YES! Reviewed by: ziaee, jilles Differential Revision: https://reviews.freebsd.org/D55333
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Use pwait's new -r option to wait until the target processes have not only terminated, but also been reaped. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=293183 MFC after: 1 week Sponsored by: Klara, Inc. Sponsored by: NetApp, Inc. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58391
debug: classified in
03-filenames_plain1 by
'libexec/'
Add the ability to select source ip address of outgoing packets even when the source ip address is configured on another interface. Also add this new rtnetlink attribute to manual. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=285422 Reviewed by: glebius, ziaee (manpages) Tested by: ivy, Marek Zarychta <zarychtam@plan-b.pwste.edu.pl> Relnotes: yes Differential Revision: https://reviews.freebsd.org/D58294
debug: classified in
03-filenames_plain1 by '['sys/net/',
'sys/netlink/']'
Register the 82576 and I350 VF PCI IDs under a separate igbv driver while continuing to share the igb datapath implementation. Follow the ixv driver split and give the VF context IFLIB_IS_VF so iflib does not apply the PF SR-IOV detach guard to a child VF. Program VTIVAR_MISC in the VF low byte so mailbox and reset notifications reach the VF admin vector. The split will become increasingly obvious as bug fixes land, trying to bias everything with if (sc->vf_ifp) everywhere is error prone in two directions. This breaks existing naming/configurations and cannot be MFCed as-is. I have no plans of adapting it to prior branches at the moment but it may be possible. Relnotes: yes Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Add the PCI IOV schema and PF control plane for up to seven VFs with one hardware queue per pool. Implement VF mailbox handling, MAC and VLAN assignment, multicast filtering, promiscuity policy, anti-spoofing, malicious-driver recovery, reset replay, and queue lifecycle management. The basic SR-IOV and VMDq PF implementation follows DPDK Intel e1000 code, including PF pool selection, one queue per pool, mailbox dispatch, and VF enablement. Intel FreeBSD igb-2.5.31 supplies the older driver baseline. Linux igb and the Intel SDMs clear up lifecycle, isolation, reset, and family-specific details absent from DPDK. Enabling IOV requires the PF to attach with one TX and RX queue. Systems whose defaults select RSS queues must set the documented iflib queue override tunables before attach. Only 82576 and I350 support SR-IOV in silicon. The series has been extensively tested on I350, including thowing boundaries at the PCI BAR that shipping drivers will never. Still, think carefully before reaching for this in critical environments. Relnotes: yes Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Document supported controllers, PF and VF naming, PCI_IOV and IOMMU requirements, queue and lifecycle constraints, iovctl schema, filtering and anti-spoof policy, mailbox and MDD recovery, shared hardware limits, rate control, and statistics cadence. Relnotes: yes Sponsored by: BBOX.io
debug: classified in
02-filenames_wildcards by
'.*Makefile'
Borrow the e1000 VLAN filter table Ambiguous presence of the feature by Intel was settled by DPDK and emperical testing. MFC after: 2 weeks Relnotes: yes
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The SR-IOV schema advertises MAC anti-spoofing and enables it by default, but the VF configuration was never consumed and the hardware policy remained disabled. Record the configured policy and apply MAC and VLAN anti-spoofing throughout VF initialization and reset. On X550-family devices, also protect the LLDP and flow-control Ethertypes and enable per-VF spoof-event accounting. Remove the driver-owned state during SR-IOV teardown. Adapt the anti-spoof configuration lifecycle used by igb(4) in a2ed165f0049 to the ixgbe hardware controls. MFC after: 1 week Relnotes: yes
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The VF VLAN capability is checked but never granted, and no SR-IOV configuration property exposes the existing default-VLAN support. PF VLAN updates also replace VFTA registers from a PF-only shadow, erasing live VF filters. Expose access VLAN and trunk policy through the IOV schema. Track each VF VLAN as desired state, restore the administrative VLAN after reset, and use the native VLVF helper for incremental PF and VF ownership changes. Keep VLAN filtering enabled while SR-IOV is active. When PF hardware filtering is disabled, admit every VLAN to the PF without bypassing per-pool VF isolation. Reconstruct VLVF and the shared VFTA from PF and VF desired state after reset or a filtering-mode transition, and restore PF-only state on teardown. When the last VF leaves a VLAN still owned by the PF, free its VLVF slot while retaining the shared VFTA bit. This prevents a trunk VF from exhausting the 64-entry VLVF table by cycling VLAN memberships. Adapt the VLAN ownership model introduced for igb(4) in a2ed165f0049 to ixgbe's native VLVF machinery. Match Linux receive semantics by exposing a stripped VLAN tag only when that VID was registered by the VF. A PF-assigned port VLAN is an administrative tag and must be delivered to the VF as untagged traffic; otherwise the stack dispatches it to a nonexistent VLAN interface and access-VLAN receive traffic is blackholed. MFC after: 1 week Relnotes: yes
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The allow-promisc IOV property is advertised but ignored, and the PF rejects the xcast request used by modern VFs. Negotiate mailbox APIs 1.2 and 1.3, implement pool-scoped xcast modes, and require allow-promisc for requested all-multicast or unicast-promiscuous modes. The VF mailbox can carry only 30 multicast hashes. When ixv has a larger list, request the API 1.2 all-multicast xcast mode instead of extending the legacy SET_MULTICAST message. The PF grants that fallback only to VFs configured with allow-promisc; otherwise ixv reports that only the first 30 addresses are active. Reset xcast state with the VF and have ixv replay the mode implied by its interface flags after multicast updates. Follow DPDK's ixgbe API 1.2/1.3 xcast contract, with allow-promisc policy adapted from igb(4) in a2ed165f0049. MFC after: 1 week Relnotes: yes
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The PF advertises the legacy SET_MACVLAN mailbox request but always rejects it. The request installs secondary unicast addresses. Allocate an owned RAR pool for VF secondary addresses, reserve low entries for PF filters, and place VF-primary addresses at the top of the usable RAR range. Reject address collisions and cap each VF at three secondary filters so one guest cannot exhaust the shared table. Clear secondary filters on VF or PF reset and on SR-IOV teardown. This hardware can anti-spoof only the VF primary source address. Reject secondary filters while MAC anti-spoofing is configured, so installing them requires an explicit administrative policy choice. Report optional filter-table allocation failure without disabling SR-IOV. Adapt the owned-RAR allocation and reset-cleanup model from igb(4) in a2ed165f0049 to DPDK's ixgbe SET_MACVLAN mailbox semantics. MFC after: 1 week Relnotes: yes
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The shared X550 code provides malicious-driver detection, event decoding, and per-pool recovery operations, but the PF never enables or services them. A malformed VF descriptor can therefore go undetected and avoid the per-pool recovery path supplied by the MAC. Configure IOV state while VF DMA remains disabled, then enable MDD and activate the VFs only after PF queue initialization is complete. On an MDD event, withdraw mailbox CTS and gate the VF pool through PFVFTE and PFVFRE. Retain the per-queue WQBR blocks until the VF enters a new reset epoch; PFVFTE can still permit descriptor fetches into the internal queue, so releasing WQBR early would allow a hostile VF to retrigger MDD before it resets. Send the non-CTS reset notification after servicing the VF mailbox. Let a posted VF request win mailbox arbitration, defer notification if the pass produced a response, and retry failed notifications from the periodic admin pass. Poll WQBR so recovery does not depend on another mailbox interrupt edge, while suppressing already-fenced pools. Latch a PF reset request until the next hardware initialization. The X550 datasheet defines every bit of WQBR_RX and WQBR_TX as a queue bit, so an all-ones value is valid. Reject it only when IXGBE_STATUS, which has reserved-zero bits, also reads as all ones and confirms dead MMIO. Temporarily disable MDD around live multiqueue SRRCTL drop-mode updates, which hardware otherwise reports as queue-context changes. Serialize that window with the iflib context lock and resample pending work after MDD is restored. Apply the per-pool recovery model used by igb(4) in a2ed165f0049 to the existing DPDK-derived X550 hooks. The same register interface is documented for X552 and X553, so cover the entire X550 family. Document that VF traffic remains disabled until the reset handshake completes. MFC after: 2 weeks Relnotes: yes
debug: classified in
03-filenames_plain1 by
'sys/dev/'
iflib counts resets initiated by its transmit watchdog in 69c3e0de01c1. Export the counter in the per-device iflib sysctl tree so every driver provides the diagnostic without a driver callback or duplicate storage. A watchdog reset does not establish how many packets failed. It can recover a hardware stall involving several queued packets or a missed completion involving no packet loss. Stop adding one output error per watchdog event in em(4), igb(4), and igc(4). Remove the redundant driver counters and move the diagnostic to dev.<driver>.<unit>.iflib.tx_watchdog_events. MFC after: 1 month Relnotes: yes
debug: classified in
04-filenames_plain2 by 'sys/'
- Adds SR-IOV VF status to the existing ifconfig "-v" output - Adds ioctl command for reporting VF status info from drivers - Adds support to iflib for drivers to handle this new ioctl - Add support for ioctl in ixl(4) Signed-off-by: Eric Joyner <erj@freebsd.org> Relnotes: yes Differential Revision: https://reviews.freebsd.org/D19647
debug: Commit manually moved from "unknown" to "network".
Add -L to query the generic packed-nvlist IOV_GET_STATUS interface. Report PF enable state and configured and total VF counts. For each VF, print its PCI address, newbus attachment, bound driver, and ppt state. Retry size negotiation if the topology changes between ioctls and reject malformed or incompatible status records. Keep NIC-specific operational state in ifconfig -v; iovctl owns the device-neutral PCI topology and applies to any SR-IOV device class. Relnotes: yes
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
Add access and trunk VLAN policy to the SR-IOV schema. Access VFs use a hardware PVID and cannot alter their VLAN membership. Trunk VFs may register up to 16 VLANs, while VLAN 0 remains implicitly admitted for untagged and priority-tagged traffic. Enable hardware VLAN anti-spoofing and maintain the MAC-by-VLAN filter cross-product used by DPDK. Apply Linux's untrusted-VF limits of 18 MAC addresses and 16 VLANs so one guest cannot consume the shared PF filter table without bound. Report the effective policy through the VF status interface and document the iovctl schema. MFC after: 2 weeks Relnotes: yes
debug: classified in
03-filenames_plain1 by
'sys/dev/'
10G-BX optics use paired wavelengths to carry 10 Gb/s Ethernet over a single strand of single-mode fiber. Their 10G compliance byte is empty, so identify them from the SFF-8472 nominal signaling rate and single-mode reach fields. When an EEPROM also advertises 1G BASE-BX10, give the complete 10G bitrate and reach signature precedence. Otherwise retain FreeBSD's permissive 1G-BX identification rather than requiring a nominal 1.3 GBd rate. MFC after: 2 weeks Relnotes: yes
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The bhyve_config(5) variable `virtio_msix` is namescoped to `virtio.msix`. Configurations that have the old variable will automatically be mapped to the new one, with a warning message printed out. Relnotes: yes Reviewed by: ziaee, markj Differential Revision: https://reviews.freebsd.org/D58390
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
Reviewed by: manu, adrian Differential Revision: https://reviews.freebsd.org/D58798
debug: classified in
04-filenames_plain2 by 'sys/'
PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296234(exp-run) Relnotes: yes Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57772
debug: classified in
04-filenames_plain2 by 'lib/'
E610 inherits the X550-family virtualization registers, anti-spoofing controls, and malicious-driver operations, but the frontend does not advertise SR-IOV and cannot negotiate the mailbox revision needed by E610 VFs. Initialize the X550-family PF/VF mailbox registers for E610 and use PFVFLREC for its VF reset events, following DPDK shared ixgbe code. Advertise the E610 SR-IOV capability, accept API 1.6 only on E610, carry the existing xcast and queue operations forward to that revision, and return the cached physical link speed and state with the three-dword E610 operation. Unsupported RSS and optional feature requests continue to receive explicit failures. SR-IOV activation also enables the existing X550-derived per-pool MDD recovery path on E610. Document the expanded protection and link-state coverage. Hardware validation created 63 VFs and rejected a 64th without flapping the running PF. Invalid TX and RX descriptor DMA independently asserted the offender's WQBR bit, gated only that VF, preserved sibling traffic, and recovered after the VF reset. FreeBSD ixv, FreeBSD DPDK, Linux ixgbevf, and Linux DPDK exercised the PF mailbox and data paths. MFC after: 2 weeks Relnotes: yes Sponsored by: Dirk-Willem van Gulik from Web Weaving (E610 hardware) Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Commits about commands found in man section 1 (other than networking).
This internet draft (which is close to being an RFC) specifies a new NFSv4.2 attribute which tells the NFSv4.2 client to not cache file data. (Similar to O_DIRECT, but triggered by this attribute set on the file on the NFSv4.2 server and not by the application's open(2).) https://datatracker.ietf.org/doc/draft-ietf-nfsv4-uncacheable-files/ This patch adds a new chflags(1) flag called UF_DONTCACHE to implement this. Patches for NFS and ZFS will be done separately. Reviewed by: kib MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58181
debug: Commit manually moved from "unknown" to "userland".
Unlike its GNU counterpart, our tail(1) has always errored out if given repetitive or contradictory options, even prior to Keith Bostic's 1991 reimplementation. There is no good reason to continue to do so, not even tradition, since many other commands (including head(1)) simply apply the rightmost option in cases like this. MFC after: 1 week Reviewed by: allanjude, markj Differential Revision: https://reviews.freebsd.org/D58192
debug: classified in
04-filenames_plain2 by
'usr.bin/'
Now that fetchTimeout works reliably, setting an alarm is not only no longer necessary but counterproductive, as it will trigger even if the connection is not actually stalled but merely slow. While here, improve the wording of the manual page's description of the various options for setting a timeout. MFC after: 1 week Reviewed by: op Differential Revision: https://reviews.freebsd.org/D57911
debug: classified in
04-filenames_plain2 by
'usr.bin/'
While preparing GPT-schemed RaspberryPi images for the NanoBSD Reimagined GSoC 2026 project, a discrepancy was identified between mkimg(1) and gpart(8) regarding Microsoft Basic Data partitions (GUID !ebd0a0a2-b9e5-4433-87c0-68b6b72699c7). Currently, mkimg(1) relies on the MBR-centric name "ntfs" to identify this partition type under the GPT scheme. Conversely, gpart(8) identifies this type as "ms-basic-data". To allow automation scripts (such as those consuming from gpart backup) to use a common partition type across tools, add ALIAS_MS_BASIC_DATA as a valid alias. This is part of a larger effort to avoid a custom, MBR-based image generation logic for embedded SoCs like the Raspberry Pi, standardizing on GPT layouts across all supported FreeBSD embedded devices. Reviewed by: imp MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58198
debug: classified in
04-filenames_plain2 by
'usr.bin/'
This allows to use output of '/usr/bin/time -ao foo' as direct input to ministat(1). While here make diagnostic message more verbose.
debug: classified in
04-filenames_plain2 by
'usr.bin/'
GNU hexdump supports octal and hex, we add supports for BSD style hexdump for better compatibility. See: https://github.com/llvm/llvm-project/pull/206581/ MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58074
debug: classified in
04-filenames_plain2 by
'usr.bin/'
- gnum4.c: fix m4_warnx() to use vwarnx() instead of warnx() - eval.c: improve error messages for empty macro names - extern.h: remove compute_prevep() declaration - Update OpenBSD version strings MFC After: 3 days
debug: classified in
04-filenames_plain2 by
'usr.bin/'
This partially reverts commit 77a201b1705dbd97ea9ebe5b25b1d4ddac8a7d38. Requested by: des, fuz
debug: classified in
04-filenames_plain2 by
'usr.bin/'
The fallback glyph is stored at index 0, and does not need to be inserted into a mapping. Previously there was a dead store of add_glyph's return value for the fallback case, which upset Clang's static analyzer. Now, cast the return value to (void) to make it clear this is intentional. Also change add_glyph's fallback parameter to a c99 bool to make its use more clear. Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57174
debug: classified in
04-filenames_plain2 by
'usr.bin/'
install: Allow installing stdin If from_name is "/dev/stdin" or "-" and the target is not a directory, skip the comparison and copy data from standard input to the target. MFC after: 1 week Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D58348
debug: classified in
04-filenames_plain2 by
'usr.bin/'
install: Fix typo MFC after: 1 week Reported by: markj Fixes: https://cgit.freebsd.org/src/commit/?id=d34870708db9 ("install: Allow installing stdin")
debug: classified in 01-style
by '[tT]ypo'
debug: moved to userland
because 'Need to be grouped with
d34870708db9fa1eb8e29b5e085b755de1189b1f'
This is mainy focused on using bool for booleans but also renames some variables for clarity, adds some explicit comparisons, adds some braces, with miscellanous style fixes thrown in. MFC after: 1 week Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D58355
debug: classified in
04-filenames_plain2 by
'usr.bin/'
Check the `fdopen` return value before calling `cook_cat`. Reviewed by: markj, bnovkov Differential Revision: https://reviews.freebsd.org/D57741 MFC after: 1 week
debug: classified in
03-filenames_plain1 by 'bin/'
pwait: Optionally wait until process is reaped If the new -r option is specified, wait until the target process not only terminates but is reaped. MFC after: 1 week Sponsored by: Klara, Inc. Sponsored by: NetApp, Inc. Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D58314
debug: classified in
03-filenames_plain1 by 'bin/'
pwait: Add a SIGINFO handler On SIGINFO, print a space-separated list or remaining processes to standard error. MFC after: 1 week Sponsored by: Klara, Inc. Sponsored by: NetApp, Inc. Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D58386
debug: classified in
03-filenames_plain1 by 'bin/'
rc.subr: Fix premature return from wait_for_pids Use pwait's new -r option to wait until the target processes have not only terminated, but also been reaped. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=293183 MFC after: 1 week Sponsored by: Klara, Inc. Sponsored by: NetApp, Inc. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58391
debug: classified in
03-filenames_plain1 by
'libexec/'
Bump dates Fixes: https://cgit.freebsd.org/src/commit/?id=c8f5e6819d4d ("pwait: Optionally wait until process is reaped") Fixes: https://cgit.freebsd.org/src/commit/?id=eddd8aa99ca8 ("pwait: Add a SIGINFO handler") Fixes: https://cgit.freebsd.org/src/commit/?id=356d0b79cf6f ("rc.subr: Fix premature return from wait_for_pids")
debug: moved to admin because
'Need to be grouped with
356d0b79cf6fc693ed1a5564232e240ce15ccb8a'
Sponsored by: AFRL, DARPA
debug: classified in
04-filenames_plain2 by
'usr.bin/'
Several functions were using sprintf() to write RPC server-controlled data to a stack buffer. Adopt some minimal changes from NetBSD to avoid the potential overflows. Security: CVE-2026-16277 Security: CVE-2026-16461 Reviewed by: khorben MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58441
debug: classified in
04-filenames_plain2 by
'usr.bin/'
Reviewed by: emaste MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58442
debug: classified in
04-filenames_plain2 by
'usr.bin/'
On some platforms, e.g. Linux Clang 22.1.8 / glibc 2.43, strchr() now implements the C23 behaviour where passing a const pointer to strchr() also returns a const pointer. This breaks rpcgen during the bootstrap build, since it assumes the return value is always a mutable pointer. For mkfile_output(), the pointed-to value is never modified, so fix this by making the pointer const as well. For open_log_file(), the current code modifies the supposedly const value in-place to remove the filename suffix, which happens to work but is wrong even in older versions of C. Change the code to use a printf "%.*s" format specifier to strip the suffix instead. MFC after: 1 week Reviewed by: brooks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58489
debug: classified in
04-filenames_plain2 by
'usr.bin/'
On some platforms, e.g. Linux Clang 22.1.8 / glibc 2.43, strchr() now implements the C23 behaviour where passing a const pointer to strchr() also returns a const pointer. This breaks sort during the bootstrap build, since it assumes the return value is always a mutable pointer. As the returned pointer is never used to modify the value, fix this by making the temporary variable const. MFC after: 1 week Reviewed by: markj Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58491
debug: classified in
04-filenames_plain2 by
'usr.bin/'
On some platforms, e.g. Linux Clang 22.1.8 / glibc 2.43, strchr() now implements the C23 behaviour where passing a const pointer to strchr() also returns a const pointer. This breaks xinstall during the bootstrap build, since it assumes the return value is always a mutable pointer. As the returned pointer is never used to modify the value, fix this by making the temporary variable const. MFC after: 1 week Reviewed by: ray, markj, emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58492
debug: classified in
04-filenames_plain2 by
'usr.bin/'
On some platforms, e.g. Linux Clang 22.1.8 / glibc 2.43, strchr() now implements the C23 behaviour where passing a const pointer to strchr() also returns a const pointer. This breaks mkimg during the bootstrap build, since it assumes the return value is always a mutable pointer. Make the existing 'sep' pointer const to fix the first case, and for the second, introduce a new non-const pointer for strchr, since we do modify the result in that case. MFC after: 1 week Reviewed by: markj Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58493
debug: classified in
04-filenames_plain2 by
'usr.bin/'
On some platforms, e.g. Linux Clang 22.1.8 / glibc 2.43, strchr() now implements the C23 behaviour where passing a const pointer to strchr() also returns a const pointer. This breaks m4 during the bootstrap build, since it assumes the return value is always a mutable pointer. Since the returned value is never modified, simply make the temporary const. MFC after: 1 week Reviewed by: bapt, dim Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58494
debug: classified in
04-filenames_plain2 by
'usr.bin/'
Add some minimal handling of category sources other than static kernel sources. We don't actually look up dynamic sources yet (that would require extended trace records to add the file names to the trace file since we can't assume the trace file is running on a kernel with the same numbers.) Make the decision to append a "src/" prefix to each file name dependent on the category source. Reviewed by: kib Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D58412
debug: classified in
04-filenames_plain2 by
'usr.bin/'
* On SIGINFO, print the current path to stderr rather than stdout. * Do so immediately, instead of the next time we finish a directory. * Document this behavior in the manual page. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296861 MFC after: 1 week Fixes: https://cgit.freebsd.org/src/commit/?id=d1588599c024 ("Report the next directory being scanned ...") Reviewed by: wollman Differential Revision: https://reviews.freebsd.org/D58702
debug: classified in
04-filenames_plain2 by
'usr.bin/'
Reviewed by: fuz, ngie Co-authored-by: Robert Clausecker <fuz@FreeBSD.org> Differential Revision: https://reviews.freebsd.org/D58727
debug: classified in
04-filenames_plain2 by
'usr.bin/'
The current default has been unchanged for 14 years. Increase it to keep pace with modern hardware and software. security/pinentry-gnome, in particular, can sometimes need 112 kB. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297452 MFC after: 2 weeks Sponsored by: ConnectWise Reviewed by: cye, emaste Differential Revision: https://reviews.freebsd.org/D58811
debug: classified in
04-filenames_plain2 by
'usr.bin/'
Our buffer is half a megabyte, but we are only initializing the first two bytes. Switching from static to dynamic initialization moves it from .data to .bss, greatly reducing the size of the binary. Fixes: https://cgit.freebsd.org/src/commit/?id=cf74b63d61b4 ("yes: Completely overengineer") MFC after: 1 week Sponsored by: Klara, Inc. Reviewed by: kevans Differential Revision: https://reviews.freebsd.org/D58890
debug: classified in
04-filenames_plain2 by
'usr.bin/'
Man pages, release notes, etc.
While here, remove the long-unused dash in the first line. Reviewed by: ziaee, olce Fixes: https://cgit.freebsd.org/src/commit/?id=ddf144a04b53 ("ps.1: Revamp: Explain general principles, update to match reality") MFC after: 1 day Differential Revision: https://reviews.freebsd.org/D58038
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
* Modernize the markup * Describe the comment syntax * Drop obsolete advice * Capitalize sentences * Improve the language * Replace no_tld_query with no-tld-query; both are supported, but all the other multi-word options use hyphens rather than underscores. * Add missing ENVIRONMENT section * Redo the example MFC after: 1 week Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D57921
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
MFC after: 1 week
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57124
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Also do not start a new list for each flag item. Reviewed by: markj MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D57124
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Submitted by: des MFC after: 1 week
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Submitted by: des MFC after: 1 week
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Reviewed by: mckusick Discussed with: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57658
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Commit 74654ba3b1b3 added and new chflags(1) flag called "udontcache" or "dontcache". This patch documents this flag. This is a content change. Reviewed by: kib MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58181
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58123
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Document the global fetchTimeout variable, now that it works reliably. MFC after: 1 week Reviewed by: op Differential Revision: https://reviews.freebsd.org/D57910
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58247
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
According to RFC 1918, the following IP prefixes are reserved for
private internets:
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
This PR fixes the prefix lengths in references to private networks
("RFC 1918 networks", "the standard private IP address ranges").
The changes are limited to man pages.
Signed-off-by: Yusuke Ichiki <public@yusuke.pub>
Pull Request: https://github.com/freebsd/freebsd-src/pull/2328
MFC after: 3 days
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58292
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
boot.9 was moved to kern_reboot.9, but this reference was not changed appropriately. Reviewed by: mhorne, kib, emaste Fixes: https://cgit.freebsd.org/src/commit/?id=800e74955d4e ("boot(9): update to match reality") MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D58350
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58315
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Point out which features are non-POSIX and thus can not be safely assumed to be portable and exist in other implementations. Relnotes: YES! Reviewed by: ziaee, jilles Differential Revision: https://reviews.freebsd.org/D55333
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
List every AQC part aq_vendor_info_array[] probes, each with the maximum speed aq_hw_capabilities() grants it. Only the Atlantic 2 parts link at 10 Megabit. The AQC100 and AQC100S are the only SFP+ controllers; the rest are twisted pair. Reviewed by: adrian, ziaee Signed-off-by: Nick Price <nick@spun.io> Differential Revision: https://reviews.freebsd.org/D58144
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Reviewed by: ziaee, imp Differential Revision: https://reviews.freebsd.org/D58267
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
contigmalloc.9: Note that M_WAITOK may still return NULL Reviewed by: markj, bapt Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58382
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
contigmalloc.9: Correct typo Reported by: alc, rlibby Fixes: https://cgit.freebsd.org/src/commit/?id=caabdb3aefdc ("contigmalloc.9: Note that M_WAITOK may still return NULL")
debug: classified in 01-style
by '[tT]ypo'
debug: moved to doc because
'Need to be grouped with
caabdb3aefdc45cae90203210034086801fa9005'
The manual page claimed that SIGINFO caused information to be printed to stdout, when in fact it is printed to stderr, as one would expect. This has been true ever since the feature was first added in 2003. MFC after: 1 week Fixes: https://cgit.freebsd.org/src/commit/?id=00d321a2b395 ("Add a SIGINFO handler.") Reviewed by: jilles Differential Revision: https://reviews.freebsd.org/D58392
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Describe the disabled, adaptive, and low-latency settings and their interrupt-rate tradeoffs. MFC after: 1 week
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Describe the disabled, adaptive, and low-latency settings and their interrupt-rate tradeoffs. MFC after: 1 week
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Reviewed by: markc Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58458
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
mknod.2: update the man page State that FIFOs can be created, document the requirement that dev must be zero then. Mention whiteouts. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297082 Reviewed by: emaste Sponsored by: The FreeBSD Foundation MFC after: 3 days Differential revision: https://reviews.freebsd.org/D58478
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
mknod.2: properly document root requirements Submitted by: Martijn Dekker <mcdutchie@hotmail.com> PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297082 Fixes: https://cgit.freebsd.org/src/commit/?id=4090d103b0c3 ("mknod.2: update the man page") MFC after: 3 days
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58463
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58463
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
There are expected to be additional improvements and this RELNOTES entry will be updated accordingly.
debug: classified in
03-filenames_plain1 by
'RELNOTES'
Reviewed by: des MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D58483
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Adjust the man page to what other LinuxKPI wlan man pages say and look like as it has been a while since I wrote it. The man page is not yet hooked up to the build on purpose as the driver is not yet enabled in the tree. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: ziaee (earlier version) Differential Revision: https://reviews.freebsd.org/D58479
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
debug: classified in
03-filenames_plain1 by
'UPDATING'
There are few warnings reported by mandoc -Tlint:
bhyve_config.5:255:31: WARNING: new sentence, new line
bhyve_config.5:257:43: WARNING: new sentence, new line
bhyve_config.5:422:2: WARNING: missing section argument: Xr nm_open
bhyve_config.5:469:24: WARNING: skipping no-space macro
bhyve_config.5:483:2: WARNING: wrong number of cells: 2 columns, 4 cells
bhyve_config.5:484:2: WARNING: wrong number of cells: 2 columns, 4 cells
bhyve_config.5:541:24: WARNING: skipping no-space macro
- "new sentence, new line" is a trivial formatting fix.
- "missing section": there is actually no nm_open() manual page,
so use .Nm instead of .Xr for it.
- "no-space macro": format without .Oc and .Ns, similarly to
how it is already done in bhyve.8 for VNC addresses.
- "wrong number of cells": also a trivial fix.
Reviewed by: jhb
Sponsored by: The FreeBSD Foundation
MFC after: 3 days
Differential Revision: https://reviews.freebsd.org/D58415
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
`nvmecontrol power -l ...` lists the available power modes. Non-operational modes are marked with an asterisk. While here, add <device-id | namespace-id> to the "nvmecontrol power" synopsis. MFC after: 3 days Reviewed by: dab, imp, michaelo, ziaee Differential Revision: https://reviews.freebsd.org/D58480
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58264
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Reviewed by: emaste, mckusick Sponsored by: The FreeBSD Foundation MFC after: 3 days Differential revision: https://reviews.freebsd.org/D58592
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
The IPv6 socket options IPV6_JOIN_GROUP and IPV6_LEAVE_GROUP socket options are being extended to accept IPv4 multicast group addresses in the RFC 3493 IPv4-mapped address format as a convenience to application developers. Caveat this addition carefully in the newly added HISTORY section, addressing all previous review comments. Approved by: ziaee Reviewed by: ziaee, glebius PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=193246 Differential Revision: https://reviews.freebsd.org/D55382
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
The CTL High Availablity clustering feature allows a pair of hosts to implement transparent failover. The implementation uses a TCP connection to exchange messages. There is no authentication mechanism and the protocol itself embeds kernel pointers in the messages exchanged between HA hosts. This property (of CTL_MSG_DATAMOVE messages specifically), as well as insufficient validation of inbound messages, mean that anyone able to access a CTL HA port is able to remotely execute code on that host. Provide a warning to this effect in the CTL man page. Reported by: Ryan of Calif.io Reviewed by: ziaee, ken, mav MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58622
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Noted and reviewed by: lwhsu Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58666
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Reviewed by: ziaee Differential Revision: https://reviews.freebsd.org/D58565
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
- Remove `\(em` from .Nm section as it's not valid mandoc markup. - Remove the section from the .Nm directive (it's handled under the .Dt directive). MFC after: 1 week Reported by: make manlint
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Add missing commas after .Nm entries. MFC after: 1 week Reported by: make manlint
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
MFC after: 1 week Reported by: make manlint
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
MFC after: 1 week Reported by: make manlint
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
debug: classified in
03-filenames_plain1 by
'RELNOTES'
The shared em(4) manual page lists only the em device-node name. Document the /dev/led/igb* name as well. MFC after: 2 weeks
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Reviewed by: emaste Discussed with: imp Fixes: https://cgit.freebsd.org/src/commit/?id=802c6d5d61d1 ("cdefs.h: Introduce __nonstring attribute") MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58804
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Reviewed by: fuz Approved by: fuz (mentor) MFC after: 1 month Pull Request: https://github.com/freebsd/freebsd-src/pull/2288
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
debug: classified in
03-filenames_plain1 by
'RELNOTES'
MFC after: 3 days Sponsored by: fme AG
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Document a few options that are currently supported but
not covered in bhyve_config(5):
- monitor
- vcpu.N.cpuset
- domains.N.{size,cpus,domain_policy}
- console (for arm64 and riscv)
MFC after: 1 week
Reviewed by: bnovkov, jhb
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D58399
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
As far as I can tell, racct(2) has never existed, not even when I added these references a decade ago. Change them as commit e9e615c88a74 did in thr_new(2). Reported by: Karlo Miličević <karlo98.m@gmail.com>
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Do not duplicate the documentation already available through "sysctl -d", but tell the user where to find it. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=257984 Suggested by: Felix Johnson <felix.the.red@gmail.com>
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
The eXpat project has changed maintainers since this section was written in 2002. Update it to reflect reality. Discussed with: Sebastian Pipping <sebastian@pipping.org> Reviewed by: bcr MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D58835
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Standardize driver manuals on the style used for 12 years in vt(4). This brings SYNOPSIS across all FreeBSD manual sections into harmony of meaning where where SYNOPSIS lists available options, and does not contain prose. Adjust mdoc(7) to reflect the established convention. Reviewed by: jhb Discussed with: arch@ (marc.info/?l=freebsd-arch&m=176782215606871) Differential Revision: https://reviews.freebsd.org/D54586
debug: classified in
02-filenames_wildcards by
'.*\.[1-9]'
Hardware drivers and architecture-specific code.
asmc: try PIO before MMIO to avoid false T2 detection Add hw.asmc.system-state and hw.asmc.board-id read-only sysctls to expose the T2 system state register and Mac board identifier via SMC. Try PIO access before MMIO during probe to prevent false T2 detection on Macs that happen to have something mapped at the T2 BAR address. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D57844
debug: classified in
03-filenames_plain1 by
'sys/dev/'
asmc: add system state and board identity sysctls Add dev.asmc.0.system subtree with read-only sysctls for SMC diagnostic and identity keys: shutdown_cause (MSSD), sleep_cause (MSSP), thermal_status (MSAL), time_of_day (CLKT), power_state (MSPS), board_id (RPlt), and chip_gen (RGEN). Each sysctl is registered only if the key exists on the hardware. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D57853
debug: classified in
03-filenames_plain1 by
'sys/dev/'
asmc: deduplicate sensor converters and cause sysctls Replace per-type spXX_to_milli() functions with a table-driven asmc_sensor_convert() that looks up the divisor by SMC type string. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D57854
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Book-E powerpc has 64-bit bus_addr_t but only a 32-bit bus_size_t. Use the right macros for maxsize and maxsegsize to fix the build. Fixes: https://cgit.freebsd.org/src/commit/?id=4bf8ce037 ("if_rge: initial import of if_rge driver from OpenBSD.") Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D57794
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Depend on clknode_if.h in the module Makefile, so that it gets explicitly built for the module. Also, reduce the #if guards to only the new clock output code, and gate them on all powerpc, not just powerpc64. Fixes: https://cgit.freebsd.org/src/commit/?id=6b77d34f ("HYM8563: Add support for clock output.") Reviewed by: mmel Differential Revision: https://reviews.freebsd.org/D57795
debug: classified in
03-filenames_plain1 by
'sys/dev/'
debug: classified in
03-filenames_plain1 by
'sys/powerpc/'
debug: classified in
03-filenames_plain1 by
'sys/powerpc/'
These were added during the DPAA driver rewrite, and should not have gone in then. Remove them.
debug: classified in
03-filenames_plain1 by
'sys/powerpc/'
Reviewed by: mav Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58003
debug: classified in
03-filenames_plain1 by
'sys/x86/'
PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=199101 MFC after: 1 week Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D57929
debug: classified in
03-filenames_plain1 by
'sys/dev/'
MFC after: 1 week Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D57930
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Some firmware delivers the power or sleep button press that woke the system as an ordinary button press (Notify 0x80) shortly after resume, rather than as the wakeup notification (Notify 0x02) the ACPI specification requires for a button that is also a wake source. On affected machines (e.g. the Framework Laptop 12, Intel Raptor Lake-P) the power button is a control-method device behind the embedded controller. The EC latches the key press that woke the system across the sleep transition and flushes it through its normal _Qxx query path as soon as it is reinitialized on resume. The replayed press is indistinguishable from a genuine one, so the kernel honors it as a fresh suspend request and the machine suspends again immediately after waking; it cannot be kept awake with the button. The event cannot be filtered at its source: it arrives over the same EC query path that also carries legitimate events (lid, AC, thermal, battery), so suppressing the drain would lose real notifications. Instead, record the time of resume and ignore a button-initiated suspend that arrives within a short grace window of it. The timestamp is taken before DEVICE_RESUME() re-initializes the EC, so it is set before the replay can be processed on the ACPICA notify taskqueue; otherwise the replay can be evaluated before the timestamp is written and slip through. Measured from that point, the replay lands at ~600 ms across many cycles on a Framework Laptop 12, whereas a deliberate press cannot occur that quickly -- it happens well after the display is back -- so a one-second window separates the two without ignoring real presses for any perceptible time. Spec-compliant firmware reports the wake as Notify 0x02, which is handled on a different path and never reaches this check, so there is no change in behavior on such systems. The replay window is a fixed compile-time constant rather than a tunable on purpose: it tracks a hardware characteristic -- the EC's post-resume replay latency -- not a user policy, so there is no value a user would meaningfully choose. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296243 Reviewed by: adrian, imp (earlier revision), olce MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D57712
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Also, add a check in the attach method that a per-CPU structure is provided by the bus. This allows to remove such checks in multiple functions. The check cannot currently fail as all x86 CPU drivers (ACPI, legacy) provide the CPU_IVAR_PCPU instance variable, but it is safer to have it, especially as an example to other driver writers. Event: Halifax Hackathon 202606 Location: Seat 36K in AC667, still waiting for a gate at Montréal-Trudeau Sponsored by: The FreeBSD Foundation
debug: classified in
03-filenames_plain1 by
'sys/x86/'
Also, add a check in the attach method that a per-CPU structure is provided by the bus. This allows to remove such checks in multiple functions. The check cannot currently fail as all x86 CPU drivers (ACPI, legacy) provide the CPU_IVAR_PCPU instance variable, but it is safer to have it, especially as an example to other driver writers. Event: Halifax Hackathon 202606 Location: Seat 25A in AF0349, before leaving Montréal-Trudeau Sponsored by: The FreeBSD Foundation
debug: classified in
03-filenames_plain1 by
'sys/x86/'
This fixes associating to various APs. It worked fine to a FreeBSD AP (which is a wholly separate problem I'm going to need to dive into) but not to my tplink AX1800 Wifi-6 router. PR: kern/https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296503 Locally tested: * STA: Intel Centrino Advanced-N 6205 (iwn), Lenovo T420 * AP: TP-Link AX1800 wifi-6 router
debug: classified in
03-filenames_plain1 by
'sys/dev/'
M_PREPEND in the broadcast branch may call m_prepend(9) which allocates a new head mbuf and calls m_move_pkthdr(), stripping M_PKTHDR from the old mbuf. xfer->mbuf was set before M_PREPEND, so it pointed at the deheadered old mbuf. bus_dmamap_load_mbuf(9) asserts M_PKTHDR and panics. Reviewed by: zlei, adrian Differential Revision: https://reviews.freebsd.org/D57495
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Use kn->kn_sdata to track the last bs->total value for each knote attached to an mmaped channel. An event is delivered only when the total byte counter has advanced by at least c->lw since the last delivery. After delivery kn_sdata is updated to the current total. Each knote tracks its own watermark independently, so multiple knotes attached to the same mmaped channel all receive events correctly. Non-mmap channels keep the existing level-triggered behavior via chn_polltrigger(). MFC after: 1 week Reviewed by: christos Differential Revision: https://reviews.freebsd.org/D57833
debug: classified in
03-filenames_plain1 by
'sys/dev/'
arm64/vmm: Add FEAT_NV2 definitions Add the definitions for the VNCR_EL2 register and all of the offsets to registers in memory relative to the page stored in VNCR_EL2. Signed-off-by: Kajetan Puchalski <kajetan.puchalski@arm.com> Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D56550
debug: classified in
03-filenames_plain1 by
'sys/arm64/'
arm64/vmm: Use the VNCR_EL2 memory page to store guest registers Wherever possible, move the storage space for guest register values from the hypctx struct into a preallocated memory page matching the layout of the page pointed to by VNCR_EL2. This will streamline implementing support for nested virtualization, but the implementation itself is not reliant on the presence of nested virtualization architecture features. Signed-off-by: Kajetan Puchalski <kajetan.puchalski@arm.com> Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D56551
debug: classified in
03-filenames_plain1 by
'sys/arm64/'
arm64/vmm: Store non-VNCR registers in an array Move non-VNCR EL0 and EL1 registers into a dedicated array inside of hypctx. This enables uniform accesses to both VNCR and non-VNCR guest register state through hypctx_[read|write]_sys_reg(). The accessors are _not_ used for non-VNCR EL2 registers in order to create a clear separation between guest-visible and guest-invisible register state. Signed-off-by: Kajetan Puchalski <kajetan.puchalski@arm.com> Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D56552
debug: classified in
03-filenames_plain1 by
'sys/arm64/'
arm64/vmm: Refactor vmm_hyp.c Refactor vmm_hyp.c to split register reload logic by type of register, streamline the implementation and improve readability. Signed-off-by: Kajetan Puchalski <kajetan.puchalski@arm.com> Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D56553
debug: classified in
03-filenames_plain1 by
'sys/arm64/'
arm64/vmm: Move vttbr_el2 & vtimer into struct hypctx Move vttbr_el2 & vtimer from struct hyp into struct hypctx to streamline the logic and handle them in the same way as other *_el2 registers are already being handled. Signed-off-by: Kajetan Puchalski <kajetan.puchalski@arm.com> Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D56554
debug: classified in
03-filenames_plain1 by
'sys/arm64/'
arm64/vmm: Move host-side EL2 regs into sys_regs Move EL2 host registers that are not visible to the guest into hypctx->sys_regs. Prefix them with HOST_ to distinguish from EL2 registers which are part of the guest's own state (e.g. in VNCR). Signed-off-by: Kajetan Puchalski <kajetan.puchalski@arm.com> Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D56555
debug: classified in
03-filenames_plain1 by
'sys/arm64/'
arm64/vmm: Make remaining registers use hypctx_*_sys_reg Move vgic, timer and trapframe registers into sys_regs to handle them in the same way as all the other registers. Signed-off-by: Kajetan Puchalski <kajetan.puchalski@arm.com> Reviewed by: andrew Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D56556
debug: classified in
03-filenames_plain1 by
'sys/arm64/'
Fix tid_set_busy() for when `pmap` is NULL. Obviously a NULL pointer cannot be correctly used, so I'm not sure how it worked in testing on 64-bit.
debug: classified in
03-filenames_plain1 by
'sys/powerpc/'
When the TID rolls over on a given CPU, simply flash-invalidate the TLB instead of walking the TLB to only invalidate the repurposed TID. Walking 256 entries is expensive, and we'll likely be inserting a bunch new ones anyway in the new environment, since 256 really only handles 1MB of storage, so the likelihood of other mappings continuing to exist in the TLB when their thread owner is scheduled again is very very small.
debug: classified in
03-filenames_plain1 by
'sys/powerpc/'
DEVX event notifier returned true for the command-completion and page-request events. This is causing mlx5_eq_int() to skip the core EQ handler, so the firmware command interface and the page supply stop being serviced and the device wedges. This commit also make notifier registration and dispatch safe against the EQ interrupt running concurrently: publish the table pointer before the callback and load it with acquire semantics. run the callback under RCU, and drain it with synchronize_rcu() on teardown. Otherwise the interrupt handler could observe a half-initialized notifier or race with cleanup. Reviewed by: kib Tested by: Wafa Hamzah <wafah@nvidia.com> Sponsored by: Nvidia networking MFC after: 1 month
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Import Linux upstream commits a8b92ca1b0e5ce620e425e9d2f89ce44f1a82a82 and c59450c463695a016e823175bac421cff219935d. The DEVX object and method definitions were already present, but nothing pointed ib_device.driver_def at them. ibcore therefore never merged them into the uverbs uapi tree and every DEVX ioctl came back as EPROTONOSUPPORT. Reviewed by: kib Tested by: Wafa Hamzah <wafah@nvidia.com> Sponsored by: Nvidia networking MFC after: 1 month
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Import Linux upstream commit 342ee59de98a2ecdf15a46849a2534e7c808eb1f. The dynamic UAR object was declared in the ABI headers but had no handler, so the ioctl was rejected and dynamic-UAR contexts could not allocate a doorbell UAR at all. Implement the alloc and destroy methods following the upstream driver: grab a UAR stamped with the caller's DEVX uid, expose it to user space through an rdma_user_mmap entry (write-combining or non-cached as requested), and free it on destroy. Reviewed by: kib Tested by: Wafa Hamzah <wafah@nvidia.com> Sponsored by: Nvidia networking MFC after: 1 month
debug: classified in
03-filenames_plain1 by
'sys/dev/'
A firmware object owned by a DEVX uid may only reference resources owned
by the same uid or ones explicitly marked as shared. Completion EQs
were created with uid 0, so a CQ owned by a DEVX uid could not attach to
its EQ and CREATE_CQ failed with "bad resource".
Create completion EQs with MLX5_SHARED_RESOURCE_UID on devices that
support user contexts, so uid-owned CQs can use them.
The code follows the Linux commit d2c8a1554c10d5e0443b1f97f480d7dacd55cf55
("IB/mlx5: Enable UAR to have DevX UID").
Reviewed by: kib
Tested by: Wafa Hamzah <wafah@nvidia.com>
Sponsored by: Nvidia networking
MFC after: 1 month
debug: classified in
03-filenames_plain1 by
'sys/dev/'
mlx5ib: allocate IB queue counters as a shared resource
A QP owned by a DEVX uid references the port's queue counter. The
counter was allocated with uid 0, so RST2INIT_QP on a uid-owned QP
failed with "bad resource state".
Allocate and free the IB queue counters directly and, on devices that
support user contexts, stamp them with MLX5_SHARED_RESOURCE_UID so
uid-owned QPs can use them.
The code follows the Linux commit d2c8a1554c10d5e0443b1f97f480d7dacd55cf55
("IB/mlx5: Enable UAR to have DevX UID").
Reviewed by: kib
Tested by: Wafa Hamzah <wafah@nvidia.com>
Sponsored by: Nvidia networking
MFC after: 1 month
debug: classified in
03-filenames_plain1 by
'sys/dev/'
mlx5ib: encode dynamic UAR mmap offsets in the reserved command range The UAR ioctl handed user space a raw mmap offset, so the first dynamic UAR landed at page offset 0. mlx5_ib_mmap() decodes offset 0 as the legacy regular-page command and routed the mapping through the old bfreg path, which rejects dynamic-UAR contexts, so mmap() failed with EINVAL and mlx5dv_devx_alloc_uar() returned NULL. Follow the upstream scheme: reserve the mmap command range [9, 255] for rdma_user_mmap entries and return command-encoded offsets, so the dynamic-UAR mappings decode to the intended mlx5_ib_mmap() path. Reviewed by: kib Tested by: Wafa Hamzah <wafah@nvidia.com> Sponsored by: Nvidia networking MFC after: 1 month
debug: classified in
03-filenames_plain1 by
'sys/dev/'
mlx5ib: advertise write-combining support for dynamic BlueFlame UARs Import Linux upstream commit 1f3db161881b7e21efb149e0ae8152b79a571a8f. dev->wc_support was never set, so it was always false and the UAR ioctl refused BlueFlame (write-combining) UAR allocations with EOPNOTSUPP. That breaks QP creation in pure dynamic-UAR mode, where user space asks for a BF doorbell UAR. Reviewed by: kib Tested by: Wafa Hamzah <wafah@nvidia.com> Sponsored by: Nvidia networking MFC after: 1 month
debug: classified in
03-filenames_plain1 by
'sys/dev/'
mlx5: pass the full EQE to the DEVX event notifier The DEVX event notifier and its helpers expect a full struct mlx5_eqe and read eqe->data from it, but mlx5_eq_int() passed &eqe->data, so the data offset was applied twice. Reviewed by: kib Tested by: Wafa Hamzah <wafah@nvidia.com> Sponsored by: Nvidia networking MFC after: 1 month
debug: classified in
03-filenames_plain1 by
'sys/dev/'
mlx5: guard against a NULL CQ event handler in mlx5_cq_event() DEVX and mlx5en created CQs are registered without an asynchronous event handler (mcq.event is NULL). An asynchronous CQ_ERROR event for such a CQ made mlx5_cq_event() call through a NULL pointer and panic. Reviewed by: kib Tested by: Wafa Hamzah <wafah@nvidia.com> Sponsored by: Nvidia networking MFC after: 1 month
debug: classified in
03-filenames_plain1 by
'sys/dev/'
mlx5: propagate the DEVX uid through SRQ create and destroy The SRQ command builders never stamped the owning DEVX uid into the firmware CREATE_SRQ/CREATE_RMP/CREATE_XRC_SRQ commands, so a basic SRQ was always created with uid 0. Every modern libmlx5 context runs with a DEVX uid, and the QPs that reference the SRQ carry that uid, so firmware rejected CREATE_QP with "bad resource": a uid-owned QP may not reference a uid-0 SRQ. Reviewed by: kib Tested by: Wafa Hamzah <wafah@nvidia.com> Sponsored by: Nvidia networking MFC after: 1 month
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The thermal interrupt is initially masked. Thermal interrupt handling is enabled by calling lapic_enable_thermal(), which installs a (single) handler. [olce: Wrote the commit message.] Reviewed by: kib, olce MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D44454
debug: classified in
03-filenames_plain1 by '['sys/amd64/',
'sys/x86/']'
acpi: Add a pseudo-bus for APEI devices to manage resources Different APEI tables can reuse the same registers (and sometimes different views of the same register, e.g. 32- vs 64-bit mappings of the same register). To enable this sharing, apei0 now acts as a bus device managing a pool of allocated resources and handing out mappings to child devices which handle individual tables. Most of the previous apei(4) driver has been moved into a new hest0 device that is a child of apei0. Reviewed by: gallatin Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D58024
debug: classified in
03-filenames_plain1 by
'sys/dev/'
acpi: fix instant panic in hest_attach() Since now there is a pseudo-bus between our device and acpi0, we need to go deeper. Fixes: https://cgit.freebsd.org/src/commit/?id=9313f6b01485ad9a0b7cc59b459f5714533587c3
debug: classified in
03-filenames_plain1 by
'sys/dev/'
This driver parses the ACPI EINJ table and builds a list of instructions associated with known actions. It then exports ioctls to fetch the set of supported errors and inject system errors by executing specific sequences of actions. This can be used to test error reporting facilities for events such as ECC errors. Reviewed by: gallatin Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D58025
debug: Commit manually moved from "unknown" to "hardware".
Fixed the post-LPS delay from 500us to the IEEE 1394a-2000 s6.1 mandated 10ms ceiling. Handled PHY_INT by clearing W1C status bits in register 5 (masked ISBR to avoid spurious bus resets). Added a SID timeout callout that recovers the state machine when a remote device fails to complete self-ID. Fixed FW_PHY_SPD operator precedence and gated noisy messages behind bootverbose/firewire_debug. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58033
debug: classified in
03-filenames_plain1 by
'sys/dev/'
fwcam: add dynamic resolution and frame rate support Read V_MODE_INQ and V_RATE_INQ registers for all supported formats during probe, caching the camera's actual capabilities. Use these to validate SMODE ioctl requests before writing to the camera. Writing an unsupported combination caused the camera to stop responding, requiring a physical power cycle. Tested with: Apple iSight (external FireWire) Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58090
debug: classified in
03-filenames_plain1 by
'sys/dev/'
fwcam: set ISO speed from device link speed iso_speed was never initialized, defaulting to S100 regardless of the camera's actual link speed. Some cameras firmwares reject ISO_EN when the speed field in the ISO_CHANNEL register does not match their capabilities. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58091
debug: classified in
03-filenames_plain1 by
'sys/dev/'
fwcam: write video mode registers before enabling ISO streaming The IIDC spec (s3.1) requires the video mode to be programmed before ISO enable. Without this, cameras that power up with invalid default mode/rate combinations reject the ISO_EN write. This can happen when the firmware of teh camera is outdated or vendor never updated it. Differential Revision: https://reviews.freebsd.org/D58092
debug: classified in
03-filenames_plain1 by
'sys/dev/'
fwcamctl provides userland access to /dev/fwcam0. Supported subcommands: info (camera state, format, mode, rate, features), snap (capture a frame as PPM), mode (set format/mode/rate), and feat (get/set camera feature registers). snap converts YUV422, YUV411, YUV444, RGB8, and Mono8 pixel formats to RGB24 PPM with no external dependencies. A configurable frame skip (default 5) allows auto-exposure and auto-white-balance to settle before capture. (from adrian - yes, I've successfully captured images from an Apple isight camera on firewire with this tool and in-tree support.) Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D57914
debug: Commit manually moved from "unknown" to "hardware".
Sponsored by; The FreeBSD Foundation MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Sponsored by: The FreeBSD Foundation MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Moved ISO start to first usage. Opening the device now only validates state and increments the open count, allowing info queries and mode changes without starting the camera. ISO streaming begins on demand when userland first reads frame data. This avoid the camera led to turn-on at attach. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58100
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Some IIDC cameras power down the sensor when inactive (e.g. lens cover closed) and reject ISO enable with EIO. Re-power the camera and retry once before failing. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58101
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Expose audio capture from Apple FireWire devices as a standard pcm(4)/dsp(4) device via the newpcm framework. (adrian: I've tested this on an isight camera and looped it back to USB speakers via "sox -t oss /dev/dsp3 -t oss /dev/dsp4") Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58109
debug: Commit manually moved from "unknown" to "hardware".
This driver only reports the RFKILL button presses. This is needed for the "airplane" key on some Framework laptops. Reviewed by: wulf, ziaee Event: Halifax Hackathon 202606 Location: vishwin@'s car Co-authored-by: Daniel Shaefer Sponsored by: Framework Computer Inc Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57838
debug: Commit manually moved from "unknown" to "hardware".
MFC after: 1 week Sponsored by: The FreeBSD Foundation
debug: classified in
03-filenames_plain1 by
'sys/dev/'
debug: classified in
03-filenames_plain1 by
'sys/dev/'
USB vendor:product 184f:0051 Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D56794
debug: classified in
03-filenames_plain1 by
'sys/dev/'
This can't be a loadable module, so add it to MINIMAL Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D58067
debug: classified in
03-filenames_plain1 by '['sys/amd64/',
'sys/i386/']'
This makes the code slightly more compact and easier to read. No functional change intended. Reviewed by: bnovkov MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58110
debug: classified in
03-filenames_plain1 by
'sys/x86/'
The thermal LVT slot does not necessarily exist. According to Intel's Software Developers Manual, for Intel processors supporting 64-bit operation (amd64), probably even the earliest ones should have a local APIC with such a slot (the slot was introduced with Pentium 4 and Xeon processors according to the manual, and the 64-bit implementation in some later versions of them). AMD's Architecture Programmer's Manual also seems to imply that all AMD processors supporting amd64 should have the slot too. So this change may not be needed when i386's code is dropped, but it does not hurt to have it, and it might ease possible MFCs. Change the signature of lapic_enable_thermal() so that it can report failure (if there is no local APIC or if there is no thermal LVT slot). Reviewed by: bnovkov, kib MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58086
debug: classified in
03-filenames_plain1 by
'sys/x86/'
Differential Revision: https://reviews.freebsd.org/D56923 Reviewed by: mhorne
debug: classified in
03-filenames_plain1 by
'sys/riscv/'
This change implements the equivalent of the amd64-specific 'show pte' ddb command used to dump the page table entries associated with a specific virtual address. Differential Revision: https://reviews.freebsd.org/D56924 Reviewed by: mhorne
debug: classified in
03-filenames_plain1 by
'sys/riscv/'
Spurious page faults caused by cached invalid entries may occur when starting APs and potentially panic the kernel if we're running in a non-sleepable context. Fix this avoidable panic by flushing the TLB after the AP is released. Differential Revision: https://reviews.freebsd.org/D57003 Reviewed by: markj
debug: classified in
03-filenames_plain1 by
'sys/riscv/'
The Privileged ISA specification permits caching of invalid PTEs 12.2.1. Supervisor Memory-Management Fence Instruction), which may result in a spurious page fault. Such faults are handled by 'pmap_fault' which locks the kernel pmap before inspecting and possibly updating the offending L2 entry. Unfortunately, spurious faults may also occur when we're already holding the kernel_pmap lock or running in a critical section, where any attempt to grab the pmap lock will result in a kernel panic. Fix this avoidable panic by performing a lockless lookup to determine whether a valid kernel mapping exits and flushing appropriate TLB entry. Differential Revision: https://reviews.freebsd.org/D56925 Reviewed by: jrtc27, mhorne, markj
debug: classified in
03-filenames_plain1 by
'sys/riscv/'
Using cpu_get_pcpuid() directly or having a CPU ID cache does not really make any significant difference. With cache: Less function calls, less space on stack, but an additional allocation in the softc, who stays permanently. Without cache: Some function calls, but one less slot in the softc, and no data duplication (but that info never changes). The main reason for this change is to reduce conflicts with some work-in-progress by aokblast@. While here, move the check that a per-CPU structure is provided by the bus from the attach to the probe method, as it is already used by hwpstate_probe_pstate() there. Reviewed by: aokblast Sponsored by: The FreeBSD Foundation
debug: classified in
03-filenames_plain1 by
'sys/x86/'
To minimize the diff with hwpstate_intel(4). See previous commit there for the rationale. Reviewed by: aokblast Sponsored by: The FreeBSD Foundation
debug: classified in
03-filenames_plain1 by
'sys/x86/'
KVM does not always use 0x40000000 as its CPUID base. For example, QEMU adds a 0x100 offset when nested virtualization is detected and the host exposes Hyper-V enlightenment hints. To accommodate this behavior, switch the detection logic to use the CPUID leaf returned by do_cpuid(), making the implementation more flexible. See: https://github.com/qemu/qemu/blob/master/target/i386/kvm/kvm.c#L2300 Reviewed by: kib MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58146
debug: classified in
03-filenames_plain1 by
'sys/x86/'
Presumably surfaced by -fstack-protector-strong, rk8xx_settime was triggering SSP when ntpd set the time on the RockPro64, at the very least. A minor oops meant that the weeks mask was getting tossed into the wrong field, and the mask was never populated. The mask is 0x7 for all three of these, thus overflowing the `data` array in settime by one byte. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296719 Reported by: jsm, "Tenkawa" on Discord Reviewed by: mmel Differential Revision: https://reviews.freebsd.org/D58182
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Add fwdv(4) driver for DV video capture from FireWire camcorders using AV/C protocol and isochronous streaming. Supports AV/C tape transport commands (play, stop, ff, rewind, pause, record, eject) with NTSC/PAL auto-detection and read(2) interface for frame capture. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58122
debug: Commit manually moved from "unknown" to "hardware".
Using if_getflags() to check IFF_DRV_RUNNING is wrong; if_getdrvflags() is required. This issue resulted in the multicast filter not being updated. This was an oversight by me in my initial port. Thanks to danilo@ for reporting it and Oleg <oleglelchuk@gmail.com> for the fix. PR: kern/https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=295176
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The Wacom ExpressKey Remote (ACK-411050) is a wireless button pad
with 18 programmable buttons and a touch ring, used as a companion
device with Wacom tablets.
It communicates via a USB wireless receiver (0x056a:0x0331) using a
vendor-specific HID report (ID 0x11).
This driver exposes the device via evdev:
- 18 buttons: BTN_0–BTN_Z, BTN_BASE, BTN_BASE2
- Touch ring position via ABS_WHEEL (0–71; reports 0 on release)
- Pad activity marker via ABS_MISC (set to 15/PAD_DEVICE_ID when
any input is active, 0 when idle that matches Linux wacom driver
convention)
- Remote serial number via MSC_SERIAL (for userland per-remote
identification)
Battery level, charging state, and touch ring mode (3 LEDs, values 0–2)
are exposed as per-device sysctls (dev.hidwacom.0.battery, .charging,
.ring_mode) rather than overloading evdev misc codes. The ring mode
sysctl is preserved across device idle periods.
Protocol was decoded from USB traffic analysis and cross-referenced
against the Linux wacom_remote_irq() implementation in
drivers/hid/wacom_wac.c.
Reviewed by: adrian
Differential Revision: https://reviews.freebsd.org/D56729
Discussed with: ziaee
debug: Commit manually moved from "unknown" to "hardware".
Currently, devd emits events for external adapters only. Send Netgraph init/disconnect events to devd so the internal adapter's state could be asserted from userland. (adrian - indentation changes.) Signed-off-by: Kirill Orlov (-k) <slowdive@me.com> Reviewed-by: adrian, imp Pull-Request: https://github.com/freebsd/freebsd-src/pull/2196
debug: classified in
05-summary-prefix by
'bluetooth:'
Matches tcpdump naming, but without getting more intense as you add more -t. This slightly reduces the post-processing needed on usbdump output to diff two transactions. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58196
debug: classified in
03-filenames_plain1 by
'usr.sbin/usbdump/'
Introduce fdt_ether_get_addr() in fdt_common.c/h that tries standard DT properties in the correct order and falls back to a random address when needed. This should be used by ethernet drivers instead of open-coding the same logic. MFC after: 2 weeks Reviewed by: mhorne, adrian, bz, jrtc27 Differential Revision: https://reviews.freebsd.org/D58104
debug: classified in
03-filenames_plain1 by
'sys/dev/'
When compiled without 'options RSS', the ena driver created taskqueues using taskqueue_start_threads_cpuset passing a mask value of NULL, both in the ena_setup_tx_resources path (for enqueues) and in the ena_create_io_queues path (for the completion-processing). In the default configuration, on most EC2 instances, this results in taskqueues running in the right NUMA domain, but only by accident; in non-default configurations (e.g. with with multiple EBS volumes attached and associated NVMe taskqueues) the taskqueues may land in the wrong NUMA domain even on instance types where the one-EBS-one-ENA case produces the desired results. Set (struct ena_que)->domain and use that to inform the choice of CPU sets. On a c8gn.48xlarge EC2 instance this doubles throughput on a 32-TCP-stream benchmark. Reviewed by: akiyano MFC after: 7 days Sponsored by: Amazon Differential Revision: https://reviews.freebsd.org/D57918
debug: classified in
03-filenames_plain1 by
'sys/dev/'
In the DEVX_SUBSCRIBE_EVENT handler the eventfd path can fail and "goto err" before the subscription's xa keys and ev_file have been set; they are still zeroed from kzalloc(). The cleanup then looks up a level-1 xa entry with key 0, gets NULL, and faults dereferencing it. Initialize the fields the cleanup path relies on right after the subscription is allocated, before it is linked and before the fallible fdget(), so a later failure unwinds cleanly. Reviewed by: kib Sponsored by: Nvidia networking MFC after: 1 month
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The DEVX_SUBSCRIBE_EVENT redirect path resolved the user's eventfd with fdget(), which on FreeBSD only finds LinuxKPI files. rdma-core creates the eventfd with the native FreeBSD eventfd(2), so the lookup failed and subscription returned EBADF; the delivery side likewise assumed a LinuxKPI-pollable file. Use the LinuxKPI eventfd_ctx API instead: eventfd_ctx_fdget() resolves the native eventfd, eventfd_signal() notifies it, and eventfd_ctx_put() releases it. DEVX async events can then be delivered through a redirect eventfd. Reviewed by: kib Sponsored by: Nvidia networking MFC after: 1 month
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Fixes: https://cgit.freebsd.org/src/commit/?id=fc9dc8482396 ("snd_uaudio: Lock usbd_transfer_start() in uaudio_mixer_ctl_set()") PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296682 Sponsored by: The FreeBSD Foundation MFC after: 3 days
debug: classified in
03-filenames_plain1 by
'sys/dev/'
virtio: Add feature bit definitions up to VirtIO v1.3 Signed-off-by: Faraz Vahedi <kfv@kfv.io> Reviewed-by: ngie Pull-Request: https://github.com/freebsd/freebsd-src/pull/2319
debug: classified in
03-filenames_plain1 by
'sys/dev/'
virtio: Report feature masks on negotiation failure Signed-off-by: Faraz Vahedi <kfv@kfv.io> Reviewed-by: ngie Pull-Request: https://github.com/freebsd/freebsd-src/pull/2319
debug: classified in
03-filenames_plain1 by
'sys/dev/'
virtio: Accept VIRTIO_F_RING_RESET in the modern PCI transport Accept per-virtqueue reset when the device offers it, alongside the V1 flag. Negotiating the feature merely permits the use of per-virtqueue reset and imposes no obligation on a driver that never uses it, while refusing capability-only transport features can make strict devices reject the feature set altogether. No functional change on hosts that do not offer RING_RESET. Signed-off-by: Faraz Vahedi <kfv@kfv.io> Reviewed-by: ngie Pull-Request: https://github.com/freebsd/freebsd-src/pull/2319
debug: classified in
03-filenames_plain1 by
'sys/dev/'
This is to prevent child drivers from using the features returned by previous drivers (in an arbitrary order). None of the existing ones do that, so this is purely defensive. MFC after: 2 weeks Sponsored by: The FreeBSD Foundation
debug: classified in
03-filenames_plain1 by
'sys/dev/'
This is needed for VM_PHYS_TO_PAGE() to work, which is needed for pmap_map_io_transient() to work, which is needed for uiomove_fromphys() to work. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296348 Reported and tested by: Anton Saietskii <vsasjason@gmail.com> Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58274
debug: classified in
03-filenames_plain1 by
'sys/amd64/'
As RX processing is heavier than TX completions processing, swap the order and process TX completions first, in order to avoid starving the completions and causing potential missing TX completions. Submitted by: Ofir Tabachnik <ofirt@amazon.com> MFC after: 2 weeks Sponsored by: Amazon, Inc. Reviewed by: cperciva Differential Revision: https://reviews.freebsd.org/D58239
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Move per-packet counter_enter/counter_exit pairs out of the RX processing loop and batch them into a single update after the loop completes. Previously, each received packet triggered two separate counter_enter/counter_exit blocks -- one for bytes and one for packet count. This commit accumulates totals in local variables and updates all four counters (ring and hw stats for both packets and bytes) in a single counter_enter/counter_exit block after the loop. Also move the stats update to after the refill and LRO flush so that the error path (goto update_stats) and the normal path converge at the same label, avoiding code duplication. Submitted by: David Arinzon <darinzon@amazon.com> MFC after: 2 weeks Sponsored by: Amazon, Inc. Reviewed by: cperciva Differential Revision: https://reviews.freebsd.org/D58240
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Sporadic 'Found a Tx that wasn't completed on time' warnings appear
under sustained TX load, always reporting '1 msecs since last cleanup'
despite the 5-second timeout threshold.
The per-packet TX timestamp uses struct bintime (128 bits: two 64-bit
fields sec and frac) which is read and written non-atomically. A race
exists between the missing TX completion check
(check_missing_comp_in_tx_queue reading the timestamp) and the TX
submit path or cleanup path writing it on another CPU. Since the two
fields are not updated atomically, the check can observe a partially
written timestamp - one field from the old value and one from the new.
This can produce a timestamp with {sec=0, frac=valid}, causing the
check to compute a time offset equal to system uptime and falsely
exceeding the 5-second timeout.
Confirmed by instrumentation showing all occurrences had sec=0 with
valid frac/mbuf, cleanup_running=0, and ticks==last_cleanup_ticks.
Replace struct bintime with sbintime_t (a single 64-bit value) for
tx_buf->timestamp. An aligned 64-bit store/load cannot be torn on
64-bit architectures. Additionally, snapshot the timestamp into a
local variable in the check path to prevent a read-then-read race
where the timestamp could be zeroed between the zero-check and the
offset calculation.
Testing:
On m6i.large (FreeBSD 15.0-RELEASE-p6 amd64, 2 IO queues), two
instances with MTU 1500. Ran iperf -P 20 -u -b 320kpps (CPU
saturated at ~7 Gbps aggregate).
Without the fix: 8 warnings in 6 hours (first at ~72 min).
With the fix: 0 warnings after 20+ hours under identical conditions.
Fixes: https://cgit.freebsd.org/src/commit/?id=9b8d05b8ac78 ("Add support for Amazon Elastic Network Adapter (ENA) NIC")
Submitted by: Gilad Ben Yakov <giladben@amazon.com>
MFC after: 2 weeks
Sponsored by: Amazon, Inc.
Reviewed by: cperciva
Differential Revision: https://reviews.freebsd.org/D58241
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Bug Fixes: * Fix false 'missing TX completions' warnings due to timestamp race * Put taskqueues into correct NUMA domain if !RSS Minor Changes: * Batch RX statistics updates * Swap RX/TX completions cleanup order Submitted by: Arthur Kiyanovski <akiyano@amazon.com> MFC after: 2 weeks Sponsored by: Amazon, Inc. Reviewed by: cperciva Differential Revision: https://reviews.freebsd.org/D58242
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Added structure to allow multiple device to attach to the same driver. Also removed the deprecation warning from the man page. Differential Revision: https://reviews.freebsd.org/D58201 Reviewed by: adrian
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Migrated fwcam to use per-unit-directory child device Differential Revision: https://reviews.freebsd.org/D58202 Reviewed by: adrian
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Migrated fwisound to use per-unit-directory child device Differential Revision: https://reviews.freebsd.org/D58203 Reviewed by: adrian
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Migrated fwdv to use per-unit-directory child device Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58204
debug: classified in
03-filenames_plain1 by
'sys/dev/'
SPL is a no-op on amd64. Real locking is already handled by fc_mtx and per-driver mutexes. Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D58210
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Otherwise we try to disable the wrong IRQ. Fixes: https://cgit.freebsd.org/src/commit/?id=47e073941f4e ("Import the kernel parts of bhyve/arm64") MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/arm64/'
Now that IRQs can properly be disabled by GICD_ICENABLERn, an EOI for a disabled IRQ ends up being lost, since we don't assign it to a list register and don't enable maintenance interrupts for such cases. As a result, we keep the IRQ active, which stops it from ever being delivered again (which would be true even if we supported the active and pending state). Keep disabled but active IRQs around in list registers so we can see the EOI having taken place in a future sync (noting that since we already don't create list registers in active and pending state there are no concerns with causing a disabled IRQ to be delivered). Fixes: https://cgit.freebsd.org/src/commit/?id=47e073941f4e ("Import the kernel parts of bhyve/arm64") MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/arm64/'
dpaa2_ni_init() only enabled the DPNI object; it never pushed the
promiscuous/allmulti state or the multicast filter table to the MC
firmware. The SIOCSIFFLAGS handler ignores flag changes that arrive
while the interface is down, yet still latches them into sc->if_flags,
so a promiscuous mode request made before the first up was silently
lost and could never be applied afterwards: the up path runs
dpaa2_ni_init(), which did not read the flags, and every later
SIOCSIFFLAGS compares against the already-latched value and sees no
change.
This is exactly what happens when if_bridge adds a dpni member while
the dpni is still down, e.g. rc.conf's
create_args_bridge0="... addm dpni0"
running at bridge clone time, before ifconfig_dpni0="up" is processed.
bridge_ioctl_add() puts the member into promiscuous mode at addm time;
the request never reaches the firmware, so the DPNI continues to
hardware-filter unicast destined to other MACs. ifconfig still
reports PROMISC (a stack-level flag), which makes the failure
invisible: the host stays reachable only via the DPNI's own MAC
address (e.g. with net.link.bridge.inherit_mac=1), while bridged
epair/vnet jail traffic is silently dropped on RX.
Reapply both pieces of administrative state after enabling the DPNI,
as other NIC drivers do in their init path. This also restores
multicast memberships joined while the interface was down.
PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=292006
Reported by: jhibbits
Signed-off-by: Nick Price <nick@spun.io>
Reviewed by: jhibbits
Differential Revision: https://reviews.freebsd.org/D58330
debug: classified in
03-filenames_plain1 by
'sys/dev/'
This fixes a build break for i386. Reviewed by: kib, olce, Koine Yuusuke <koinec@yahoo.co.jp> Fixes: https://cgit.freebsd.org/src/commit/?id=87ba088fa310 ("x86/local_apic.c: Add support for installing a thermal interrupt handler") Differential Revision: https://reviews.freebsd.org/D58332
debug: classified in
03-filenames_plain1 by
'sys/i386/'
hwpstate_intel: Fix i386 build Reviewed by: olce Fixes: https://cgit.freebsd.org/src/commit/?id=7b26353a59d6 MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58208
debug: classified in
03-filenames_plain1 by
'sys/x86/'
hwpstate_intel: Minimize ifdef for i386 build Reported by: jrtc27 Fixes: https://cgit.freebsd.org/src/commit/?id=bdc0f7678257 MFC after: 3 days Sponsored by: The FreeBSD Foundation
debug: classified in
03-filenames_plain1 by
'sys/x86/'
aq(4): expand and correct offloads, fix VLAN/multicast filtering Advertise the offloads the hardware already performs, correct the TX descriptor's L3 family selection, and correct the VLAN and multicast receive-filter paths. Offloads: advertise IFCAP_HWCSUM_IPV6 (adding CSUM_IP6_TCP/UDP/TSO to isc_tx_csum_flags) and IFCAP_VLAN_HWTSO, and enable the RX outer (S-VLAN) tag parse mode in aq_hw_offload_set(). TX descriptor L3 family: aq_setup_offloads() derived tx_desc_cmd_ipv4 from CSUM_IP|CSUM_TSO, but CSUM_TSO is (CSUM_IP_TSO|CSUM_IP6_TSO) and tcp_output() sets both bits without regard to address family, so an IPv6 TSO frame matched on CSUM_IP_TSO and went out with the IPv4 header-checksum command set on a frame that carries no IPv4 header. The checksum flags cannot distinguish the family; key the bit off IPI_TX_IPV4 instead, which iflib derives from the parsed ethertype, as the IPI_TX_INTR test below it already does. Plain IPv6 checksum offload was unaffected, as CSUM_IP6_TCP alone never matched the mask. RX VLAN tag stripping: ring init hardwired hardware tag stripping off while the RX path still set M_VLANTAG and the writeback tag for every tagged frame, so a tagged frame arrived with the tag in line while the mbuf claimed it stripped and ether_demux() parsed four bytes short of the payload. Program per-ring stripping from IFCAP_VLAN_HWTAGGING and set M_VLANTAG only under the same capability, so the two states stay coherent. VLAN filter and promiscuous edge cases: filter only when 1..16 VLANs are registered -- with none (or more than the 16 the table holds) fall back to VLAN-promiscuous and pass all tags, rather than dropping every tagged frame against an empty filter table; and keep VLAN-promiscuous set whenever the interface is IFF_PROMISC, so adding or removing a VLAN under promisc does not clear it and start dropping tagged frames. Multicast reconcile: ifdi_multi_set is declarative, but aq_if_multi_set() only added -- shrinking the list left accept-all-multicast latched or stale exact slots enabled, defeating hardware multicast filtering until a reinit. Clear the exact slots before reprogramming the current list, and always drive accept-all-multicast from the current state so a shrink clears it. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58145
debug: classified in
03-filenames_plain1 by
'sys/dev/'
aq(4): drop errored RX frames instead of resetting the interface aq_isc_rxd_pkt_get() returned EBADMSG when a receive descriptor's MAC/receive-error bit (rx_stat bit 0) was set. iflib treats any error from isc_rxd_pkt_get() as a fatal ring fault and answers with IFC_DO_RESET -- a full interface reinitialization. A per-frame receive error is not a ring fault: on a marginal link or cable the Atlantic delivers errored frames continuously, so each one triggered another reset and the interface reset-stormed itself into carrying no traffic instead of merely dropping the bad frames. The Atlantic delivers errored frames to the host by design (Linux drops them in software via buff->is_error), and iflib offers no per-frame error return that isn't a reset. Follow the vmxnet3 model: on a receive error zero the fragment lengths and return success. iflib then discards the packet (assemble_segments() excludes zero-length fragments) while still recycling the descriptors through the refill path -- no reset. Also drop frames flagged with an RX-DMA fault (rdm_err), not just the MAC-error bit; and keep iri_len non-zero on that drop path, since iflib asserts iri_len != 0. The genuinely structural errors -- more segments than isc_rx_nsegments, or a pkt_len inconsistent with the descriptor count -- still return EBADMSG, since those indicate a confused ring where a reset is the right recovery. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58136
debug: classified in
03-filenames_plain1 by
'sys/dev/'
aq(4): honor the kernel RSS policy and add a TX traffic-class helper Align RX steering with the kernel RSS framework and factor out the active-traffic-class count. RSS key and indirection table: on an options RSS kernel the stack owns a canonical hash key and a hash-to-bucket indirection table binding each bucket to a CPU. aq programmed a random arc4rand() key and a plain i % rss_qs table, so the hash it stamped in iri_flowid and the queue it steered a flow to did not match the CPU the stack chose -- defeating RSS affinity. Under #ifdef RSS take the key from rss_getkey() and each entry from rss_get_indirection_to_bucket(), as e1000/ixgbe/ixl do; the non-RSS build keeps the random key and round-robin table. RSS hash-type policy: drop the private hw.aq.enable_rss_udp knob (RDTUN, default on) and add aq_rss_hashconfig(), which under options RSS returns rss_gethashconfig() and otherwise the same UDP-off default. UDP 4-tuple hashing scatters a fragmented datagram's pieces across queues because only the first fragment carries the L4 ports, so it is now off by default and re-enabled the standard way, via net.inet.rss.udp_4tuple, matching ix/ixl/mlx5. On Atlantic 1 the UDP-off action stays the existing L3L4 flow-filter workaround; only its policy source changes. TX traffic-class helper: factor the active-TC count (one per active 8-ring group, capped at HW_ATL_B0_TCS_MAX) out of aq_hw_qos_set() into aq_hw_active_tcs(), so there is a single definition of the policy; the Atlantic 2 RSS redirection table reuses it. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58137
debug: classified in
03-filenames_plain1 by
'sys/dev/'
aq(4): harden the attach, detach, and reset error paths
Correct several attach/detach/reset paths that either swallowed failures
or acted on undefined state.
MSI-X attach-failure double-free: aq_if_msix_intr_assign() freed the
per-RX-ring interrupts in its failure path and then returned an error, so
iflib's IFDI_DETACH freed the same irq structures again --
bus_teardown_intr() on a dangling tag and bus_release_resource() on an
already-released IRQ, panicking a box that should have simply failed to
attach. Let iflib own the teardown; drop the failure-path loop and the
now-dead index bookkeeping.
Detach loop bound: aq_if_detach() freed the per-ring interrupts looping
to isc_nrxqsets while indexing rx_rings[], which is sized by
rx_rings_count; index by rx_rings_count to match every other RX-ring
loop.
AQ_HW_WAIT_FOR final poll: the macro derived its result from the loop
counter rather than the condition, so a condition that became true on the
last iteration reported ETIMEDOUT. Worst for the acquire-on-read
firmware RAM semaphore, which was acquired in hardware but reported as a
timeout. Return based on the last evaluation of the condition.
RBL MAC reset SPI cleanup: mac_soft_reset_rbl() fired the global reset
without first tearing down the SPI/flash interface, so a flash burst in
flight left the SPI bus wedged, the RBL could not re-read flash, and the
reset returned EBUSY -- fatal at attach ("MAC reset failed: 16"). Set
bit 4 of the SPI control register (0x53c) before the global reset, as the
sibling FLB path and the Linux driver do.
Reset failure propagation: aq_hw_reset() discarded fw_ops->reset()'s
return, so a failed attach-time fw2x capability read left fw_caps == 0
permanently and stats silently froze. Propagate the error so the reset
fails and is retried.
aq_hw_init failure propagation: aq_hw_init() discarded
aq_hw_init_tx_path()/aq_hw_init_rx_path() returns and reported success,
bringing the interface up half-initialized; capture both and goto
err_exit (mainly the Atlantic 2 RX action-resolver path, which returns
EBUSY on ART semaphore timeout).
Link-state outputs: aq_hw_get_link_state() left *link_speed and *fc_neg
unwritten on early-return paths, and the caller acts on them
uninitialized, so a transient firmware get_mode() failure could fabricate
a phantom link-up at a garbage speed and program a garbage RX-pause bit.
Initialize both to safe link-down values before calling get_mode().
Reviewed by: adrian
Differential Revision: https://reviews.freebsd.org/D58138
debug: classified in
03-filenames_plain1 by
'sys/dev/'
aq(4): harden the interrupt and MAC-statistics paths
Firmware-statistics accounting and interrupt-routing fixes.
Stats delta underflow: guard the MAC statistics delta accumulation
against counter wrap or a firmware counter reset, so a snapshot smaller
than the previous one does not underflow into a huge spurious delta.
Skip stats on a failed read: aq_update_hw_stats() ignored
aq_hw_mpi_read_stats()'s return and committed the on-stack mbox into
last_stats unconditionally. On a failed read that snapshot is garbage or
zero and poisons the delta baseline (a zeroed snapshot wipes last_stats,
so the next good read double-counts). Check the return and skip the
accumulation and the last_stats commit on failure.
Mailbox/stats separation: struct aq_hw_stats served both as the raw fw1x
MCP mailbox layout and as the driver's canonical stats snapshot, so any
field added to it would silently shift the fw1x mailbox read. Give the
fw1x mailbox its own raw layout in struct aq_hw_fw_mbox and let
aq_hw_stats become purely driver-owned; with the coupling gone, add
first-class aggregate octet fields (brc/btc) that Atlantic 2 B0 firmware
can populate directly. No A1 behavior change. The raw block is a named
struct (aq_fw1x_mbox_stats) with a _Static_assert tying its size to
aq_hw_stats' matching prefix, so the fw1x memcpy cannot silently misalign
if either field list drifts. Also drop the unused FW1X_MPI_STATE_ADR /
FW1X_MPI_CONTROL_ADR macros and the redundant fw1x_get_stats() dpc
assignment that the caller immediately overwrites.
Per-speed interrupt moderation: aq_hw_interrupt_moderation_set()
hardcoded speed_index = 0, so every link speed got the 10G timer pair and
the other rows were dead. Record the negotiated rate and index the
tables by ffs(speed) - 1, reordering the rows to match the
enum aq_fw_link_speed bit positions so the index cannot drift from the
enum. Rename the two per-speed timer tables (AQ_HW_NIC_timers_table_
{rx,tx}_ -> aq_itr_timers_{rx,tx}), function-local static arrays whose
SCREAMING_CASE vendor names read like macros.
Hardware error interrupts: route both hardware error causes (interrupt
map register 0) to the admin vector so they are actually delivered.
Reviewed by: adrian
Differential Revision: https://reviews.freebsd.org/D58139
debug: classified in
03-filenames_plain1 by
'sys/dev/'
aq(4): remove dead code and tidy macros, diagnostics, and naming Non-functional cleanup, with two diagnostic corrections. Dead code: delete leftover commented-out AQ_DBG_ENTER/EXIT/PRINT calls (aq_hw.c, aq_fw2x.c, aq_irq.c, aq_main.c), a commented-out aq_nic_cfg local, the stale old-signature parameter blocks between the ring-init declarations and their bodies (aq_ring.c), a trailing note on a live statement, and the unused DumpHex() vendor debug helper (no callers; its body only compiled under AQ_CFG_DEBUG_LVL > 3). Register-write macros: parenthesize AQ_WRITE_REG_BIT's msk/shift/value arguments so a compound argument cannot mis-bind, give AQ_HW_FLUSH() an explicit hw parameter instead of capturing it from caller scope, and drop the duplicate lowercase aq_hw_write_reg[_bit] aliases (converting the 43 call sites to the uppercase spelling) so there is a single form. Diagnostics: the aq_log* family expanded through the base log macro, which ignored its level and printed unconditionally, while the error traces gated on a debug level that defaulted below LOG_ERR and so were suppressed -- backwards. Gate the base log macro the way the trace one does and default the level to lvl_error, so the once-per-event firmware reset / capability errors are visible by default while the verbose info/dump output stays opt-in. Naming: rename identifiers carried verbatim from the vendor import that do not match style -- names mixing an ALL-CAPS macro-style prefix with a lowercase tail, and a trailing underscore the vendor used as a "file-local" marker in place of static. - dbg_level_ / dbg_categories_ -> aq_dbg_level / aq_dbg_categories: these are real globals (the log/trace macros reference them from every translation unit), so the trailing underscore was never a stand-in for static; give them the aq_ namespace so the driver stops exporting generically-named global symbols. - log_base_ / trace_base_ -> aq_log_base / aq_trace_base: the internal macros behind the aq_log*/trace* families. - bootExitCode / flbStatus -> boot_exit_code / flb_status (aq_fw.c); flb_status now matches the identically-purposed variable already spelled that way in the sibling FLB-reset path. Cosmetic: terminate the ring/HW-init, MSI-X admin-handler, and media-change error messages with a newline so they are not garbled into adjacent dmesg output, and label the per-queue rx_bytes sysctl "RX Octets" (it was copy-pasted "TX Octets"). Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58140
debug: classified in
03-filenames_plain1 by
'sys/dev/'
aq(4): add Atlantic 2 (AQC113) device support
Add support for the Marvell Atlantic 2 (AQC113/114/115/116) controllers,
a new chip generation that is not register-compatible with the Atlantic 1
parts aq(4) supports today. Adapted from the OpenBSD/NetBSD if_aq driver.
Register and device definitions (aq2_hw.h): the firmware handshake
(MIF_BOOT / MCP_HOST_REQ_INT / MIF_HOST_FINISHED), the 0x12000/0x13000
firmware interface windows, and the action-resolver table (ART) that
replaces Atlantic 1's discrete RX filters, plus the Atlantic 2 PCI device
ids and the aq_is_atlantic2() helper. Reserve a chip-feature bit
(AQ_HW_CHIP_ATLANTIC2) and add the aq_hw fields the firmware fills at boot
(ART base index, statistics interface version A0/B0). The per-VLAN-filter
resolver-tag field comes from the Linux driver; the BSD sources never
write it.
Firmware operations (aq_fwa2.c): Atlantic 2 talks to the management CPU
through the 0x12000/0x13000 register windows plus the boot handshake,
rather than Atlantic 1's mailbox in shared RAM. Implement that as a third
aq_firmware_ops vtable (reset, set_mode, get_mode, get_mac_addr,
get_stats); aq_fwa2_reboot() boots the firmware, selects the A2 ops, and
reads the version and ART base index, failing fast on the
crash-init / boot-failed bits. fwa2_set_mode advertises full duplex only
(the media model exposes no half-duplex types) and writes and acks the
link options before raising ACTIVE mode, so a forced media change does not
begin negotiation with a stale rate mask. enum aq_fw_link_speed gains
aq_fw_10M, which Atlantic 2 supports and Atlantic 1 does not.
Probe and attach: list the device ids with their media types and link
speeds (all copper; AQC113* up to 10G, AQC116C to 1G), populate
hw->device_id, and tag the generation with AQ_HW_CHIP_ATLANTIC2 so
IS_CHIP_FEATURE() recognises it uniformly. Branch firmware bring-up and
reset on the generation: aq_hw_init_ucp() and aq_hw_reset() reboot the MCP
instead of the Atlantic 1 RBL/FLB reset -- without a real datapath reset
every stop/init cycle reprograms the rings on a live, desynced RX DMA
engine and the receive path stays dead. aq_hw_init() programs the
Atlantic 2 launch-time clock ratio in place of the Atlantic 1
MRRS / TX-DMA request-limit clamp. Add an AQ_LINK_10M capability bit
(Atlantic 2 links at 10M, Atlantic 1 cannot), offer 10baseT media, and map
IFM_10_T to aq_fw_10M.
With every supported media type now present, replace the per-speed switch
statements in aq_media.c with a single {link bit, fw rate, IFM_* subtype,
Mbit/s} table -- one source of truth for the supported link speeds.
With this an Atlantic 2 card probes, brings up its firmware, reads its
MAC, and negotiates link; the RX action-resolver datapath comes next.
Reviewed by: adrian
Differential Revision: https://reviews.freebsd.org/D58141
debug: classified in
03-filenames_plain1 by
'sys/dev/'
aq(4): program the Atlantic 2 multiqueue datapath
Wire up the Atlantic 2 receive datapath: the action-resolver table (ART),
multiqueue RSS, QoS, and interrupt moderation.
RX action-resolver table: Atlantic 2 replaces Atlantic 1's discrete RX
filter registers with an ART -- hardware computes a per-packet
classification tag, then walks {tag, mask, action} rows to drop, assign a
queue, or assign a TC. aq_hw_art_filter_set() installs one row under the
ART semaphore; aq_hw_init_rx_path() enables the resolver, tags L2
unicast/broadcast, installs the unicast/all-multicast and VLAN drop rows,
and assigns every 802.1p priority to TC 0 (mirroring the Atlantic 1
user-priority map, since our RX side is a single 8-ring group in TC 0).
Tag every enabled VLAN filter in the per-filter resolver-tag field -- a
register the BSD ports never write -- because the VLAN drop row matches
resolver tag 0, so without it all tagged receive was dead under VLAN
filtering. Promiscuous mode disables the drop rows rather than toggling
the Atlantic 1 promiscuous bits; all ART callers surface a semaphore
timeout consistently. The Atlantic 1 RX_TCP_RSS_HASH and TPO2
programming is gated to Atlantic 1.
Multiqueue RSS and QoS: fill Atlantic 2's own per-TC redirection table
(AQ2_RPF_RSS_REDIR), skipping the Atlantic 1 table and its write-enable
handshake. Program Atlantic 2's smaller packet-buffer sizes, its wider
data-TC credit/weight fields, and its ring-to-TC map, using
aq_hw_active_tcs() for the TC loops.
RSS hash types: the Atlantic 2 resolver has per-protocol hash-type enables
in REDIR2, so build the mask from aq_rss_hashconfig() instead of
hardcoding every protocol -- UDP 4-tuple hashing now follows the kernel
policy (off by default) with no L3L4 flow-filter workaround, and
aq_hw_udp_rss_enable() is skipped on Atlantic 2. The kernel-to-hardware
hash-type mapping is a small static lookup table rather than a nine-branch
chain, since the two bit spaces do not share a simple shift.
Tx interrupt moderation: Atlantic 2's per-ring Tx moderation control
register lives at a different address, but its field layout matches the
value the driver already builds, so write that value straight to it; Rx
moderation is shared.
HW-validated on AQC107 <-> AQC113C: TCP RSS spreads across 7/8 RX queues
under 16 parallel flows, rx_err=0.
Reviewed by: adrian
Differential Revision: https://reviews.freebsd.org/D58142
debug: classified in
03-filenames_plain1 by
'sys/dev/'
aq(4): correct Atlantic 2 register access Four Atlantic 2 register-access corrections found in bring-up. B0 aggregate octet counters: the B0 firmware statistics interface reports only aggregate rx/tx good octets, not the per-cast breakdown A0 and Atlantic 1 provide, so every octet sysctl read a permanent zero while frame counters advanced. Populate the aggregate octet fields from the B0 buffer; aq_update_hw_stats() accumulates them directly when the per-cast octets are absent. Drop the duplicate attach-time MCP reboot: aq_hw_mpi_create() already reboots the A2 firmware to read its version and caps, then aq_hw_reset() immediately rebooted it again -- a full MCP restart plus several transaction-id-bracketed window reads, adding attach latency and a duplicate banner. Give aq_hw_reset() a reboot flag and pass reboot=false for A2 at attach; the load-bearing down/stop reboot (which resyncs A2 RX DMA across ifconfig down/up) keeps reboot=true. Skip Atlantic 1 register accesses on Atlantic 2: gate out the 0x7040 Atlantic 1 TPO write (which A2 lacks; already a no-op via the unset TPO2 feature, but Linux hw_atl2 omits it), and guard the aq_hw_mpi_read_stats() direct reads of reg_rx_dma_stat_counter7 (dpc) and the LRO counter (cprc) with !ATLANTIC2 -- those are Atlantic 1 codegen offsets that on Atlantic 2 land on unrelated registers and can report bogus input-drop / LRO counts. HW-validated on AQC107 <-> AQC113C: A1 stats unchanged, A2 IQDROPS stays 0, attach consumes one MCP reboot instead of two, bidirectional iperf3 clean. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58143
debug: classified in
03-filenames_plain1 by
'sys/dev/'
aq(4): observability controls and sysctl/header hygiene Fold the driver's observability and infrastructure work. Make aq_device.h self-contained: it declares struct aq_dev in terms of iflib, bitstring, socket, and ethernet types but included none of the headers that define them, compiling only because every includer happened to pull those first. Include what it uses. No functional change. Make the debug controls per-instance. The debug and debug_categories sysctls were registered per device but pointed at file-scope globals, so writing dev.aq.1.debug also changed dev.aq.0.debug and a card could not be traced in isolation. Move the level and category mask into struct aq_dev, reach them through the aq_dev back-pointer in struct aq_hw (wired up in attach_pre before the first firmware trace and guarded against a NULL deref), emit through device_printf() so each line carries its unit, and seed initial values from per-unit device hints so attach can be traced. Expose the PHY die temperature as dev.aq.N.temperature through a new firmware get_temp op: Atlantic 1 v2 reads it through the mailbox MPI control/state toggle, Atlantic 2 from the phy_health_monitor block in the OUT window (located at 0x13620 and confirmed by its ready bit). Atlantic 1 v1 has no sensor and exposes no node. Because this is the first firmware accessor iflib does not serialise, add a per-instance mutex in struct aq_hw and take it across the v2 read-modify-write in set_mode(), get_stats(), get_mode(), and get_temp(); the v1 and Atlantic 2 paths do not need it and say so. Trace the Atlantic 2 firmware path, which previously emitted nothing at any debug level (aq2_fw.c did not even include aq_dbg.h): the boot handshake, reset policy, MAC address, and link mode set/read, using the existing dbg_init and dbg_fw categories, with the per-poll mode read at detail level. Scope the driver sysctls to a context freed at detach. They were registered on the device newbus context, which newbus tears down only after DEVICE_DETACH returns, yet iflib frees the rings and softc inside DEVICE_DETACH -- a sysctl read racing detach could touch freed memory. Give the driver its own sysctl_ctx_list and free it at the start of aq_if_detach, draining in-flight readers first. Signed-off-by: Nick Price <nick@spun.io> Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58434
debug: classified in
03-filenames_plain1 by
'sys/dev/'
aq(4): PHY thermal-shutdown handling and correctness fixes Fold the thermal-protection work and the correctness fixes that landed alongside it. Report and auto-recover from PHY thermal shutdown. The Atlantic PHYs can autonomously shut down on over-temperature, latching global fault 0x8007 and dropping the link; Atlantic 2 ships this armed, Atlantic 1 disabled. Arm it on Atlantic 1 at interface init (1E.C478.A via the MAC's MDIO controller), and recover from a trip automatically: the admin-status poll detects the fault, logs the shutdown limit and measured temperature, and holds the link down until the PHY cools, then restores it -- Atlantic 1 needs a PHY reset (1E.2681.0) with the MAC firmware running plus a full re-init, Atlantic 2 recovers on the re-init alone. New firmware ops get_phy_fault, phy_reset, thermal_arm, and get_thermal_limit back the state machine in aq_if_update_admin_status(). Make that Atlantic 1 thermal MDIO path address-correct and fail-safe. The direct-MDIO helpers hardcoded the Clause-45 port address to 0, but it is strap-selectable: on a board whose PHY answers elsewhere every thermal op targeted nothing, so arming silently no-oped and the post-trip reset never cleared the latch. Discover the address by scanning ports 0..31 for a PMA/PMD identifier and form it as (phy_id << 5) | mmd, marking it valid only when a PHY actually answers. aq_fw2x_phy_read also returned 0 on a semaphore timeout, indistinguishable from a real 1E.C478 == 0, so thermal_arm could zero live provisioning bits; give the read an error return and gate thermal_arm and get_thermal_limit on it. Bound the multicast filter slot index. aq_mc_filter_apply() programmed slot count + 1 and bailed only at count == AQ_HW_MAC_MAX (33), one address too late, so a 33rd entry raced in between the if_llmaddr_count() snapshot and the if_foreach_llmaddr() walk drove an out-of-bounds MMIO write to slot 33. Fire the guard at AQ_HW_MAC_MAX - 1, and also reject index >= AQ_HW_MAC_MAX in aq_hw_mac_addr_set() where the slot becomes an RPF register offset. Correctness and safety fixes: initialize the sysctl context in attach_pre so the iflib fail-path detach cannot sysctl_ctx_free() an uninitialized list (a page fault when MSI/MSI-X is denied); range-check the Atlantic 2 action-resolver table index, taken verbatim from a firmware-supplied base, before writing the ART registers; and accumulate statistics deltas as unsigned, since AQ_SDELTA discarded a forward delta of 2^31 or more at 10G across a stretched admin poll. Signed-off-by: Nick Price <nick@spun.io> Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58435
debug: classified in
03-filenames_plain1 by
'sys/dev/'
aq(4): clean up diagnostics and remove dead code
Non-functional cleanup, no change in behavior.
device_printf() already prefixes each line with the device name, so the
inline "atlantic:" token in the status and error messages produced a
doubled prefix and diverged from the trace macros; remove it so all
output carries one uniform "aqN:" prefix. Compile the RX/TX descriptor
tracers only when AQ_CFG_DEBUG_LVL > 2 and make them no-op macros
otherwise, so the default build no longer pays a cross-TU call plus
argument evaluation per descriptor.
Drop enum aq_dev_state, struct aq_rx_filters, and struct aq_vlan_tag,
which have no remaining references now that VLAN state lives in a
bitstr_t. Replace the four identical aq_sysctl_print_{tx,rx}_{head,tail}
handlers, each carrying a dead write path on a read-only oid, with one
aq_sysctl_print_ring_ptr that selects the accessor from arg2. Reduce the
thermal and PHY-recovery comments to single terse lines that keep the
load-bearing register numbers and the A1-vs-A2 recovery difference.
Signed-off-by: Nick Price <nick@spun.io>
Reviewed by: adrian
Differential Revision: https://reviews.freebsd.org/D58436
debug: classified in
03-filenames_plain1 by
'sys/dev/'
aq(4): mailbox, flow-control and firmware error-handling fixes Fold the whole-driver-review correctness and hardening fixes for the firmware and hardware layers. Advance the firmware-mailbox address per word in aq_hw_fw_downld_dwords(): on B1 silicon each loop iteration waits for the mailbox address register to differ from the expected address, but it was set once and never moved, so after the first word every wait returned immediately and read stale data. Advance it four bytes per word. B0 is unaffected (it polls the busy bit). The same function also left err set to ETIMEDOUT after successfully force-recovering the RAM CPU semaphore; the transfer loop is guarded by "--cnt && !err", so it ran zero iterations and returned a timeout with an untouched buffer, making the recovery path dead code. aq_hw_get_mac_permanent() ignored the get_mac_addr() error and then examined a buffer the firmware op never wrote on failure. A fresh softc is zero, so the "invalid address" test fired, a random locally administered MAC was substituted, and err was overwritten with 0 -- a transient mailbox failure produced a card that attached with a different MAC every boot. Fail instead; the random-address fallback still covers a genuinely blank or multicast burned-in address. aq_fw1x_reset() discarded the same download's return value and then read transaction_id out of an uninitialized stack struct, so propagate that error too. Encode RX-only flow control as PAUSE|ASYM_PAUSE rather than PAUSE alone: firmware 2.x/3.x has no independent RX-only bit, so the old encoding advertised symmetric pause when RX-only was requested. The MPI_INIT path also never cleared the pause bits before OR-ing in the requested ones, so flow control could be enabled and never disabled; clear them first, as the Atlantic 2 and Linux implementations do. Reject single-vector MSI in aq_if_attach_post() the same way legacy INTx is rejected: ift_legacy_intr is NULL, so no driver filter would acknowledge the not-clear-on-read, auto-masked device interrupt status; every supported Atlantic device provides MSI-X. Propagate firmware and MDIO errors instead of discarding them. The fw2x MDIO primitive returned a data word with no way to report a controller timeout; give aq_fw2x_mdio_op() a status return and a data out-parameter, propagate it through phy_write/read/reset/thermal_arm, and stop advancing the thermal recovery state machine when a PHY reset fails. Use that error to end the PHY address scan early: aq_fw2x_init_phy_id() probed all 32 MDIO ports even when the controller itself was timing out, spending up to ten seconds under fw_mtx and the iflib context lock. aq_fw2x_reset() also drove the shared MIF mailbox without fw_mtx, unlike every other fw2x mailbox user, so it could interleave with the temperature sysctl and load the capability mask from the wrong window. aq_hw_mpi_set() can return ETIMEDOUT when the Atlantic 2 shared firmware buffer is not acknowledged; aq_hw_init() now aborts through its error path rather than enabling rings with an unaccepted link state, and aq_if_init() logs the later link-speed error. Retry a failed initialization instead of leaving the link down. ifdi_init has no return value, so iflib marks the interface running once aq_if_init() returns; a propagated firmware-ack failure would otherwise leave it running with no initialized hardware and no recovery. Record the failure and retry from the admin task via iflib_request_reset(), paced by the once-per-second timer, giving up after a bounded number of attempts. Ring and queue start failures are deliberately left to the existing diagnostic, since they leave the remaining queues usable. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58437
debug: classified in
03-filenames_plain1 by
'sys/dev/'
aq(4): interface lifecycle and link-state fixes aq_if_init() programmed the address captured at attach, so an address set with "ifconfig ether" or by lagg(4) enslavement was never written to unicast filter slot 0: the interface transmitted with the new address but the MAC still filtered on the old one, so it received nothing. Copy the current if_getlladdr() the way the other iflib drivers do. The link state could latch UP forever. aq_if_stop() cleared linkup before calling aq_if_update_admin_status(), which suppressed the LINK_STATE_DOWN transition the "link was UP" branch would have made. Announce the down transition directly from aq_if_stop() instead, and do not poll the admin status there at all: the MAC has just been reset, so a stale link reading would re-announce the link as up. The admin task itself had to stop reporting a link on a stopped interface. iflib runs it while either IFF_DRV_RUNNING or IFF_DRV_OACTIVE is set, and iflib_stop() sets OACTIVE, so the task kept polling after the stop and re-announced LINK_STATE_UP behind the driver's back. Treat a non-running interface as having no link. A lagg(4) parent otherwise keeps hashing flows onto a port whose carrier is gone, because LAGG_PORTACTIVE tests if_link_state together with IFF_UP. Stop the rest of the task there as well: the PHY thermal poll and the initialization retry both end in iflib_request_reset(), and _task_fn_admin() acts on that with no test of its own, so either could re-initialize an interface the operator had just taken down. aq_if_update_admin_status() also only reacted to transitions in and out of zero speed, so an autoneg downshift that kept the link up left if_baudrate, ifmedia, RX pause and interrupt moderation programmed for the old speed. Track the announced speed and re-run that work when it changes. aq_if_suspend() resets the MAC and stops the rings, but iflib_device_suspend() only calls IFDI_SUSPEND and never stops the interface, leaving IFF_DRV_RUNNING set over a suspended device. Clear it. Signed-off-by: Nick Price <nick@spun.io> Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58473
debug: classified in
03-filenames_plain1 by
'sys/dev/'
re(4): quiesce RTL8168G+ and reset before freeing buffers in re_stop() The STOPREQ command written by re_stop() is not defined for RTL8168G and later; issuing it can wedge the MAC. Replace it on those parts with the vendor-documented sequence: * settle delay * bounded poll for Tx queue empty * clear TE/RE * then bounded poll of the MCU command register (0xD3) FIFO-empty bits. Also reset the controller before the Rx/Tx buffer free: a controller that has not quiesced keeps DMAing stale, still-owned descriptors pointing at freed mbufs (use-after-free under INVARIANTS, cross-NIC mbuf corruption reported in the PR). Adds the RL_MCU_* register definitions. All waits are bounded; error paths only. * iperf3 --bidir at line rate against RTL8168H (XID 0x541); previously wedged the controller until power cycle, with the quiesce the reset path recovers. * Deployed in production on an RTL8168H fleet since 2026-07-01. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58276 PR: kern/https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=166724
debug: classified in
03-filenames_plain1 by
'sys/dev/'
re(4): re-arm the Tx doorbell when re_txeof() leaves a non-empty ring On PCIe parts a TxPoll request can be lost when packets are queued in quick succession, leaving owned descriptors with no transfer in progress until the watchdog fires. re_txeof() runs from the interrupt handlers, re_tick() and re_watchdog(), so re-writing TXSTART whenever the ring is still non-empty turns a potential 5-second stall into at most one tick. One register write on a path that already took an interrupt; fast path untouched. * Sustained bidirectional load on RTL8168H; no Tx stalls, no throughput regression at 941 Mbps line rate. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58277 PR: kern/https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=166724
debug: classified in
03-filenames_plain1 by
'sys/dev/'
re(4): recover Tx completions whose MSI was swallowed in re_intr_msi() A Tx completion that raises a status bit between the ISR ack at the top of re_intr_msi() and the IMR re-enable at the bottom is never re-signalled: these controllers do not re-assert MSI for an already-set status bit (this is why hw.re.msi_disable is a known workaround in the PR). Re-read ISR before re-enabling; if a Tx bit is pending, ack just that bit, reap the ring and restart the queue. Rx bits are deliberately left set so they re-arm the interrupt normally and Rx moderation state is untouched. Also flush the posted IMR write. Mirrors what the INTx path already achieves via the loop in re_intr(). * MSI interrupt mode on RTL8168H under load; "missed Tx interrupts" watchdog recoveries no longer occur. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58278 PR: kern/https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=166724
debug: classified in
03-filenames_plain1 by
'sys/dev/'
re(4): harden re_watchdog() recovery and log controller state Distinguish the two failure classes from the PR in a single log line (ring indices, ISR/IMR, TXCFG, interrupt mode): lost interrupt vs genuine DMA stall. Bail out instead of re-initializing when the controller reads back all-ones (fallen off the bus; reinit cannot help). Re-assert the driver's existing ASPM-disabled policy before reinit, since firmware/power transitions re-arming L0s/L1 is a documented stall trigger. Diagnostics-only on the recovered path; no fast-path change. * Field diagnostics running on an RTL8168H production fleet; the log format distinguishes lost-doorbell / DMA-stall / dead-controller without a debug build. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58279 PR: kern/https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=166724
debug: classified in
03-filenames_plain1 by
'sys/dev/'
re(4): add hw.re.aspm_disable loader tunable re(4) has unconditionally disabled ASPM L0s/L1 and CLKREQ at attach for years; on laptops this costs 200mW+ (requested by adrian@ in the PR). Make it a tunable following the existing hw.re.* pattern: * default 1 keeps today's behavior; * 0 preserves the firmware-configured ASPM state at attach and skips the watchdog re-assert from the previous revision. Documented in re.4. * Verified on RTL8168H (XID 0x541): with hw.re.aspm_disable=0, attach no longer logs "ASPM disabled" and pciconf -lcb shows the firmware Link Control state preserved -- including Clock PM, which the unconditional code previously cleared. * Default (1) is behaviorally identical to the current driver. * Note the tunable also stops the driver clearing CLKREQ, a small power win even where firmware leaves L0s/L1 off. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58280 PR: kern/https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=166724
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Provide pc_small_core for i386 too to fix an i386 build break from x86 code referring to it. It won't be set. Reviewed by: aokblast, kib Fixes: https://cgit.freebsd.org/src/commit/?id=7b26353a59d6 ("hwpstate_intel: Disable package control on hybrid CPU") Differential Revision: https://reviews.freebsd.org/D58335
debug: classified in
03-filenames_plain1 by
'sys/i386/'
bus_{read,write}_8 are macro wrappers around the corresponding bus_space
functions in sys/bus.h, so implementing bus_{read,write}_8 won't work.
Implement the underlying bus_space function instead.
Reviewed by: jrtc27, rlibby
Fixes: https://cgit.freebsd.org/src/commit/?id=9313f6b01485
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D58301
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The accumulated count of a process-mode counting PMC is kept in a 64-bit software counter and seeded into the hardware counter at every context switch in. Hardware counters are narrower than that - each PMC class discovers and records its own counter width, e.g. 48 bits on current x86 (queried from CPUID on Intel, architectural on AMD) - so once the accumulated count approaches the end of the hardware counter range, the counter wraps during a time slice and the value read back at switch out is smaller than the value seeded. The increment was computed assuming a full 64-bit counter: on INVARIANTS kernels a long enough counting run panics with "negative increment" the moment the accumulated count first crosses the hardware counter range, and on other kernels the totals silently lose a full counter range per wrap. Compute the increment modulo the per-class hardware counter width instead, in both places that accumulate switch-out deltas. Reviewed by: adrian MFC after: 2 weeks Assisted-by: Claude Code (Fable 5) Differential Revision: https://reviews.freebsd.org/D58340
debug: classified in
03-filenames_plain1 by
'sys/dev/'
A process-mode PMC's runcount tracks how many CPUs currently have it
loaded in hardware. It is decremented only by the context-switch-out
and process-exit reclaim paths, both of which the scheduler invokes
only for processes flagged P_HWPMC. Detaching a target that still has
the PMC live in hardware dropped the target and cleared P_HWPMC without
taking the PMC off the hardware or dropping the runcount reference, so
the reference leaked. A subsequent release then spun in
pmc_wait_for_pmc_idle() forever waiting for the runcount to reach zero:
on an INVARIANTS kernel this panics ("waiting too long for pmc to be
free"), otherwise it is an unkillable loop holding the hwpmc lock. Any
process able to allocate a PMC can trigger this by attaching a counting
PMC to itself and detaching it before releasing.
Take the PMC off the hardware and drop the runcount reference as part
of detaching, before P_HWPMC is cleared: reclaim it from the detaching
thread's own CPU directly, and, when the detach removes the PMC's last
target, wait for any references held by the target's other threads to
drain while P_HWPMC is still set (they can no longer reload it).
Reviewed by: adrian
MFC after: 2 weeks
Assisted-by: Claude Code (Fable 5)
Differential Revision: https://reviews.freebsd.org/D58342
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Some UVC devices (e.g. Logitech C920) expose more than 8 Processing Unit descriptors, causing "too many PU descriptors found!" errors. Increase both limits from 8 to 32 to accommodate such devices.
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Import the device quirk system from OpenBSD to handle UVC devices that need special handling. This includes: - UVIDEO_FLAG_ISIGHT_STREAM_HEADER: non-standard streaming header - UVIDEO_FLAG_REATTACH: needs reattach after firmware upload - UVIDEO_FLAG_VENDOR_CLASS: incorrectly reports as vendor class - UVIDEO_FLAG_NOATTACH: device not supported - UVIDEO_FLAG_FORMAT_INDEX_IN_BMHINT: format index in bmHint Add quirks table with known devices and lookup function. Add iSight stream header decoder for Apple iSight cameras. Obtained from: OpenBSD
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D56005
debug: classified in
03-filenames_plain1 by
'sys/x86/'
A bunch of drivers weren't properly converted. I mistakenly put a call to ieee80211_output_seqno_assign() wherever the crypto header was added, which isn't exactly correct. There are plenty of drivers which don't share enough of their raw and normal transmit path code for that to hold true. So after some manual review, it looks like I've captured the places (outside of iwn(4) which I committed earlier) where I missed ieee80211_output_seqno_assign() calls. * For bwi(4) and bwn(4) I refactored it out into a place that is common enough and happens in the same lock hold window, so it's serialised. * For the rest, it's just plain missing from the raw path. Locally tested: * ural(4) * ral(4) * bwi(4) Differential Revision: https://reviews.freebsd.org/D58098
debug: classified in
03-filenames_plain1 by
'sys/dev/'
firewire: add warn-only CRC validation for CSR ROM directories Implemented crom_crc_valid() helper to validate IEEE 1394 config ROM CRC-16 checksums. Skipped root header CRC validation since csrhdr.crc_len cover the entire ROM body which is not fully read at header parse time. Per-directory CRC checks below catch corruption where it needed. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58307
debug: classified in
03-filenames_plain1 by
'sys/dev/'
firewire: drain pending xfers after callout stop in detach Removes a TODO that predates the existing drain call. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58308
debug: classified in
03-filenames_plain1 by
'sys/dev/'
firewire: force root change when root node is not cycle master capable When a FireWire bus resets, all devices negotiate who is the new boss. when we detect the root node can't be cycle master, we send a PHY config packet that forces a reelection. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58309
debug: classified in
03-filenames_plain1 by
'sys/dev/'
firewire: remove dead code across the subsystem Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58310
debug: classified in
03-filenames_plain1 by
'sys/dev/'
firewire: replace magic numbers with named constants No functional change. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58311
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Sponsored by: Klara, Inc. Sponsored by: NetApp, Inc. MFC after: 1 week Fixes: https://cgit.freebsd.org/src/commit/?id=6d0001d44490 ("nvme: add support for DIOCGIDENT") Reviewed by: bnovkov, imp Differential Revision: https://reviews.freebsd.org/D58357
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The uvideo driver freed the mmap buffer (contigmalloc'd) in several paths (VIDIOC_STREAMOFF, last close, detach) without coordinating with the lifetime of existing user-space mmap mappings. This could lead to use-after-free when user-space continued to access the mapped memory after the backing pages had been freed. Fix this by switching from the simple d_mmap callback to d_mmap_single with custom cdev_pager_ops, and by attaching the contig buffer to a single shared vm_object created at REQBUFS time: - uvideo_reqbufs() allocates a uvideo_mmap_state (independent of the softc) and a shared vm_object via cdev_pager_allocate() that spans the whole buffer; the softc holds one reference to it. - uvideo_cdev_mmap_single() simply hands out additional references to that shared object; the requested offset selects which buffer is mapped. The VM system tracks mapping lifetime through the object reference count, so no per-mapping bookkeeping is needed. - uvideo_pg_ctor/uvideo_pg_dtor validate the mapping and free the contig buffer together with the state when the last reference (softc's own or a user mapping) is dropped. - uvideo_pg_fault installs a fictitious page for the backing physical address, following the canonical device-pager pattern: update the passed-in page in place when it is already fictitious, otherwise allocate a fake page and vm_page_replace() the busy placeholder, so that dev_pager_dealloc() does not deadlock. - uvideo_vs_free_frame() drops the softc's reference instead of contigfree()'ing directly; if mappings still exist the buffer stays alive until the last uvideo_pg_dtor(). - VIDIOC_STREAMOFF no longer frees the buffer (per V4L2 spec). - Last close always releases the buffer (deferred if mappings exist). - The mmap_state outlives the softc, so the pager dtor can safely free the buffer even after device detach. Reported by: 章鱼哥 (@aipyapp) (www.aipyaipy.com) Reported by: Chris Jarrett-Davies of the OpenAI Codex Security Team
debug: classified in
03-filenames_plain1 by
'sys/dev/'
This fixes an issue with the Solo2 (and likely some of the Nitrokey
family) where hangs would occur with OpenSSH- it issues a CANCEL prior
to closing the device unconditionally, and without draining the read
endpoint we end up seeing the response to that CANCEL the next time
OpenSSH tries to connect. This throws the entire command/response
sequence out of whack.
This call used to break Yubikeys in some situations, but the fix that
landed in 28d85db46b48 ("xhci: Do not drop and add bits in xhci") seems
to have addressed that- presumably we sometimes end up stopping the
command and desyncing at the controller level. This probably implies
that we need a SYNCWRITE HID quirk, but that requires a little more work
in usbhid_sync_xfer() and this doesn't seem to cause any problems in
normal usage.
Reviewed by: aokblast, wulf
Differential Revision: https://reviews.freebsd.org/D58199
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Replace bare EINVAL in AMD/IBS allocation and config-validation with EXTERROR(), so a failed pmc(3) allocation names the check and value. Register HWPMC_AMD in exterr_cat.h and the generated filenames.h. Signed-off-by: Andre Silva <andasilv@amd.com> Reviewed by: Ali Mashtizadeh <ali@mashtizadeh.com>, mhorne Sponsored by: AMD Pull Request: https://github.com/freebsd/freebsd-src/pull/2180
debug: classified in
05-summary-prefix by 'hwpmc:'
Annotate validation failures in the PMC syscall handlers (allocate, attach, read/write) with EXTERROR(), so pmc(3) callers see which precondition failed, not a bare errno. Register HWPMC_MOD in exterr_cat.h and the generated filenames.h. Signed-off-by: Andre Silva <andasilv@amd.com> Reviewed by: Ali Mashtizadeh <ali@mashtizadeh.com>, mhorne Sponsored by: AMD Pull Request: https://github.com/freebsd/freebsd-src/pull/2180
debug: classified in
05-summary-prefix by 'hwpmc:'
vtnet: Retry feature negotiation without offloads A device is permitted to reject an otherwise valid subset of its offered features by refusing to accept FEATURES_OK (VirtIO v1.3, 2.2.2). Apple's Virtualization.framework does this in practice; it treats the offered CSUM/TSO offloads as all-or-nothing, while vtnet's default request contains only part of that group because of hw.vtnet.lro_disable that would drop the guest TSO bits, thus negotiation fails and the device does not attach. If FEATURES_OK is rejected, retry the negotiation once with every offload-related feature stripped. Changing the feature set after a failed FEATURES_OK requires re-initialising from device reset (VirtIO v1.3, 3.1.1), so the retry goes through virtio_reinit(). A NIC without offloads is preferable to no NIC at all. Devices that accept the initial feature set are unaffected, while those that also reject the reduced set continue to fail attachment as before. Signed-off-by: Faraz Vahedi <kfv@kfv.io> Reviewed by: adrian Pull Request: https://github.com/freebsd/freebsd-src/pull/2322
debug: classified in
03-filenames_plain1 by
'sys/dev/'
vtnet: Implement VIRTIO_NET_F_GUEST_ANNOUNCE When the device sets VIRTIO_NET_S_ANNOUNCE in the config status field, for example after a VM migrates to a new host, announce the interface's presence on the network so peers and switches learn the new attachment point, then acknowledge the request with the VIRTIO_NET_CTRL_ANNOUNCE_ACK control command, as per VirtIO v1.3, 5.1.6.5.4. The announcement raises iflladdr_event: the stack sends gratuitous ARPs and unsolicited neighbor advertisements for the interface's addresses, and stacked interfaces such as vlan(4) propagate the event and announce theirs as well. The event handlers may sleep, so the work is deferred from the config change interrupt to a task on taskqueue_thread; that context also allows the acknowledgement to be skipped safely if the interface was stopped in the meantime, in which case the device keeps the bit set and the request is re-delivered with the next config change interrupt. Signed-off-by: Faraz Vahedi <kfv@kfv.io> Reviewed by: adrian Pull Request: https://github.com/freebsd/freebsd-src/pull/2322
debug: classified in
03-filenames_plain1 by
'sys/dev/'
vtnet: Accept VIRTIO_NET_F_CTRL_RX_EXTRA Although the driver does not issue the extra receive-mode commands accepting the feature is harmless and some devices, notably Apple's Virtualization.framework, offer their control-queue features as a group and refuse FEATURES_OK unless the whole set is acknowledged. Signed-off-by: Faraz Vahedi <kfv@kfv.io> Reviewed by: adrian Pull Request: https://github.com/freebsd/freebsd-src/pull/2322
debug: classified in
03-filenames_plain1 by
'sys/dev/'
These kernconfs were missed in the previous commit. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=289236 Reviewed by: kib Fixes: https://cgit.freebsd.org/src/commit/?id=f38cbefef8090f3363e5685c5a3b30ffbf1d3ad0 MFC after: 3 days Sponsored by: The FreeBSD Foundation
debug: classified in
03-filenames_plain1 by
'sys/powerpc/'
uvideo: replace contigmalloc with OBJT_PHYS vm_object for mmap buffer Allocate the mmap buffer via phys_pager_allocate() and map it into kernel space with vm_map_find()/vm_map_wire(), instead of a custom cdev_pager backed by contigmalloc. phys_pager_allocate() is required over a bare vm_object_allocate(OBJT_PHYS) to initialise un_pager.phys.ops, otherwise phys_pager_getpages() NULL-derefs during vm_map_wire(). Reviewed by: markj Reported by: markj Differential Revision: https://reviews.freebsd.org/D58394
debug: classified in
03-filenames_plain1 by
'sys/dev/'
uvideo: validate frame size before mmap buffer allocation dwMaxVideoFrameSize comes from the USB probe/commit response and is not validated. reqbufs() computed buf_size_total with signed int arithmetic and no bound, so a bogus value could wrap the product to a small size and yield a too-small buffer with a huge sc_mmap_buffer_size, causing out-of-bounds writes from the USB transfer callbacks. Bound the frame size against sc_max_fbuf_size and use overflow-checked size_t arithmetic for the total and per-buffer offsets. Reported by: emaste
debug: classified in
03-filenames_plain1 by
'sys/dev/'
uvideo: lock the mmap queue and read path qbuf(), dqbuf() and read() manipulated sc_mmap_q / sc_mmap_cur / sc_frames_ready without sc_mtx, racing with the USB transfer callbacks (producer) that run under the mutex. This could corrupt the queue or trigger use-after-free. Take sc_mtx around qbuf(), use mtx_sleep() and protect the queue operations in dqbuf(), and use mtx_sleep() with a snapshot of sc_fsize in read(). Also reject S_FMT and S_PARM with EBUSY while streaming: both re-negotiate the probe/commit controls with the device, which disrupts the active USB transfers (a second client opening the device would otherwise freeze the first one's stream).
debug: classified in
03-filenames_plain1 by
'sys/dev/'
uvideo: bounds-check frame interval reads against bLength Frame interval data is read from device-supplied frame descriptors whose bLength may be shorter than the number of intervals declared by bFrameIntervalType. The continuous branch of uvideo_enum_fivals() read three intervals unconditionally, and the discrete branch checked the pointer but not the four bytes that UGETDW() reads, so a short or malformed descriptor could read past bLength and leak adjacent kernel memory to userspace. uvideo_vs_parse_desc_frame_max_rate() had the same class of off-by-up-to-three-bytes read. Compute the available bytes from bLength and validate before each read. Reported by: emaste
debug: classified in
03-filenames_plain1 by
'sys/dev/'
uvideo: track streaming ownership per-fd and free buffers on STREAMOFF The driver shared a single streaming state and buffer pool across all open file descriptors, so a second client (e.g. another browser tab) could disrupt the first: its cleanup STREAMOFF would tear down the active stream, and stale buffers prevented re-acquisition. Add per-fd state via devfs cdevpriv tracking whether this fd started streaming. STREAMOFF and close from a non-streaming fd are no-ops. STREAMOFF from the streaming fd stops the stream and frees the buffers so that a new fd can re-acquire the camera. DQBUF returns EPIPE immediately when buffers are freed instead of waiting for a timeout.
debug: classified in
03-filenames_plain1 by
'sys/dev/'
uvideo: fix close/detach race on streaming teardown detach() stopped streaming and called uvideo_vs_close() before destroy_dev(), so a concurrent close() could race the teardown and call uvideo_vs_close() a second time (double usbd_transfer_unsetup), and mtx_destroy() could race a close still holding sc_mtx. sc_streaming was also read without the lock in both paths. Reorder detach() to call destroy_dev() first so all in-flight cdev methods drain before any teardown. Read sc_streaming under sc_mtx in both detach() and the last-close safety net.
debug: classified in
03-filenames_plain1 by
'sys/dev/'
uvideo: use size_t for sc_mmap_count and loop index in reqbufs
debug: classified in
03-filenames_plain1 by
'sys/dev/'
uvideo: validate frame descriptors and fix integer overflows in size computation
debug: classified in
03-filenames_plain1 by
'sys/dev/'
uvideo: fix printf type Reported by: vishwin
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Reviewed by: aokblast, kib, olce Differential Revision: https://reviews.freebsd.org/D58336
debug: classified in
03-filenames_plain1 by
'sys/x86/'
Some UAC2 devices expose a single Clock Source entity that is shared between their playback and capture interfaces (it appears in both the output and input clock bitmaps). On such a device uaudio(4) programs the sample rate for both directions when a stream starts. If playback runs at a 44.1 kHz-family rate while the idle capture channel is left at its 48 kHz-family default, the capture SET_CUR(UA20_CS_SAM_FREQ_CONTROL) is issued after the playback one and overwrites the rate on the shared clock. The device then runs at ~48 kHz while the playback stream carries 44.1 kHz data. Consuming samples faster than they arrive, the device repeatedly runs out of data, loses sync with the playback stream, and re-locks onto it (audible dropouts, front-panel play/idle flicker). The 48 kHz family is unaffected because both directions then agree on the rate. Fix it in three parts: - Add a shared-clock guard: before issuing SET_CUR to a clock id, if that clock is shared between playback and capture and the other direction is already streaming at a different rate, skip it. The first active stream owns the clock; a later one follows it. - When the recording channel is auto-started only as a source of jitter information for asynchronous playback, align its nominal rate to the playback rate before starting it, so it neither reprograms the shared clock to a conflicting rate nor produces mismatched frame sizes. - Always submit the explicit-feedback SYNC transfer so dev.pcm.%d.feedback_rate stays live as a diagnostic even when a capture stream is present. Reproduced on an OKTO RESEARCH DAC8 STEREO (0x152a:0x88c5), whose vestigial capture interface never streams; the same device plays the 44.1 kHz family correctly under Linux's snd-usb-audio. As a side effect, this patch also fixes the sample rate bug mentioned in the BUGS section of sound(4)'s man page, where a device needs to have the same sample rate set for both playback and recording in order to work properly. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=295933 Assisted-By: Claude Opus 4.8 (claude-opus-4-8) Signed-off-by: giacomo <delleceste@gmail.com> MFC after: 2 weeks Reviewed by: christos Pull-Request: https://github.com/freebsd/freebsd-src/pull/2323
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The fixed 128 KiB secondary buffer cap dates from stereo-sized streams. High channel-count or high sample-width OSS streams can consume most of that budget in one graph quantum, leaving too little room for capture catch-up or playback headroom. Keep 128 KiB as the low-rate floor, but derive the effective soft-ring cap from the channel byte rate, clamped to 4 MiB. Use that per-channel cap when resizing the soft buffer and when clamping SNDCTL_DSP_SETFRAGMENT requests. Also clamp SNDCTL_DSP_LOW_WATER to the current soft-buffer size so an impossible readiness threshold cannot make poll/select wait forever. MFC after: 3 weeks Reviewed by: christos Differential Revision: https://reviews.freebsd.org/D58064
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Prevent infinite loop in uvideo_vs_negotiation() when a USB camera reports step=0 in its continuous frame interval descriptor. Cast fbuf_size calculation to uint64_t to avoid int overflow for large width/height/bpp combinations. Reported by: emaste
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Don't coerce errors to EINVAL, which isn't correct for mtx_sleep's failure cases. Sponsored by: The FreeBSD Foundation
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Our USB TRB buildup subroutines were previously difficult to follow. In setup_generic_chain_sub(), the routine filled TRB packets based on the characteristics passed by the caller and the current state (for example, whether the TRB was the last in the TD). However, most TRB types (except Normal TRBs) cannot be shared across TDs. To simplify the logic, refactor xhci_setup_generic() so that TRBs are constructed according to their transfer type, with dedicated helper functions for each TRB type. Sponsored by: The FreeBSD Foundation Assisted-by: Claude Code (Opus 4.6, Opus 4.8(1M) and Sonet 5.0) Differential Revision: https://reviews.freebsd.org/D57130
debug: classified in
03-filenames_plain1 by
'sys/dev/'
When a USB HID device triggers identify, the grandparent is usbhid on a USB hub. Calling iicbus_get_addr() on a non-iicbus device hits a KASSERT panic. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58432
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Currently, USB request not distinguished different error and always return EIO. However, some error are recoverable or ignorable in userspace. Therefore, we preserve the meaning of different error to userspace then allow userspace to decide how to use the return error. Reviewed by: adrian Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D52244
debug: Commit manually moved from "unknown" to "hardware".
Reviewed by: markj MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D56311
debug: classified in
03-filenames_plain1 by
'sys/x86/'
e1000: Defer link-up notification until after TSO reset em_automask_tso() changes the enabled TSO capabilities when the link moves between 10/100 and 1000 Mb/s. A running interface must be reinitialized to apply the new capability set. Do not publish LINK_STATE_UP until the requested iflib reset has completed. Replace link_active with an explicit state machine that distinguishes the physical link, its publication to iflib, and an outstanding reset barrier. Preserve that barrier across a link flap with DOWN_RESET_PENDING, and only publish DOWN if UP was previously published. Only request a reset for a running interface or for an initialization while the interface is administratively up. In other states the next initialization will apply the capability changes, avoiding a reset request that iflib's admin task could discard. Reviewed by: Faraz Vahedi <kfv@kfv.io> Fixes: https://cgit.freebsd.org/src/commit/?id=2ddf24f8f525 ("e1000: Automask TSO on lem(4)/em(4) 10/100 Ethernet") MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: fix 82574 MSI-X interrupt throttling em_newitr() and the per-queue interrupt_rate sysctl both tested que->msix to decide whether an 82574 is running in MSI-X mode. 0 is a valid MSI-X vector so queue 0 was misclassified as legacy/MSI. Test sc->intr_type == IFLIB_INTR_MSIX instead. While here, index the tx EITR read by tque->msix rather than tque->me so it matches the register em_newitr() actually writes; the two differ once tx_num_queues exceeds rx_num_queues. Also seed que->itr_setting in em_initialize_receive_unit() with the rate the hardware was just programmed with. Otherwise an itr_setting left over from AIM across an interface re-init makes the change detection in em_newitr() suppress the write that would restore it, leaving the hardware at the default rate while software believes otherwise. Fixes: https://cgit.freebsd.org/src/commit/?id=3e501ef89667 ("e1000: Re-add AIM") MFC after: 3 days
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: fix rx accounting for multi-descriptor packets The receive paths accumulate ri->iri_len across the descriptors making up a packet, then add that running total to rxr->rx_bytes on every iteration of the loop. A packet spanning descriptors of length l1, l2 and l3 thus contributes 3*l1 + 2*l2 + l3 instead of l1 + l2 + l3. Single descriptor packets, the common case, are accounted correctly, so this only shows up on jumbo frames. Add the per descriptor length instead. iflib memsets the if_rxd_info before each isc_rxd_pkt_get() call, so summing len gives the same total as the final iri_len, and the frame error path that returns without incrementing rx_packets keeps counting bytes exactly as before. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: make AIM counter sampling coherent Sample free-running counters by delta instead of clearing them from the interrupt filter, which can race their producers. Publish byte and packet counts together at the TX and RX doorbells so each sample is coherent. Aggregate every TX ring assigned to the interrupt vector so unequal RX and TX queue counts are safe. Count RX bytes only after a frame is accepted. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: synchronize interrupt moderation state Keep the saved EITR and PBA values synchronized with hardware across reinitialization. Correct EITR encoding, decoding, and MSI-X register selection, and reject nonpositive fallback rates. Treat only sub-gigabit links as sub-gigabit and apply the packet-buffer fallback without permanently disabling AIM. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: restore packet-size AIM Restore the packet-size calculation introduced in a69ed8dfb381 and used by igb(4) until the iflib conversion in f2d6ace4a684. It derives interrupt holdoff from average packet size, so RSS queue count does not change its behavior. The calculation follows the pre-iflib code. Retain the current normal and low-latency rate caps, and keep the current setting when an interval has no usable sample. Fixes: https://cgit.freebsd.org/src/commit/?id=3e501ef89667 ("e1000: Re-add AIM") MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: count TSO wire segments in the AIM counters The transmit paths billed one packet of ipi_len bytes per request. For TSO that is the whole unsegmented payload, up to 64KB, so the average size the moderation calculation sees is not a size that appears on the wire. Count the segments the hardware will put on the wire and the header each of them carries. Non-TSO accounting is unchanged. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: Retry transient MDIC failures on modern PCH Some Meteor Lake and newer systems sporadically fail an MDIC PHY transaction while the MAC and PHY clocks synchronize. Retry twice before reporting the transaction failure. Disable retries around PHY interface transitions where an MDI error is expected. Preserve and restore the configured retry count on every exit from those flows. This follows DPDK commit bdca22d62ff0, extended to the PTP and NVP PCH types. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: Reconfigure modern PCH K1 clock synchronization Meteor Lake and newer PCH generations can lose packets while the MAC and PHY clocks synchronize. Move K1 power-down to P1 and extend the PHY K1 exit timeout before PHY access and after reset. Use the longer 1 Gb/s PLL clock-gate timeout added by Linux so K1 can remain enabled without the power penalty of disabling it. Apply the workaround through the newer PTP and NVP generations. This follows DPDK commits ba54bdc79d94 and d88ef2356ecc, with the longer exit time observed in Linux 578294b8b60d. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: Compare decoded PCH LTR latencies The LTR encoding combines a value and a nonlinear scale, so encoded values cannot be compared directly. Decode both the device latency and the platform maximum before deciding whether to clamp the request. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: Allow more time for PCH ULP exit Firmware may take up to one second to unconfigure ULP, and affected Lenovo systems have required nearly two seconds. Allow 2.5 seconds before treating the transition as a PHY failure. This extends DPDK commit 7aa4c34581a5 using the field-tested bound from Linux commit 3cf31b1a9eff. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: Check PHY control register reads Do not modify a zero-initialized PHY control value when its preceding read failed. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
igc: fix RX accounting for multi-descriptor packets The receive path adds the running packet length to rx_bytes for every descriptor. A packet spanning descriptors of length l1, l2, and l3 is therefore counted as 3*l1 + 2*l2 + l3. Add each descriptor length once. Single-descriptor accounting remains unchanged. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
igc: make AIM counter sampling coherent Sample free-running counters by delta instead of clearing them from the interrupt filter, which can race their producers. Publish byte and packet counts together at the TX and RX doorbells so each sample is coherent. Aggregate every TX ring assigned to the interrupt vector so unequal RX and TX queue counts are safe. Count RX bytes only after a frame is accepted. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
igc: synchronize interrupt moderation state Keep the saved EITR value synchronized with hardware across reinitialization. Correct EITR encoding, decoding, and MSI-X register selection, and reject nonpositive fallback rates. Apply the packet-buffer fallback without permanently disabling AIM. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
igc: use packet-size AIM Use the packet-size calculation introduced for igb(4) in a69ed8dfb381 and retained there until the iflib conversion in f2d6ace4a684. It derives interrupt holdoff from average packet size, so RSS queue count does not change its behavior. The calculation follows the pre-iflib igb code. Retain igc's normal and low-latency rate caps, and keep the current setting when an interval has no usable sample. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
igc: count TSO wire segments in the AIM counters The transmit path bills one packet of ipi_len bytes per request. For TSO that is the whole unsegmented payload, up to 64 KiB, rather than a packet size that appears on the wire. Count the segments the hardware emits and the header carried by each segment. Non-TSO accounting is unchanged. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
No functional change intended. Sponsored by: The FreeBSD Foundation MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Previously, multiple frames of xfers are split into many tds. In the refactor process, we forget to consider this. The td builder is already allocate with enough numbers of tds. What we need to do is to fill the normal trbs for muiltiple tds when building trbs. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297053 Tested by: phk, oleglelchuk@gmail.com Fixes: https://cgit.freebsd.org/src/commit/?id=e0b235ecd4fa ("xhci: Refactor xhci_generic_setup code") Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58465
debug: classified in
03-filenames_plain1 by
'sys/dev/'
It is better to propagate it to pcm_register(), and later to the device drivers, than to simply ignore it and return ENXIO. Sponsored by: The FreeBSD Foundation MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Sponsored by: The FreeBSD Foundation MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
In align_abort() and tag_check_abort(), if we got a fault while in kernel, do not panic if a fault handler has been provided. We may get such a fault when trying to read or write userland data, it can at least happen with _umtx_op() if an unaligned pointer is provided. Instead, just let the fault handler deal with it. MFC After: 1 week Approved by: andrew Differential Revision: https://reviews.freebsd.org/D58426
debug: classified in
03-filenames_plain1 by
'sys/arm64/'
specialreg.h is the tree's MSR registry and already carries the Intel RAPL group. Add the AMD RAPL package/core energy and unit MSRs here so the hwpmc RAPL class can reference them without a private driver copy. Use the names Linux's msr-index.h gives these registers. Reviewed by: mhorne, adrian, Ali Mashtizadeh <ali@mashtizadeh.com> MFC after: 3 days Sponsored by: AMD Differential Revision: https://reviews.freebsd.org/D58027
debug: classified in
03-filenames_plain1 by
'sys/x86/'
Add hwpmc_rapl.c/.h implementing PMC_CLASS_RAPL, a read-only system-scope class modeled on TSC and wired into x86 AMD and Intel MD init. A per-vendor MSR table covers AMD/Hygon and Intel; energy is reported in microjoules, with the Intel server 2^-16 J DRAM unit handled and 32-bit wraps recovered into a 64-bit accumulator. The overflow guard follows the PMC lifetime: armed on the first allocated PMC, callout_drain()d on the last release, and each tick only rendezvouses CPUs holding one. Per-CPU spin locks guard the accumulator against torn reads on i386. PMC_CAP_DOMWIDE lets pmcstat(8) allocate one counter per NUMA domain instead of per CPU. Reviewed by: mhorne, Ali Mashtizadeh <ali@mashtizadeh.com> Sponsored by: AMD Differential Revision: https://reviews.freebsd.org/D58028
debug: classified in
03-filenames_plain1 by '['sys/amd64/',
'sys/dev/', 'sys/i386/', 'sys/sys/pmc.h']'
Register PMC_CLASS_RAPL in libpmc: event table, allocator, class-table descriptor, and the event-name/class-listing lookups, all x86-guarded and modeled on the TSC class. Energy events are read-only and unqualified. The class prefix (RAPL-) supplies the friendly spelling, so pmcstat -S rapl-energy-pkg resolves to the canonical ENERGY_PKG event. Add a pmc.rapl.3 manual page documenting the events, counter scope, the microjoule unit and wrap handling, and the NUMA/package domain mapping; link it from pmc.3. Reviewed by: mhorne Discussed with: Ali Mashtizadeh <ali@mashtizadeh.com> Sponsored by: AMD Differential Revision: https://reviews.freebsd.org/D58029
debug: classified in
03-filenames_plain1 by
'lib/libpmc/'
Neither of these options are checked in the file and cdefs.h should not be included explicitly. No functional change. Sponsored by: The FreeBSD Foundation
debug: classified in
03-filenames_plain1 by
'sys/dev/'
amd_allocate_pmc() chose the pmu-events code path whenever pmc_cpuid was non-empty, and rejected any allocation lacking PMC_F_EV_PMU. But pmc_cpuid is set for every AMD CPU, while the pmu-events tables only cover Zen and later. On older families (K8, Bobcat, Jaguar/16h, Bulldozer) libpmc finds no pmu-events entry and falls back to the legacy path, which never sets PMC_F_EV_PMU. Reviewed by: mhorne Approved by: mhorne MFC after: 1 week MFC to: stable/14, stable/15 Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D58468
debug: classified in
03-filenames_plain1 by
'sys/dev/'
{em,igb}_determine_rsstype() mapped only the TCP and bare-IP RSS descriptor
types; the UDP types returned M_HASHTYPE_NONE.
The hardware does hash UDP, but with a NONE hashtype iflib skips its
flowid-based TX queue spread, so all forwarded UDP egressed on a single queue
and serialized transmit on one core.
Add the three UDP cases (IPV4_UDP, IPV6_UDP, IPV6_UDP_EX) so egress spreads
across all TX queues.
Reviewed by: kbowling, gallatin
Approved by: kbowling
MFC after: 1 week
MFC to: stable/14, stable/15
Sponsored by: Netflix
Differential Revision: https://reviews.freebsd.org/D58513
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Add a QUIRK_EMPTY_NAMESPACE_CHANGED_LOG quirk which indicates that the nvme controller may not properly populate the namespace-changed log page. If we receive a NVME_LOG_CHANGED_NAMESPACE page for a device with this quirk and the page is empty, probe all of the namespaces rather than none of them. Reviewed by: imp MFC after: 1 week Sponsored by: Amazon Differential Revision: https://reviews.freebsd.org/D58231
debug: classified in
03-filenames_plain1 by
'sys/dev/'
This controller exhibits QUIRK_EMPTY_NAMESPACE_CHANGED_LOG behaviour. A bug report has been filed with the vendor. Reviewed by: imp MFC after: 1 week Sponsored by: Amazon Differential Revision: https://reviews.freebsd.org/D58232
debug: classified in
03-filenames_plain1 by
'sys/dev/'
In particular, handle authentication errors due to bad MACs when decrypting packets. Since the current dispatch code assumes synchronous OCF sessions by design, explicitly reject any created OCF session that is not synchronous. Software sessions are always synchronous in practice, so this should be a nop. Approved by: so Security: FreeBSD-SA-26:52.if_wg Security: CVE-2026-58085 Reviewed by: markj Sponsored by: Chelsio Communications
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Nexus-attached driver that discovers and parses coreboot's LBIO tables from physical memory. Exposes firmware metadata (version, build info, mainboard, serial config, TSC frequency, CBMEM entries) via sysctl hw.coreboot.*, the firmware console ring buffer via /dev/coreboot_console, and structured CBMEM entry access via /dev/cbmem ioctl interface. Tested on: - Qotom Q535G6 (Kabylake) - Intel NUC D54250WYK (Haswell) - Intel NUC D33217GKE (Ivy Bridge) - Dell 3100 2-in-1 (Gabbiter) - Dell 3100 (Fleex) - Lenovo IdeaPad 320s - Lenovo ThinkPad T480 - HP Chromebook 11 G4 - HP Chromebook 11 G5 - HP Chromebook 11 G6 EE - HP Chromebook 14 G4 - HP Chromebook 14 G5 - HP Chromebook x360 11 G1 EE - HP Chromebook x360 11 G2 EE - HP Chromebook x360 14 G1 - Acer C720 - Acer Chromebook 11 - Lenovo N22 Reviewed by: ngie, kib, adrian Differential Revision: https://reviews.freebsd.org/D55649
debug: Commit manually moved from "unknown" to "hardware".
Intel Apollo Lake SDXC controller reports a Slot Type of "Embedded Slot for One Device" in SDHCI_CAPABILITIES bits, even when the slot is a removable card reader. This caused 48 timeouts before the boot sequence resumed. Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D58467
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Update the shared e1000 PF/VF mailbox interfaces for an in-tree igb SR-IOV implementation. Intel FreeBSD igb-2.5.31 and DPDK provide the older PF/VF mailbox baseline. The retained PF mailbox read and explicit unlock operation follow a simple Linux igb parameter addition to make PF mailbox acquisition nonblocking so the driver can retry outside the shared primitive. Treating a CTS-less E1000_PF_CONTROL_MSG as a reset follows DPDK. Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Use each ring's physical queue index for initialization, MSI-X routing, register dumps, sysctls, and debug output instead of assuming that its logical array index is also its hardware index. This is a no-op for the normal queue layout. A later SR-IOV change moves the PF ring to hardware queue num_vfs, so its hardware ID then differs from logical queue zero. Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
A non-zero VF device number does not always require ARI. The Intel 82576 and I350 [1] explicitly support a non-ARI layout that places VFs on the next bus. Check every requested VF RID and reject a non-zero device only when it is on the PF bus. This retains the ARI guard for invalid same-bus layouts while permitting the documented second-bus layout. [1] Intel I350 Datasheet, sections 7.8.2.6.1.2, 9.6.4.6 Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
pci_iov_config() programs NumVFs before validating the final VF RID layout and allocating all generic resources. A subsequent error ran the driver uninit callback but left the hardware NumVFs register programmed while the software VF count returned to zero. Clear NumVFs in the error path after the driver uninit callback, matching normal SR-IOV teardown ordering. This prevents stale hardware state after a failed configuration and permits a clean retry. MFC after: 1 week Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Register the 82576 and I350 VF PCI IDs under a separate igbv driver while continuing to share the igb datapath implementation. Follow the ixv driver split and give the VF context IFLIB_IS_VF so iflib does not apply the PF SR-IOV detach guard to a child VF. Program VTIVAR_MISC in the VF low byte so mailbox and reset notifications reach the VF admin vector. The split will become increasingly obvious as bug fixes land, trying to bias everything with if (sc->vf_ifp) everywhere is error prone in two directions. This breaks existing naming/configurations and cannot be MFCed as-is. I have no plans of adapting it to prior branches at the moment but it may be possible. Relnotes: yes Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
I350 loopback receive descriptors report VLAN tags byte-swapped for both PFs and VFs. The receive path handled the PF device types but omitted e1000_vfadapt_i350, causing an admitted VF VLAN packet to be delivered untagged to the VF parent. Include the I350 VF type in the existing correction. This matches the dedicated IGB_RXQ_FLAG_LB_BSWAP_VLAN handling in DPDK igbvf. MFC after: 1 week Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The register-dump sysctl is installed before iflib allocates the queue arrays and remains visible while they are freed. Return ENXIO outside the queue lifetime instead of dereferencing a NULL or stale array. Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Add the PCI IOV schema and PF control plane for up to seven VFs with one hardware queue per pool. Implement VF mailbox handling, MAC and VLAN assignment, multicast filtering, promiscuity policy, anti-spoofing, malicious-driver recovery, reset replay, and queue lifecycle management. The basic SR-IOV and VMDq PF implementation follows DPDK Intel e1000 code, including PF pool selection, one queue per pool, mailbox dispatch, and VF enablement. Intel FreeBSD igb-2.5.31 supplies the older driver baseline. Linux igb and the Intel SDMs clear up lifecycle, isolation, reset, and family-specific details absent from DPDK. Enabling IOV requires the PF to attach with one TX and RX queue. Systems whose defaults select RSS queues must set the documented iflib queue override tunables before attach. Only 82576 and I350 support SR-IOV in silicon. The series has been extensively tested on I350, including thowing boundaries at the PCI BAR that shipping drivers will never. Still, think carefully before reaching for this in critical environments. Relnotes: yes Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Disable each igb-class transmit and receive queue and flush before changing its descriptor-ring registers. Restore the head and tail indices that Intel documents as surviving a VF reset. Use the igb queue-enable control instead of programming legacy TXDCTL granularity, low-water, and reserved bits that do not belong to the 82575 and later. Sponsored by: BBOX.io MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
igbv: Isolate VF policy and validate its registers Give igb virtual functions a separate ifdi method table and move VF-specific attach, reset, queue, interrupt, and diagnostic policy to if_igbv.c. Keep shared descriptor-ring mechanisms in if_em.c. Derive VF identity from IFLIB_IS_VF and assert that hardware identification agrees. Under INVARIANTS, validate normal VF CSR accesses against the sparse 82576 and I350 VF register maps. Stop shared setup from accessing PF-only controls. Require MSI-X and defer VF sysctls until attach succeeds so failed attachment cannot leave handlers pointing at freed driver state. Advertise only VF capabilities, run adaptive moderation without the PF receive-buffer guard, enable SRRCTL.DROP_EN, and provide a VF-safe diagnostic register view. The moved implementation is the existing FreeBSD code. Register model was cross-checked against the Intel datasheets and other Intel drivers. Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
igbv: Improve VF mailbox and status behavior Treat VF media as fixed 1000baseT full duplex and report PF not ready and generated MAC fallback states during attach. After a successful reset handshake, reconcile a PF rejected MAC back into the ifnet. If the PF is unavailable, defer MAC, multicast, VLAN, LPE, and promiscuity replay until CTS is restored. Track a rejected VLAN removal separately so leaked traffic remains tagged until reset proves that the stale hardware filter is gone. Baseline VF counters at attach, collect the four loopback packet and octet counters with rollover-safe deltas, and account software RX checksum offload results. Preserve accumulated statistics across PF resets by rebasing the raw hardware counters, and sample them while physical link is down because VF loopback can remain active. Retain the 82576 VFMPRC hardware statistic, but do not read it on I350 VFs because specification update errata 31 says it is unavailable. Clear PF owned flow control state and reset a link down VF when queued transmit descriptors must be flushed. Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
igbv: Support secondary unicast filters Support the Linux igbvf secondary-MAC mailbox subprotocol, used by Linux guests running MacVTap. Replay up to three non-primary unicast addresses after reset and whenever the address list changes, subject to PF allow-set-mac policy. Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
igb: Stop writing the legacy TADV register TADV is an em-class interrupt delay register and is absent from the 82575 and later register model. The igb attach path does not expose or initialize that control, but transmit initialization still wrote its zero valued storage into a reserved queue-window offset. Apply the same igb_mac_min boundary already used for TIDV and the absolute-delay sysctls. MFC after: 1 week Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
igb: Update only changed IOV multicast hashes Build the aggregate PF/VF multicast bitmap in software and compare it with the e1000 MTA shadow. Write only registers whose desired value changed, while forcing a complete write after PF reset invalidates the hardware table. This bounds alternating VF multicast updates without NACKing them. Linux igbvf and DPDK ignore multicast reply status, so a command-rate limiter could otherwise acknowledge configuration while leaving hardware state stale. Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
igb: Update only changed IOV VLAN filters Keep the full VFTA/VLVF software recomputation and clear-map-set ordering, but compare each phase against the authoritative old value. Write only VFTA words and VLVF slots whose effective contents change. I350 uses its software VFTA shadow because erratum 20 makes live reads unreliable; an invalid shadow forces a complete clear before sparse restoration. 82576 continues to diff against live VFTA reads. Add SDT probes for every logical write phase and the final software images so hardware tests can verify exact elision counts. On my I350 DUT, the old full table path averaged 819 us across 31 VLAN removals versus about 79 us for the PF statistics sweep. Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
igb: Rate-limit VF VLAN rebuild requests Give each VF a burst of 64 VLAN additions and refill it at eight additions per second. Removals remain unrestricted, idempotent requests consume nothing, and trusted PF-wide initialization replenishes the burst while guest resets do not. Checks VLVF capacity before charging a token. Do not apply this policy to multicast requests because Linux igbvf and DPDK ignore their reply status; aggregate MTA write elision bounds those updates instead. Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Mailbox and link interrupts share iflib admin service with the periodic timer. Mark timer-driven passes explicitly and run the hardware statistics sweep only for those samples instead of repeating 66 PF MMIO reads for every VF mailbox message. DTrace on the I350 DUT measured the PF sweep at about 79 us on average. The normal hz/2 timer continues to extend clear-on-read counters safely; exported counters may trail hardware by up to 500 ms. Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
A PF mailbox NACK does not distinguish the SR-IOV VLAN request rate limit from permanent VLVF exhaustion. Preserve desired VLAN membership and retry four additions per 500 ms timer tick, matching the PF sustained allowance. Bound the whole recovery batch to eight seconds from its first failure and consolidate restore diagnostics, so a full table cannot create a permanent mailbox poller or repeated per-VID log bursts. Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Pass the VF generation through the CSR accessors so the validator can distinguish the sparse 82576 and I350 register maps. Admit the queue-zero RXCTRL, TXCTRL, TDWBAL, TDWBAH, and VFPSRTYPE registers exposed by both families. 82576 exposes VFMPRC at 0xf3c. I350 erratum 31 makes its corrected 0xf38 address inaccessible to a VF, so reject both I350 spellings while retaining read access on 82576. Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
82576 and I350 VFLR leave the VF queue configuration unchanged. A VF can program transmit head write-back and leave its DMA destination for a later VF owner; mainstream VF drivers do not overwrite TDWBAL/H. Disable every receive and transmit queue assigned to the VF, wait for the enable bits to clear, then clear SRRCTL, PSRTYPE, RXCTRL, TXCTRL, and TDWBAL/H. Spin briefly for the normal transition, then sleep at 100 microsecond intervals with an approximately 1 ms bound. This prevents a VF that keeps asserting QUEUE_ENABLE from busy-waiting the PF context lock for 10 ms. If a queue does not quiesce, leave the VF disabled and NACK its reset rather than programming an active queue. Rate-limit this diagnostic independently from mailbox and malicious-driver notifications. I350 maps pool n to queue n. 82576 assigns physical queues n and n+8 to VF n, so sanitize both queues while clearing per-pool PSRTYPE once. An incoming VF initializes its active ring base, head, and tail while enabling each queue. This is also required by malicious-driver recovery, which deliberately does not assert VTCTRL.RST because doing so would discard the VF's admin-vector routing before the PF can notify it. This implements Software Clarification 3 from the 82576 and I350 specification updates. Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
82576 and I350 VFLR leave queue configuration unchanged. A previous VF owner can therefore leave a transmit head-writeback DMA destination and other queue policy for the next guest. After each reset attempt, disable all exposed VF queues and wait for their enable bits to clear before clearing SRRCTL, VFPSRTYPE, RXCTRL, TXCTRL, and TDWBAL/H. Spin briefly and then sleep until the bounded queue-disable deadline. iflib cannot report initialization failure and marks an interface running after its init callback returns. On sanitation failure, keep interrupts disabled and use the deferred admin task to clear RUNNING. Retry after 100 and 500 ms; after three total failures, leave the interface down until another administrative initialization starts a new bounded attempt set. igbv uses queue zero on both families, but 82576 exposes a second VF queue whose retained state must also be cleared. Extend the INVARIANTS register validator for only those queue-one CSRs and only on 82576. This implements the VF side of Software Clarification 3 from the 82576 and I350 specification updates. It also means an igbv guest does not depend on its PF to sanitize a previous VF owner's state. Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
amd64: do not allow to set reserved bits in MXCSR for ptrace(PT_SETFPREGS) Also do not mask bits in the mxcsr_mask. It is ignored by FRSTOR/XRSTOR. Reported by: markj Reviewed by: jhb, markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58548
debug: classified in
03-filenames_plain1 by
'sys/amd64/'
ptrace: Propagate errors from set_fpregs() Otherwise ptrace(PT_SETREGSET) will not return errors to userspace. Fixes: https://cgit.freebsd.org/src/commit/?id=cef05c5a62ba ("amd64: do not allow to set reserved bits in MXCSR for ptrace(PT_SETFPREGS)") Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D58577
debug: classified in
04-filenames_plain2 by 'sys/'
debug: moved to hardware
because 'Need to be grouped with
cef05c5a62ba63eda222eed083972bfaa1449ac2'
Reported by: jhb Reviewed by: jhb, jrtc27 Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58550
debug: classified in
03-filenames_plain1 by
'sys/amd64/'
Some conventional PCI e1000 configurations hang when given DMA addresses above 4 GB, particularly on systems using AMD HyperTransport-to-PCI bridges. Linux has restricted e1000 to DMA32 in PCI mode since 2011 for the same failure class in commit e508be174ad36b0cf9b324cd04978c2b13c21502. Set iflib's DMA width after determining the negotiated bus type. This covers descriptor and packet-buffer mappings while preserving 64-bit DMA for PCI-X and PCIe devices and providing a conditional tunable. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297064 Reported by: Alexander Leidinger <netchild@FreeBSD.org> Tested by: Alexander Leidinger <netchild@FreeBSD.org> MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Add register/bit definitions for the L1 PM substates capability (PCIZ_L1PM) to pcireg.h. Signed-off-by: Michael Adler <madler@tapil.com> MFC after: 1 week Pull-Request: https://github.com/freebsd/freebsd-src/pull/2318
debug: classified in
03-filenames_plain1 by
'sys/dev/'
I226 parts advertise support for the PCIe L1.2 link substate, but a
hardware erratum makes the exit latency from that low-power state
longer than the packet buffer can absorb under load. This stalls the
inbound packet stream. Disabling ASPM system-wide (BIOS or OS ASPM
policy) does not fix it. The L1.2 enable bit must be cleared directly
in the device's own PCIe L1 PM extended capability.
Add igc_is_device_id_i226() to identify affected parts and
igc_disable_broken_aspm_l1_2() to clear the ASPM L1.2 enable bit
on attach and after resume, since PCIe config space can be
reset across a suspend/resume cycle.
Adapted from the Linux igc driver:
0325143b59c6 igc: disable L1.2 PCI-E link substate to avoid
performance issue
1468c1f97cf3 igc: fix disabling L1.2 PCI-E link substate on I226
on init
Signed-off-by: Michael Adler <madler@tapil.com>
PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=279245
Reviewed by: Jim Thompson
MFC after: 1 week
Pull-Request: https://github.com/freebsd/freebsd-src/pull/2318
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: isolate VF reset state IXGBE_VF_INDEX() selects a 32-VF register bank. PFMBMEM() selects one mailbox per VF, while ixgbe_toggle_txdctl() calculates queue offsets from a VF number. Passing the bank index aliases VF1-31 to VF0 and VF32-63 to VF1. Resetting one VF can therefore clear the peer mailbox and leave its transmit queues disabled. The VF raises its reset event before posting its mailbox request. The PF checks reset events before mailbox messages. If both are pending, clearing PFMBMEM during generic reset handling can erase the request before ixgbe_read_mbx() consumes it. Clear the mailbox only from the reset-message handler after the request has been read. Use the VF number for queue toggling and document that API contract. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: respect peer mailbox ownership A VF currently treats an existing VFU bit as a successful acquisition, while the PF checks its own PFU bit before claiming the mailbox. Check both the local and peer ownership bits before setting local ownership. This prevents same-side callers from sharing the mailbox and avoids an acquisition attempt while the peer owns it. VFLR does not clear VFMAILBOX.VFU. Clear stale VF ownership and cached mailbox status after the reset indication settles and before sending the reset request, so the ownership check cannot strand a reinitialized VF. Adapt only the live ownership checks from Intel ix 3.4.39. Do not import its upgraded-mailbox changes, which are not active in FreeBSD. Obtained from: Intel ix 3.4.39 MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: fail fast on VF-held PF mailboxes The active PF mailbox operations use the legacy helpers. The mailbox API import changed check_for_msg into a read-only probe and added up to 2,000 500-microsecond lock retries. If a VF leaves VFU set, the PF cannot acquire the lock, busy-waits for up to one second, and leaves VFREQ pending so the delay can repeat. Give the legacy checker its old consume-on-check behavior so a failed read does not leave VFREQ asserted. If VFU is already set, fail immediately instead of retrying, while preserving retries for PF-side contention. Do not force RVFU, which would discard peer transaction state. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: enforce configured VF anti-spoofing The SR-IOV schema advertises MAC anti-spoofing and enables it by default, but the VF configuration was never consumed and the hardware policy remained disabled. Record the configured policy and apply MAC and VLAN anti-spoofing throughout VF initialization and reset. On X550-family devices, also protect the LLDP and flow-control Ethertypes and enable per-VF spoof-event accounting. Remove the driver-owned state during SR-IOV teardown. Adapt the anti-spoof configuration lifecycle used by igb(4) in a2ed165f0049 to the ixgbe hardware controls. MFC after: 1 week Relnotes: yes
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: preserve VLAN ownership with SR-IOV The VF VLAN capability is checked but never granted, and no SR-IOV configuration property exposes the existing default-VLAN support. PF VLAN updates also replace VFTA registers from a PF-only shadow, erasing live VF filters. Expose access VLAN and trunk policy through the IOV schema. Track each VF VLAN as desired state, restore the administrative VLAN after reset, and use the native VLVF helper for incremental PF and VF ownership changes. Keep VLAN filtering enabled while SR-IOV is active. When PF hardware filtering is disabled, admit every VLAN to the PF without bypassing per-pool VF isolation. Reconstruct VLVF and the shared VFTA from PF and VF desired state after reset or a filtering-mode transition, and restore PF-only state on teardown. When the last VF leaves a VLAN still owned by the PF, free its VLVF slot while retaining the shared VFTA bit. This prevents a trunk VF from exhausting the 64-entry VLVF table by cycling VLAN memberships. Adapt the VLAN ownership model introduced for igb(4) in a2ed165f0049 to ixgbe's native VLVF machinery. Match Linux receive semantics by exposing a stripped VLAN tag only when that VID was registered by the VF. A PF-assigned port VLAN is an administrative tag and must be delivered to the VF as untagged traffic; otherwise the stack dispatches it to a nonexistent VLAN interface and access-VLAN receive traffic is blackholed. MFC after: 1 week Relnotes: yes
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Preserve priority-tagged traffic with SR-IOV VID 0 carries only 802.1p priority and does not identify VLAN membership. Keep VFTA bit zero in the persistent PF shadow table so reset and SR-IOV replay admit priority-tagged frames while VLAN filtering is enabled. In virtualization mode, also reserve VLVF slot zero and restore PF and eligible VF pool memberships. A VFTA hit alone admits the tag globally but does not deliver it to the correct pools. This matches the priority-tag treatment in em/igb. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: enforce VF promiscuity and multicast policy The allow-promisc IOV property is advertised but ignored, and the PF rejects the xcast request used by modern VFs. Negotiate mailbox APIs 1.2 and 1.3, implement pool-scoped xcast modes, and require allow-promisc for requested all-multicast or unicast-promiscuous modes. The VF mailbox can carry only 30 multicast hashes. When ixv has a larger list, request the API 1.2 all-multicast xcast mode instead of extending the legacy SET_MULTICAST message. The PF grants that fallback only to VFs configured with allow-promisc; otherwise ixv reports that only the first 30 addresses are active. Reset xcast state with the VF and have ixv replay the mode implied by its interface flags after multicast updates. Follow DPDK's ixgbe API 1.2/1.3 xcast contract, with allow-promisc policy adapted from igb(4) in a2ed165f0049. MFC after: 1 week Relnotes: yes
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: implement VF secondary MAC filters The PF advertises the legacy SET_MACVLAN mailbox request but always rejects it. The request installs secondary unicast addresses. Allocate an owned RAR pool for VF secondary addresses, reserve low entries for PF filters, and place VF-primary addresses at the top of the usable RAR range. Reject address collisions and cap each VF at three secondary filters so one guest cannot exhaust the shared table. Clear secondary filters on VF or PF reset and on SR-IOV teardown. This hardware can anti-spoof only the VF primary source address. Reject secondary filters while MAC anti-spoofing is configured, so installing them requires an explicit administrative policy choice. Report optional filter-table allocation failure without disabling SR-IOV. Adapt the owned-RAR allocation and reset-cleanup model from igb(4) in a2ed165f0049 to DPDK's ixgbe SET_MACVLAN mailbox semantics. MFC after: 1 week Relnotes: yes
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Preserve VF jumbo frame size across PF resets sc->max_frame_size represents the largest frame requested by the PF or an active VF. The MTU callback replaces it with the PF frame size, so a subsequent reinitialization can program MHADD below an active VF's jumbo-frame request. Recompute the aggregate before hardware initialization and use it when programming MHADD. Recompute after each VF LPE request as well, so a reduced request can lower the hardware limit when no other function needs the previous value. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Restore missed packet accounting missed_rx and total_missed_rx are never populated. As a result, the GPRC erratum workaround does not remove missed packets and iqdrops always remains zero. The rx_missed_packets sysctl and input-error total also expose only MPC bank zero. Read and accumulate all eight MPC banks. Use the interval total to correct GPRC and the cumulative total for iqdrops, input errors, and the aggregate sysctl. This matches DPDK's coverage of the hardware banks. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Validate EEPROM checksum section bounds The generic checksum walker trusts NVM section pointers and lengths and iterates with a 16-bit index. A corrupt section that crosses the end of the EEPROM can wrap the index and leave the driver in an effectively unbounded read loop during attach. Validate each non-empty section against the discovered EEPROM word size before reading it, and use widened arithmetic for the inclusive end and iterator. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Compare flow control against requested mode The flow-control sysctl represents the configured policy, while current_mode is the mode negotiated with the link partner. Comparing a new request with current_mode can needlessly reprogram an unchanged policy or skip a requested policy change that happens to match the current negotiation result. Compare with requested_mode before deciding that no update is needed. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
if_foreach_llmaddr() adds each callback return value to its running count. Returning the incremented count made the address indices grow as 0, 1, 3, 7, and so on, eventually writing beyond the multicast address array. Return one address per callback and stop copying when the array is full, matching the ixv-1.6.12 driver. Fixes: https://cgit.freebsd.org/src/commit/?id=ff06a8dbb677 ("Mechanically convert ixgbe(4) to IfAPI") MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DPDK commit message net/ixgbe/base: add missing buffer copy for ACI Add the missing buffer copy in ixgbe_aci_send_cmd(). The retry path saves the original descriptor and allocates storage for the command buffer so both can be restored before another attempt. It did not copy the original command buffer into that storage. Fixes: https://cgit.freebsd.org/src/commit/?id=25b48e569f2f Cc: stable@dpdk.org Signed-off-by: Dan Nowlin <dan.nowlin@intel.com> Signed-off-by: Yuan Wang <yuanx.wang@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Obtained from: DPDK (37239792b0) MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DPDK commit message net/ixgbe: fix flow control frame byte adjustment LXONTXC and LXOFFTXC are 32-bit counters for transmitted XON and XOFF packets. Their deltas are summed and used to adjust the transmitted packet and byte counters. Perform the addition in 64 bits so it cannot wrap before the result is used for the byte adjustment. Found by Linux Verification Center (linuxtesting.org) with SVACE. Fixes: https://cgit.freebsd.org/src/commit/?id=af75078fece3 ("first public release") Cc: stable@dpdk.org Signed-off-by: Daniil Iskhakov <dish@amicon.ru> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Obtained from: DPDK (bdf8608559) MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DPDK commit message net/ixgbe/base: fix unchecked return value Check the return value from ixgbe_read_eeprom() before using the control word to configure link disable during D3. Fixes: https://cgit.freebsd.org/src/commit/?id=b7ad3713b958 ("ixgbe/base: allow to disable link on D3") Cc: stable@dpdk.org Signed-off-by: Barbara Skobiej <barbara.skobiej@intel.com> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Obtained from: DPDK (eb3684b191) MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
FreeBSD's I2C helper already retries failed transactions. Limit this new outer loop to successful reads with an invalid identifier so that retry budget is not multiplied. DPDK commit message net/ixgbe: retry misbehaving SFP read Some XGS-PON SFPs ACK I2C reads and return uninitialized data while their microcontroller boots. A bogus identifier can cause an otherwise working module to be marked unsupported. Retry the identifier read several times, checking for both successful I2C completion and a valid SFP identifier. Signed-off-by: Stephen Douthit <stephend@silicom-usa.com> Signed-off-by: Jeff Daly <jeffd@silicom-usa.com> Reviewed-by: Haiyue Wang <haiyue.wang@intel.com> Obtained from: DPDK (774263bb4e) MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: fix unaligned access in ixgbe_update_flash_X550() ixgbe_host_interface_command() treats its buffer as a u32 array. The local union contained only byte-sized fields, giving it one-byte stack alignment and allowing unaligned accesses on strict-align systems. Add a u32 member to the union to provide the required alignment and pass that member to ixgbe_host_interface_command(). No functional change is expected on x86. Obtained from: Intel ix 3.4.39 MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: avoid signed overflow in pause time calculation pause_time is promoted to signed int before multiplication. Its default value of 65535 multiplied by 65537 exceeds INT_MAX and triggers UBSAN, even though the result is assigned to a u32. Make the multiplier unsigned so the calculation has the intended u32 semantics. Linux commit 3b70683fc4d6 reported the failure in the generic path and used the same mechanical correction. The 82598-specific flow control operation contains the identical expression, so correct it as well. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: reject VF requests before CTS A VF that sends a non-reset request before completing reset negotiation has not received CTS. The PF ignores the request but currently reports success, leaving the VF with a false view of the programmed state. Return failure for the ignored request. This restores the behavior lost when the mailbox helpers were renamed. Fixes: https://cgit.freebsd.org/src/commit/?id=36c516b31136 ("ixgbe: update if_sriov to use the new mailbox apis") MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: check negotiated API for VF queue query The GET_QUEUES handler switches on msg[0], which contains the mailbox command rather than the negotiated API version. It therefore cannot reject API 1.0 or an unnegotiated VF as intended. Switch on the API version stored for the VF. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: complete PF cleanup after VF FLR The 82599, X540, and X550 documentation identifies VF registers which retain state across VFLR and must be reconfigured before a VF is reused. The VF reset path already initializes its queue-owned registers, but the PF only cleared VF mailbox memory and transmit head write-back addresses after a cooperative mailbox reset. A bare hardware VFLR therefore left both behind on affected devices. Move TDWBA cleanup into the common reset path. Clear CTS when VFLR invalidates the mailbox session, and accept only VF_RESET during the reset pass before restoring VF traffic. Clear VFMBMEM through the PFU/VFU semaphore. Recheck VFREQ while holding PFU so a reset event cannot erase a request posted between the initial mailbox check and the clear. Dispatch an already-read message even if the residual clear fails, but keep cleanup pending until a synchronized clear succeeds. Retry cleanup in the same admin pass after a failed message read or clear. The 82599 also retains VFMAILBOX.VFU across VFLR. Leave a VF-owned mailbox intact initially so a live post-reset writer can finish. Retry cleanup from the admin timer and, after a two-second grace period, use PFMAILBOX.RVFU only when VFU remains set and no request has been posted. Clear the mailbox under PFU afterward. This recovers an abandoned pre-reset owner without sleeping under the iflib context lock or immediately stealing from a new reset request. Suppress mailbox dispatch once iflib has cleared IFF_DRV_RUNNING so a pending reset request cannot re-enable VF traffic inside the PF stop path. Periodically sample aggregate VFREQ, VFACK, and VFLR registers, masked to active VFs, so work suppressed across a stop/restart and a bare 82599 VFLR without EICR_MAILBOX are both discovered without another interrupt edge. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: recover from X550 malicious-driver events The shared X550 code provides malicious-driver detection, event decoding, and per-pool recovery operations, but the PF never enables or services them. A malformed VF descriptor can therefore go undetected and avoid the per-pool recovery path supplied by the MAC. Configure IOV state while VF DMA remains disabled, then enable MDD and activate the VFs only after PF queue initialization is complete. On an MDD event, withdraw mailbox CTS and gate the VF pool through PFVFTE and PFVFRE. Retain the per-queue WQBR blocks until the VF enters a new reset epoch; PFVFTE can still permit descriptor fetches into the internal queue, so releasing WQBR early would allow a hostile VF to retrigger MDD before it resets. Send the non-CTS reset notification after servicing the VF mailbox. Let a posted VF request win mailbox arbitration, defer notification if the pass produced a response, and retry failed notifications from the periodic admin pass. Poll WQBR so recovery does not depend on another mailbox interrupt edge, while suppressing already-fenced pools. Latch a PF reset request until the next hardware initialization. The X550 datasheet defines every bit of WQBR_RX and WQBR_TX as a queue bit, so an all-ones value is valid. Reject it only when IXGBE_STATUS, which has reserved-zero bits, also reads as all ones and confirms dead MMIO. Temporarily disable MDD around live multiqueue SRRCTL drop-mode updates, which hardware otherwise reports as queue-context changes. Serialize that window with the iflib context lock and resample pending work after MDD is restored. Apply the per-pool recovery model used by igb(4) in a2ed165f0049 to the existing DPDK-derived X550 hooks. The same register interface is documented for X552 and X553, so cover the entire X550 family. Document that VF traffic remains disabled until the reset handshake completes. MFC after: 2 weeks Relnotes: yes
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: force receive drops on every VF queue PFQDE is indexed by absolute receive queue, but the driver programs one index per VF. Only the first quarter or half of the VF queues therefore have queue-drop isolation, depending on the virtualization mode. The flow-control path can also clear those bits even though SR-IOV requires them independently of the PF pause policy. Program every queue in a VF pool before enabling receive for that VF. For an X550-family VF with an administrative port VLAN, also hide the VLAN tag as the hardware requires. Keep PF flow-control changes confined to the PF SRRCTL registers, and clear the VF queue settings when SR-IOV is torn down and the queues can be reassigned to the PF. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Avoid a signed shift while assembling the PBA number The EEPROM word is promoted to signed int before the left shift when the cast is applied to the complete expression. Cast the word first so all 16-bit values are shifted as unsigned data. This is the ixgbe counterpart of the e1000 correction imported from DPDK commit b932270c66. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Avoid signed overflow in LED register masks LED index three shifts the blink bit into bit 31. Convert the base to the register width before shifting so the operation is unsigned. This is the ixgbe counterpart of the e1000 correction imported from DPDK commit 214cb0d7f1. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Use unsigned register bitmap shifts VLAN, VMDq, and VF reset bit indices can reach 31. Use unsigned values when constructing their 32-bit register masks so the shifts do not operate on signed integers. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Clear ROMPE for an empty list and enable it only for a nonempty list. FreeBSD already clears ROMPE when resetting a VF, so that part of the DPDK change is not needed. DPDK commit message net/ixgbe: fix over using multicast table for VF VMOLR.ROMPE allows a VF to receive packets matching the shared multicast table. Leaving it enabled after the VF removes its last multicast address lets PF or peer-VF table entries continue selecting that VF. Signed-off-by: Wei Zhao <wei.zhao1@intel.com> Acked-by: Qi Zhang <qi.z.zhang@intel.com> Obtained from: DPDK (dc5a6e7422) MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: fix host interface timeout detection The host-interface polling loop was scaled from milliseconds to microseconds, but its terminal test was left using the unscaled timeout. Completion at that intermediate iteration can be reported as a timeout, while actual expiry is not recognized and can accept stale status. Test against the scaled loop bound used by the polling loop. Fixes: https://cgit.freebsd.org/src/commit/?id=f46d75c90f5f ("ixgbe: improve MDIO performance by reducing semaphore/IPC delays") MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: avoid signed shift when assembling ETrack ID Obtained from: Intel ix 3.4.39 MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: dispatch PBA string reads through EEPROM ops E610 installs a device-specific PBA string reader, but the public API always calls the generic implementation. Dispatch through the EEPROM operation table so device overrides are honored. Initialize the generic operation for devices that use the ordinary EEPROM representation. Obtained from: Intel ix 3.4.39 MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: clear VF head write-back state on reset VF reset and FLR do not clear the transmit head write-back address registers. A previous VF driver can therefore leave DMA write-back enabled with a stale address for the next driver instance. After consuming the reset request and disabling the VF queues, clear the address registers for each queue belonging to that VF. Derive the queue count from the active IOV mode so peer queue state is not touched. Linux commit dbf231af81a7 documents the hardware behavior. The FreeBSD implementation follows the local queue mapping and register interfaces. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Recover legacy VFs from invalid DMA targets 82599 and X540 lack the X550 malicious-driver detector. Detect a VF whose PCI status reports a received master abort while its transmit ring has outstanding descriptors and makes no progress across consecutive samples. Consume the accepted PCI status latch, gate that VF I/O, and recover one pending VF per task pass with round-robin selection. This prevents an unreadable function from starving detection or recovery of other VFs. Save the complete writable VF PCI configuration before FLR, restore it afterward, and verify the hardware-backed Command state. Preserve the first good snapshot and pending state across reset events until restore and verification succeed. Introduce a common I/O-disabled policy bitmask so later quarantine policy can extend traffic gating without duplicating fault-state checks. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: quarantine repeatedly faulting legacy VFs A guest can reinitialize after a VF function-level reset and repeatedly strand an 82599 or X540 PF with invalid descriptor DMA targets. Count only distinct Received Master Abort events accepted by the qualified transmit-stall detector and quarantine the VF after five events. Preserve quarantine across PF reinitialization, reject reset mailbox requests, and keep transmit, receive, and clear-to-send disabled. Recreating SR-IOV clears quarantine. Expose the affected pools through a read-only bitmap. After a successful quarantine FLR, leave the function in post-FLR configuration, explicitly keep decode and bus mastering disabled, verify the Command register, and refresh its PCI-layer cache so a later restore cannot re-enable the function. This addresses CVE-2021-33061 on 82599. Apply the same bounded-failure policy to X540 as defense in depth; the CVE does not list X540. Intel documents the 82599 issue in: http://iommu.com/datasheets/ethernet/controllers-nics/intel/ixgbe/Intel_82599_Application_Note_655276.pdf MFC after: 2 weeks Security: CVE-2021-33061
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Re-enable the SFP laser during initialization ixgbe_if_stop() disables the transmit laser on every 82599 SFP fiber port, but the iflib initialization path did not re-enable it. Re-enable the laser before deferred SFP module setup so interface reinitialization cannot leave either single-speed or multispeed optics dark. The hardware wrapper is a no-op when laser control is unavailable. The placement follows Intel ix-3.4.39; this version deliberately applies to every SFP port affected by the stop path. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Defer ECC recovery to iflib The link interrupt filter performed a full hardware reset in interrupt context. This bypassed iflib stop and initialization, including queue quiescence and restoration of temporary LED state. Record the ECC event in the administrative request mask and ask iflib to perform the reset from its taskqueue. Keep the ECC cause masked until reset so the intermediate admin pass cannot re-enable a sticky condition. Handle ECC independently of Flow Director and in legacy interrupt mode. Remove the redundant EICR write; the filter has already cleared the reported causes. Also remove the accompanying complement-mask update of mac.flags. It set every flag except DOUBLE_RESET_REQUIRED and had no place in ECC recovery. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Defer firmware recovery transitions to iflib The firmware-mode callout invoked ixgbe_if_stop() directly. This performed a full device reset without the iflib context lock or the iflib queue lifecycle. It could also poll the E610 firmware command interface from callout context while identification was active. Request an iflib reset from the callout instead. Reject initialization while firmware recovery remains active. This leaves the interface stopped and lets iflib publish that state. Request initialization when firmware exits recovery so an administratively-up interface can recover without operator intervention. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Defer E610 thermal shutdown to iflib The E610 firmware event handler invoked ixgbe_if_stop() directly from IFDI_UPDATE_ADMIN_STATUS(). This reset the device without the iflib queue lifecycle and left the interface marked running after its hardware was stopped. Request an iflib reset instead. Fail the automatic initialization once so the reset transaction stops the interface and publishes that state. A later operator-requested initialization remains possible, matching the previous recovery policy without bypassing iflib. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Fixes: https://cgit.freebsd.org/src/commit/?id=fdc1f3450634 ("x86: change signatures of ipi_{bitmap,swi}_handler() to take pointer") MFC after: 1 week Sponsored by: The FreeBSD Foundation
debug: classified in
03-filenames_plain1 by
'sys/x86/'
acpi_probe_child() keeps PCI link devices, the RTC, and docking stations enabled even when _STA reports them not present, but skipped acpi_parse_resources() for them. With an empty resource list, resource-based hint matching (BUS_HINT_DEVICE_UNIT) cannot wire such a device to its hinted unit, and the hinted ISA device is then created as a duplicate. Modern AMI firmware reports the PNP0B00 RTC as not present while handing timekeeping to the ACPI Time-and-Alarm device. Reviewed by: adrian, jhb Differential Revision: https://reviews.freebsd.org/D58047
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Classify I226_LMVP and I226_BLANK_NVM as I226 silicon so they receive the I226-specific ASPM L1.2 workaround. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=279245 MFC after: 1 week Pull-Request: https://github.com/freebsd/freebsd-src/pull/2318
debug: classified in
03-filenames_plain1 by
'sys/dev/'
When allow-set-mac is disabled, the MAC filter validation condition rejects the assigned VF unicast address while allowing any different unicast address. The equality test was accidentally inverted when this code moved to the boolean address helper. Accept multicast and the assigned unicast address, and reject other unicast addresses as intended. Fixes: https://cgit.freebsd.org/src/commit/?id=7d4dceec1030 ("ixl(4): Fix VLAN HW filtering") MFC after: 3 days
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The conventional VLAN filter update skipped zero shadow words. Removing the final VLAN represented by a VFTA word therefore left the hardware bit programmed even though the software shadow was clear. Pass the changed word to em_if_vlan_filter_write() and write it even when its new value is zero. Retained nonzero words continue to be replayed as before.
debug: classified in
03-filenames_plain1 by
'sys/dev/'
I225 devices can incorrectly enter L1 substates while CLKREQ# is asserted, both while idle and in D3. Disable ASPM and PCI-PM L1.2 on I225 to prevent the resulting packet loss. Keep the I226 workaround ASPM-only because it addresses a separate traffic exit latency observation. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=265714 MFC after: 4 days
debug: classified in
03-filenames_plain1 by
'sys/dev/'
igb: preserve coalesced 82576 MDD events WVBR is read-clear, so reading it from the deferred admin pass loses earlier queue bits when multiple VF malicious-driver events arrive before that pass. Snapshot WVBR in the interrupt filter, translate its staggered queue bitmap to pool bits, and OR observations into software latches for deferred notification and recovery. Retain the one-queue VMDq policy used for mixed-driver safety (the vswitch cannot handle a 2Q guest loopback to a 1Q guest per errata).
debug: classified in
03-filenames_plain1 by
'sys/dev/'
igb: drain stale MDD state before interrupt arm IOV policy setup can leave MDDET and its read-clear diagnostic registers populated while the admin vector is masked. Carrying that state across the unmask can suppress the next spoof-event edge. Mark initialization for a one-shot drain and consume LVMMC, WVBR when applicable, and ICR immediately before EIMS/IMS arms the vector. Preserve the synthetic link-status cause across the arm-time ICR read, and clear the one-shot latch at reset preparation.
debug: classified in
03-filenames_plain1 by
'sys/dev/'
igb: recover retained i350 admin interrupts I350 can retain EICR.OTHER with MDDET and LVMMC asserted while the admin vector and legacy cause remain enabled. The anti-spoof filter continues dropping packets, but no MSI-X is delivered and the spoof diagnostic is lost. Preserve the one-shot setup drain across iflib reset preparation, clear ICR before LVMMC during i350 setup, and kick the enabled admin vector from each admin pass. The synthetic no-cause interrupt stays in the filter and also releases a retained MDDET cause. Keep 82576 drain ordering and stop-time cleanup unchanged.
debug: classified in
03-filenames_plain1 by
'sys/dev/'
I225 v1 cannot receive the minimum inter-packet gap required at 2.5 Gb/s. For affected back-to-back links, Intel recommends using a 15-byte transmit IPG instead of 12 bytes. Program TIPG.IPGT to 0xb for pre-v2 I225 devices at 2.5 Gb/s and restore the default at lower speeds. Avoid penalizing fixed I225 and I226 parts. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Track RERC separately instead of adding receive errors to the collision count, and read the previously omitted RXERRC register. Include RFC in input errors because CRCERRS does not count bad-CRC runts, implementing the I225 length-error accounting workaround alongside RUC and ROC. Stop treating host transmit MAC discards as receive errors. Expose both RERC and HTDPMC as dedicated MAC statistics so their overlapping counts remain available without corrupting aggregate interface counters. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Both these functions have non-static linkage for good reasons, however, their naming may confuse folk when working with crypto(9) code at global scope.
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Borrow the e1000 VLAN filter table Ambiguous presence of the feature by Intel was settled by DPDK and emperical testing. MFC after: 2 weeks Relnotes: yes
debug: classified in
03-filenames_plain1 by
'sys/dev/'
X550-family malicious-driver detection validates the transmit context selected by a data descriptor with Check Context set. ixgbe sets that bit on every transmit data descriptor, but ordinary PF packets without a VLAN or checksum offload do not create a context descriptor. The empty context then reports an invalid MAC-header length and blocks the PF queue as soon as MDD is enabled. Create the existing context descriptor for every PF packet while SR-IOV is active. This supplies the required MAC-header length and keeps MDD from mistaking normal PF traffic for a malicious-driver event. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Request the reset through iflib and let the admin task perform the stop/init under the context lock, matching what the VF and SR-IOV paths already do. The assertion is compiled out without INVARIANTS, where the same write instead resets the MAC and takes the ICH software flag while the queues stay live and an ioctl or the admin task may be running. While here also remove unnecessary em_if_init uses: iflib_if_init_locked() already runs after IFDI_RESUME and IFDI_MEDIA_CHANGE, so the trailing *_if_init() only added an unstopped IFDI_INIT that the following iflib_stop() undoes. MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D58628
debug: classified in
03-filenames_plain1 by
'sys/dev/'
igc_sysctl_eee() and igc_sysctl_dmac() called igc_if_init() directly. Request the reset through iflib instead, and skipping while the interface is down; the new value is picked up by the next init. Unlike e1000, igc has no ASSERT_CTX_LOCK_HELD and no acquire_swflag path, so the defect is silent here rather than an assertion failure. While here also remove unnecessary igc_if_init uses: iflib_if_init_locked() already runs after IFDI_RESUME and IFDI_MEDIA_CHANGE, so the trailing *_if_init() only added an unstopped IFDI_INIT that the following iflib_stop() undoes. MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D58629
debug: classified in
03-filenames_plain1 by
'sys/dev/'
gpio: add generic Intel GPIO pin controller framework Add a platform-independent driver framework for Intel GPIO pin controllers found on modern Intel SoCs. The driver accesses GPIO pad registers through ACPI-provided memory-mapped resources and implements the gpio interface [1] including pin enumeration, capability reporting, configuration, and read/write/toggle operations. A common data model of communities and pad groups allows individual SoC-specific drivers to supply their own pad tables and ACPI hardware IDs while sharing all register-level logic. [1] https://wiki.freebsd.org/GPIO Reviewed by: vexeduxr MFC after: 1 week Sponsored by: Beckhoff Automation GmbH & Co. KG Pull Request: https://github.com/freebsd/freebsd-src/pull/2205
debug: classified in
03-filenames_plain1 by
'sys/dev/'
gpio: add Intel Alder Lake-N GPIO driver Add a GPIO driver for the Intel Alder Lake-N platform based on the generic intelgpio framework. The driver provides pad group definitions for four GPIO communities covering groups GPP_A through GPP_T, vGPIO and HVCMOS, and matches ACPI hardware IDs INTC1056, INTC1057 and INTC1085. The kernel module build infrastructure and the wiring into files.x86 are included. Reviewed by: vexeduxr MFC after: 1 week Sponsored by: Beckhoff Automation GmbH & Co. KG Pull Request: https://github.com/freebsd/freebsd-src/pull/2205
debug: classified in
03-filenames_plain1 by
'sys/dev/'
gpio: add Intel Tiger Lake-H GPIO driver Add a GPIO driver for the Intel Tiger Lake-H platform based on the generic intelgpio framework. The driver defines five GPIO communities with pad groups GPP_A through GPP_K, vGPIO and JTAG, and matches ACPI hardware ID INT34C6. The kernel module build infrastructure and the wiring into files.x86 are included. Reviewed by: vexeduxr MFC after: 1 week Sponsored by: Beckhoff Automation GmbH & Co. KG Pull Request: https://github.com/freebsd/freebsd-src/pull/2205
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The VF admin vector carries both link and PF mailbox causes, but the filter schedules the admin task only for link-status changes. Defer administration for every interrupt so reset and control notifications are serviced promptly. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The shared VF set-RAR helper restores hw.mac.addr when the PF rejects a requested address, but ixv ignores the error and leaves the interface link-layer address unchanged. Subsequent initialization repeats the rejected request while the interface appears to use an address the PF will not deliver. Refresh the permanent address returned by the PF after every successful reset handshake. Copy the resulting PF-approved address back to the interface and emit the normal link-layer address notification without re-entering the driver initialization path. This also recovers from a prior mailbox transport failure or a PF-side reassignment. Adapt the igb VF address reconciliation added in a6bb3850e7c6. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The MTA is shared by the PF and all VFs. The VF mailbox handler only ORs new bits, so hashes survive list removal and VF reset. Conversely, PF multicast updates replace the whole table with PF-only state and discard live VF filters. Rebuild the table from the PF list and every active VF whenever either changes. Clear VF multicast state during reset and PF reinitialization, and remove all VF hashes on SR-IOV teardown. Keep the software shadow and multicast control state synchronized, and avoid writes to unchanged MTA registers. Adapt the aggregate desired-state rebuild introduced for igb(4) in a2ed165f0049 and its write-elision scheme from 350211ab1782 to ixgbe's shared MTA. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
In preparation of increasing the KVA on powerpc64 to 2TB to mirror amd64's, rework the 64-bit Book-E pmap to not allocate all page table pages at boot time, since that would be a waste of a lot of memory. Instead, allocate all page table pages for the higher levels, leaving the leaves (page directories) for dynamic allocation. This cuts the boot-time page table size down from ~64MB to ~8MB with the current 32GB KVA size, and bumping to 2TB KVA the boot-time page table is still ~8MB instead of ballooning to ~4GB of mostly wasted space.
debug: classified in
03-filenames_plain1 by
'sys/powerpc/'
This reflects what amd64 has, and is needed for using GPUs with large VRAM.
debug: classified in
03-filenames_plain1 by
'sys/powerpc/'
VLAN registration callbacks only update the software shadow, leaving the PF unaware until a later full initialization. Initialization then retries each failed request in a tight loop, while skipping replay entirely when local hardware filtering is disabled. Send additions and removals as soon as the desired state changes, independent of the VF local-filter capability. Replay the desired memberships after reset and retry a bounded batch per timer tick. Stop after the first failure so a silent PF can consume only one mailbox timeout per pass, while a responsive PF can drain several requests. Treat the retry window as a no-progress deadline: advance it when pending work succeeds so a large backlog can drain, but leave entries dormant after a sustained failure. A successful mailbox request wakes a dormant backlog. Dispatch timer-driven retries only while iflib marks the VF running, so a stale timer tick cannot restore PF VLAN state after the stop path resets the VF. Because the callbacks now update the PF or retain failed work for retry, do not restart the VF for VLAN configuration changes. This avoids resetting and flapping the interface for every VLAN addition or removal. Also keep receive VLAN stripping synchronized in both the enabled and disabled cases. Adapt the bounded VLAN reconciliation scheme from igb VF commit fdce3830d9a6 to the ixgbe VF mailbox. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
pci: Ignore SR-IOV VFs when tuning MPS The VF Device Control MPS and MRRS fields are reserved and preserved. VF transactions use the PF MPS, so a hardwired VF value must not be used to retune the shared PCIe hierarchy. Document the previously undocumented tuning knob and clarify why a VF may continue to display its reserved hardwired value. This fixes an instant crash/reboot on my Zen3 system with 82599 VFs. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
pci: Preserve adjusted PCIe control state The PCI bus changes live capability registers after the initial configuration snapshot has been saved. A later driver reprobe restores that snapshot and can silently undo the adjustment. Update the cached Device Control and Root Control bits together with pcie_adjust_config() writes. Route the persistent Maximum Read Request setter and the bus-owned AER control changes through that helper as well, so they share the same restore semantics as MPS reconciliation. Document the persistent-write contract. Merge only explicitly adjusted bits into the saved image so unrelated or transient bits observed during the hardware read-modify-write cannot become persistent. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
pci: Reconcile MPS before attaching PCIe devices Reconcile each newly enumerated link as a unit before child drivers attach. Firmware may leave Bus Master Enable set after handoff, so use the bus attachment state rather than that bit to identify the cold phase. Preserve an established hierarchy during rescan and hot-add. Refuse a reduction below a switch because recursive enumeration may already have made a sibling subtree live; lowering only the local port or Root Port would produce an inconsistent path. Report capability and active-use conflicts distinctly. Handle OFW PCI buses that clone the generic enumeration path. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by '['sys/dev/',
'sys/powerpc/']'
pci: Add a hierarchy-wide MPS limit Add a boot-time ceiling for MPS reconciliation. Apply it only while an entire cold-enumerated link can be configured consistently, and leave an established active path unchanged. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
pci: Optionally disable endpoints with unsafe MPS Keep warn-only behavior as the default. Add an opt-in policy that clears endpoint decoding and bus mastering when a newly discovered function cannot match its active path, while never disabling bridge functions and their subtrees. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
pci: Permit function-level reset of 82599 VFs Intel 82599 supports FLR on VFs but reports FLR support only in the PF Device Capabilities register. The VF register therefore leaves the FLR Capable bit clear, and pcie_flr() rejects the reset. Intel documents the zeroed VF PCIe capability structure as erratum 35 in the 82599 Specification Update (B0=Yes; NoFix). Add a positive FLR quirk for the 82599 VF. Keep the capability check for every other function, so an unknown nonconforming VF cannot make pcie_flr() report success when its reset request was ignored. SR-IOV requires VFs to support FLR, but a clear capability bit cannot distinguish the 82599's misadvertisement from a VF that fails to implement it. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The IOV callback changes the PF pool, virtualization mode, and hardware queue indices while iflib still considers the old queue layout live. Teardown likewise leaves the software pool and mode at their SR-IOV values. Use iflib stop/mutate/restart transactions for both transitions. Disable VF DMA and PCI VF Enable before queue reuse, let outstanding transactions drain, and restore the non-IOV pool and queue indices on teardown. Remove the redundant driver-local pci_iov_detach() wrapper; iflib already performs that check centrally before the driver detach callback. It may be possible to avoid some restart in the future on this hardware pausing DMA and remapping rings but not pursued yet. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
A deterministic IOV configuration error currently reaches the driver only after iflib has stopped the PF. The required cleanup restart then causes an avoidable carrier flap. Follow the igb pattern and validate the request in the PCI IOV method before entering the restart transaction. Reject queue layouts wider than the selected virtualization pool before they can alias unrelated 82599 registers. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Currently, the FreeBSD driver configures and destroys queues sequentially by issuing individual Admin Queue (AQ) commands. During queue teardown (e.g., interface reset), disabling queues one by one leaves the device in a partially configured state. Because the device does not yet know that the driver is in the process of fully unconfiguring all queues, this intermediate state can trigger transient error logs (such as when queue 0 is disabled while other queues are still active). Modify the driver to use Admin Queue batching for both the creation and destruction of TX and RX queues. Commands are now queued and kicked together, ensuring the queue configuration changes are applied atomically and preventing transient errors from being logged. Signed-off-by: Sujithra Periasamy <sujithra@google.com> Reviewed by: markj MFC after: 1 week Sponsored by: Google Differential Revision: https://reviews.freebsd.org/D58696
debug: classified in
03-filenames_plain1 by
'sys/dev/'
A VF's pci_devinfo references its PF's pcicfg_iov for resource bookkeeping, but only the PF implements the SR-IOV capability. pci_cfg_save() and pci_cfg_restore() treated any non-NULL cfg.iov as an owned capability and accessed the PF capability offset in VF configuration space. Saving a VF could therefore replace the shared PF settings with unrelated VF register values. Skip SR-IOV capability save and restore for PCICFG_VF children. The generic PCI and PCIe state of the VF remains preserved. This is also required by drivers that save VF state around a PF-driven function-level reset. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
When link polling loses mailbox clear-to-send or times out, request an iflib reset instead of continuing with stale VF state. The driver callback runs after iflib samples reset requests, so requeue the admin task to make iflib consume the request on its next pass rather than waiting for an unrelated timer or interrupt. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Apply the 82599 D3 link workaround only for D3 ixgbe_stop_mac_link_on_d3_82599() implements the workaround for 82599 erratum 33. It forces incompatible auto-negotiation settings before the device enters D3, and reset clears them when returning to D0. ixgbe_if_stop() is also used for ordinary interface reconfiguration and recovery. Those paths do not enter D3 and should not program this power-management workaround. They continue to stop the adapter and disable the transmit laser. Move the call to ixgbe_setup_low_power_mode(), after ixgbe_if_stop(). This preserves the required ordering for detach, shutdown, and suspend while avoiding the D3 settings during ordinary restarts. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Use PF MTU for 82599 VF jumbo policy The shared maximum frame size is raised by VF LPE requests, so it cannot describe the PF MTU when enforcing the 82599 PF/VF jumbo restriction. Consult the PF ifnet MTU instead. Also correct the API 1.1 and later comparison so a jumbo VF is enabled when, and only when, the PF itself uses a jumbo MTU. This matches the policy implemented by DPDK. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Quiesce VFs across PF reset Stop VF transmit and receive in hardware, clear PF-side mailbox CTS, and notify active VFs before resetting a PF. A PF reset invalidates VF queue state, so the no-CTS control message makes cooperative VFs discard stale state and renegotiate after the PF returns. The hardware queue gates synchronously prevent further VF DMA. Do not hold the exclusive iflib context lock for a fixed VF-watchdog interval after the reset. Report the PF link transition directly instead of dispatching mailbox work from the stop path, which could otherwise re-enable VF I/O mid-reset. The CTS, PF-control, and VF queue controls follow the reset mechanisms used by DPDK. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
netmap: Fix driver name handling if_initname() requires the caller to ensure that the lifetime of the interface's name buffer contains that of the ifnet itself. netmap_vi_create() wasn't respecting that; we were instead passing the stack-allocated buffer provided by the ioctl handler. While here, add a check to avoid assuming that the caller-provided buffer is nul-terminated. Reported by: syzkaller Reviewed by: vmaffione MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58676
debug: classified in
03-filenames_plain1 by
'sys/dev/'
netmap: Fix a race in kqueue registration We need to acquire the netmap global lock earlier, to avoid racing with the NETMAP_REQ_REGISTER ioctl handler. Reported by: syzkaller Reviewed by: vmaffione MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58677
debug: classified in
03-filenames_plain1 by
'sys/dev/'
netmap: Handle overflow when computing ring sizes PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297300 Reported by: Robert Morris Reported by: syzkaller Reviewed by: vmaffione MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58678
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Found with: clang -Werror=assign-enum
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Found with: clang -Werror=assign-enum
debug: classified in
03-filenames_plain1 by
'sys/dev/'
No functional change, as current callers either don't check the return value or check it against OCS_HW_RTN_SUCCESS only. Found with: clang -Werror=assign-enum
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DMA channels are allocated by attach_pre but released by queues_free. When iflib fails after attach_pre and before queue allocation, neither the old detach nor queues_free path releases them. Allocate channels with the TX queue state and make queues_free tolerate partially allocated rings. Use it to unwind allocation failures so TX rings are also released when RX allocation fails. An early detach can also precede PHY initialization and interrupt assignment. Skip absent PHY and channel state, and release the locks owned by attach_pre on both failure and detach. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Completion queues are allocated by attach_pre but released by queues_free. An iflib failure between those stages leaks the allocation, while the original size expression also underallocates the array. Move completion queue allocation into the TX queue callback, correct its size, and unwind it with TX state if RX allocation fails. Make interrupt cleanup tolerate an unavailable array and reuse the array allocated during device initialization instead of replacing and leaking it. Release the DMA, multicast, and lock resources owned by a successful attach_pre during detach. Avoid allocating the statistics DMA area a second time near the end of attach_pre. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
A PF can be resetting, handling a slow link event, or deliberately withholding mailbox CTS while its VFs enumerate. Keep the VF attached when the reset handshake is temporarily unavailable so a later if_init can retry. Never leave VF hardware running without a negotiated mailbox API: start hardware only after reset succeeds, stop it when negotiation fails in attach or init, and defer later recovery through iflib. This prevents a tight reset loop while preserving recovery when the PF returns. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The iflib conversion records link-status interrupts in the administrative request mask, but the administrative task did not consume them. Timer polling usually hid the omission; frequent mailbox interrupts could continually rearm that timer and leave cached link state down after hardware recovered. Claim request batches atomically, process link-setup dependencies, and sample hardware before publishing link state. Bound each invocation to eight batches and requeue residual work so a continuous producer cannot monopolize the admin taskqueue. Queue every link-related request from the legacy interrupt path. Unlike MSI-X, its threaded continuation services RX and does not enqueue the admin task. This restores the event-driven behavior of ix-3.4.39. Fixes: https://cgit.freebsd.org/src/commit/?id=b2c1e8e62049 ("ix(4): Run {mod,msf,mbx,fdir,phy}_task in if_update_admin_status") MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The aggregate VF mailbox poll includes only VFs whose driver configuration completed. A configured VF slot whose vf_add callback failed can nevertheless report reset, request, or acknowledgement events. Because the mailbox handler skips inactive entries, such an event remains latched and can retrigger administrative work indefinitely. Build the poll masks from every configured VF index and consume reset, message, and acknowledgement events for inactive entries without treating them as usable VFs. Use the index rather than the pool because early vf_add errors precede pool initialization. Also include E610 PFVFLREC in aggregate reset sampling. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Register the vmm module handler after both the bundled device drivers and SMP. On platforms without EARLY_AP_STARTUP, SI_SUB_SMP follows SI_SUB_DRIVERS; using the later subsystem preserves the smp_rendezvous() requirement. The resulting reverse unload order performs IOMMU cleanup while every IVHD softc remains valid. Refuse an independent IVHD detach while translation state remains initialized. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by '['sys/amd64/',
'sys/dev/']'
Do not instantiate an interrupt-remapping context for a unit whose IRTE support is disabled. In that mode the caller must retain the ordinary interrupt path. Reviewed by: kib MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58725
debug: classified in
03-filenames_plain1 by
'sys/x86/'
The iflib Flow Director path does not assign filters using the absolute queue and pool identifiers required by SR-IOV. Reject the combination during preflight validation rather than allowing an unsupported configuration to alter the PF receive path. The loader tunable is fixed before VFs can be created, so validation also prevents the reverse ordering of this combination. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The flow_control and hdr_split variables have never been read. VF flow control is controlled by the PF, while implementing header split would require receive-path support that ixv does not provide. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The shared ixgbe transmit path already creates SCTP context descriptors, and the hardware exposes the same checksum capability to VFs. Advertise it through iflib as the PF driver does. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
TXDCTL programming is family dependent. 82543 erratum 35 and 82544 erratum 20 require WTHRESH to remain zero; a nonzero value can corrupt descriptor writebacks and hang the controller. Leave all descriptor-control thresholds at their reset values on 82542, 82543, and 82544. On the remaining em controllers, retain the established PTHRESH=31, HTHRESH=1, WTHRESH=1, and descriptor granularity policy. Several legacy specification updates identify full descriptor writeback as a workaround for transmit descriptor-queue errata. TXDCTL bit 22 is also family dependent. It is COUNT_DESC on the 82571 family and 80003ES2LAN. Intel shared initialization explicitly sets raw bit 22 on both transmit queues of every supported ICH/PCH generation, although the integrated public documentation marks it reserved. Preserve that required setting when iflib programs the thresholds, as DPDK does. Clearing it caused a persistent I219 transmit stall under descriptor pressure. The combined em/igb setup also wrote LWTHRESH=1 on every em controller. The driver does not enable the TXD_LOW interrupt controlled by that field. Enumerate every supported em MAC type and leave the unused low-water threshold disabled. This keeps the legacy descriptor-writeback safety policies separate from igb sparse-RS operation while programming only the fields appropriate to each family. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Jumbo receive tuning on integrated controllers enabled PTHRESH without a nonzero HTHRESH, contrary to the hardware programming requirements. It also covered only the integrated MAC generations present when the workaround was added. Enumerate every jumbo-capable ICH and PCH type and program PTHRESH=3 with HTHRESH=1. Linux fixed the same HTHRESH omission in b701cacdbcfb. The 82574 path combined threshold values with the reset values using bitwise OR. Requesting WTHRESH=4 while the reset value was one thus programmed five. Clear the complete threshold fields before installing the established PTHRESH=32, HTHRESH=4, WTHRESH=4 descriptor-granularity policy. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
iflib requests transmit completion status only on selected descriptors. Program a zero writeback threshold so igb hardware honors those sparse RS bits instead of writing back every descriptor in threshold-sized batches. Use the existing family specific prefetch threshold: eight descriptors on most controllers and 20 on I354, with a host threshold of one. These values match the Intel-derived Linux and DPDK drivers. Their nonzero writeback settings are not appropriate here because those drivers set RS on every packet. A zero writeback threshold also avoids depending on interrupt timer flushes affected by 82576 specification update erratum 26. Remove the old IGB_TX_WTHRESH macro as well. It has had no callers since the iflib conversion, so its 82575 conditional no longer implements any policy. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
82576 specification-update erratum 26 says MSI-X EITR expiration can fail to trigger receive descriptor writeback. A WTHRESH above one can therefore leave received packets invisible until the threshold fills. The shared threshold macros selected policy by enum ordering, so an 82576 VF fell into the generic WTHRESH=4 case. VFs always use MSI-X and require the same WTHRESH=1 workaround as the PF. Use PTHRESH=8 for 82575 and 82576 PFs and VFs, matching DPDK and the current Linux PF driver. The legacy FreeBSD PF and Linux igbvf value of 16 thrashes limited descriptor cache; no specification or erratum requires it. Retain the i354 PTHRESH=12 exception. Enumerate every supported igb PF and VF MAC type so each receives its intended policy. Also clear every threshold bit before installing the new values. The old mask retained the high WTHRESH bit, and 82575 uses six-bit fields while later controllers use five-bit fields. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The transmit-ring setup was copied from the e1000 path. On I225 and I226, bits 22 through 24 are reserved and bit 25 enables the queue; it is not a legacy low-water threshold. Correct the field masks, remove the nonapplicable legacy definitions, and program only defined fields. Use PTHRESH=8 and HTHRESH=1. Keep WTHRESH at zero so the hardware honors sparse RS descriptors issued by iflib. Linux and DPDK use a writeback threshold of 16, but request status on every packet. A nonzero threshold makes hardware ignore individual RS bits and is unsuitable for the iflib completion model. The receive-ring setup likewise used a magic mask that left bit 20 of the five-bit WTHRESH field untouched. Define the receive threshold fields and replace them exactly before installing the established PTHRESH=8, HTHRESH=8, WTHRESH=4 policy. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
PTHRESH controls when the device prefetches transmit descriptors, HTHRESH controls how many host descriptors must be ready, and WTHRESH controls completion writeback batching. iflib places RS on selected descriptors and reclaims through those checkpoints. The data sheets require WTHRESH to be zero when software uses RS. Clear WTHRESH while retaining the established PTHRESH 32 and HTHRESH 1 fetch policy. This also follows DPDK in pairing sparse RS descriptors with WTHRESH zero. DPDK defaults to 32/0/0, while Linux ixgbevf uses 32/1/8. The 32/1/0 setting preserves FreeBSD's prefetch policy and the data-sheet requirement that HTHRESH be nonzero when PTHRESH is used. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixv uses one queue set on 82599 and X540 VFs and assumes two on X550-family VFs. The PF reports the queues assigned to each VF with GET_QUEUES after mailbox API 1.1 negotiation. Query the PF during attach. Bound symmetric iflib queue sets by the PF grant and available MSI-X data vectors. Retain one queue set per data vector: ixgbe VFs expose at most three vectors and one is reserved for the mailbox. The hardware permits each pool to use a subset of its RSS queues, so a two-queue ceiling is valid when the PF assigns four. This enables the second data vector on 82599 and X540 while avoiding an assumed second queue when an X550-family VF is granted only one. Keep the existing family limits if the mailbox is unavailable or the PF uses an older API. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
iflib clears IFF_DRV_RUNNING before the driver stop callback but leaves IFF_DRV_OACTIVE set. Consequently, an already queued admin task can run after the VF reset. If that task consumes a pending timer sample, it can retry failed VLAN mailbox operations and restore PF filters for the stopped VF. Continue sampling statistics, but only run the VLAN retry worker while the interface is running.
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Expose the cached per-VF configuration through the iflib VF status method. Report mailbox handshake state, MAC address, access or trunk VLAN mode, hardware queue count, administrator policy, and MDD blocking state without issuing mailbox requests or reading hardware registers.
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Report SR-IOV VF status Expose cached VF configuration, policy, and runtime state through the iflib VF status method. Include access or trunk VLAN mode, the queue count selected by the current virtualization mode, negotiated mailbox API, whether traffic is enabled, and the MDD-blocked and quarantine state. The query runs under the iflib context lock and does not issue mailbox requests or read hardware registers.
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixgbe: Add missing mailbox API 1.6 definition The SR-IOV status change reports mailbox API 1.6 but omitted its enum definition, leaving main unable to compile. API 1.6 is an established ixgbe mailbox wire revision. Add it at the end of the revision enum, before the unknown sentinel as required by the stable numbering contract. Naming the revision does not enable negotiation or operations which will come with the E610 support. Reported by: Herbert J. Skuhra <herbert@gojira.at> Fixes: https://cgit.freebsd.org/src/commit/?id=c30021fe0df9 ("ixgbe: Report SR-IOV VF status")
debug: classified in
03-filenames_plain1 by
'sys/dev/'
video: add generic video(4) capture framework Add a new video(4) framework that provides /dev/videoN, buffer management, mmap lifetime, and V4L2 ioctl dispatch for video capture drivers. Hardware drivers implement struct video_hw_ops callbacks and use video_buf_acquire/write/done to deliver frames. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58367
debug: Commit manually moved from "unknown" to "hardware".
video: disable the static assertions for now The previous version of this work included the definitions but not the static asserts. It's tripping up in some CI builds, likely due to compat API building. Since this isn't any more or less broken than before, disable the static assertions until we figure out a proper path for this. Fixes: https://cgit.freebsd.org/src/commit/?id=9c9428825f4c55e3cb37412c661bb9d385db4c68 (video: add generic video(4) capture framework)
debug: classified in
04-filenames_plain2 by 'sys/'
debug: moved to hardware
because 'Need to be grouped with
9c9428825f4c55e3cb37412c661bb9d385db4c68'
Replaced the monolithic cdevsw implementation with the video(4) framework. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58368
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Replaced the monolithic cdevsw implementation with the video(4) framework. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58369
debug: classified in
03-filenames_plain1 by
'sys/dev/'
fwcam(4) no longer creates its own character device or implements the FWCAM_* ioctls; it registers with video(4) and is driven through the standard V4L2 interface on /dev/videoN. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58500
debug: Commit manually moved from "unknown" to "hardware".
Raising UVIDEO_NFRAMES_MAX from 40 to 128 in 3b6f833c95eb improved
throughput on xhci but made every camera on an ehci bus fail to
stream. Integrated webcams became unusable.
Measured on a MacBookPro9,2 with two ehci(4) FaceTime HD cameras and an
xhci(4) Logitech C920:
128 32
ehci, 12 captures 0 ok 12 ok
xhci 1920x1080 5 fps 5 fps
xhci 1280x720 10 fps 10 fps
Fixes: https://cgit.freebsd.org/src/commit/?id=3b6f833c95eb
Reviewed by: bapt
Differential Revision: https://reviews.freebsd.org/D58501
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Disabled the IR DMA channel on the error path, which clears the flag and frees the descriptor blocks before the chunks go away. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58502
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Reviewed by: adrian, bapt Differential Revision: https://reviews.freebsd.org/D58503
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Fix two small bugs affecting the event parsing of AMD L3 counters. AMD's manual and JSON disagree about the naming scheme on recent processors. I use the naming scheme present in the recent PPRs to be consistent, so in the JSON parser we rename 'allslices' to 'allsources' just as we already do with sliceid and sourceid. Also ensure that we parse the 0x prefix present in the newer JSON files. Reviewed by: mhorne Sponsored by: Netflix MFC after: 1 week Pull Request: https://github.com/freebsd/freebsd-src/pull/2180
debug: classified in
03-filenames_plain1 by
'lib/libpmc/'
A link flap left nothing in the log to work from. Both the link up and link down messages were gated on bootverbose while the message for a speed change that keeps carrier was not, so a default kernel was silent about a flap yet loud about a downshift -- the inverse of what an operator wants. The generic message from if_link_state_change() carries no speed, so gating the driver's own left the negotiated rate unrecorded. Report both transitions unconditionally. Say more than the rate. aq_hw_get_link_state() already negotiates flow control and throws it away, and Atlantic 2 reports duplex and EEE in the same link status word the rate comes from; decode them through a new get_link_info firmware op and name all of it on the up transition. EEE matters for a flap: low power idle transitions are a common source of marginal link trouble on multi-gigabit copper, and whether it was active is otherwise invisible. Give the down transition a cause. The PHY global fault code was only consulted from the thermal state machine, so an ordinary link loss reported nothing at all. Read the fault code, the firmware link state and the PHY temperature once per transition and append whatever is available. The firmware raises a fault one poll after it drops the link, so a thermal trip usually shows only its temperature here and aq_thermal_poll() names it on the following poll; the temperature alone is enough to separate a hot PHY from a cable event. Warn before the PHY trips rather than only after. The Atlantic 2 health monitor word carries a hot warning bit next to the ready and fault bits that nothing decoded. Report both edges of it from the thermal poll, so an adapter that is approaching its shutdown threshold says so while the link is still up. Expose the firmware's own link transition counters. The Atlantic 2 A0 statistics layout opens with link_up and link_down, which were read out of the firmware on every statistics poll and discarded. Publish them as dev.aq.N.fw_link_up and fw_link_down so a single flap can be told from a link that has been flapping all night. The B0 layout has no equivalent, so the op reports ENOTSUP there and the nodes are not created, matching how the temperature node is handled. Stop announcing a link state that was never read. The return value of aq_hw_get_link_state() was discarded, so a failed read would have been announced as link down. No firmware backend can fail that call today -- all three decode a register with no error path -- but the caller no longer depends on that, and it says so once if it ever starts failing. Report the hardware failures that were being discarded. The driver already reports the errors it keeps, so what stayed quiet was the set of calls whose result was never examined at all. None of these are expected to fail, which is precisely why a failure needs to say so: each one leaves the interface running but misconfigured in a way that presents as a network problem rather than a driver problem. aq_if_init() discarded aq_hw_start(), aq_hw_rss_hash_set(), aq_hw_rss_set() and aq_hw_udp_rss_enable(), so a datapath that never started or an indirection table that was never programmed showed up only as an interface that passes no traffic or delivers every flow to one queue. aq_mc_filter_apply() discarded aq_hw_mac_addr_set(), so a multicast address the stack believes is programmed could silently not be; report the address that failed and leave the filter slot for the next one instead of burning it. aq_update_vlan_filters() reported only the last of its three register writes. aq_if_stop() discarded both ring stop calls and the MAC reset, and a MAC that did not reset can still be mastering the bus. aq_if_detach() and aq_if_suspend() discarded aq_hw_deinit(). The interrupt moderation update on a link speed change was dropped as well; it runs only on a transition, so reporting it cannot become noisy. aq_if_attach_pre() discarded aq_hw_capabilities(), which is the only behavioral change here: it now fails the attach rather than continuing with an unset media type and an empty link speed mask, which would attach an interface that can never negotiate a link. It returns an error only for a device the probe table does not cover, so it is not reachable in practice. Document the resulting sysctls, along with the existing temperature and tracing nodes, which had no manual page coverage. Tested on an AQC113C (Atlantic 2 B0, firmware 1.5.38). Link up reports "speed=10000, full-duplex, flowcontrol none, EEE off", and "speed=1000" after a forced renegotiation, so the rate and duplex are read rather than assumed. A cable pull reports "link DOWN, F/W link state 0, temp 59 C" with the PHY fault clause correctly absent, which is what separates a cable event from a thermal trip. The B0 interface reports ENOTSUP for the link counters, so those two nodes are correctly not created. Traffic is unaffected: ten flows spread over all eight RX queues with no errors and no drops. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58749 Signed-off-by: Nick Price <nprice@FreeBSD.org>
debug: classified in
03-filenames_plain1 by
'sys/dev/'
A VF reset can sanitize its retained queue registers even when the PF does not complete the cooperative mailbox handshake. Keep those two states separate. Do not program or enable the rings until both queue sanitation and mailbox initialization have succeeded. Report either initialization failure to iflib so the interface remains stopped. Stopped admin and media-status passes now publish cached link-down state without polling the mailbox. While the VF remains administratively up, retry complete initialization after 250 ms, one second, four seconds, and then at a capped eight-second interval. Conditional iflib reset requests ensure an intervening administrative down cancels a queued retry. Avoid a redundant mailbox reset in the stop half of an immediate iflib reinitialization; the following init performs the required reset. Preserve the reset on an ordinary administrative stop and keep the existing bounded queue-sanitation retry policy independent from mailbox liveness recovery.
debug: classified in
03-filenames_plain1 by
'sys/dev/'
A failed VF reset or mailbox API negotiation currently returns from the void ifdi_init callback. Iflib then marks the interface running even though ixv left its adapter stopped. Stopped media queries can continue polling the PF, and no timer remains active to retry when the PF returns. Track mailbox readiness and report unsuccessful initialization to iflib. Stopped admin and media-status passes now publish cached link-down state without touching the mailbox. While the VF remains administratively up, retry complete initialization after 250 ms, one second, four seconds, and then at a capped eight-second interval. Preserve the requested MAC across reset, then program it once after mailbox API negotiation. The previous two pre-reset requests each could wait a full mailbox timeout after an established PF disappeared, holding the iflib context lock for about two seconds before the reset handshake. Avoid a redundant VF reset in the stop half of an immediate iflib reinitialization. Also remove the stop-time RAR mailbox request: reset has already discarded CTS at that point, and successful initialization restores the current address. Retain a reset for an ordinary administrative stop when the mailbox was established. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
PSRTYPE is indexed by pool in VMDq+RSS mode, and its RQPL field selects the number of receive queues available within the pool. The PF occupies the last pool, but the driver programmed pool zero and left the PF RQPL value at zero. As a result, all PF receive traffic was directed to its first queue while SR-IOV was enabled. Program PSRTYPE for the PF pool and encode its allocated receive queue count. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
HWRM failures currently return from the void ifdi_init callback. iflib then marks the interface running and enables interrupts despite an incomplete ring or VNIC setup. Move the hardware setup into an error-returning helper. The ifdi_init wrapper can report failure through iflib_init_failed(), while firmware recovery can propagate the same error through bnxt_open(). Also clear the initialized state after partial setup is torn down. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The primary and mirror-VSI ifdi_init callbacks can return early when reset state or hardware queue and filter setup prevents initialization. Iflib then marks the interface running and enables interrupts although the driver did not finish bringing it up. Report each non-detach failure through iflib_init_failed(). Keep the existing ice reset and subinterface-reinitialization machinery responsible for scheduling recovery. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The 82542-specific setup routine unconditionally reads the NVM default, overwriting a flow-control mode selected by software. It also removes transmit PAUSE support from all 82542 revisions even though the hardware restriction applies only to rev 2.0. Resolve the NVM default only when requested, scope the transmit restriction to rev 2.0, and replace integer bit masking of the enum with explicit valid mode transitions. This restores the behavior from before the Intel shared-code split and resolves -Wassign-enum. Reported by: glebius MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: fix data direction encoding for read commands The data_direction field in the UTP Transfer Request Descriptor is only 2 bits wide ([26:25]). UFSHCI_DATA_DIRECTION_FROM_TGT_TO_SYS was defined as 0x10, which truncates to 0b00 (No data transfer) when stored into the 2-bit field, so every read command was described to the controller as having no data phase. Only writes (0b01) happened to be encoded correctly. Define all values as 2-bit binary literals, matching the existing RESERVED = 0b11 entry, so read is encoded as 0b10 as required by the specification. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58652
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: abort submission when payload DMA mapping fails When bus_dmamap_load_mem() failed, ufshci_req_queue_prepare_prdt() manually completed and released the tracker, but its caller kept going: it built the UTRD, set the slot back to SCHEDULED, and rang the doorbell for a tracker whose request had already been freed. Return the mapping error and stop the submission so the released tracker is not resurrected. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58653
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: fail attribute reads on a non-zero config result code ufshci_uic_send_cmd() only logged the error code and returned success, so a failed DME_GET gave its caller a stale value as if it were valid. The gear and lane settings could then be programmed from that garbage. Return ENXIO for reads instead. Writes keep logging and continuing, because a device may reject an optional attribute and that must not fail bring-up. Sponsored by: Samsung Electronics Reviewed by imp (mentor) Differential Revision: https://reviews.freebsd.org/D58654
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: handle controller command submit failures Return submission errors from the controller command helpers and propagate them to polled callers before waiting for completion. Free requests that never enter a hardware queue so failure paths do not leak or panic after the poll timeout. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58655
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: fix SCSI I/O request failure cleanup ufshchi_sim_scsiio() did not check the M_NOWAIT request allocation for NULL. The CDB validation and submit failure paths also returned without freeing the request. Fail the CCB when the allocation returns NULL. Free the request on every failure path. Mark the CCB as queued right before the submit, so the failure paths above do not need to touch that flag. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58656
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: free the lookup path when the periph search times out ufshci_sim_find_periph() freed the lookup path only when it found the periph. The timeout path returned without freeing it and leaked the path. Free the path at the single exit instead. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58657
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: fix WLUN periph reference counting The driver stored the WLUN periph pointer without holding a reference, so the pointer went stale when the pass(4) device went away. In addition, ufshci_sim_send_ssu() released a reference that it had never acquired. Define a simple ownership rule. ufshci_sim_find_periph() acquires the periph and returns it. The cache owns one reference. The controller destructor drops it with cam_periph_release() before taking the SIM lock, since the release takes the CAM device lock by itself. ufshci_sim_send_ssu() acquires its own reference and releases it when done. Reuse the cached periph instead of searching again, so the old reference is not leaked. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58658
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: free the correct address when DMA load fails The bus_dmamap_load() error paths passed hwq->utrd and req_queue->ucd to bus_dmamem_free(), but both pointers are only assigned after a successful load and are still NULL at that point. The freshly allocated memory was leaked. Free the local buffer instead. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58659
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: tolerate partially constructed queues in SDB teardown When attach fails, ufshci_req_sdb_destroy() runs on a partially constructed queue, and it runs twice: once from the construct error path and once from the controller destructor. Make that safe: NULL-check each resource before freeing it and clear the pointer afterwards, so a second call finds nothing to do. The construct error label no longer frees the command descriptors itself, which fixes a double free of ucd_bus_addr. Also destroy the payload DMA tag, which was previously leaked. Drop the mtx_initialized() checks: the locks are always set up before any failure path can reach the destroy. Attach can also fail before the queues were constructed at all. The destructor would then call a NULL qops.destroy pointer, so skip the destroy when the queue was never set up. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58660
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: check SDB queue allocations for failure The hardware queue and ucd_bus_addr allocations use M_NOWAIT but were used without a NULL check, and the payload bus_dmamap_create() return value was ignored, so a failed allocation was only discovered by faulting on it later. Fail the construction instead. The teardown path handles the partially constructed queue. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58661
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: do not free the devq twice on SIM attach failure cam_sim_free() with free_devq set already frees the devq, so the following cam_simq_free() call on the xpt_bus_register() and xpt_create_path() failure paths was a double free. Also clear ctrlr->ufshci_sim so a later ufshci_sim_detach() does not operate on the freed SIM. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58662
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: initialize alloc_units before the dedicated-buffer scan If every unit descriptor read failed in the LU-dedicated WriteBooster scan, alloc_units was used uninitialized. Start it at zero so that case is treated as a zero-sized buffer and WriteBooster is disabled. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58663
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: byte-swap big-endian UPIU fields The UPIU wire fields are big-endian. The task management and query builders wrote host-order values into them. The completion paths also read the results back without conversion. On a little-endian host an ABORT_TASK carried a swapped task tag and LUN, a query carried a swapped length, and attribute reads returned swapped values. Tolerant devices masked most of the damage. Convert with htobe*/be*toh at the wire boundary, as ufshci_sim.c already does for its fields. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58664
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: initialize desc_size for non-descriptor query requests The flag and attribute query builders left param.desc_size uninitialized, so stack garbage was sent as the query UPIU length field. Devices generally ignore the length for these opcodes, which hid the bug. Zero it explicitly. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58665
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: read UIC command results while holding the lock The UIC result registers (UICCMDARG2/3) are only valid between a command's completion and the next command's submission. They were read after uic_cmd_lock was dropped, so a concurrent UIC submitter could overwrite them in between. Read them into locals before releasing the lock. Also mask the generic error code to its [7:0] field when checking it, so unrelated bits in UICCMDARG2 (such as the attribute set type echoed for DME_SET) cannot be mistaken for an error. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58667
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: check completions under the queue lock The completion scan held only the recovery lock. The submit path sets a slot to SCHEDULED and then rings the doorbell, both under the queue lock. A scan running between those two steps saw a SCHEDULED slot with a clear doorbell and completed a command the device had not started. The command failed with OCS 0xf, and a reused slot could return wrong read data. Check the slot state and the doorbell under the queue lock. The submit path holds it across both steps, so a half-submitted slot can no longer be seen. Found with fio randrw verify on QEMU. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58668
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: release the CCB after sending a start stop unit command ufshci_sim_send_ssu() got a CCB from cam_periph_getccb() but never returned it. Each call leaked the CCB and one slot of the device's CCB allocation budget. When the budget runs out, the next cam_periph_getccb() waits forever and the suspend path hangs. Release the CCB while the periph lock is still held, as the other CAM periph drivers do. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58669
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: free the taskqueue on detach ufshci_ctrlr_destruct() never freed the taskqueue. Every load and unload cycle leaked the taskqueue and its kernel thread. A task that was still queued could also run after the module was gone. Free the taskqueue in destruct. Do it after the interrupt teardown so nothing enqueues new work. A reset task that is still queued at this point races the queue teardown. That race is older than this change. The planned in-flight recovery rework will close it. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58670
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ufshci: do not reset the device in the XPT_RESET_DEV handler CAM calls the SIM action callback with the SIM lock and the CAM device lock held. The XPT_RESET_DEV handler called ufshci_dev_reset(), which sleeps on device commands. Sleeping there panics when another thread contends for the lock: "panic: sleeping thread holds CAM device lock". Report success without touching the device, as nvme_sim(4) does. A real device reset needs the controller reset path. That rework is planned together with in-flight request recovery. Sponsored by: Samsung Electronics Reviewed by: imp (mentor) Differential Revision: https://reviews.freebsd.org/D58671
debug: classified in
03-filenames_plain1 by
'sys/dev/'
A PF reset or loss of virtchnl service can make visible interface initialization wait up to ten seconds and then return from the void ifdi_init callback. Iflib consequently marks the interface running even though its queues were not initialized, and no retry is scheduled when the PF returns. Check reset readiness without polling during reinitialization, propagate queue-message submission errors, and bound a silent enable or disable to one mailbox timeout. Report unsuccessful initialization to iflib and publish link-down state without polling the stopped mailbox. A VFLR also discards the Admin Queue and permits the PF to replace the VF VSI. Track when full virtchnl rediscovery is required, renegotiate the API version, refresh and validate the VF resources before using a cached VSI ID, and replay the MAC and VLAN filters cleared by reset. Bound each runtime discovery attempt while preserving the existing attach-time wait. While the VF remains administratively up, retry complete initialization after 250 ms, one second, four seconds, and then at a capped eight-second interval. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixl uses head writeback by default. Hardware publishes the transmit ring head through DMA only after completing a descriptor marked RS. Marking every packet requested much more frequent head updates than iflib needs to reclaim descriptors. iflib marks selected packets with IPI_TX_INTR as completion checkpoints. It forces a checkpoint as deferred work or ring pressure grows. Retain EOP on every packet, but set RS only at those checkpoints. This batches head writebacks while preserving bounded descriptor reclamation. The optional descriptor writeback mode benefits as well. ixl already recorded only IPI_TX_INTR descriptors in its report-status queue, so status written for every other packet was not inspected. DPDK uses the same sparse RS design. Let iflib choose the adaptive interval for FreeBSD. This is a PCIe/memory bandwidth savings. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
iavf uses descriptor writeback by default. Hardware writes completion status into a transmit descriptor only when it completes a descriptor marked RS. iavf marked every packet RS even though its report-status queue recorded and inspected only descriptors selected by iflib. The other completion writes could not help reclaim descriptors. iflib marks selected packets with IPI_TX_INTR as completion checkpoints. It forces a checkpoint as deferred work or ring pressure grows. Retain EOP on every packet, but set RS only at those checkpoints. The deprecated head-writeback option on 700-series VFs gets the same batching: each RS checkpoint permits hardware to publish the completed ring head. DPDK uses the same sparse RS design. Let iflib choose the adaptive interval for FreeBSD. This is a PCIe/memory bandwidth savings. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The VF array is zeroed at allocation, but its sysctl contexts were only populated after each VF was successfully added. If VF setup failed, IOV teardown still passed every requested VF context to sysctl_ctx_free(). An untouched context is not an initialized empty TAILQ and caused a page fault during teardown. Initialize every VF context with the array so both successful setup and partial-failure cleanup have a valid lifetime. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
pci_iov_enumerate_vfs() logged a failed VF creation or driver configuration but still reported the whole SR-IOV configuration as successful. The PF remained enabled with the requested NumVFs and driver state even though one or more VF children were absent. Make VF enumeration atomic. Delete children created by the failed attempt, invoke the PF driver cleanup, disable VF memory space and VF Enable, release the IOV resources, and return the original error to iovctl. Also treat failure to create a VF child as an error instead of silently accepting a partial configuration. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Bound variable-length virtchnl messages before computing their expected length, following the newer Intel virtchnl implementation. Validate VF ring sizes and alignments before programming HMC contexts. DPDK uses 128-byte ring alignment and 64 through 8160 descriptors; the virtchnl ABI further specifies TX multiples of 8 and RX multiples of 32. Preserve the 4096-descriptor limit on X722. Validate queue bitmaps before changing any rings, validate all queue and interrupt contexts before applying a request, and reject invalid RSS table entries. Also avoid sending an ACK after VLAN-strip setup fails and reply to delete-VLAN errors with the correct opcode. These checks prevent malformed or oversized requests from an untrusted VF from partially programming resources outside its allocation. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixl: Make VF reset resource reconstruction fallible Treat each stage of VF reset and VSI reconstruction as fallible. Keep the VF out of VFACTIVE when PCIe drain, reset completion, VSI release, or VSI allocation fails, following the DPDK PF reset model. Propagate initial reset failures back through pci_iov_vf_add and unwind the VF queue allocation. Free the old software filter list before initializing a replacement VSI. ixl_init_filters() previously replaced the list head without freeing its entries, so every VF FLR leaked all MAC and VLAN filter objects. Reset the associated counters and VLAN bitmap with the list. Avoid allocating an initial VSI only to destroy it during the required initial VF reset, and remove redundant broadcast/filter programming from VSI setup. Also delete a partially created VSI when later Admin Queue setup fails. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixl: Enforce VF VLAN policy Add access and trunk VLAN policy to the SR-IOV schema. Access VFs use a hardware PVID and cannot alter their VLAN membership. Trunk VFs may register up to 16 VLANs, while VLAN 0 remains implicitly admitted for untagged and priority-tagged traffic. Enable hardware VLAN anti-spoofing and maintain the MAC-by-VLAN filter cross-product used by DPDK. Apply Linux's untrusted-VF limits of 18 MAC addresses and 16 VLANs so one guest cannot consume the shared PF filter table without bound. Report the effective policy through the VF status interface and document the iovctl schema. MFC after: 2 weeks Relnotes: yes
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixl: Rebuild VF resources after a PF reset A PF or EMP reset destroys the firmware switch topology, including every VF VSI. The driver rebuilt only its PF VSI and left configured VFs with stale switch element and VSI identifiers. Notify VFs before a driver initiated reset, recreate the IOV VEB, and rebuild each configured VF VSI and queue mapping after the PF switch is restored. Keep a VF out of VFACTIVE if its reconstruction fails so one failure cannot expose incomplete resources or prevent the PF and other VFs from recovering. Invalidate cached VF firmware identifiers and runtime state before recreating the VEB. If VEB creation itself fails, teardown and mailbox paths can no longer use pre-reset SEIDs or VSI data. Factor the common VEB setup out of IOV initialization so initial setup and post-reset reconstruction use the same topology and filter sequence. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixl: Report PF initialization failures to iflib ixl_if_init() returned early after AdminQ reconstruction, LAA, or VSI initialization failures. Since IFDI_INIT has no return value, iflib then marked the interface RUNNING and enabled its interrupts and timers despite the incomplete hardware state. Use iflib_init_failed() on each incomplete path. Also stop at the first ring-enable error and tear down any partially enabled rings before reporting failure. This keeps the interface stopped and makes a later initialization attempt start from a bounded state. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixl: Track and recover MDD-blocked VFs The hardware identifies each VF with TX and RX malicious-driver status latches, but the driver combined all events into one counter and reported only the last VF found. It also did not record that hardware had blocked the VF, leaving the condition invisible to management tools. Consume every PF and VF latch, keep per-direction VF counters, rate-limit per-VF diagnostics, and report the blocked and traffic-enabled state via the VF status interface. Clear the software block only after a successful VF or PF reset reconstructs its resources. Match Linux i40e policy by leaving a detected VF blocked by default. Add an opt-in hw.ixl.mdd_auto_reset_vf tunable that notifies and resets the VF for installations that prefer availability. DPDK provides the register clear and per-VF attribution precedent; Linux provides the recovery policy. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
ixl: Quiesce VF DMA before a PF reset A PF reset has a warning interval before the hardware reset begins. Cooperative VF drivers respond to the reset event by stopping and releasing their receive buffers, but notifying VFs did not stop the hardware queues. An active VF could therefore DMA through its old rings into freed mbuf clusters during the warning interval. Put every enabled VF in reset, drain its PCIe transactions, disable its queues, wait for receive queue shutdown, and drain transactions again before tearing down the PF HMC and AdminQ. Hold VFs in reset again while rebuilding the firmware topology. Release VF reset before programming the replacement VSI and queue mappings, since VF reset clears those registers, and publish VFACTIVE only after reconstruction succeeds. Leave a VF held in reset if rebuilding it fails. Fixes: https://cgit.freebsd.org/src/commit/?id=983e628a0c47 ("ixl: Rebuild VF resources after a PF reset") MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
A PF link event remains cached while a VF is administratively down. Media status queries called iavf_update_link_status() and published that cached state as link-up, while the stopped admin path immediately published link-down. Consumers reacting to link events could turn this into an unbounded notification loop and prevent interface detach from draining its link-state task. Keep the cached PF state, but only publish link-up after iflib has marked the VF running. A subsequent admin pass publishes the cached state after a successful initialization. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
A PF reset indication leaves IAVF_STATE_RESET_PENDING set while the VF recreates its AdminQ and negotiates new resources. The ordinary AdminQ task refuses to consume messages while that state is set. Consequently, the first DISABLE_QUEUES reply after successful mailbox rediscovery remains in the receive queue and initialization times out. Later retries and manual interface restarts repeat the same cycle. Clear the stale reset indication once VERSION and GET_VF_RESOURCES have succeeded, before enabling interrupts and resuming normal virtchnl requests. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
This change introduces a variant of `pmap_invalidate_range` that uses the fine-grained TLB invalidation instructions introduced by the Svinval extension. These instructions allow for more efficient TLB flushing on certain implementations. Under this new scheme, `pmap_invalidate_range` was converted to an ifunc that selects the appropriate variant during boot. Event: BSDCan 2026 Reviewed by: markj, mhorne Differential Revision: https://reviews.freebsd.org/D57624
debug: classified in
03-filenames_plain1 by
'sys/riscv/'
The VF link-status path can receive 2.5 and 5 Gb/s speed bits from X550-family PFs, but media reporting has no cases for them. The bootverbose message also assumes every non-10-Gb/s link is 1 Gb/s. Expose the corresponding ifmedia subtypes and derive the diagnostic speed through the shared link-speed conversion helper. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
X550-family devices provide clear-on-read counters for transmit and receive Low Power Idle events. Accumulate each register once in the normal statistics poll and expose the monotonic totals below the eee sysctl node. Document the counters together with the existing EEE control. Obtained from: Intel ix 3.4.39 MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
10G-BX optics use paired wavelengths to carry 10 Gb/s Ethernet over a single strand of single-mode fiber. Their 10G compliance byte is empty, so identify them from the SFF-8472 nominal signaling rate and single-mode reach fields. When an EEPROM also advertises 1G BASE-BX10, give the complete 10G bitrate and reach signature precedence. Otherwise retain FreeBSD's permissive 1G-BX identification rather than requiring a nominal 1.3 GBd rate. MFC after: 2 weeks Relnotes: yes
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The 82599 and X540 share the global RSS redirection table between the PF and its VFs. Programming that table from the PF queue count prevents a VF from using queue indices absent from the PF layout. A one-queue PF consequently directs every flow for a two- or four-queue VF to queue zero. Program at least four queue indices while SR-IOV is active. Each pool PSRTYPE.RQPL field masks the shared table to the queue subset available to that function, so the PF can continue using fewer queues. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
These are already available and having them defined helps keep the KASAN atomic(9) interceptors uniform. Reviewed by: mhorne MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58680
debug: classified in
03-filenames_plain1 by
'sys/riscv/'
According to Linux 5f1c3589b0f0, the X550 PHY classifier still matches an alpha silicon ID, while the shared definitions contain the two production IDs. This can leave production hardware on the generic probing path and issue unnecessary PHY queries. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The management_pkts_drpd sysctl was wired to MNGPTC, making it an alias of management_pkts_txd, instead of MNGPDC. MFC after: 3 days
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Found with: clang -Werror=assign-enum Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58710
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Some devices take a little longer, and the spec doesn't really seem to mandate a maximum. The common path in usbd_req_set_address() has already been bumped to 1s and I have a headset (Logitech H390) that does need a little bit longer, so let's match it in xhci. Reviewed by: aokblast Differential Revision: https://reviews.freebsd.org/D58717
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Added support for E835 adapters with post-quantum cryptographic (PQC) algorithms in firmware/software signage and in SPDM attestation. Signed-off-by: Pawel Sobczyk <pawel.sobczyk@intel.com> Reviewed by: Miłosz Linkiewicz <milosz.linkiewicz@intel.com> MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D57868
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Add support for future client platform MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Panther Point changed the reset value of CTRL_EXT.DPG_EN to enable autonomous power gating. Clear it after hardware reset on Panther Point and Nova Point controllers to prevent unexpected Tx/Rx hangs, packet loss, or corruption. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
pmc_capture_user_callchain() checks a PMC's runcount before walking the user stack, but reads it without holding the spinlock that protects it. hardclock() can run on the same CPU during the capture and drop the runcount to zero in between, tripping the assertion and panicking INVARIANTS kernels under load. Move the check inside the existing spinlock, right where the code already confirms the sample is still valid. No functional change on kernels built without INVARIANTS. Signed-off-by: Andre Silva <andasilv@amd.com> Reviewed by: mhorne MFC after: 1 week Sponsored by: AMD Differential Revision: https://reviews.freebsd.org/D58571
debug: classified in
03-filenames_plain1 by
'sys/dev/'
pmc_capture_user_callchain() asserts that TDP_CALLCHAIN is set on the current thread, but PMC_UR samples never set that flag -- only PMC_HR and PMC_SR do. That makes the assertion always fail for PMC_UR, panicking INVARIANTS kernels as soon as pmcstat -U is used. Skip the assertion for PMC_UR. No functional change on kernels built without INVARIANTS. Signed-off-by: Andre Silva <andasilv@amd.com> Reviewed by: mhorne MFC after: 1 week Sponsored by: AMD Differential Revision: https://reviews.freebsd.org/D58572
debug: classified in
03-filenames_plain1 by
'sys/dev/'
No functional change intended. Sponsored by: The FreeBSD Foundation MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DPDK commit message net/e1000/base: fix iterator type Fix static analysis warning about comparison between types of incompatible width, which might lead to an infinite loop due to overflow. Fixes: https://cgit.freebsd.org/src/commit/?id=af75078fece3 ("first public release") Cc: stable@dpdk.org Signed-off-by: Amir Avivi <amir.avivi@intel.com> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Obtained from: DPDK (3d36053991) MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DPDK commit message net/e1000/base: fix NVM data type in bit shift There is a static analysis warning due to wrong data types being used for NVM read data shifts. Fix it via explicit type cast. Fixes: https://cgit.freebsd.org/src/commit/?id=38db3f7f50bd ("e1000: update base driver") Cc: stable@dpdk.org Signed-off-by: Przemyslaw Ciesielski <przemyslaw.ciesielski@intel.com> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Obtained from: DPDK (b932270c66) MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DPDK commit message net/e1000/base: fix possible variable overflow Bits can be lost as temporary math is done on signed variables and the result is assigned to an unsigned variable. Cast to u32 to force the compiler to do operations on unsigned temporary variables. Fixes: https://cgit.freebsd.org/src/commit/?id=af75078fece3 ("first public release") Cc: stable@dpdk.org Signed-off-by: Lukasz Czapnik <lukasz.czapnik@intel.com> Signed-off-by: Ciara Loftus <ciara.loftus@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Obtained from: DPDK (214cb0d7f1) MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DPDK commit message net/e1000/base: fix NVM loop bounds and pointer access Improve the NVM checksum routines by ensuring loop bounds are compared at the correct integer width. Use array indexing instead of explicit pointer arithmetic. Fixes: https://cgit.freebsd.org/src/commit/?id=af75078fece3 ("first public release") Cc: stable@dpdk.org Signed-off-by: Menachem Fogel <menachem.fogel@intel.com> Signed-off-by: Dima Ruinskiy <dima.ruinskiy@intel.com> Signed-off-by: Ciara Loftus <ciara.loftus@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Obtained from: DPDK (39fba42d04) MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DPDK commit message net/e1000/base: improve NVM checksum handling When reading NVM checksum, we may encounter the following scenarios: - Checksum may be invalid, and can be updated - Checksum may be invalid but cannot be updated because NVM is read-only For the latter case, we should just ignore invalid checksum and not attempt to update it. Signed-off-by: Sasha Neftin <sasha.neftin@intel.com> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Obtained from: DPDK (5241c17f0d) MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Some transitional Tiger Lake systems shipped with an uninitialized checksum word. Accept that state while continuing to validate newer read-only NVM images. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The shared semaphore helper accesses both the 82571 retry counter and the I210 one-time-clear flag. Those fields occupy overlapping members of the device-specific union. On 82571, incrementing the counter thus enables the I210 recovery and clears SMBI after the first timeout. Give 82571, generic 80003/82575, and I210/I211 users distinct acquire paths. Preserve the legacy peer-driver policy on 82571 and one-time recovery on I210. The separation follows the Intel e1000 base code in DPDK. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DPDK commit message net/e1000/base: fix semaphore timeout value According to datasheet, software ownership of SWSM.SWESMBI bit should not exceed 100ms. Current implementation caused incorrect timeout counter values, where each iteration equals 50us delay. Because of that driver was allowed to wait for semaphore even for 1.5s. This might trigger DPC timeout. This implementation hardcodes value to 2000, which multiplied by 50us, gives 100ms of possible wait time. Fixes: https://cgit.freebsd.org/src/commit/?id=af75078fece3 ("first public release") Cc: stable@dpdk.org Signed-off-by: Pawel Malinowski <pawel.malinowski@intel.com> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Obtained from: DPDK (c8bcaf0f2a) MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DPDK commit message net/e1000/base: fix unchecked return Static analysis has detected a write that is not checked for errors, leading to ignored error return value. Add a check. Fixes: https://cgit.freebsd.org/src/commit/?id=edcdb3c5f71b ("e1000/base: fix link flap on 82579") Cc: stable@dpdk.org Signed-off-by: Dima Ruinskiy <dima.ruinskiy@intel.com> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Obtained from: DPDK (b0b6b50c20) MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DPDK commit message net/e1000/base: add LPI counters Add new fields in structure to indicate if EEE LPI entries have been observed on Tx and Rx path. Signed-off-by: Sasha Neftin <sasha.neftin@intel.com> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Obtained from: DPDK (2e8078ee69) MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Accumulate the clear-on-read transmit and receive LPI event counters on EEE capable PCH and I350 family devices. Expose the 64-bit totals under the per-device eee sysctl node. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
sndcard_func is used as an ivar which passes around device info to the PCM and MIDI children in snd_csa(4) and snd_emu10kx(4). Simplify this and retire the need for sndcard_func, by 1) making an ivar only what used to be stored in sndcard_func->varinfo, 2) replacing sndcard_func->func with a child comparison, where needed, for instance in csa_detach(). sndcard_func is harmless in reality, but there is no reason to have the additional complexity. This way we also avoid the structure allocations. Sponsored by: The FreeBSD Foundation MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DPDK commit message net/e1000/base: fix reset for 82580 Fix setting device reset status bit in e1000_reset_hw_82580() function for 82580 by first reading the register value, and then setting the device reset bit. Fixes: https://cgit.freebsd.org/src/commit/?id=af75078fece3 ("first public release") Cc: stable@dpdk.org Signed-off-by: Barbara Skobiej <barbara.skobiej@intel.com> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Obtained from: DPDK (88a1eb79ef) MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DPDK commit message net/e1000/base: fix MAC address hash bit shift In e1000_hash_mc_addr_generic() the expression: "mc_addr[4] >> 8 - bit_shift", right shifting "mc_addr[4]" shift by more than 7 bits always yields zero, so hash becomes not so different. Add initialization with bit_shift = 1, and add a loop condition to ensure bit_shift will be always in [1..8] range. Fixes: https://cgit.freebsd.org/src/commit/?id=af75078fece3 ("first public release") Cc: stable@dpdk.org Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Obtained from: DPDK (1749e662f6) MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DPDK commit message net/e1000/base: fix data type in MAC hash One of the bit shifts in MAC hash calculation triggers a static analysis warning about a potential overflow. Fix the data type to avoid this. Fixes: https://cgit.freebsd.org/src/commit/?id=af75078fece3 ("first public release") Cc: stable@dpdk.org Signed-off-by: Barbara Skobiej <barbara.skobiej@intel.com> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Obtained from: DPDK (458734aaac) MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The multicast hash bit can be 31. Use an unsigned value so setting the bit cannot shift a signed integer into its sign bit. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The i210 and i211 can occasionally fail to accept multicast table writes, particularly while addresses are added and removed rapidly. Read the table back and rewrite mismatches for up to three passes. This prevents multicast reception from retaining stale filter state while keeping the workaround limited to the affected controllers. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
A reset NACK from a Linux PF means that the reset completed but no permanent MAC address was assigned. Treat that response as a successful reset with a zero permanent address so attach can generate a local address instead of retrying a live mailbox. FreeBSD PFs also use a one-dword reset NACK while retained queues are being sanitized. Seed the otherwise unused request payload and accept only the three-dword, zero-filled NACK used by Linux, preserving the FreeBSD retry contract. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Return a PHY write failure immediately when disabling D0 low-power link-up on 82571-family controllers. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The multicast hash bit can be 31. Use an unsigned value so setting the bit cannot shift a signed integer into its sign bit. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The multicast vector bit can be 31. Use an unsigned value so setting the bit cannot shift a signed integer into its sign bit. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DPDK commit message net/e1000/base: fix iterator type Fix static analysis warning about comparison between types of incompatible width, which might lead to an infinite loop due to overflow. Fixes: https://cgit.freebsd.org/src/commit/?id=af75078fece3 ("first public release") Cc: stable@dpdk.org Signed-off-by: Amir Avivi <amir.avivi@intel.com> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Obtained from: DPDK (3d36053991) MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DPDK commit message net/e1000/base: fix MAC address hash bit shift In e1000_hash_mc_addr_generic() the expression: "mc_addr[4] >> 8 - bit_shift", right shifting "mc_addr[4]" shift by more than 7 bits always yields zero, so hash becomes not so different. Add initialization with bit_shift = 1, and add a loop condition to ensure bit_shift will be always in [1..8] range. Fixes: https://cgit.freebsd.org/src/commit/?id=af75078fece3 ("first public release") Cc: stable@dpdk.org Signed-off-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Obtained from: DPDK (1749e662f6) MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
DPDK commit message net/e1000/base: fix data type in MAC hash One of the bit shifts in MAC hash calculation triggers a static analysis warning about a potential overflow. Fix the data type to avoid this. Fixes: https://cgit.freebsd.org/src/commit/?id=af75078fece3 ("first public release") Cc: stable@dpdk.org Signed-off-by: Barbara Skobiej <barbara.skobiej@intel.com> Signed-off-by: Anatoly Burakov <anatoly.burakov@intel.com> Acked-by: Bruce Richardson <bruce.richardson@intel.com> Obtained from: DPDK (458734aaac) MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Do not modify a zero-initialized PHY control value when its preceding read failed. Leave the PHY unchanged when the void power helpers cannot read its current state. This follows the defensive checks added to the corresponding e1000 helpers. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
A manageability VLAN can select bit 31 of its VFTA register. Use an unsigned value when constructing the register mask. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The PHY capability display examines all 32 bits of the firmware bitmap. Use an unsigned value so examining bit 31 does not shift a signed integer into its sign bit. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The driver already accumulates the clear-on-read transmit and receive LPI event counters. Expose the 64-bit totals under the per-device eee sysctl node. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
PHY identifier words are promoted to signed int when the cast is applied after the shift. Cast each 16-bit register value first so identifiers with their high bit set are assembled as unsigned data. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The PHY identifier word is promoted to signed int when the cast is applied after the shift. Cast the 16-bit register value first so identifiers with their high bit set are assembled as unsigned data. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The PHY identifier word is promoted to signed int when the cast is applied after the shift. Cast the 16-bit register value first so identifiers with their high bit set are assembled as unsigned data. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
No functional change intended. Sponsored by: The FreeBSD Foundation MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
I225 and I226 expose three programmable LED outputs. Use LED1 for adapter identification, following the convention in DPDK. Preserve the OEM configuration across identification requests. Restore the OEM configuration before a device reset so an active led(4) pattern cannot leave the output overridden across stop or detach. The LED mode values follow the Intel I225 Software User Manual. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The generic LED on and off operations do not handle internal SerDes media, leaving the led(4) device ineffective on my I210 fiber port. Use the hardware blink operation for the on phase on internal SerDes. The off phase restores the saved OEM LED configuration as before. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The debug routine advanced ring pointers as if rings were contiguous. They are embedded in queue structures, so rings beyond queue zero had the wrong stride. The bogus queue index could cause an invalid MMIO read and panic the machine. Index the queue arrays first and then select the embedded ring. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The debug routine reads queue registers by queue index. It also advanced unused pointers to rings embedded in queue structures. Those pointers had the wrong stride and could proceed beyond the ring object. Remove the unused pointer arithmetic. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Expose the physical port identification LED through /dev/led/ix*. Save and restore the NVM-selected LEDCTL value around each request. The X550 operations also clear their PHY manual override before the register is restored. Use the dedicated firmware port-identification command on E610. Its interface selects between firmware blinking and the original mode rather than directly controlling LEDCTL. Restore the normal indication before a device stop or reset. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Expose each physical port identification LED through /dev/led/ixl*. Use the existing GPIO LED helpers for most devices and the PHY provisioning interface for X710 10GBASE-T adapters. Preserve and restore the original GPIO or PHY indication mode, including before the interface is stopped. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/dev/'
I225 and I226 report uncorrectable internal memory errors through
ICR.FER and identify the affected region in PEIND. Depending on the
region, hardware stops transmit or all PCIe and DMA traffic until the
port is reset and reinitialized.
Enable the fatal error interrupt and capture its read clear status in
the interrupt filter. Mask the cause while an iflib reset is pending,
report the affected memory regions, and expose per region indication
counters.
PCIe region parity failures require a different recovery order from a
normal reset: assert DEV_RST, wait at least 3 ms, disable PCIe master
requests, clear PCIEERRSTS, and then reinitialize the port. Follow that
sequence before entering the normal reset path and clear the remaining
LAN status afterward.
The I225/I226 PBECCSTS layout is unrelated to the PCH layout previously
copied into the igc headers. Replace those unused definitions with the
I225/I226 memory error register definitions.
Hardware validation used an I225-IT revision 3 and a debug kernel that
wrote only the documented self-clearing injection bits. It did not
synthesize interrupt or status state.
Coverage, notably DMA and Mgmt are not fully testable in my setup:
Region Observed hardware status Result
LAN PEIND 0x1, LANPERRSTS 0x200 Reset and recovered
PCIe PEIND 0x4, PCIEERRSTS 0x8 Reset and recovered
DMA DRPARC injection read back zero DFT-gated on test NIC
Mgmt Host debug strap unavailable Not injectable
The repeated LAN and PCIe tests recovered without a panic or watchdog.
A PCIe-to-LAN sequence also verified that reset-time PEIND indications
are drained before FER is unmasked.
MFC after: 2 weeks
Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
I225 and I226 do not interrupt for corrected internal ECC errors.
Instead, the DMA packet buffer and PCIe memories expose sticky status
bits in PBECCSTS and PCIEECCSTS.
Sample these bits with the regular hardware statistics update, preserve
the PBECCSTS ECC enable state while clearing its RW1C indication, and
expose separate counters for the DMA packet buffer, PCIe transmit-data
memory, and PCIe retry buffer.
These counters represent observed indications rather than an exact error
count because multiple corrections between samples collapse into one
sticky status bit.
Hardware validation used an I225-IT (rev 3) and a debug kernel that
wrote only the documented self-clearing injection bits. Each test
armed the injector, exercised the owning RAM with traffic, and compared
the corresponding counter before and after.
Coverage:
Memory Observed result
DMA packet buffer corrected_dma advanced once
PCIe transmit data corrected_pcie_tx_data advanced once
PCIe retry buffer No PCIe replay source; not exercised
The retry-buffer injector requires a real PCIe replay to read the
corrupted entry. The test root port exposed AER and DPC reporting but
no protocol error injector, so ordinary traffic could not cover that
case.
MFC after: 2 weeks
Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
thunderbolt: Get NHI version number from caps Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D49452
debug: classified in
03-filenames_plain1 by
'sys/dev/'
thunderbolt: Reset controllers Reset routine for both v1.0 and v2.0 routes, chosen depending on version reported in caps. Reviewed by: imp Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D49452
debug: classified in
03-filenames_plain1 by
'sys/dev/'
thunderbolt: Explicitly read NHI ISR0 register to clear it This fixes and issue where Pink Sardine controllers were not receiving interrupts for more than the first command sent on the ring. Reviewed by: emaste, imp Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D52862
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Query the firmware for the LEDs on each physical port and expose /dev/led/bnxt* only when alternate blinking is supported. Configure every LED in the advertised group for identification and restore its default firmware state before a function reset. This follows the DPDK and Linux bnxt HWRM identification paths. Reviewed against: DPDK, Linux Reviewed by: Sumit Saxena <sumit.saxena@broadcom.com> MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Rewrite pmap_s1_invalidate_strided() to use range-based TLBI instructions when they are when available. This change can significantly reduce the number of invalidation instructions issued, leading to decreased system time. (More details on the decrease can be found in the review.) Assisted-by: Claude Code (Opus 5) Reviewed by: kib, markj MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58708
debug: classified in
03-filenames_plain1 by
'sys/arm64/'
While testing an unrelated pmap change, D58708, that dramatically reduces the number of TLBI instructions performed, and likely the timing of unrelated events, I started seeing "Storing an invalid VFP state" panics in vfp_save_state_common(). However, the origin of this panic is elsewhere, in the else branch of sve_restore_state(). Specifically, my pmap change seems to have increased the likelihood that the thread executing the else branch would be preempted by another thread between the critical_exit() inside the else branch's call to vfp_restore_state_common() and its own call to critical_enter(). Prior to expanding the scope of the else branch's critical section, the MPASS added by this change would fire, catching the problem at its source, rather than later in vfp_save_state_common(). Assisted-by: Claude Code (Opus 5) Reviewed by: kib, markj MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D58723
debug: classified in
03-filenames_plain1 by
'sys/arm64/'
A PCI function can provide a host bridge into a synthetic PCI domain. Intel VMD does this: the host facing VMD function remains in its original domain while the hidden Root Ports and endpoints appear in a separate domain. The VMD function's Device Control does not describe an upstream link in that synthetic hierarchy. The hierarchy wide cold pass incorrectly used the VMD function's MPS to reprogram the hidden ports and their endpoints. Stop both cold reconciliation and runtime path walks at a PCI domain boundary. The real Root Ports within the VMD domain continue to reconcile their endpoints normally. Reviewed by: imp Tested by: Michael Butler <imb@protected-networks.net> Fixes: https://cgit.freebsd.org/src/commit/?id=8e9fe9996a1f ("pci: Reconcile MPS before attaching PCIe devices") MFC after: 6 days Sponsored by: BBOX.io Differential Revision: https://reviews.freebsd.org/D58837
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Move the capability and quirk checks used by pcie_flr() into a public side effect free helper. This lets callers determine whether an FLR can be attempted before quiescing a device or saving state. The helper considers the advertised PCIe FLR capability and both the enable and disable FLR quirks. MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
E610 Hyper-V VFs use PCI configuration space communication instead of the native PF/VF mailbox. The generic E610 match currently attaches native mailbox operations to those devices, and the imported Hyper-V subdevice identifier is incorrect. Correct the subdevice identifier to 0x00ff, as used by DPDK shared ixgbe code, and reject that subtype until ixv has a complete Hyper-V operations table. MFC after: 1 week Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
E610 VFs no longer report the actual PF link state and speed through VFLINKS. They can consequently report the default 10 Gb/s speed even when the physical link uses another rate. Negotiate mailbox API 1.6 on E610 and request the PF link state with its three-dword operation. Retain VFLINKS as the fallback when an older PF rejects API 1.6. Permit API 1.6 in the inherited xcast and queue discovery helpers so negotiating the newer revision does not disable existing operations. Use GET_QUEUES to replace E610's one-queue fallback with the grant from the PF. The common path continues to use one iflib queue set per data MSI-X vector and caps the result at two queue pairs. Preserve mailbox transport errors so the driver can distinguish an explicit PF NACK from a transient timeout. A NACK means clear-to-send state was lost and requires a VF reset. Preserve the last confirmed link state across brief transport failures and publish link down after three consecutive failures. Poll E610 link state every two seconds, matching Intel's ixgbevf service timer, and phase VFs across the intervening iflib timer ticks. This avoids a mailbox polling herd when many VFs share a PF. Media-status queries return the cached state instead of starting another synchronous exchange. An admin interrupt caused by a mailbox reply only checks for an unsolicited PF reset, preventing a request/reply interrupt loop. Hardware validation on an E610 10GBASE-T PF exercised 63 VFs. Each VF negotiated API 1.6, two queue pairs, and three MSI-X vectors. Phased polling kept 31 active VFs idle, and all 63 recovered after a PF down/up cycle without watchdogs. Adapt the API 1.6 link-state operation from DPDK shared ixgbe code. The timeout and NACK distinction follows Intel ixgbevf 5.3.25. MFC after: 2 weeks Sponsored by: Dirk-Willem van Gulik from Web Weaving (E610 hardware) Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
E610 inherits the X550-family virtualization registers, anti-spoofing controls, and malicious-driver operations, but the frontend does not advertise SR-IOV and cannot negotiate the mailbox revision needed by E610 VFs. Initialize the X550-family PF/VF mailbox registers for E610 and use PFVFLREC for its VF reset events, following DPDK shared ixgbe code. Advertise the E610 SR-IOV capability, accept API 1.6 only on E610, carry the existing xcast and queue operations forward to that revision, and return the cached physical link speed and state with the three-dword E610 operation. Unsupported RSS and optional feature requests continue to receive explicit failures. SR-IOV activation also enables the existing X550-derived per-pool MDD recovery path on E610. Document the expanded protection and link-state coverage. Hardware validation created 63 VFs and rejected a 64th without flapping the running PF. Invalid TX and RX descriptor DMA independently asserted the offender's WQBR bit, gated only that VF, preserved sibling traffic, and recovered after the VF reset. FreeBSD ixv, FreeBSD DPDK, Linux ixgbevf, and Linux DPDK exercised the PF mailbox and data paths. MFC after: 2 weeks Relnotes: yes Sponsored by: Dirk-Willem van Gulik from Web Weaving (E610 hardware) Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The VF statistics registers are free running and are not cleared on read. The existing code records attach time bases and pre-reset totals, but never uses either when publishing counters. It instead replaces the low hardware bits directly, so counters can inherit pre-attach traffic or jump backward after a reset. Accumulate modular 32- and 36-bit deltas, following DPDK, while keeping the software totals across planned resets. Establish a fresh hardware baseline after each successful reset and invalidate the sampling epoch when mailbox state is lost. Detect unsolicited PF resets explicitly so a reset while link is down cannot be mistaken for counter wrap. Remove the unused base and saved-reset bookkeeping. On E610, packet and octet counters remained monotonic across a VF FLR and a PF down/up cycle. Traffic after each reset advanced both RX and TX counters. MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
X550 family devices provide a separate RSS key, redirection table, and MRQC register for every VMDq pool. With SR-IOV enabled, the driver continued programming only the global RSS state and never selected MRQC.MULTIPLE_RSS. VF-local RSS programming was therefore ineffective. Enable multiple-RSS mode for X550, X552, X553, and E610. Initialize the PF pool's 64-entry key, redirection table, and RSS hash controls. Leave each VF pool untouched so its driver retains ownership of its RSS key and mapping. E610 folds IPv6 extension-header traffic into its base RSS selectors and reserves the legacy EX selector bits. Translate those requested hash types rather than programming reserved bits. With two E610 VFs active and four PF queue sets, eight fixed TCP flows distributed across all four PF receive queues. E610 uses the same per-pool mode according to the E610 Datasheet, sections 7.1.3.6.2 and 8.2.2.8.20-21. MFC after: 2 weeks Sponsored by: Dirk-Willem van Gulik from Web Weaving (E610 hardware) Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
PFVFRSSRK contains ten 32-bit RSS key words, numbered 0 through 9. The previous inclusive range incorrectly ended at 10. MFC after: 1 week Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: Recover from PCH packet buffer ECC errors PCH LAN controllers beginning with I217 report uncorrectable packet buffer ECC errors through ICR.ECCER. Descriptor memory errors stop the MAC and require a reset before traffic can resume. Enable the interrupt on the PCH generations whose shared code setup enables packet buffer ECC. Capture the read-clear PBECCSTS value in the interrupt filter, mask ECCER while recovery is pending, and request an iflib reset from the admin task. Reenable the cause only after hardware initialization succeeds. Hardware validation used an I219-LM and the documented ICS.ECCER bit to generate the fatal interrupt. This synthesizes the interrupt cause but does not corrupt packet buffer memory or alter its ECC byte counters. Three injections in one boot each requested one reset and recovered traffic without a panic or watchdog. IMS.ECCER and PBECCSTS.ECC_ENABLE remained set after every reset. MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: Report PCH packet buffer ECC statistics PCH packet buffer ECC status contains read-clear byte counters for corrected and uncorrected errors. Sample them with the regular hardware statistics update and account for the snapshot captured by the fatal error interrupt path. Expose the counters and the number of reset worthy interrupt indications under dev.em.N.memory_errors. Keeping the reset counter separate also preserves evidence when another status reader wins the read-clear race. Hardware validation used an I219-LM. Three documented ICS.ECCER injections advanced fatal_resets from zero to three, exactly once per reset. corrected_packet_buffer and uncorrected_packet_buffer remained zero, as expected because ICS does not inject a memory error or alter PBECCSTS. MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: Recover from I210 and I211 memory errors
I210 and I211 report uncorrectable internal memory errors through
ICR.FER and identify the affected region in PEIND. Depending on the
region, hardware stops transmit or all PCIe and DMA traffic until the
port is reset and reinitialized.
Enable FER and all regional indication masks. Discard indication state
left by firmware before enabling reactions, capture the read-clear
status in the interrupt filter, and keep the cause masked while recovery
is pending. Report the affected regions and expose per-region
indication counters. Management-only errors remain under firmware
control.
PCIe region parity errors require a different recovery order from the
normal reset path. Assert the port-local CTRL.RST bit, wait at least
3 ms, verify reset completion, disable master requests, clear
PCIEERRSTS, and then enter normal port reinitialization. Do not use the
device-wide CTRL.DEV_RST sequence used by I225 and I226.
Hardware validation used an I210 revision 3 and the self-clearing
LANPERRINJ retransmit-buffer bit 9. It injected a real parity error
without synthesizing interrupt or status state.
Three injections in one boot produced the following result each time:
Observed hardware status Result
PEIND 0x1, LANPERRSTS 0x200 Reset and recovered
fatal_lan advanced exactly once per injection. All tests completed
without a panic or watchdog, and FER and the LAN parity masks remained
enabled after every recovery.
MFC after: 2 weeks
Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: Report corrected I210 and I211 ECC errors I210 and I211 do not interrupt for corrected internal ECC errors. Instead, the DMA packet-buffer and PCIe memories expose sticky status bits in PBECCSTS and PCIEECCSTS. Sample these bits with the regular hardware statistics update, preserve the I210/I211 PBECCSTS enable state while clearing its RW1C indication, and expose separate counters for the DMA packet buffer, PCIe transmit data, and PCIe retry buffer. The counters represent observed indications rather than exact error counts because multiple corrections between samples collapse into one sticky status bit. Hardware validation used an I210 revision 3. Unlike I225 and I226, the published I210/I211 register definitions do not expose self-clearing injectors for these corrected ECC memories. The three counter sysctls were present and remained zero under line-rate traffic and three fatal LAN parity recoveries. PBECCSTS.ECC_ENABLE remained set after every reset. Actual corrected-error accounting was therefore not injected. MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: Recover from I350 memory errors I350 reports uncorrectable internal memory errors through ICR.FER and identifies the affected region in PEIND. Depending on the region and memory, hardware stops transmit, receive, or all PCIe and DMA traffic until the port is reset and reinitialized. Enable FER and all regional indication masks. Capture the read-clear status in the interrupt filter. Record the fatal PCIe, DMA, and LAN status registers, keep FER masked while recovery is pending, and expose per-region indication counters. Use the datasheet required port reset before master disable order for PCIe parity errors. Reset for PCIe, DMA, and traffic-affecting LAN errors. Statistics and VF-mailbox parity errors only require their status to be discarded and cleared; management-memory recovery remains under firmware control. Validated on an I350 (8086:1521 revision 1). Three software-set FER interrupts each advanced the unknown-region counter once, requested a single reset, restored carrier and traffic, and left FER rearmed without a watchdog. The software-set cause has no subordinate error status, so region attribution and region-specific clearing remain datasheet-based. MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: Report corrected I350 ECC errors I350 does not interrupt for corrected internal ECC errors. Instead, the PCIe, DMA, packet buffer, loopback, and management memories expose sticky status bits in their region-specific status registers. Sample those bits with the regular hardware statistics update, preserve the RX and TX packet buffer ECC enable state while clearing RW1C indications, and expose counters grouped by memory region. Each counter records observed indication bits rather than exact error counts because repeated corrections between samples collapse into one sticky bit. On an I350 (8086:1521 revision 1), the ECC enables remained set. All corrected-error status registers remained clear across boot, interface down/up, three FER recovery resets, and bidirectional line-rate traffic. The device has no documented corrected error injector. Therefore, the per-region paths were validated against the register definitions rather than an injected SRAM error. MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: Recover from 82576 memory errors 82576 reports fatal and non-fatal internal memory errors through ICR.FER and ICR.NFER and identifies the affected memory in its native PEIND layout. Fatal errors can stop transmit, receive, or both until software resets and reinitializes the port. Enable the controller-wide parity detector and implemented PEINDM reaction bits after hardware initialization, while preserving unrelated register state and omitting the absent IPsec memories on 82576NS. Enable both interrupt causes and capture the read-clear PEIND register in the interrupt filter. Keep the causes masked while the iflib admin task owns the event. Acknowledge non-fatal packet data errors without disrupting the port. Request normal port reinitialization for FER, a fatal PEIND source, or the memory hang indication. Do not apply the later I210/I350 register layout or their special PCIe parity reset order. Hardware validation used a dual-port 82576EB revision 1. Firmware left PEINDM at its 0x80000000 default; initialization explicitly programmed the parity-enable bit and produced 0xffffff07 on both ports. An NFER during two-stream TCP sustained line rate without a reset, watchdog, or carrier event. FER on the linked and disconnected ports each requested exactly one reset. The linked port resumed the existing TCP sessions after autonegotiation. PEINDM and both interrupt causes were restored after every reset. The injections set the ICR causes without corrupting SRAM, so their empty PEIND values deliberately exercised the unknown source path. MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: Report 82576 memory ECC errors 82576 exposes clear-on-read corrected error counters for RX, TX, switch, IPsec, descriptor-handler, PCIe retry, PCIe write, and MSI-X memories. The packet and descriptor memories also count uncorrectable errors. Sample each status register exactly once from the regular hardware statistics update and immediately before handling a memory-error interrupt. Group the counters by packet buffer, descriptor handler, and PCIe region. Skip the absent IPsec block on 82576NS. PRBESTS and PMSIXESTS are shared by both LAN ports. Attribute an indication to whichever attached port samples the clear-on-read register first so it is not counted twice. Hardware validation used an 82576EB revision 1. All nine implemented status registers reported their ECC-enable bit set. The sysctl counters remained clear across interface lifecycle, two-stream line-rate traffic, and NFER and FER cause injections. Each reset preserved the ECC enables while the driver restored PEINDM reactions. ICR cause injection does not corrupt SRAM, and the only documented data injector is specific to the IPsec packet buffer. Exact counter increments for the other memories were therefore validated against the register definitions rather than an injected ECC error. MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: Recover from 82575 memory errors 82575 protects its packet buffer and receive and transmit descriptor handlers with ECC. Correctable errors are repaired in hardware. Packet data errors are contained to the affected packet, while the native RX_PBUR, TX_PBUR, RX_DHER, and TX_DHER interrupt causes report unrecoverable packet buffer or descriptor handler state. The affected traffic direction remains stopped until software resets the port. Enable the three ECC blocks and hardware memory error reaction after queue and filter initialization. Capture the clear-on-read status registers in the interrupt filter and keep all four native causes masked while the iflib admin task owns the event. Request port reinitialization for every native PBUR or DHER cause. Packet data errors that do not raise a native cause remain count-only and do not disrupt the port. The captured status registers provide diagnostics and accounting but do not independently initiate recovery. Hardware validation used an 82575EB revision 2 and the documented PBEEI, RDHEEI, and TDHEEI injectors. Correctable TX/RX packet data and descriptor fetch/writeback errors preserved traffic. Uncorrectable TX/RX packet buffer header and descriptor fetch/writeback errors each requested one reset, restored traffic, and rearmed every ECC control. Repeated recovery produced no watchdogs. MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
e1000: Report 82575 memory ECC errors 82575 exposes clear-on-read, saturating counters for corrected and uncorrected errors in the packet buffer and the receive and transmit descriptor handlers. Sample all three status registers together from the regular hardware statistics update. When an unrecoverable event interrupts first, count the values captured by the interrupt filter so the clear-on-read status is not lost before the admin task handles it. Expose packet buffer and descriptor handler counters under the existing memory_errors sysctl node. Hardware validation used an 82575EB revision 2 and the documented PBEEI, RDHEEI, and TDHEEI injectors. Correctable and uncorrectable TX/RX packet-buffer errors and receive/transmit descriptor-handler errors advanced the corresponding counters. The controls and accounting survived repeated recovery resets and an ordinary interface down/up. MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
A media change can require a complete controller reset. Resetting the controller directly from the admin task leaves iflib rings, filters, and interface state programmed for the pre-reset controller. Request an iflib reset for every media change. This already was done when SR-IOV was active; use the same lifecycle for the ordinary PF case. MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The reset helper discards reset_hw and init_hw errors. Runtime initialization then continues programming rings and filters, and iflib publishes the interface as running even though the controller did not reach a usable state. Initial attach similarly continues into NVM and MAC setup after a failed reset. Return errors from the reset helper. Fail attach when the controller cannot be reset or initialized, and report runtime failures through iflib_init_failed() so iflib leaves the interface stopped. Also stop register accesses and report the error when a stop-path reset fails. MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The reset helper discards igc_reset_hw and igc_init_hw errors. Runtime initialization then continues programming rings and filters, and iflib publishes the interface as running even though the controller did not reach a usable state. Initial attach similarly continues into NVM and MAC setup after a failed reset. Return errors from the reset helper. Fail attach when the controller cannot be reset or initialized, and report runtime failures through iflib_init_failed() so iflib leaves the interface stopped. Also stop register accesses and report the error when a stop path reset fails. A later successful initialization completes pending fatal error cleanup and re-arms FER. Cache a requested MAC address before reset, but let init_hw program RAR0 after reset succeeds. Let iflib perform its normal attach-post failure cleanup instead of releasing the same driver resources from both layers, and make queue cleanup idempotent. MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The shared code provides e1000_check_phy_82574() to recognize a PHY hang from saturated receive error and idle error counters, but em(4) never calls it. Run the check from timer driven admin work. Match Intel e1000e by requiring two consecutive positive samples before requesting a full iflib reset. MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The D100 device ID was defined and handled by aq_hw_capabilities(), but had no entry in aq_vendor_info_array[], so the driver never probed it and the card was left unattached. Add the missing entry; the table lists the fibre variant last within each group, so it follows D109 rather than sorting numerically. Signed-off-by: Nick Price <nprice@FreeBSD.org> Accepted-by: adrian Approved-by: adrian (cherry picked from commit 4976b1d24abd6ff660e60041d1990b22c0bc2e5b)
debug: classified in
03-filenames_plain1 by
'sys/dev/'
aq_fw2x_thermal_arm() reached for a copper PHY register that the fibre parts do not implement, so arming failed on every init and printed a warning for a capability the hardware cannot have. Return ENOTSUP when the firmware does not advertise a temperature sensor, matching aq_fw2x_get_temp(), and warn only for a genuine failure. Signed-off-by: Nick Price <nprice@FreeBSD.org> Accepted-by: adrian Approved-by: adrian (cherry picked from commit 3c7f1aa3b831431193106f8610b2142131d774f5)
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Reviewed by: mhorne Differential Revision: https://reviews.freebsd.org/D57175
debug: classified in
03-filenames_plain1 by
'sys/riscv/'
This change implements the core clknode methods for the SpacemiT K1 clock control units. These methods were used to implement drivers for the APMU and PLL CCUs. The initial driver for the APMU CCU only contains clock definitions for the SDHCI controller for now. Differential Revision: https://reviews.freebsd.org/D57176 Reviewed by: mmel, mhorne, manu
debug: classified in
03-filenames_plain1 by '['sys/dev/',
'sys/riscv/']'
Reviewed by: mhorne Differential Revision: https://reviews.freebsd.org/D57178
debug: classified in
03-filenames_plain1 by '['sys/dev/',
'sys/riscv/']'
style(9): sys/param.h, then sys/systm.h, then the remaining kernel headers alphabetically. imgact.h belongs before proc.h. Reported by: jhibbits MFC after: 1 month Reviewed by: jhibbits Differential Revision: https://reviews.freebsd.org/D58884
debug: classified in
03-filenames_plain1 by '['sys/arm64/',
'sys/i386/']'
T2, T1, and some pre-T1 Macs advertise a legacy PIO range in the SMC ACPI _CRS alongside a live MMIO window, but the silicon behind the PIO range is bogus. Try MMIO first, validate via LDKN >= 2, fall back to PIO if that fails or no MMIO resource is present. Drop "(T2)" from the backend message since MMIO isn't T2-exclusive. MFC: 1 week Reviewed by: ngie Differential Revision: https://reviews.freebsd.org/D58839
debug: classified in
03-filenames_plain1 by
'sys/dev/'
The problem observed on X550 adapters with 2.5 and 5 Gbps speeds negotiation on some switches is not affecting E610 adapters. Remove workaround, which omitted those speeds in the list of initially advertised speeds and advertise all speeds supported by adapter. Signed-off-by: Krzysztof Galazka <krzysztof.galazka@intel.com> Reviewed by: kbowling Tested by: Mateusz Moga <mateusz.moga@intel.com> MFC after: 1 week Sponsored by: Intel Corporation Differential Revision: https://reviews.freebsd.org/D57339
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Two additional subdevice IDs were introduced to distinguish between adapters with and without manageability over USB support. Signed-off-by: Krzysztof Galazka <krzysztof.galazka@intel.com> Reviewed by: erj Tested by: Mateusz Moga <mateusz.moga@intel.com> MFC after: 1 week Sponsored by: Intel Corporation Differential Revision: https://reviews.freebsd.org/D57337
debug: classified in
03-filenames_plain1 by
'sys/dev/'
Network-related commands, library, and kernel.
Update ieee80211_crypto_init_aad() to do what 802.11-2020 says - only mask fc[0] bits 4-6 on data frames, not on management frames. This (with other diffs to actually negotiate MFP and configure ath(4) for MFP + software keys) allows the CCMP path to decrypt CCMP MFP frames in the software path. Differential Revision: https://reviews.freebsd.org/D57799
debug: classified in
03-filenames_plain1 by
'sys/net80211/'
There is no visible bug fixed as in current tree masks are the same. Fixes: https://cgit.freebsd.org/src/commit/?id=6883b120c53735ff1681ef96d257f376731f56b3
debug: classified in
03-filenames_plain1 by
'sys/netinet6/'
Add const-qualified versions of the NLA iteration helpers to allow walking immutable netlink attribute buffers without discarding const qualifiers. This introduces NLA_NEXT_CONST(), _NLA_END_CONST(), and NLA_FOREACH_CONST() in netlink_snl.h. Signed-off-by: Ishan Agrawal <iagrawal9990@gmail.com> Sponsored-by : Google LLC (GSoC 2026)
debug: classified in
03-filenames_plain1 by
'sys/netlink/'
Record the Netlink protocol associated with AF_NETLINK sockets when they are created and pass it to libsysdecode during message decoding. Use the protocol to distinguish between Generic Netlink and Route Netlink sockets, ensuring that Generic Netlink decoding is only performed for NETLINK_GENERIC sockets. Signed-off-by: Ishan Agrawal <iagrawal9990@gmail.com> Reviewed by: kp Sponsored-by : Google LLC (GSoC 2026)
debug: Commit manually moved from "unknown" to "network".
Unloading if_ovpn while it's in use by other vnets causes memory leaks and panics. Fix this by reverting VNET_SYSUNINIT and adjusting the SI_SUB initialization order. Reviewed by: markj MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D54175
debug: classified in
03-filenames_plain1 by
'sys/net/'
Revert pf_nl.h part of 017690e50913 and use new libsysdecode build glue that parses enums. Reviewed by: kp, glebius Differential Revision: https://reviews.freebsd.org/D57866
debug: classified in
05-summary-prefix by 'pf:'
The historical design of sockets is that on a re-connect the disconnect is performed at the socket layer in soconnectat(). Since SMP times this is known to be racy and the function has appopriate comment. I missed that in the recent change. The pr_connect method should normally expect the socket to be already disconnected, however should be able to handle a race where socket is actually connected. Convert the check that incorrectly tried to handle normal path of re-connect into check that handles the race. Reported by: markj Fixes: https://cgit.freebsd.org/src/commit/?id=ece716c5d34728a170f1dfe1b3389c267d6ddd1e
debug: classified in
03-filenames_plain1 by
'sys/netinet/'
The ```int disable``` parameter is included in the bridge_stop function signature but is not used in the function body. I had noticed this when tracing the driver's path while learning more about the ifnet library. This parameter originally appeared when importing the driver from NetBSD. However, the FreeBSD ifnet library no longer requires an if_stop function. Meaning that the function signature can be changed to only contain needed parameters for our bridge driver. Discussed with: freebsd-net@ mailing list Signed-off-by: Acesp25 <acesp25@freebsd.org> Reviewed by: kp Pull-Request: https://github.com/freebsd/freebsd-src/pull/2290
debug: classified in
03-filenames_plain1 by
'sys/net/'
A mistake from 90ea8e89d9b7 is that in6_pcblookup_internal() was skipped for an inpcb that had unspecified local address. This is incorrect, as such inpcb could have already have a port set, and in_pcb_lport_dest() shall not be called on such inpcb. That could lead to creation of an alised connection in the database. This makes the function almost identical to in_pcbconnect(). While here, fix minor bug of missing INP_ANONPORT. This flag has no use in kernel, but affects netstat(1) output in certain mode. Fixes: https://cgit.freebsd.org/src/commit/?id=90ea8e89d9b751e8b5ae90ef3397883b035788e5 Reviewed by: pouria Differential Revision: https://reviews.freebsd.org/D57987
debug: classified in
03-filenames_plain1 by
'sys/netinet6/'
And make net.inet.ip.portrange.randomized boolean. Reviewed by: pouria, tuexen, markj Differential Revision: https://reviews.freebsd.org/D57291
debug: classified in
03-filenames_plain1 by
'sys/netinet/'
Enable IFCAP_MEXTPG by default, which may bring performance benefits.
Allow it to be disabled, and when disabled assert that we do not receive
any mbufs with M_EXTPG set. This is useful for testing.
Default the tests to disabling MEXTPG support.
Reviewed by: zlei
Sponsored by: Rubicon Communications, LLC ("Netgate")
Differential Revision: https://reviews.freebsd.org/D58054
debug: classified in
03-filenames_plain1 by
'sys/net/'
The network layer must not pass unmapped (M_EXTPG) mbufs to if_output() of network interfaces without IFCAP_MEXTPG. pf should convert these mbufs by mb_unmapped_to_ext() for such interfaces but it didn't. The problem had occurred on sendfile because sendfile system call uses unmapped mbufs for the file data. Reported by: feld Reviewed by: kp, glebius Differential Revision: https://reviews.freebsd.org/D58021
debug: classified in
03-filenames_plain1 by
'sys/netpfil/'
Some nic drivers (including iflib) do not initialize if_hwassist until after the interface is brought up. If a lagg member is included in a lagg when its not yet been brought up, that will cause lagg to see if_hwassist=0 and will disable all checksum offload, etc, on the interface. This is almost impossible to debug without kgdb or dtrace, as ifconfig does not surface if_hwassist. Fix this by re-calculating lagg caps (including if_hwassist) after adding a port. I encountered this problem when I had a commented-out if_foo1=up entry in my rc.conf that i neglected to uncomment when I was re-configuring a lagg. Sponsored by: Netflix Reviewed by: markj, zlei Differential Revision: https://reviews.freebsd.org/D58062
debug: classified in
03-filenames_plain1 by
'sys/net/'
RFC 4391 (IP over InfiniBand), section 9.3, lays the ND source/target link-layer address option out as type, length (3), two reserved zero octets, then the 20-octet IPoIB link-layer address. The ND code assumed the Ethernet layout (RFC 4861, section 4.6.1) everywhere and read/wrote the address directly after the option header, i.e. two octets early. The option-length sanity check computes 24 for both layouts for a 20-octet address, so the mismatch was silent. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296585 Reviewed by: adrian, pouria Sponsored by: VersatusHPC Differential Revision: https://reviews.freebsd.org/D58096
debug: classified in
03-filenames_plain1 by
'sys/netinet6/'
From openssh-portable commit c14709356563. Reported by: cy
debug: classified in
05-summary-prefix by 'openssh:'
Fixes: https://cgit.freebsd.org/src/commit/?id=e7d02be19d40063783d6b8f1ff2bc4c7170fd434 Signed-off-by: Yusuke Ichiki <public@yusuke.pub>
debug: classified in
03-filenames_plain1 by
'sys/netinet6/'
debug: classified in
03-filenames_plain1 by
'sys/netinet/'
Update nexthop flags with interface link status events and instead of checking link status of interface for every packet only check the reachability flag of the final nexthop. Reviewed by: glebius Discussed with: markj Differential Revision: https://reviews.freebsd.org/D57375
debug: classified in
03-filenames_plain1 by '['sys/net/',
'sys/netinet/', 'sys/netinet6/']'
If a nhop gets an interface event, revalidate the nhops and immediately try to recompile existing nexthop groups by replacing unreachable nexthops with reachable ones. If none are available, recompile them back to their normal position in nexthop group slots. Reviewed by: glebius Discussed with: markj Relnotes: yes Differential Revision: https://reviews.freebsd.org/D57389
debug: classified in
03-filenames_plain1 by
'sys/net/'
Provide a name for SCTP sockets. Fixes: https://cgit.freebsd.org/src/commit/?id=8b2b62b49d88 ("sockstat: consolidate unix(4) protocols in the array of protocols")
debug: classified in
03-filenames_plain1 by
'usr.bin/sockstat/'
Fix missing Include which is currently leaked through vnet code. Reported by: bz Fixes: https://cgit.freebsd.org/src/commit/?id=d05d1f256082 ("routing: Subscribe nhops to ifnet link events") Differential Revision: https://reviews.freebsd.org/D57375
debug: classified in
03-filenames_plain1 by
'sys/net/'
Per sys/conf/files this unit is not compiled for a NOIP kernel.
debug: classified in
03-filenames_plain1 by
'sys/netinet/'
Reported by: Alexander Sideropoulos <Alexander.Sideropoulos@netapp.com> MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/net/'
debug: classified in
03-filenames_plain1 by
'sys/netinet6/'
This is exactly the same as the second part of IPv4's change 136c5e17b61a1/D49153.
debug: classified in
03-filenames_plain1 by
'sys/netinet6/'
Make R-bit per RFC 6275 8.3 and P-bit per RFC 9762 7.1 in Prefix Information option available to userland for future implementations. RFC 9762 7.1: For each interface, the client MUST keep a list of every prefix that was received from a PIO with the P flag set and currently has a non-zero preferred lifetime. Differential Revision: https://reviews.freebsd.org/D56207
debug: classified in
03-filenames_plain1 by '['sys/netinet/',
'sys/netinet6/']'
- Early return when no new data is delivered - Switching from PRR-CRB to PRR-SSRB only when both SND.UNA advances and no further loss is indicated. - Accounting for sequence ranges SACKed before entering recovery in RecoverFS calculation. - Force a fast retransmit upon entering recovery when prr_out is 0 AND SndCnt is 0. - Set cwnd to ssthresh post recovery. Obtained from: mohnishhemanthkumar_gmail.com Reviewed by: rscheff, tuexen Differential Revision: https://reviews.freebsd.org/D56535 MFC after: 3 months
debug: classified in
03-filenames_plain1 by
'sys/netinet/'
Add FIB selection logic by introducing ifa_ifwithaddr_fib() to support FIB-specific lookups. Then have ifa_ifwithaddr() wrap it with RT_ALL_FIBS. Also, do the same for ifa_ifwithaddr_check(). Reviewed by: glebius, bnovkov Differential Revision: https://reviews.freebsd.org/D58305
debug: classified in
03-filenames_plain1 by
'sys/net/'
Free mbuf and increase IFCOUNTER_IERRORS if ip_ecn_egress() under geneve_input_inherit() decides to drop the packet. Reported by: Chris Jarrett-Davies of the OpenAI Codex Security Team Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58361
debug: classified in
03-filenames_plain1 by
'sys/net/'
Sponsored by: NetApp, Inc. MFC after: 1 week Reviewed By: tuexen, #transport, markj Differential Revision: https://reviews.freebsd.org/D58360
debug: classified in
03-filenames_plain1 by
'sys/netinet/'
When a protocol-specific 'bind_all_fibs' tunable is set to 0, a listening socket will only receive traffic originating from the FIB it was bound to. However, there are no checks to determine whether an address exists in the target FIB when binding the socket, which can lead to a situation where a socket and the address it was bound to belong to different FIBs. Prevent this footgun by looking up the requested address in the current FIB if 'bind_all_fibs' is active and returning an error if the address does not exist. Sponsored by: Stormshield Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D58281 Reviewed by: glebius, pouria, markj MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by '['sys/netinet/',
'sys/netinet6/']'
In practice, this is not possible, but we are adding it just to be safe. Reported by: markj
debug: classified in
03-filenames_plain1 by
'sys/net/'
pf(4) currently ignores fragment direction (in vs. out)
in pf_frnode_compare() function.
Issue noticed and reported by Frank Denis
OK @bluhm
Obtained from: OpenBSD, sashan <sashan@openbsd.org>, eaa2c80721
Sponsored by: Rubicon Communications, LLC ("Netgate")
debug: classified in
03-filenames_plain1 by
'sys/netpfil/'
Outbound packet which matches rule with source limiter attached,
for example:
source limiter "crash" id 1 entries 10000 limit 1000
pass out from any to any source limiter "crash" keep state
triggers a NULL pointer dereference.
The issue was kindly reported and initial version of fix
submitted by SecBuddyF, Tencent KeenLab.
The submitted diff fixed the issue for failing look up by destination
address in outbound packet. dlg@ also pointed out the change should
be further improved so NULL pointer dereference is avoided when rule
uses nat-to/rdr-to option.
OK dlg@
Obtained from: OpenBSD, sashan <sashan@openbsd.org>, f0f215c11e
Sponsored by: Rubicon Communications, LLC ("Netgate")
debug: classified in
03-filenames_plain1 by
'sys/netpfil/'
The latest version of draft-ietf-tcpm-tcp-ghost-acks changed a condition. This should make no substantial difference, but makei it compliant to the latest version of the specification. Reviewed by: rscheff, Peter Lei MFC after: 3 days Sponsored by: Netflix, Inc. Differential Revision: https://reviews.freebsd.org/D58411
debug: classified in
03-filenames_plain1 by
'sys/netinet/'
During call to `icmp_verify_redirect_gateway()` ensure using fib-aware source address selection function. Reviewed by: glebius Differential Revision: https://reviews.freebsd.org/D58409
debug: classified in
03-filenames_plain1 by
'sys/netinet/'
When we drop the prefix lock to call nd6_prefix_offlink() or nd6_prefix_onlink(), make sure to keep the correpsonding prefix structure alive. It is possible for a concurrent nd6_timer() to expire the prefix while the lock is dropped. Reported by: Maik Muench of Secfault Security Reviewed by: pouria, zlei MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58423
debug: classified in
03-filenames_plain1 by
'sys/netinet6/'
inpcb: declare struct in_conninfo as a single declaration This removes just one level of #define mess that is needed to reach into an inpcbs IPv4 address. And makes the declaration easier to read. No functional change. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58273
debug: classified in
03-filenames_plain1 by
'sys/netinet/'
libdtrace: Fix up translators after struct in_conninfo changes Fixes: https://cgit.freebsd.org/src/commit/?id=698402f4f97c ("inpcb: declare struct in_conninfo as a single declaration")
debug: classified in
05-summary-prefix by 'lib.*:'
libdtrace: Fix up one more translator Fixes: https://cgit.freebsd.org/src/commit/?id=d8bcb13b79b4 ("libdtrace: Fix up translators after struct in_conninfo changes")
debug: classified in
05-summary-prefix by 'lib.*:'
debug: moved to network because
'Need to be grouped with
d8bcb13b79b4aa6156b852a0da04ca9f52c63ac0'
in_ifprimaryaddr() exists only to support IPv4 multicast usage. Since the adoption of epoch tracking, ifa_ref() is no longer required in its body; that was originally introduced by rwatson in 2009. We could not use __deprecated1() from <sys/cdefs.h> anyway, as IFP_TO_IA() is a macro, not a function. Approved by: glebius (2026-02-26) Reviewed by: adrian, glebius, pouria Differential Revision: D55344
debug: classified in
03-filenames_plain1 by
'sys/netinet/'
IPv4 multicast currently has the big caveat that it depends on the first assigned IPv4 address on an interface (the so-called "primary address"). in_ifprimaryaddr() only needs to be used by the following: - the 0.0.0.0 booting node input workaround in IGMPv1; - filtering out the node's own reports in IGMPv2; - preserving the source IP where an IGMPv3 report has been looped back; - inferring the default upstream IPv4 interface address for the IP_MULTICAST_IF socket option; - and inferring the source address during ip_output() for a multicast datagram where an interface has been explicitly specified by that option. All of these uses mandate the use of IPv4 source address selection, but FreeBSD does not yet (fully) implement this functionality. Approved by: glebius (2026-02-26) Reviewed by: adrian, glebius, pouria Differential Revision: D55345
debug: classified in
03-filenames_plain1 by
'sys/netinet/'
If we have source address specified, try to find it by enumerating ifas on specified fib. Reviewed by: glebius Differential Revision: https://reviews.freebsd.org/D58444
debug: classified in
03-filenames_plain1 by
'sys/net/'
Revert UseBlocklist from SSHCFG_ALL to SSHCFG_GLOBAL (with SSHCFG_COPY_NONE), ensuring it can only be set globally in sshd_config rather than within conditional Match blocks, matching historical behavior. Reviewed by: emaste Fixes: https://cgit.freebsd.org/src/commit/?id=bb5c77e9d281 ("OpenSSH: Update to 10.4p1") Differential Revision: https://reviews.freebsd.org/D58520
debug: classified in
05-summary-prefix by 'openssh:'
This may plug minor leaks which no-one has reported. The default IPv6 source
address selection policy list in FreeBSD is usually limited to 9 entries,
and can be readily inspected with ip6addrctl(8). The policy table is
however instantiated for each VNET.
The leak of a pol instance in delete_addrsel_policyent() was already
plugged by @ae in commit-id ecc5c73, so that change has not been merged.
Do not tear down the sxlocks as glebius has requested, and move the
addrsel_policyent{} declarations further up to avoid redundant forward
declarations as glebius requested for stylistic reasons.
Reviewed by: ae, pouria
Sponsored by: Cisco Systems, Inc.
Differential Revision: https://reviews.freebsd.org/D55599
debug: classified in
03-filenames_plain1 by
'sys/netinet6/'
When a TCP timer is stopped, t_timers[] is set to SBT_MAX. Adding the corresponding t_precisions[], if it is not zero, would result in overflows in tcp_timer_next(). To avoid this, skip stopped timers. The problem was identified while debugging uperf by Lukas Book and an initial patch was provided by him. The committed patch was suggested by glebius. The problem can be observed by running netstat -nxptcp and looking for negative timer values and by observing very long running timers in some cases. Reported by: Lukas Book <lkbook@outlook.de> Reviewed by: glebius Differential Revision: https://reviews.freebsd.org/D58484
debug: classified in
03-filenames_plain1 by
'sys/netinet/'
nd6_ra_input() reads the IPv6 header pointer ip6 before m_pullup(), then uses that pointer afterwards to set nd_ra. When m_pullup() relocates the chain it frees the original first mbuf and returns a new one, leaving ip6 dangling; the subsequent access may be a use-after-free read. The fix writes ip6 from the returned mbuf after m_pullup() inside the conditional if. Reviewed by: pouria Differential Revision: https://reviews.freebsd.org/D58229
debug: classified in
03-filenames_plain1 by
'sys/netinet6/'
nd6_prefix_onlink will enter net_epoch when necessary. Also, exit net_epoch earlier in nd6_prefix_onlink, Because we acquired a reference to ifa, and we got our ifa from the pr->ndpr_ifp, we don't need to stay under epoch. While here, style it. Reviewed by: markj, glebius Discussed with: zlei Differential Revision: https://reviews.freebsd.org/D56129
debug: classified in
03-filenames_plain1 by
'sys/netinet6/'
Add the ability to select source ip address of outgoing packets even when the source ip address is configured on another interface. Also add this new rtnetlink attribute to manual. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=285422 Reviewed by: glebius, ziaee (manpages) Tested by: ivy, Marek Zarychta <zarychtam@plan-b.pwste.edu.pl> Relnotes: yes Differential Revision: https://reviews.freebsd.org/D58294
debug: classified in
03-filenames_plain1 by '['sys/net/',
'sys/netlink/']'
Restrict the scope of the struct hc_metrics_lite to the kernel only.
Update the naming to align with other kernel structures and add a tcp_ prefix.
Reviewed by: glebius
MFC after: 2 weeks
Sponsored by: NetApp, Inc.
Differential Revision: https://reviews.freebsd.org/D58440
debug: classified in
03-filenames_plain1 by
'sys/netinet/'
When configuring the expire timeout to something short, make sure that the
prune time runs at least at that interval. Similarly, when adjusting the
prune interval up, ensure the expire timeout reflect that expected minimum
time also. Finally, restart the callout timer so that the next pruning
happens after the new, expected interval.
Reviewed By: glebius
MFC after: 2 weeks
Sponsored by: NetApp, Inc.
Differential Revision: https://reviews.freebsd.org/D58424
debug: classified in
03-filenames_plain1 by
'sys/netinet/'
Prior to commit 90ea8e89d9b751e8b5ae90ef3397883b035788e5, this was handled by calling in6_pcbladdr(). Reported by: syzkaller Reviewed by: pouria, glebius Fixes: https://cgit.freebsd.org/src/commit/?id=90ea8e89d9b7 ("netinet6: refactor in6_pcbconnect()") Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58518
debug: classified in
03-filenames_plain1 by
'sys/netinet6/'
Reported by: Chris Jarrett-Davies of the OpenAI Codex Security Team Reviewed by: pouria, kp Fixes: https://cgit.freebsd.org/src/commit/?id=0361f165f219 ("ipsec: replace SECASVAR mtx by rmlock") MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58521
debug: classified in
03-filenames_plain1 by
'sys/netipsec/'
Some devices remap the PF queues when entering or leaving SR-IOV. Add opt-in PCI IOV helpers that hold the iflib context lock across the complete stop, driver callback, and restart transaction. Existing drivers continue to use the non-restarting helpers. Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/net/'
Remove unused rnh_multipath and rib_algo_fixed members. While here, convert rib_dying and rib_algo_init from uint32_t to bool. Reviewed by: glebius Differential Revision: https://reviews.freebsd.org/D58537
debug: classified in
03-filenames_plain1 by
'sys/net/'
Add validation for unused parameter values in the gap between VXLAN_PARAM_WITH_LOCAL_ADDR4 and VXLAN_PARAM_WITH_LOCAL_ADDR6 to prevent panics. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297151 Reported by: Robert Morris <rtm@lcs.mit.edu> Reviewed by: markj MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D58552
debug: classified in
03-filenames_plain1 by
'sys/net/'
if_gre(4): Fix races by changing initialization order and locks Treat if_gre like any other network drivers during module initialization by using SI_SUB_PROTO_IF. Also, destroy cloned interfaces via a prison removal callback for gre over udp. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=275474 Reviewed by: markj Discussed with: glebius Differential Revision: https://reviews.freebsd.org/D57669
debug: classified in
03-filenames_plain1 by
'sys/net/'
if_gre(4): Fix link state announcement in SIOCDIFPHYADDR Since we unlock gre before if_detach() and use slock in gre_clone_modify_nl() there is no need to split if_link_state_change() out of gre_delete_tunnel(). Reported by: markj Fixes: https://cgit.freebsd.org/src/commit/?id=a0d2e5ebaa2e ("if_gre(4): Fix races by changing initialization order and locks")
debug: classified in
03-filenames_plain1 by
'sys/net/'
Migrate to new if_clone KPI and implement netlink support for gif(4). Also break GIFSOPTS ioctl logic out of gif_ioctl. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D57666
debug: classified in
03-filenames_plain1 by '['sys/net/',
'sys/netlink/']'
A RST segment can be sent in response to (a) received segment or (b) by the upper layer protocol. The SEG.SEQ validation consists of two checks: (1) the in-window check of SEG.SEQ and (2) the exact match check of SEG.SEQ. For the in-window check (1), the left edge of the window needs to be based on tp->last_ack_sent to cover the delayed ACK case, whereas the right edge needs to be based on tp->rcv_nxt + tp->rcv_wnd. This both assumes that tp->rcv_wnd is not zero. For the special case of tp->rcv_wnd being zero, add checks against tp->last_ack_sent for (a) and on tp->rcv_nxt for (b). This applies to all TCP stacks. When the exact match (2) of SEG.SEQ is performed, it should be based on tp->last_ack_sent for (a) and on tp->rcv_nxt for (b). To cover both, check for both. Add this only to the base stack, since the RACK and BBR stacks already do this. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296594 Reviewed by: rscheff MFC after: 3 days MFC to: stable/14 MFC to: stable/15 Sponsored by: Netflix, Inc. Differential Revision: https://reviews.freebsd.org/D58594
debug: classified in
03-filenames_plain1 by
'sys/netinet/'
This change is intended to address @glebius comments from the original D55663.
ip6_hdr_pseudo{} is referenced by certain OpenBSD OCF related components. I am
using __aligned(4) and not __packed as urged by the late Hans-Petter Selasky.
Use C99 types and style. We must eat the churn now cross-BSD compatibility
is "Fade to Black".
Put _Static_assert under #ifdef INVARIANTS to not disrupt regular compilation,
as this resides in a commonly included header file.
debug: classified in
03-filenames_plain1 by
'sys/netinet6/'
This brings xform_tcp.c into line with possible future OCF related imports.
debug: classified in
03-filenames_plain1 by
'sys/netipsec/'
debug: classified in
03-filenames_plain1 by
'sys/netipsec/'
Add support for allowing IPv4 multicast groups to be joined on IPv6 sockets, as a number of applications began to rely on this over the years, despite it only ever having been a convenience which appeared in Solaris & Linux over the course of the 00s decade. It is limited to any-source joins (ASM). To avoid further quibbling over the meaning of the term "undocumented" as it applies to this change, I have chosen to use the wording "non-IETF-ratified extension" in comments, with reference to the updated ip6(4) man page. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=193246
debug: classified in
03-filenames_plain1 by '['sys/netinet/',
'sys/netinet6/']'
Comment updated only. No functional change. It is unrealistic to expect that this feature will ever be resurrected from the legacy KAME tree, given historical divergence, and that applications which really need to consume all group state (e.g. proxies) will either join on a per-group basis, or use link-layer mechanisms anyway. It was also very poorly documented to begin with.
debug: classified in
03-filenames_plain1 by
'sys/netinet6/'
1. EFAULT was happening because sooptcopyin() from inp_join_group() was seeing the user-space thread descriptor in the faked-up sockopt. So, do not attempt a user copyin(); defer to C99 initialization nulling sopt_td for us to force a KVA memcpy(). 2. It seems necessary to byte-swap ipv6mr_multiaddr.s6_addr32[3] on amd64 for similar reasons as to how the user-space initialization needed for passing an IPv4-mapped group address also requires byte-swapping of the 0x0000FFFF field for s6_addr32[2]; it is a direct assignment to a integer member of a struct, NOT a memcpy(). 3. The assignment to imr_interface within in6_v6_mreq_to_v4() was obfuscated by a cast back to its own type due to use of the IA_SIN() macro. Elided. With this change, the feature gap seems to be closed; tested with a simple link-scope IPv4 group under 224.0.0.0/24 with an mlx5(4) SR-IOV VF in bhyve. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=193246 Differential Revision: https://reviews.freebsd.org/D58590
debug: classified in
03-filenames_plain1 by
'sys/netinet6/'
cmd_securelevel is the securelevel at which the call should be denied. pf (write) calls should be denied at level 3 or up (not at 2 or up as it was), so increment these all by one. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296838 MFC after: 4 weeks Sponsored by: Rubicon Communications, LLC ("Netgate") Differential Revision: https://reviews.freebsd.org/D58377
debug: classified in
03-filenames_plain1 by
'sys/netpfil/'
pf assumes that network groups and network interfaces share a namespace (that is, a name is unused, a group or an interface, never both a the same time). Unfortunately this assumption was broken when interface renaming was introduced. Attempt to cope with this rather than panicking. Note that this is a band-aid, not a full solution. The correct fix is for the network stack to go back to enforcing a single namespace for groups and interfaces. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297220 Reported by: Robert Morris MFC after: 1 week Sponsored by: Rubicon Communications, LLC ("Netgate")
debug: classified in
03-filenames_plain1 by
'sys/netpfil/'
This fixes a bug where we do not report all lanes when a NIC configures a breakout. Eg, we reported all 4 lanes when a NIC configured the optics as 1x400g, but only printed the first lane's strength when configured as 4x100g. Fix this by actually parsing the active lane count, rather than pulling it from the default descriptor. While here, optionally print page 10h when -vvvv is specified. This aids in determining how a breakout is configured. I put it under an extra level of verbosity, as I don't want to let things get out of hand printing CMIS pages. Sponsored by: Netflix Reviewed by: kib, sumit.saxena_broadcom.com Differential Revision: https://reviews.freebsd.org/D58263
debug: Commit manually moved from "unknown" to "network".
The SIOCGETSGCNT handler may be invoked in this scenario, and if no router has initialized the lookup table, we'll have mfct->mfchashtbl == NULL. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297148 Reported by: Robert Morris MFC after: 1 week Sponsored by: The FreeBSD Foundation
debug: classified in
03-filenames_plain1 by
'sys/netinet/'
This should assist setups that connect a lot of nodes to ipfw: and then distribute traffic with ipfw(4) tablearg feature. Reviewed by: pouria Differential Revision: https://reviews.freebsd.org/D58547
debug: classified in
03-filenames_plain1 by
'sys/netgraph/'
iflib: restore TX watchdog functionality Since f6afed726b00 the TX-hang check in iflib_timer() has required a queue state other than IFLIB_QUEUE_IDLE, but nothing ever sets IFLIB_QUEUE_WORKING, so IFLIB_QUEUE_HUNG has been unreachable ever since: stalled TX queues are not detected, not reported, and not reset - the TX watchdog of every iflib(4) driver has been dead code. Instead of resurrecting the queue-state machine, detect the hang directly. A transmit queue is frozen while it holds descriptors the hardware has not reported as completed and none were reclaimed over a timer period. Being frozen is not a fault: the hardware may defer marking descriptors as completed indefinitely. The check therefore arms only when a frozen queue also takes on new work, while the link is up, no pause frames were received and no doorbell is pending; and it acts only after the queue has stayed frozen for net.iflib.tx_watchdog_periods consecutive periods. It then asks the hardware through the driver's read-only credits peek (isc_txd_credits_update with clear=false, the same call the mp_ring can_drain callback makes routinely): if completions are ready but were not harvested for this long, the completion interrupt went missing - kick the queue's task instead of resetting; if the hardware reports nothing although the queue kept receiving work, it is hung and the existing watchdog reset machinery takes over. Neither software counters alone nor mere persistence of unharvested work can make this decision. iflib reclaims lazily (up to isc_tx_nsegments completed descriptors stay unharvested indefinitely) and defers report-status requests, so "descriptors in use" and "no cleaning progress" are normal states of an idle healthy queue. And hardware that coalesces completion reports (e.g. 8254x, TXDCTL.WTHRESH) legitimately withholds the last one of a quiet queue indefinitely, so a zero credits peek is a normal idle state, not a hang indicator: arming on persistence alone reset healthy interfaces on every traffic lull (field-tested on 82541PI). Only growth across frozen periods separates a wedged queue from a coalescing one. The threshold is a threshold in time, not in device work: a period is one iflib_timer interval (hz/2 by default), so at the default of four periods the verdict falls after roughly two seconds. It was calibrated from counter traces on that old and slow hardware, where healthy coalescing always cleared within two periods; newer hardware reports completions far sooner and leaves the frozen state earlier, so the default needs no recalibration for more modern devices. Setting the sysctl to zero disables the check. A queue whose link is down is never flagged - preserving what f6afed726b00 fixed. The new per-queue state goes into padding the transmit queue structure already had, rather than next to the counters it is derived from: that region is packed, so an insertion there would grow the structure. What is left of that padding is now spelled out instead of being implicit. The size of the structure is unchanged on amd64, arm64, riscv64, i386 and armv7. The IFLIB_QUEUE_* states no longer participate in the watchdog decision; they will be removed in a followup commit. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=220997, https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=239240 Fixes: https://cgit.freebsd.org/src/commit/?id=f6afed726b00 ("iflib: Prevent watchdog from resetting idle queues") Suggested by: gallatin (mxge-style detection) Reviewed by: adrian, markj MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D58266 Assisted-by: Claude Code (Fable 5, Opus 5)
debug: classified in
03-filenames_plain1 by
'sys/net/'
iflib: remove the unused TX queue state machine The previous commit stopped using ift_qstatus and the IFLIB_QUEUE_* states for the TX watchdog decision, leaving only dead stores. Remove the field, the states, and all assignments. The byte the field frees stays behind as explicit padding. No functional change. Reviewed by: gallatin, markj MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D58282 Assisted-by: Claude Code (Fable 5, Opus 5)
debug: classified in
03-filenames_plain1 by
'sys/net/'
iflib: clear the deferred TX descriptor state when a queue is stopped Stopping an interface frees the queued mbufs and zeroes a transmit queue's descriptor accounting, but the three counters that track descriptors deferred to a later doorbell write or report-status request are not cleared there: they only reach zero when the code that acts on them runs. After a reset they therefore describe descriptors that no longer exist, until enough new traffic flushes them. The consequences are small - one doorbell written from a stale count, and a report-status request on the first packet after the reset - but the state is simply wrong, and the transmit-hang check in iflib_timer() reads one of them. MFC after: 1 week Assisted-by: Claude Code (Opus 5)
debug: classified in
03-filenames_plain1 by
'sys/net/'
A v6 raw socket may ask the kernel to validate the checksum of an inbound packet. If it does, and the validation fails, we discard the packet, but this isn't really right: other raw sockets may wish to receive a copy of the packet anyway. Rework checksum handling to address this problem, and use a flag to avoid computing the checksum more than once for a given packet. Fixes: https://cgit.freebsd.org/src/commit/?id=de2d47842e880281 ("SMR protection for inpcbs") Reviewed by: pouria, glebius Reported by: Yunzhi Ke MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58559
debug: classified in
03-filenames_plain1 by
'sys/netinet6/'
pfsync interfaces do not have ifp->if_inet6 set, so when we update the
MTU for those interfaces we panicked.
Add an explicit check for this. This should be temporary, until pfsync
is no longer a struct ifnet (as we've already done for pflog).
Reviewed by: glebius
Sponsored by: Rubicon Communications, LLC ("Netgate")
Differential Revision: https://reviews.freebsd.org/D58701
debug: classified in
03-filenames_plain1 by
'sys/net/'
pfsync packets were allocated with m_get2(), which can't return packets larger than MJUMPAGESIZE. As a result 9k MTU pfsync interfaces simply didn't work. Use m_get3(), which can allocate sufficiently large mbufs. Extend the pfsync:bulk test case to provoke this problem. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297307 MFC after: 2 weeks Sponsored by: Rubicon Communications, LLC ("Netgate")
debug: classified in
03-filenames_plain1 by
'sys/netpfil/'
ifconfig: Add SR-IOV VF status output - Adds SR-IOV VF status to the existing ifconfig "-v" output - Adds ioctl command for reporting VF status info from drivers - Adds support to iflib for drivers to handle this new ioctl - Add support for ioctl in ixl(4) Signed-off-by: Eric Joyner <erj@freebsd.org> Relnotes: yes Differential Revision: https://reviews.freebsd.org/D19647
debug: Commit manually moved from "unknown" to "network".
iflib: Avoid locking for unsupported VF status queries ifconfig -v requests SR-IOV VF status from every interface. iflib previously acquired the context lock before dispatching the request even for VFs and drivers using the default unsupported method. Mailbox work on a VF could therefore delay the complete interface listing. VF status describes the children of an SR-IOV PF. Reject requests on VF contexts and classes using the default method without taking the context lock. Keep the lock for actual PF status providers. Fixes: https://cgit.freebsd.org/src/commit/?id=1ccf543b21ef ("ifconfig: Add SR-IOV VF status output")
debug: classified in
03-filenames_plain1 by
'sys/net/'
Replace the records with a versioned nvlist transported through struct ifreq, following SIOCGIFCAPNV. The network stack now packs and copies results, supports bounded retry for larger results, and handles native and 32-bit callers centrally. Drivers only populate a kernel nvlist while their state is locked. Define optional common fields for identity, configuration and handshake state, VLAN policy, queue resources, runtime blocks, PF link state, and namespaced driver extensions. Document the extension and versioning contract and require providers to omit values they cannot observe. Improve the ixl provider to track its mailbox handshake and report the expanded common policy. Render the expanded status as grouped output under ifconfig -v.
debug: Commit manually moved from "unknown" to "network".
Honor RTEXT_FILTER_VF on RTM_GETLINK requests and expose the versioned SR-IOV VF status through typed nested FreeBSD attributes. Report IFLA_NUM_VF with a successful requested query and preserve per-provider errors in the status container. Map the common nvlist schema to native integer, boolean, string, and binary attributes. Carry namespaced driver extensions as packed versioned nvlists so adding a driver-specific field does not expand the common netlink ABI. Add SNL parsers, parser verification, a constructed nested-status test, and an RTM_GETLINK test for an interface without SR-IOV support. Document the query contract and every attribute.
debug: classified in
03-filenames_plain1 by
'sys/netlink/'
The ifdi_init method cannot report an error, so iflib always marks an interface running and enables its interrupts after the callback returns. Drivers whose hardware initialization depends on an unavailable peer can only return early and leave a falsely running interface. Add iflib_init_failed() so a callback can leave the interface stopped. Also add a conditional reset request for asynchronous recovery: it is discarded if the interface is administratively down when the admin task runs, preventing a queued retry from resurrecting a stopped interface. Do not restore saved driver flags after an MTU or capability change when initialization failed. Restoring the pre-init flags would overwrite the stopped result with stale RUNNING state. Document that reset requests require the caller to schedule the admin task, that output remains blocked during recovery, and that iflib rather than the driver owns the driver flags. MFC after: 2 weeks
debug: Commit manually moved from "unknown" to "network".
When crypto_dispatch() or crypto_dispatch_async() returns non-zero, the registered callback is never invoked. In both ovpn_transmit_to_peer() and ovpn_udp_input(), if_ovpn.c did not free the cryptop request, release the peer/sc reference count, or free the mbuf on dispatch failure. This results in three simultaneous leaks per failed dispatch: - crp allocated via crypto_getreq() is never freed - peer->refcount (encrypt) or sc->refcount (decrypt) incremented but never decremented - mbuf passed to crypto_use_mbuf() is never freed The leaks are reachable under memory pressure when the OCF scheduler returns ENOMEM from crypto_dispatch(). The registered callbacks (ovpn_encrypt_tx_cb, ovpn_decrypt_rx_cb) correctly handle crp_etype for crypto operation failures; this fix addresses the separate dispatch-level failure path where no callback is invoked. Found during code review following FreeBSD-SA-26:52.if_wg. Reviewed by: kp Differential Revision: https://reviews.freebsd.org/D58754
debug: classified in
03-filenames_plain1 by
'sys/net/'
10GBase-BX uses paired wavelengths to carry both directions over a single strand of single-mode fiber. The optics must be paired so that the transmit and receive wavelengths cross over. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/net/'
Add missing TF_DISCONNECTED bit. Reported by: Hannes Elfert Fixes: https://cgit.freebsd.org/src/commit/?id=40dbb06fa73c ("inpcb: retire INP_DROPPED and in_pcbdrop()")
debug: classified in
03-filenames_plain1 by
'sys/netinet/'
Initialize all three hashes (exact, wild, load balance group) with a per- bucket lock. Nothing changes for the packet lookup KPI - it still uses SMR section for thread safety. But connect(2) and bind(2) operations gain parallelism now. The main concept is that as we lookup inpcb database for editing, we are accumulating bucket locks necessary to accomplish the operation. Once all lookups are complete and we are good to go, the inpcb is inserted (or moved) and accumulated lock context is released. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58131
debug: classified in
03-filenames_plain1 by '['sys/netinet/',
'sys/netinet6/']'
Fixes and new features include: hostapd: * support RSN overriding (e.g., WPA3-Personal Compatibility Mode) * EHT/IEEE 802.11be/Wi-Fi 7 - more complete support - fix message validation issues that could enable DoS attacks - fix group key rekeying * enable SAE group 20 by default if SAE-EXT-KEY is enabled * reject unexpected SAE password identifier to avoid DoS attack against a specific STA * mandate use of SAE H2E when using password identifiers * assign VLAN when using SAE with PMKSA caching * support SPP A-MSDU negotiation * support IEEE 802.11bi functionality - changing SAE password identifiers - EPPKE - IEEE 802.1X/EAP in Authentication frames - Association frame encryption - PMKID privacy * remove the driver interface for now obsolete Host AP driver * remove the driver interface for now obsolete Atheros WEXT interface * move supported, basic, and Beacon TX rate configuration to be at BSS level instead of per-radio for all BSSs * fix various issues in Multiple-BSSID functionality * support OpenSSL 3.0 API changes * EAP-TEAP: protocol changes based on RFC 9930; this is not compatible with previous versions * support Automated Frequency Coordination (AFC) on the 6 GHz band * improve GAS/ANQP processing to support larger ANQP responses * a large number of other fixes, cleanup, and extensions wpa_supplicant: * support RSN overriding (e.g., WPA3-Personal Compatibility Mode) * improve BSS transition management support * EHT/IEEE 802.11be/Wi-Fi 7 - more complete support - fix message validation issues that could enable DoS attacks * support Wi-Fi Direct R2 * support Wi-Fi Aware (add synchronized NAN; extend USD support) * support Proximity Ranging * support SPP A-MSDU negotiation * support IEEE 802.11bi functionality - changing SAE password identifiers - EPPKE - IEEE 802.1X/EAP in Authentication frames - Association frame encryption - PMKID privacy * enable layer 2/Wi-Fi multicast filtering for all networks (not just some Passpoint networks which enabled this before) * wpa_gui: port to Qt6 * support OpenSSL 3.0 API changes * EAP-TEAP: protocol changes based on RFC 9930; this is not compatible with previous versions * maintain configuration file permissions when writing updated configuration * add option to validate PKCS#11/OpenSC engine and module paths * fix PMKSA caching to enforce network context to avoid misuse of unexpected PMKSA cache entries * fix a potential DoS attack in SAE processing of an unexpected element * fix incomplete bounds checking of mesh AMPE messages that could have resulted in DoS attacks and memory corruption * a large number of other fixes, cleanup, and extensions MFC after: 2 months Merge commit '513264698a892550ba20aeb9da7f360417fdc63b'
debug: Commit manually moved from "unknown" to "network".
When the first loop in inm_merge() hits an error, generally because it
hit some limit on the number of source filters for a multicast group,
inm_merge() tries to atomically roll back changes to the group source
filter list.
To roll back, it iterates over the global source filter list for the
multicast group, starting at the last entry that we updated ("nims").
But, if we have not yet updated any entries, this variable is
uninitialized. Initialize it to NULL, so that RB_FOREACH_REVERSE_FROM
doesn't visit any source filters in this case.
All of the above applies to the v6 case.
Reported by: Daniel Birtwhistle
MFC after: 1 week
Sponsored by: The FreeBSD Foundation
debug: classified in
03-filenames_plain1 by '['sys/netinet/',
'sys/netinet6/']'
led(4) invokes driver callbacks while holding its mutex, including from a callout. iflib_led_func() cannot acquire the sleepable context lock in those contexts without causing a lock-order reversal or sleeping from the callout. Record the latest requested state under the iflib state lock and enqueue the existing per-device taskqueue. The task can safely take the context lock before invoking the driver. Coalescing requests also avoids accumulating stale blink transitions when hardware access is slow. Destroy the LED device before draining its task so no new callback can race driver detach. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/net/'
When a driver implements ifdi_led_func, have the framework create its led(4) device after attach completes and the ifnet and context locks are released. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=246885 Reported by: jlduran Reviewed by: markj MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D32389
debug: classified in
03-filenames_plain1 by
'sys/net/'
A driver class may implement LED control even though the capability is not available on every device or firmware version it supports. Add an optional capability method and consult it before creating the led(4) device. Default to supported so existing providers are unchanged. This will be used by bnxt which blends PF and VF in the same driver. MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/net/'
Tables that have one element per protocol or address family were previously sized by AF_MAX + 1 since AF_MAX was off by one. Now that AF_MAX has been corrected, we need to apply the opposite correction to these tables. Fixes: https://cgit.freebsd.org/src/commit/?id=ddd850aa7720 ("sys/socket.h: Fix AF_MAX") MFC after: 3 days Sponsored by: Klara, Inc. Sponsored by: NetApp, Inc. Reviewed by: pouria, kevans, glebius Differential Revision: https://reviews.freebsd.org/D58826
debug: classified in
03-filenames_plain1 by
'sys/net/'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58646
debug: classified in
03-filenames_plain1 by
'sys/netipsec/'
for SADB_UPDATE op SADB_X_EXT_NEW_ADDRESS_SRC/DST extensions, by checking the sa_len matching the address family requirements before doing the copy. Also convert KEY_SETSECASIDX() and KEY_SETSECSPIDX() to functions and apply the sa_len clamping there. See https://github.com/0xdeadbeefnetwork/pfkey-sadb-overflow PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297264 Tested by: Wafa Hamzah <wafah@nvidia.com> (previous version) Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58646
debug: classified in
03-filenames_plain1 by
'sys/netipsec/'
Noted and reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58646
debug: classified in
03-filenames_plain1 by
'sys/netipsec/'
- Fixed memory leaks around m_dup() not freeing the original chain on
failure. If we return ENOMEM, we are expected to have freed the
chain, else the mbuf would be leaked. Also updated iflib_ether_pad()
to follow the same structure.
- In iflib_parse_header()
o Fixed a bug where the ip/ip6 and th pointers may point into a
freed chain after m_pullup. Those pointers must be reset to
point into the new chain.
o Eliminate ENXIO returns for non-TCP TSO sends (which would violate
the mbuf ownership contract if they could happen). Since they
cannot happen, I made them assertions instead.
- in iflib_ether_pad(), return ENOMEM after freeing mbuf, so that
mp_ring knows it is free. An ENOBUFS error will cause the mp_ring
path to retain the mbuf and retry
- in iflib_encap():
o Fix a leak when bus_dmamap_load_mbuf_sg() returns ENOMEM
o Fix a use-after-free in the mp_ring path when a driver using
ktls frees an mbuf and returns ENOBUFS via iflib_encap()
After this change the expection from iflib_encap is that:
mp_ring: ENOBUFS can be returned only when we run out of descriptors
(ENOBUFS causes mp_ring to retain the mbuf).
simple_tx: iflib_encap() always consumes the mbuf, regardless of the
return
Note that iflib_debugnet_transmit(), like simple_tx, expects that
iflib_encap() always consumes mbufs. This will be true after mp_ring
is removed, and its such a rare special case (overrunning the ring
during panic dumps) that I don't think its worth fixing in the
meantime.
Sponsored by: Netflix
Reviewed by: kbowling, sumit.saxena_broadcom.com
Differential Revision: https://reviews.freebsd.org/D58843
Fixes: https://cgit.freebsd.org/src/commit/?id=074ff8746388
debug: classified in
03-filenames_plain1 by
'sys/net/'
lookup_route is only called for outgoing traffic, therefore check nh_ifp index instead of nh_aifp as specified by RFC3542 sec 6. Differential Revision: https://reviews.freebsd.org/D58544
debug: classified in
03-filenames_plain1 by
'sys/netinet6/'
Add six device-scoped fail(9) points at the registration milestones needed to exercise each unwind path. An exact, runtime-only device selector prevents unrelated iflib devices from consuming an armed point. Mark the points non-sleepable because registration holds the ifnet and context locks. Document one-shot operation and bus-address reprobe so a failed attach can be recovered without another kernel build. Reviewed by: gallatin MFC after: 2 weeks Sponsored by: BBOX.io Differential Revision: https://reviews.freebsd.org/D58722
debug: classified in
03-filenames_plain1 by
'sys/net/'
iflib_device_deregister() sets IFC_IN_DETACH before removing the interface, but a task which already passed its detach check can still report a link change. This can re-arm if_linktask after ether_ifdetach() has drained it and leave work pending across queue teardown. Drain the entire private taskqueue before ether_ifdetach(). Drivers may register their own link-related configuration tasks there, so draining only the framework admin task leaves the same race for those drivers. MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58452 Co-authored-by: Andrew Gallatin <gallatin@FreeBSD.org> Co-authored-by: Kevin Bowling <kbowling@FreeBSD.org>
debug: classified in
03-filenames_plain1 by
'sys/net/'
Add an exact-device fail point immediately after the admin task checks IFC_IN_DETACH. This makes the detach race reproducible without affecting another interface. Use a bounded delay to keep the task active while detach enters the taskqueue drain. Mark the point nonsleepable as a safety backstop, and document a one-shot test for verifying that deregistration drains an already-running task before ether_ifdetach(). Reviewed by: gallatin, kgalazka MFC after: 2 weeks Sponsored by: BBOX.io Differential Revision: https://reviews.freebsd.org/D58720
debug: classified in
03-filenames_plain1 by
'sys/net/'
The VFLR task was initialized only from drivers MSI-X interrupt assignment paths. ixl's legacy interrupt handler can nevertheless defer VFLR work, leaving an uninitialized task. Even with MSI-X, the admin interrupt was established before the task was initialized. Initialize it alongside the other private tasks. The existing detach check and private-taskqueue drains then cover its lifecycle for every interrupt mode and registration failure. MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
03-filenames_plain1 by
'sys/net/'
When getting some baseline ALTQ numbers, I noticed that if simlple_tx is enabled in kenv, we wind up re-setting the transmit routine, but I neglected to actually clear ctx->ifc_sysctl_simple_tx. That leads to many different panics as we run a mixture of mp_ring and simple_tx. Pointy-hat to: gallatin Sponsored by: Netflix
debug: classified in
03-filenames_plain1 by
'sys/net/'
Allow disabling RXCSUM and RXCSUM6 on an epair interface. If disabled, epair unsets the mbuf flags that indicate a valid checksum when transferring a packet from one epair end to the other. This gives a user in a jail the power to control whether the user wants to use the result of a previous validation (by a physical interface) or not. Reviewed by: kp, tuexen MFC after: 1 month MFC to: stable/15 Differential Revision: https://reviews.freebsd.org/D58786
debug: classified in
03-filenames_plain1 by
'sys/net/'
Stuff in man section 8 (other than networking).
The same variable was used as a counter for an inner and out loop. Add a new one for the inner loop. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=283934 Reported by: crest at rlwinm.de
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
This tool supports two commands. The list command outputs a summary of injectable errors supported by the current system. The inject command injects the requested error. Reviewed by: gallatin, imp Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D58026
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
LOG_CONS was OR'd into the facility argument instead of logopt, leaving logopt as 0. The correct call is openlog(ident, LOG_CONS, LOG_AUTH), as shutdown(8) and init(8) already do. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296315 Signed-off-by: Ricardo Branco <rbranco@suse.de> Reviewed by: imp, des Pull Request: https://github.com/freebsd/freebsd-src/pull/2300
debug: classified in
03-filenames_plain1 by 'sbin/'
By default bhyve(8) creates a snapshot socket in "/var/run/bhyve/" (BHYVE_RUN_DIR). As this is a system directory not writable by users, this does not work when bhyve(8) is being started as a non-root user. Address that by allowing to override this directory. In bhyve(8) it is done by setting 'rundir' option with '-o rundir=<path>'. In bhyvectl(8) it is done with '--rundir=<path>'. MFC after: 1 month Reviewed by: bcr (manpages), bnovkov Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57494
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
The download protocol calls download_data with FileOffset and BufferLength of 0 first to start the download (no data yet available). Calls it again with BufferLength == 0 and FileOffset the size of the download (again, no data). It then starts calling with BufferLength != 0 and FileOffset == 0 to start the download. The heuristic I used to detect the start was wrong, so we'd allocate the buffer twice. Fix that by being more explicit and not using the heuristic that was bogus. Fixes: https://cgit.freebsd.org/src/commit/?id=afee781523e4 ("loader.efi: Recognize new memdisk=<url> and memcd=<url> options") Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D58068
debug: classified in
03-filenames_plain1 by 'stand/'
The end address is the final byte in the array, not one byte past the end of the array, so we need to add 1 to get the full length. Fixes: https://cgit.freebsd.org/src/commit/?id=59219fc76a4b ("loader.efi: efiblk_memdisk_preload passes the VirtualDisks to FreeBSD") Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D58069
debug: classified in
03-filenames_plain1 by 'stand/'
This code is simpler when we spell it the Unix way. Also, add sanity checks to make sure the offset is where we think it is. Fixes: https://cgit.freebsd.org/src/commit/?id=afee781523e4 ("loader.efi: Recognize new memdisk=<url> and memcd=<url> options") Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D58070
debug: classified in
03-filenames_plain1 by 'stand/'
We have two sets of BIOS loaders: One that lives in stand/i386 and one that lives in stand/userboot. Add knows to turn these on/off, with the default being on. These often aren't needed when creating a minimal UEFI system, so add knobs to turn them off. Given light-weight VMs have created a new use cases for these loaders, there's no plans at all to eliminate them. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D58072
debug: Commit manually moved from "unknown" to "admin".
kldxref -m <file> will print the same data that the '-d' flag produces, except restrict the output to one file. This should be the full path to the file, and the directory name to process is omitted. Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D57902
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
Reviewed by: jfree, kib MFC after: 3 weeks Differential Revision: https://reviews.freebsd.org/D58160
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
We can now decompress .xz compressed memory disks, like FreeBSD-15.1-RELEASE-amd64-disc1.iso.xz Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D58073
debug: Commit manually moved from "unknown" to "admin".
loader: Add xzfs, like gzipfs but with xz. This is just like gzipfs or bzipfs, except done with the newer xz program. This is off by default for the moment. Sponsored by: Netflix
debug: classified in
03-filenames_plain1 by 'stand/'
loader: zstd based filesystem, zstdfs like gzipfs Off by default. Sponsored by: Netflix
debug: classified in
03-filenames_plain1 by 'stand/'
loader: Add forgotten xz.c and zstdfs.c These were overlooked when I added compression support. Fixes: https://cgit.freebsd.org/src/commit/?id=86d719ae68aa ("loader: Add xzfs, like gzipfs but with xz.") Fixes: https://cgit.freebsd.org/src/commit/?id=c61ee49cd06a ("loader: zstd based filesystem, zstdfs like gzipfs") Sponsored by: Netflix
debug: classified in
03-filenames_plain1 by 'stand/'
zonectl's Report Zones subcommand displays a tabular list of zones. A conventional zone's WP column is displayed as 0xffffffffffffffff , the literal value that the HDD reports. But that's too wide for the column, causing the text to be misaligned. It's also not really meaningful, because the Write Pointer isn't really defined for a Conventional zone. Change it to "-1" to fix the text misalignment. MFC after: 2 weeks Sponsored by: ConnectWise Reviewed by: fuz Differential Revision: https://reviews.freebsd.org/D57512
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
illumos smatch build is complaining:
pci_nvme_parse_config() warn: 'sc->max_qentries' unsigned <= 0
pci_nvme_parse_config() warn: 'sc->ioslots' unsigned <= 0
Because we are using atoi() to translate string to int, we need
to use int type variable for translation.
Reviewed by: bnovkov
Differential Revision: https://reviews.freebsd.org/D58213
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
Somehow, I wound up with space indents rather than tab indents, so fix this. Sponsored by: Netflix
debug: classified in
03-filenames_plain1 by 'stand/'
For devices like the rtw88, they will show up in `ifconfig -l` as rtw880, rtw881, etc. We want to query the rtw88.0 and rtw88.1 sysctl respectively, not rtw.880. Chances are that there aren't more than 9 wlan devices using the same driver. Use a better heuristic to get the device description. Reviewed by: bz MFC after: 3 days Sponsored by: The FreeBSD Foundation
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
Modify `blockif_open` to properly release a partially initialized `blockif_ctxt` structure on error. Differential Revision: https://reviews.freebsd.org/D57887 Reviewed by: novel, bnovkov, glebius Tested by: bnovkov MFC after: 2 weeks
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
Since init become dynamically linked, reroot appeared to be broken because init copies itself into a transient tmpfs mount to continue controlling execution right after the reboot(REROOT) syscall. Because the binary is dynamically linked, it cannot be properly executed. Provide a minimal static binary 'reroot_seed' embedded into the init as byte stream, which performs what the 'init -r' did, namely, the second phase reroot. For the static build of init as part of the /rescue crunch, keep the inline reroot code. Reported and tested by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58164
debug: classified in
03-filenames_plain1 by 'sbin/'
pfr_add_table() does not set errno, it returns an error (now).
Read the error code from the return value so we display the correct
error message to the user.
Sponsored by: Rubicon Communications, LLC ("Netgate")
debug: classified in
03-filenames_plain1 by 'sbin/'
These calls return an error value, they do not set errno. Check their
return values.
Sponsored by: Rubicon Communications, LLC ("Netgate")
debug: classified in
03-filenames_plain1 by 'sbin/'
Pass such a section to the kernel using modinfo, otherwise link_elf.c won't execute constructors for the file. This is required for KASAN, otherwise redzones for global buffers are not poisoned during boot. Reviewed by: kib MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58244
debug: classified in
03-filenames_plain1 by 'stand/'
- Scope local variables properly to each function.
- Quote variables that should be treated as single words.
- Replace `${cmd}; if [ $? -eq 0 ]` with `if ${cmd}` for simplicity.
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D57899
debug: classified in
03-filenames_plain1 by
'libexec/'
Add the option "oemstring" to allow setting the DMI type 11 ("OEM
Strings") SMBIOS structure. These are free-form strings, available for
any purpose, but can be especially useful to pass configuration,
secrets, and credential information into a Linux guest and consumed by
systemd.
MFC after: 1 month
Relnotes: yes
Reviewed by: markj
Differential Revision: https://reviews.freebsd.org/D57516
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
When writing to a file, call fchmod() to ensure the file mode matches the intended mode, which is 0444. This was already done when replacing an existing file, but not when creating a new file, which meant if the process umask was 077, the resulting certificates and bundle would be unreadable by unprivileged users. MFC after: 1 week Reviewed by: des Differential Revision: https://reviews.freebsd.org/D58304
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
hwpmc: add regression tests for counting-PMC counter wraparound Exercise a process-mode counting PMC whose accumulated count crosses, or already exceeds, the range of the underlying hardware counter. Before the previous commit, the first context switch after the hardware counter wrapped panicked INVARIANTS kernels with "negative increment" and silently corrupted the accumulated count on other kernels. The tests need a hardware counting event backed by a counter narrower than 64 bits and skip where none is available (hwpmc(4) not loaded, or a VM without a vPMU). Reviewed by: adrian MFC after: 2 weeks Assisted-by: Claude Code (Fable 5) Differential Revision: https://reviews.freebsd.org/D58341
debug: classified in
03-filenames_plain1 by 'etc/'
tests/sys/pmc: only build if MK_PMC != no This unbreaks the build when pmc support is explicitly disabled via the aforementioned build knob. MFC after: 10 days Fixes: https://cgit.freebsd.org/src/commit/?id=2cfd82f74 ("hwpmc: add regression tests for ...") Differential Revision: https://reviews.freebsd.org/D58401
debug: classified in
02-filenames_wildcards by
'.*Makefile'
debug: moved to admin because
'Need to be grouped with
2cfd82f747c04f68f679824ba627460e87ab3848'
vt(4) does not (currently) support changing the video mode. Report that -i mode is not supported rather than printing an empty list. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=207411 Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58163
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
The max_qentries in pci_nvme_softc is uint16_t and too large int may get truncated to invalid value. While there, use local declarations for val. Suggested by: Bill Sommerfeld Reviewed by: chuck Differential Revision: https://reviews.freebsd.org/D58293
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
Firmware on a test machine applied NX to non-code allocations, which resulted in a fault when jumping to the trampoline. Reviewed by: kib Tested by: Jim Huang Chen <jim.chen.1827@gmail.com> Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58383
debug: classified in
03-filenames_plain1 by 'stand/'
MFC after: 1 week
debug: classified in
03-filenames_plain1 by 'stand/'
Commit 9e1db51d4b5fc made nvmecontrol devlist get list of active namespaces from the device instead of iterating through all possible IDs. The problem is that this request is not supported before NVMe 1.1, and in particular by Intel Optane 905P drives. This change reintroduces iteration for devices before NVMe 1.2. Reviewed by: imp Differential Revision: https://reviews.freebsd.org/D58010
debug: classified in
03-filenames_plain1 by 'sbin/'
Update fwget(8) to download wifi-firmware-mt76-kmod-mt7921, and wifi-firmware-mt76-kmod-mt7925 firmware packages instead of the no longer available mt792x version. Add another PCI vendor to recognize ITTIM IDs for mt7921-based MediaTek cards. (bz reduced the license in the ittim file to an SPDX tag and updated the commit message, given this is only half the work from the review) Sponsored by: The FreeBSD Foundation MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D57242
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
pmc: console configuration and table rendering for new PMC tools Initializes the terminal rendering code used by the new pmc tools. Then provides a table abstraction for collecting, sorting and rendering tables. It provides pretty printed results with typed fields that print several types used throughout the new PMC tools. By default the fields are formatted in engineering notation. Sponsored by: Netflix Reviewed by: adrian, imp Differential Revision: https://reviews.freebsd.org/D57775
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
pmc: new pmc log processing framework View is a class for building PMC log processing tools it is designed to work with the new PMC record command that adds a header with additional CPU information. The new framework processes PMC logs about 2.5 times faster and in about half the code as libpmcstat. Sponsored by: Netflix Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D57776
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
pmc: pmc record command The record command is designed around the idea of predefined studies. While you can still select individual counters, the predefined studies are meant to enable the best hardware options for a given generation. It implements all of the base studies that I have built so far. Sponsored by: Netflix Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D57777
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
pmc: pmc info command Prints the log header including machine, cpu and kernel details along with what counters were selected. Sponsored by: Netflix Reviewed by: adrian, imp Differential Revision: https://reviews.freebsd.org/D57778
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
pmc: pmc frontend stall analysis based on IBS The frontend command uses AMD IBS frontend events to analyze the major sources of frontend stalls. It displays a table breakind down the major causes of front end stalls. This is a simple demonstration of the tools as you can use the filtering tools to limit the analysis to a subset of the samples including filtering by fetch latencies. Sponsored by: Netflix Reviewed by: adrian, imp Differential Revision: https://reviews.freebsd.org/D57779
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
pmc: enable the new pmc commands This change hooks everything up to the pmc command and improves the usage to document all functions. There are a couple older commands that are currently broken that I have hidden from the usage, but left in the code for those using it. I won't remove those until we have our replacements upstreamed that depend on the AMD PMC multiplexing patches. Sponsored by: Netflix Reviewed by: adrian, imp Differential Revision: https://reviews.freebsd.org/D57780
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
route(8): Add prefsrc option in netlink Add prefsrc option that is frequently used on unnumbered interfaces or L3 multi-homed network hosts. This option uses RTA_PREFSRC. Now you can add a static route by specifying the prefsrc option with the loopback IP. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=285422 Reviewed by: glebius Differential Revision: https://reviews.freebsd.org/D58294
debug: classified in
03-filenames_plain1 by 'sbin/'
route(8): Add null check for prefsrc option Reported by: Shawn Webb <shawn.webb@hardenedbsd.org>, bms Fixes: https://cgit.freebsd.org/src/commit/?id=dd235f097af4 ("route(8): Add prefsrc option in netlink")
debug: classified in
03-filenames_plain1 by 'sbin/'
Modify the disk check to allow arbitrary files as the trailing argument instead of requiring a live GEOM disk provider. This enables modifying a boot0 binary file in-place before flashing it to a disk via gpart bootcode, or using it directly as an argument to mkimg's partition specification, as these tools cannot directly adjust the parameters of the boot0 boot manager. Reviewed by: imp, jhb MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D57310
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
The need for this step is fading, now is mostly used to allow the selection of just the two code partitions in the boot0 boot manager, instead of the default of allowing all four MBR slices (the other two being cfg and data, which cannot boot). Reviewed by: imp MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D57311
debug: classified in
05-summary-prefix by 'nanobsd:'
The test uses a fail point to inject a decryption error in OCF while sending a ping across the tunnel. The driver should then fail to respond to the ping and increment the input error counter on the interface. Approved by: so Security: FreeBSD-SA-26:52.if_wg Security: CVE-2026-58085 Reviewed by: markj Sponsored by: Chelsio Communications
debug: classified in
03-filenames_plain1 by 'etc/'
Reviewed by: kib Fixes: https://cgit.freebsd.org/src/commit/?id=561991144e42 ("Remove Obj_Entry textsize member.") Sponsored by: AFRL, DARPA Differential Revision: https://reviews.freebsd.org/D58522
debug: classified in
03-filenames_plain1 by
'libexec/'
- When cached response is available, actually use xid from one instead of using its byte-swapped value for BIOS and 1 for UEFI. - If cached response is not available, generate pseudo-random xid, since use of a constant may cause conflicts if two systems are booting same time, and server sends responses as broadcast. - When cached response is available, skip DHCP DISCOVER/OFFER and just send REQUEST to the DHCP server from the cached response. We could skip this phase too and just use the cached response, but we don't know whether firmware requested all of DHCP options we'd like to get. Tested on amd64 Supermicro X11DPI-NT for both BIOS and EFI, with and without cached response packet.
debug: classified in
03-filenames_plain1 by 'stand/'
Implement netlink support for gre in ifconfig Differential Revision: https://reviews.freebsd.org/D55366
debug: classified in
03-filenames_plain1 by 'sbin/'
Transaction ID should persist only between OFFER and the following REQUEST. In all other cases it should change.
debug: classified in
03-filenames_plain1 by 'stand/'
This implementation does not cover tunnel addresses. Differential Revision: https://reviews.freebsd.org/D57667
debug: classified in
03-filenames_plain1 by 'sbin/'
Per RFC1717 section 5.1.3, the option length must be at least three. Processing an undersized option would trigger a large out-of-bounds write. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=271910 Reported by: Robert Morris Reported by: Décio Brandão (0xDBJ) Reviewed by: emaste MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58554
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
Some drivers do this routinely, e.g., FreeBSD's tpm20 does this every time it sends a command in tpmcrb_transmit(). This causes the console to fill up with messages. Instead, only print a warning if the cancel bit is set to one. Reviewed by: corvink MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D52425
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
Commit 505222d35fea removed a batch of code that this goto used to skip around. Reviewed by: olce, kib, markj Fixes: https://cgit.freebsd.org/src/commit/?id=505222d35fea ("Implement the long-awaited module->file cache database. A userland tool (kldxref(8)) keeps a cache of what modules and versions are inside what .ko files. I have tested this on both Alpha and i386.") Differential Revision: https://reviews.freebsd.org/D58539
debug: classified in
03-filenames_plain1 by 'stand/'
Previously all the 'goto out' statements after the image was loaded into memory returned success rather than an error. This is despite comments indicating some of these conditions were in fact errors, and some of these error conditions (such as missing PT_DYNAMIC) are treated as errors in the kernel linker. In addition, when failing to looking up the symbols for the linker set, those cases returned failure leaking memory (though it's clear from the original code from commit ca49b3342d1e that only the second failure was intended to be an actual error). To avoid more confusion, move the assignment of `ret` to just before the `out` label so that `goto out` always returns an error. This is a more consistent pattern with other code in the tree that tends to use labels for the error case. Restructure some other code to avoid a few bogus errors. Specifically, a symbol table is not required so don't treat lack of a symbol table as an error. Also, if the start symbol for the module metadata linker set is not found, don't treat that as an error either. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D58540
debug: classified in
03-filenames_plain1 by 'stand/'
All sorts of places in the ELF loading code assume that filesz <= memsz, so check that explicitly up front. The kernel already performs this check for the PT_LOAD segments in the main binary and rtld in imgact_elf.c. Reviewed by: jrtc27, kib Differential Revision: https://reviews.freebsd.org/D58541
debug: classified in
03-filenames_plain1 by
'libexec/'
Reviewed by: jrtc27, kib Differential Revision: https://reviews.freebsd.org/D58543
debug: classified in
03-filenames_plain1 by 'stand/'
Pass a single module name to load_kld for kbdmux and vkbd, allowing bthidd_prestart to load both modules successfully. Fixes: https://cgit.freebsd.org/src/commit/?id=cfe1962a1925 (rc: Fix improper use of load_kld) MFC after: 3 days Sponsored by: The FreeBSD Foundation
debug: classified in
03-filenames_plain1 by
'libexec/'
Allowing nuageinit user scripts to run before these makes it possible to customize official BASIC-CI and BASIC-CLOUDINIT FreeBSD images. This was requested by KDE for their CI. Approved by: cperciva Pull-Request: https://ron-dev.freebsd.org/FreeBSD/src/pulls/60
debug: classified in
03-filenames_plain1 by
'libexec/'
Each byte of the address is represented by a pair of characters, so we should be multiplying len by 2 when figuring out how much buffer space we have. Previously, a sufficiently large option could cause an overflow of the global "result" buffer. Reported by: Joshua Rogers <joshua@joshua.hu> Tested by: Décio Brandão (0xDBJ) MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58555
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
This is in lieu of a full Kyua/ATF regression test, as this is an optional feature that was beyond the scope of IETF's normative references for IPv6 multicast; support has been strictly on a best-effort basis. Two new commands are added to mtest(8): u mcast-addr ifname - join IPv4-mapped group on IPv6 socket v mcast-addr ifname - leave IPv4-mapped group on IPv6 socket Add an internal helper function __in6_v4_to_v4mapped() to perform the converse of the IN6_IS_ADDR_V4MAPPED() check to support this use case. Whilst __in6_v4_to_v4mapped() returns its first argument as a convenience, avoid the temptation to dereference a pointer to that which we already hold. Strictly the use of sockunion_t within mtest(8) more generally is a form of controlled type punning (aliasing). Use a temporary as we overwrite contents of su; the resultant write would overlap memory locations. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=193246 Differential Revision: https://reviews.freebsd.org/D58589
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
Fixes: https://cgit.freebsd.org/src/commit/?id=7e2f38311e62 ("rtld-elf/rtld.c: apply clang-format") Sponsored by: Innovate UK
debug: classified in
03-filenames_plain1 by
'libexec/'
Populate stand/libsa/bootp.c's bootp_response global from the UEFI PXE Base Code Protocol's cached DhcpAck, so bootp() can enter RFC 2131 INIT-REBOOT and skip DISCOVER/OFFER instead of running a fresh DHCP transaction after the firmware has already done one.
debug: classified in
03-filenames_plain1 by 'stand/'
It should give DHCP servers more information for proper responses.
debug: classified in
03-filenames_plain1 by 'stand/'
During flag inconsistency report, we handle rai->rai_otherflg as a bool, but the value is 0x40. Make it a simple number comparison. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=295995 Reviewed by: markj, Faraz Vahedi <kfv@kfv.io> MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D58672
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
niov2 returns the number of entries in the iovec starting at offset "offset". Here we are unconditionally setting it to 1, which of course isn't right. Fixes: https://cgit.freebsd.org/src/commit/?id=a28cf86c4171 ("bhyve/virtio: Rework iovec handling functions for efficiency and clarity") Reported by: Claude and Ada Logics Reviewed by: Hans Rosenfeld <rosenfeld@grumpf.hope-2000.org> MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58625
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
bsdinstall: add a hardening knob for unprivileged kenv access It makes sense. Reviewed by: zleei Differental Revision: https://reviews.freebsd.org/D57755
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
kern: fix oversight in security.bsd.unprivileged_kenv_read It was intended that one could close the hole back in loader, but the sysctl was actually not marked TUNABLE. The hardening menu option thus did nothing, because we wouldn't read the value from kenv. Reported by: markj Fixes: https://cgit.freebsd.org/src/commit/?id=6e81fbf5833d ("bsdinstall: add a hardening knob [...]") Fixes: https://cgit.freebsd.org/src/commit/?id=4fd518fcb2bb ("kern: add a security knob to disable [...]")
debug: classified in
04-filenames_plain2 by 'sys/'
debug: moved to admin because
'Need to be grouped with
6e81fbf5833d43529fd8a253b592af9666b04e8e'
We can probaby consider these kernel bugs, in which case asserting is not the most helpful thing we can do. Let's emit the necessary details to stderr and exit non-zero to aid debugging these without completely blocking the ability to export all of the well-formed metrics. Reviewed by: rew Differential Revision: https://reviews.freebsd.org/D57983
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
PeriphID and CellID values are determined by macros which take an index. They currently receive a bus offset which has a stride of 4 bytes. This causes the ID1-3 registers to report incorrect values. Scale the offset before passing it to the macro to fix this. Tested with kvm-unit-tests/arm/pl031. Signed-off-by: Kajetan Puchalski <kajetan.puchalski@arm.com> Reviewed by: jrtc27 Fixes: https://cgit.freebsd.org/src/commit/?id=014d7082a239 ("bhyve: Implement a PL031 RTC on arm64") MFC after: 1 week Pull Request: https://github.com/freebsd/freebsd-src/pull/2358 Closes: https://github.com/freebsd/freebsd-src/pull/2358
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
Add -L to query the generic packed-nvlist IOV_GET_STATUS interface. Report PF enable state and configured and total VF counts. For each VF, print its PCI address, newbus attachment, bound driver, and ppt state. Retry size negotiation if the topology changes between ioctls and reject malformed or incompatible status records. Keep NIC-specific operational state in ifconfig -v; iovctl owns the device-neutral PCI topology and applies to any SR-IOV device class. Relnotes: yes
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
- Prefix all structs with the struct keyword to avoid collisions between the types and variables with the same "name". - Use `_` suffixed variables in initializers to distinguish input parameters from public members [1]. Resolve some trailing whitespace issues while here. NOTE: this doesn't resolve the -pedantic issue reported by g++ with `pmchdr_cpuidinfo::cpuid` about the field being a flexible array in an otherwise empty struct. 1. I generally do this the other way around, i.e., suffix private/protected members with `_`, but these are public members in structs and I don't want to introduce a lot of churn in calling code. Reported by: g++14 with FreeBSD CI (powerpc64 tinderbox) Fixes: https://cgit.freebsd.org/src/commit/?id=ce6ab51f ("pmc: enable the new pmc commands")
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
This mutes a number of complains from g++ about needing specific headers for functionality related to C strings and other function prototypes. Reported by: g++ 14
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
I need to do more work before references can be accepted in other sections of the code. This was an unnecessary drive-by change that was not tested in `make universe`. Reported by: CI Fixes: https://cgit.freebsd.org/src/commit/?id=fd809148 ("pmc(8): resolve -Wshadow issues")
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
nuageinit: adopt cloud-init disable_root semantics disable_root now restricts root's authorized_keys instead of setting PermitRootLogin. Reported by: np@
debug: classified in
03-filenames_plain1 by
'libexec/'
nuageinit: fix ssh_pwauth string handling Treat "no"/"unchanged" correctly instead of any non-nil value as yes.
debug: classified in
03-filenames_plain1 by
'libexec/'
nuageinit: accept lock_passwd for users Alias cloud-init lock_passwd key alongside locked.
debug: classified in
03-filenames_plain1 by
'libexec/'
nuageinit: support allow_public_ssh_keys Skip importing datasource public keys when set to false.
debug: classified in
03-filenames_plain1 by
'libexec/'
Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58636
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
bhyve: namescope virtio_msix to virtio.msix The bhyve_config(5) variable `virtio_msix` is namescoped to `virtio.msix`. Configurations that have the old variable will automatically be mapped to the new one, with a warning message printed out. Relnotes: yes Reviewed by: ziaee, markj Differential Revision: https://reviews.freebsd.org/D58390
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
fbsdrun_virtio_msix(): update virtio_msix to virtio.msix Fixes: https://cgit.freebsd.org/src/commit/?id=2d985d577d79 ("bhyve: namescope virtio_msix to virtio.msix") Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58787
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
Allow "legacy" alongside "none" as a valid value for the ZFS mountpoint property, matching zfsprops(7). Reviewed by: imp, markj MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D58781
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
nuageinit_user_data_script references 'firstboot_freebsd_update' and 'firstboot_pkg_upgrade', which are from Ports. In a default base system test without sysutils/firstboot-freebsd-update and sysutils/firstboot-pkg-upgrade, rcorder will warn on "unknown provisions" to stderr, but is otherwise harmless. Reviewed by: arrowd Fixes: https://cgit.freebsd.org/src/commit/?id=16e47f317c4ce2be5fed530bf8a9af9f9bf55364 MFC after: 3 days Sponsored by: The FreeBSD Foundation
debug: classified in
03-filenames_plain1 by
'libexec/'
Co-authored-by: Michael Osipov <michaelo@FreeBSD.org> PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=280487 Reviewed by: kevans, michaelo MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D46313
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
rtld has always been built PIC since commit 7ca8e6a67068e8357e251bd3ea86253c8a751d59. The stale #ifdef might confuse a reader by thinking rtld can be built as non-PIC. Reviewed by: kib Sponsored by: AFRL, DARPA Differential Revision: https://reviews.freebsd.org/D58623
debug: classified in
03-filenames_plain1 by
'libexec/'
The name of the script and the name used internally for rc.conf differ, as such the hardcoded disabling of service jails for the didn't work. Fix by using the correct name. Fixes: https://cgit.freebsd.org/src/commit/?id=f99f0ee14e3af rc.d: add a service jails config to all base system services
debug: classified in
03-filenames_plain1 by
'libexec/'
We have ports and basesystem services, where the internal name and the filename differ. While the documentation recommends to keep them in sync, the reality is different. For service jails use the basename of the service filename. Fixes: https://cgit.freebsd.org/src/commit/?id=2efbd48 rc: add service jails framework Suggested by: joneum MFC after: 1 week MFC to: stable/15
debug: classified in
03-filenames_plain1 by
'libexec/'
nfsd: Update the rc.d script for RDMA for the nfsd service Commit 7144a1d58c5c added the hooks for the nfsrdma.ko module. Once loaded, this module adds RDMA support to the nfsd. This patch adds a few lines to /etc/rc.d/nfsd, so that nfs_server_rdma_enable="YES" in your /etc/rc.conf will load nfsrdma.ko, so that RDMA service is enabled. It also supports nfs_server_rdma_listen="port#" so that the default of 20490 can be overridden in /etc/rc.conf. At this available as time, the nfsrdma.ko module is an unofficial port, since it was developed by Vinicius Ferrao <ferrao@versatushpc.com.br> using generative AI. As soon as it is available, it will be announced on freebsd-current@freebsd.org. Suggested by: Vinicius Ferrao <versatushpc.com.br> MFC after: 1 month
debug: classified in
03-filenames_plain1 by
'libexec/'
rc.conf: Fix the default NFS-over-RDMA port number The default for nfs_server_rdma_listen transposed two digits: 20490 instead of 20049, the IANA-assigned port for NFS-over-RDMA. Fixes: https://cgit.freebsd.org/src/commit/?id=471e14267bea ("nfsd: Update the rc.d script for RDMA for the nfsd service") MFC after: 1 month Sponsored by: VersatusHPC Pull Request: #2371 Signed-off-by: Vinícius Ferrão <ferrao@versatushpc.com.br>
debug: classified in
03-filenames_plain1 by
'libexec/'
Currently, sending SIGTERM to the bhyve process triggers ACPI poweroff for a VM. However, when running bhyve in monitor mode (-M), there are two processes: the monitor process and the actual VM process. Sending SIGTERM to the VM process works as before -- it powers off the VM. But sending SIGTERM to the monitor process just kills the monitor process, leaving the stale VM process running. Fix that by creating a pipe between these two processes. The child process uses the pipe to detect when the monitor goes away, and exits automatically. MFC after: 2 weeks Reviewed by: markj Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58788
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
bsdconfig: add datetime module for live system clock Provide bsdconfig datetime (menu), date, and time to set the running system clock via dialog(1)/bsddialog(1) --calendar and --timebox with mustberoot. Unlike bsdinstall's time helper, this operates on the live system rather than a CHROOT-staged install target, and calls adjkerntz(8) after a successful change so the CMOS stays in sync. Reviewed by: bcr Differential Revision: https://reviews.freebsd.org/D58487
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
mtree: usr: add missing bsdconfig datetime directories 8cfe06ee4415 installs into 085.datetime and share/bsdconfig/datetime, but those paths were not in BSD.usr.dist. In-place installworld then fails when install(1) cannot create the destination. Fixes: https://cgit.freebsd.org/src/commit/?id=8cfe06ee4415 ("bsdconfig: add datetime module for live system clock")
debug: classified in
03-filenames_plain1 by 'etc/'
Merge implementation of "traceroute -e" to traceroute6 for TCP/UDP/SCTP. MFC-after: 2 weeks
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
On ZAC drives, conventional zones conventionally report a write pointer LBA of 0xffffffffffff. This field is 48 bits wide, unlike ZBC's 64 bits. Recognize both ZAC and ZBC all-ones behaviour in the WRITE POINTER LBA field to indicate non-valid information. Tested by: fuz Discussed with: fuz, asomers, ken Fixes: https://cgit.freebsd.org/src/commit/?id=4735ef6196bc ("zonectl: display conventional zones better") MFC after: 2 weeks Sponsored by: Google Summer Of Code 2026 Reviewed by: asomers Pull Request: https://github.com/freebsd/freebsd-src/pull/2345
debug: classified in
04-filenames_plain2 by
'usr.sbin/'
Fixes: https://cgit.freebsd.org/src/commit/?id=255538cd906045095d0c2113ae6c4731ce36c0cf Differential Revision: https://reviews.freebsd.org/D57850 Reviewed by: adrian
debug: classified in
04-filenames_plain2 by 'lib/'
MFC after: 1 week Fixes: https://cgit.freebsd.org/src/commit/?id=c3276e02beab ("sockets: make shutdown(2) how argument a enum") Reviewed by: glebius Differential Revision: https://reviews.freebsd.org/D57915
debug: classified in
04-filenames_plain2 by 'lib/'
PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296410 Submitted by: Tomas Vondra <tomas@vondra.me> MFC after: 1 week
debug: classified in
04-filenames_plain2 by 'lib/'
libsysdecode: decode Generic Netlink controller messages Decode Generic Netlink controller (GENL_ID_CTRL) messages in Netlink payloads. Display the Generic Netlink header along with the CTRL_CMD_GETFAMILY attributes, including the family ID and family name. Signed-off-by: Ishan Agrawal <iagrawal9990@gmail.com> Reviewed by: kp Sponsored-by: Google LLC (GSoC 2026)
debug: classified in
04-filenames_plain2 by 'lib/'
libsysdecode: cache Generic Netlink family IDs Record Generic Netlink family IDs learned from CTRL_CMD_GETFAMILY responses and use them to decode subsequent Generic Netlink messages using symbolic family names instead of numeric IDs. Signed-off-by: Ishan Agrawal <iagrawal9990@gmail.com> Reviewed by: kp Sponsored-by: Google LLC (GSoC 2026)
debug: classified in
04-filenames_plain2 by 'lib/'
libsysdecode: decode PF Generic Netlink commands Decode the Generic Netlink command header for messages belonging to the PF Generic Netlink family. Display the command name using the PF Generic Netlink command decoder. Signed-off-by: Ishan Agrawal <iagrawal9990@gmail.com> Reviewed by: kp Sponsored-by: Google LLC (GSoC 2026)
debug: classified in
04-filenames_plain2 by 'lib/'
libsysdecode: add attribute parsing for PFNL_CMD_GETRULES Signed-off-by: Ishan Agrawal <iagrawal9990@gmail.com> Sponsored-by: Google LLC (GSoC 2026) Reviewed by: kp
debug: classified in
04-filenames_plain2 by 'lib/'
libsysdecode: use decoder table for PF netlink commands Introduce a PF netlink command decoder table mapping PFNL commands to their attribute decoder sets. This replaces the existing switch-based dispatch and makes it easier to add support for additional PF netlink commands. Signed-off-by: Ishan Agrawal <iagrawal9990@gmail.com> Sponsored-by: Google LLC (GSoC 2026) Reviewed by: kp
debug: classified in
04-filenames_plain2 by 'lib/'
libsysdecode: avoid extra commas for undecoded netlink attributes Signed-off-by: Ishan Agrawal <iagrawal9990@gmail.com> Sponsored-by: Google LLC (GSoC 2026) Reviewed by: kp
debug: classified in
04-filenames_plain2 by 'lib/'
libsysdecode: verify decoder tables are sorted Add assertions to validate decoder table ordering required by binary search. Signed-off-by: Ishan Agrawal <iagrawal9990@gmail.com> Sponsored-by: Google LLC (GSoC 2026) Reviewed by: kp
debug: classified in
04-filenames_plain2 by 'lib/'
libc/resolv: Drop Solaris 2 compatibility MFC after: 1 week Reviewed by: kevans, markj Differential Revision: https://reviews.freebsd.org/D57922
debug: classified in
04-filenames_plain2 by 'lib/'
libc/resolv: Refactor the option parser Start the loop by finding the end of the option name, the name-value separator (if any), and the end of the option. Use those pointers to simplify matching the option name and parsing the option value, and validate option names and values more strictly. This means that: * We no longer accept trailing garbage in an option name or value. For instance, we would previously interpret “edns0123” as “edns0” and “timeout:3xyz” as “timeout:3”. This was actually quite lucky because we also failed to recognize the newline at the end of the option line as a whitespace character. * For options that take a numerical argument, we would previously accept negative values and treat non-numerical arguments as 0, while large numerical arguments would be capped to the option's maximum permitted value. Now, any failure to parse the argument, including overflow, results in the option being left unchanged. MFC after: 1 week Relnotes: yes Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D57923
debug: classified in
04-filenames_plain2 by 'lib/'
libc/resolv: Refactor the configuration parser This was previously all a single loop in res_init(), apart from option parsing which we cleaned up in a previous commit. Break it out into separate functions for reading the configuration line by line, setting the default domain, setting the search list, and adding a nameserver to the nameserver list. Sprinkle bounds checks and code comments all around. The sortlist code, which has been disabled for the past 20 years, will be dealt with in a separate commit. MFC after: 1 week Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D57924
debug: classified in
04-filenames_plain2 by 'lib/'
libc/resolv: Reimplement the sortlist parser When we switched from the BIND4 resolver to the BIND9 resolver, the sortlist parser was inadvertently disabled due to a missing #define, and nobody seemed to notice. The sorting code remained enabled in the resolver, but there was no way to set a sort order. Reimplement the sortlist parser, but correctly, and update the manual accordingly. The new parser accepts IPv4 and IPv6 addresses with or without a mask or prefix length, just like the old one, except IPv6 support was a bit wonky in the original code. Fixes: https://cgit.freebsd.org/src/commit/?id=5342d17f09a8 ("Update the resolver in libc to BIND9's one.") Relnotes: yes Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D57925
debug: classified in
04-filenames_plain2 by 'lib/'
libc/resolv: Add no-debug and no-rotate options These are simply the reverse of the debug and rotate options. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D57926
debug: classified in
04-filenames_plain2 by 'lib/'
Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D57927
debug: classified in
03-filenames_plain1 by
'include/'
getfacl / acl_to_text() incorrectly prints uid/gid numbers as signed integers. This causes uid / gid numbers larger than 2G (2147483648) to print as negative numbers. The libc acl_from_text() function does not handle negative numbers. This diff adds a backwards compatiblity fix to allow negative numbers... Reviewed by: rmacklem MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D57180
debug: classified in
04-filenames_plain2 by 'lib/'
While here, clean up and simplify the existing code. MFC after: 1 week Reviewed by: glebius, jhb Differential Revision: https://reviews.freebsd.org/D57993
debug: classified in
04-filenames_plain2 by 'lib/'
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57124
debug: classified in
05-summary-prefix by 'lib.*:'
debug: Commit manually moved from "unknown" to "libs".
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57163
debug: classified in
05-summary-prefix by 'lib.*:'
debug: Commit manually moved from "unknown" to "libs".
libfetch: Overhaul socket read / write * Make fetch_ssl_read() and fetch_ssl_write() behave more like read(2) and write(2), and drop fetch_socket_read() in favor of read(2). * Don't request POLLERR, it's implied. * Don't needlessly set errno, it's relatively costly. * Always check for EAGAIN from writev(2), otherwise we will abort on a short write instead of proceeding to poll(2). * Always check for EAGAIN from poll(2) even though it can't happen on FreeBSD; POSIX says it can, and it might in the future. * Rewrite fetch_read() and fetch_writev() to be more similar to each other. The main difference is that a partial read is treated as success while a partial write is treated as failure. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296316 MFC after: 1 week Reviewed by: op Differential Revision: https://reviews.freebsd.org/D57906
debug: classified in
04-filenames_plain2 by 'lib/'
libfetch: Add read buffering Previously, we would read FTP control connection messages and HTTP reponse headers one character at a time. Now, we read as much as will fit in our buffer and look for a newline. If there is data left over, it will be reused by the next fetch_getln() call. This also requires the addition of a fetch_bufread() which takes the buffer into account, otherwise the start of the HTTP response body will be stuck in the buffer after we read the last line of the header. This should noticeably improve HTTP performance, especially for small transfers. MFC after: 1 week Reviewed by: op Differential Revision: https://reviews.freebsd.org/D57907
debug: classified in
04-filenames_plain2 by 'lib/'
libfetch: Apply timeout to connection attempts Mark the socket non-blocking before connecting and poll for completion, applying fetchTimeout if set. MFC after: 1 week Reviewed by: op Differential Revision: https://reviews.freebsd.org/D57909
debug: classified in
04-filenames_plain2 by 'lib/'
Make fetch_ref() an inline and provide a fetch_deref(). MFC after: 1 week Reviewed by: op Differential Revision: https://reviews.freebsd.org/D57944
debug: classified in
04-filenames_plain2 by 'lib/'
Reduce the amount of copying we do when performing buffered reads. MFC after: 1 week Reviewed by: op Differential Revision: https://reviews.freebsd.org/D58113
debug: classified in
04-filenames_plain2 by 'lib/'
Reviewed by: zlei, vmaffione Obtained from: https://github.com/luigirizzo/netmap/commit/b52a2bcae35e56548acfb0849b248a1e4b0c0c3b MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58150
debug: classified in
04-filenames_plain2 by 'lib/'
Reviewed by: zlei, vmaffione Obtained from: https://github.com/luigirizzo/netmap/commit/7d9177ed9a121e66bf4eaa0acb5d574e408297da MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58151
debug: classified in
04-filenames_plain2 by 'lib/'
Logic prior to this change would incorrectly try linking when MK_CDDL != no, instead of MK_CTF != no, which could result in the library and the tests being broken if/when MK_CTF == no and MK_CDDL != no (an uncommon, but possible combination with today's build knobs). This change updates the conditional to correctly track the value of MK_CTF, which in turn is properly toggled to no if/when MK_CDDL == no as it's a dependent build knob. This [niche] build bug has been present in FreeBSD since 2014. MFC after: 1 week
debug: classified in
05-summary-prefix by 'lib.*:'
* Get rid of the pointless LOCALBASE_CTL_LEN mechanism * Apply minimal normalization to the paths obtained from the environment or sysctl variable * Turn the manual page into a manual page * Add tests MFC after: 1 week Reviewed by: se Differential Revision: https://reviews.freebsd.org/D58362
debug: classified in
04-filenames_plain2 by 'lib/'
MFC after: 1 week Fixes: https://cgit.freebsd.org/src/commit/?id=2a5e58c59694 ("procdesc: add NOTE_PDSIGCHLD") Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D58388
debug: classified in
04-filenames_plain2 by 'lib/'
Introduce a generic Netlink attribute decoding framework based on attribute decoder tables. The framework supports decoding primitive attribute types as well as nested attributes and can be reused by different Generic Netlink families. Signed-off-by: Ishan Agrawal <iagrawal9990@gmail.com> Sponsored-by: Google LLC (GSoC 2026) Reviewed-by: kp Pull-Request: https://github.com/freebsd/freebsd-src/pull/2337
debug: classified in
04-filenames_plain2 by 'lib/'
Sponsored by: The FreeBSD Foundation
debug: classified in
04-filenames_plain2 by 'lib/'
Sponsored by: The FreeBSD Foundation
debug: classified in
04-filenames_plain2 by 'lib/'
Replace <sysdecode.h> with "sysdecode.h" so local builds use the in-tree header in lib/libsysdecode instead of a stale installed copy in /usr/include, avoiding build failures after updating sysdecode.h. Signed-off-by: Ishan Agrawal <iagrawal9990@gmail.com> Sponsored-by: Google LLC (GSoC 2026) Reviewed by: kp Pull-Request: https://github.com/freebsd/freebsd-src/pull/2338
debug: classified in
04-filenames_plain2 by 'lib/'
Change sysdecode_nlm_flag() to decode Netlink message flags as a bitmask instead of looking up a single flag value. This correctly prints combinations of NLM_F_* flags while preserving any unknown bits in hexadecimal. Reported by: androvonx95 <androvonx95@tutamail.com> Reviewed by: kp Signed-off-by: Ishan Agrawal <iagrawal9990@gmail.com> Sponsored-by: Google LLC (GSoC 2026)
debug: classified in
04-filenames_plain2 by 'lib/'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58463
debug: classified in
05-summary-prefix by 'lib.*:'
libfetch: Fix handling of connection failures After commit 848f360c8f9a, if one tries to connect to a closed port, fetch reports "Operation now in progress", which is rather confusing. Return a more useful error message, restoring the old behaviour. Fixes: https://cgit.freebsd.org/src/commit/?id=848f360c8f9a ("libfetch: Apply timeout to connection attempts") Reviewed by: des MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D58481
debug: classified in
04-filenames_plain2 by 'lib/'
libfetch: Further improve connection polling * Reorganize the connection loop to make it a little more readable * Start the timeout clock earlier * Correctly calculate the poll timeout before calling poll() * Don't leak the socket on failure Fixes: https://cgit.freebsd.org/src/commit/?id=848f360c8f9a ("libfetch: Apply timeout to connection attempts") Fixes: https://cgit.freebsd.org/src/commit/?id=b02e02958dad ("libfetch: Fix handling of connection failures") MFC after: 3 days Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58512
debug: classified in
04-filenames_plain2 by 'lib/'
Some NLM_F_ definitions contain multiple underscores in their name; this should pick them up. Reviewed by: kp, Ishan Agrawal <iagrawal9990@gmail.com> Fixes: https://cgit.freebsd.org/src/commit/?id=4c932a4d45fb ("netlink: decode netlink message flags symbolically") Sponsored by: The FreeBSD Foundation Pull Request: https://github.com/freebsd/freebsd-src/pull/2340
debug: classified in
04-filenames_plain2 by 'lib/'
Reviewed by: jrtc27 Differential Revision: https://reviews.freebsd.org/D58558
debug: classified in
04-filenames_plain2 by 'lib/'
stdio: *memstream: slightly streamline growth function Inverting the condition after realloc*() is a minor cleanup, but makes the success path a little cleaner to ease a future change. Reviewed by: des, jhb Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D57353
debug: classified in
04-filenames_plain2 by 'lib/'
stdio: *memstream: decouple the buffer size from the stream length It's useful to be able to track both facts with a single variable, but it also makes it more difficult to change how the buffer size scales. As an example, Apple's implementation seems to scale the buffer size by 1.5x on growth, presumably in an attempt to reduce trips into realloc(). This might be questionable in the face of stdio buffering, but avoiding serious churn in the line- or un-buffered case is a net positive if doing so isn't incredibly invasive. Reviewed by: des, jhb, obiwac Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D57354
debug: classified in
04-filenames_plain2 by 'lib/'
stdio: *memstream: grow the buffer by 1.5x on write This improves performance by reducing the number of allocations as we write into the memstream, both in the fully buffered case with larger memstreams and also more trivially in the line- and un-buffered case as they flush back to the underlying buffer more often. The inspiration for this was taken from Apple's implementation in https://github.com/apple-oss-distributions/libc, but expanded to include wmemstream for consistency. I've added a test for the bug that I hit in libder that caused me to notice this in the first place, and fixed that bug in this version. Reviewed by: des, jhb (both slightly previous version) Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D57355
debug: classified in
04-filenames_plain2 by 'lib/'
stringf.cc uses errno and related macros without including <cerrno>. Their availability is guaranteed only when the corresponding header is included; transitive exposure is implementation-defined. Modern libc++ has been progressively reducing incidental transitive includes as part of its header removal policy (see LLVM libc++ Header Removal Policy and D132284), making such dependencies brittle. This change includes <cerrno> explicitly to make the dependency well-defined. No functional or behavioural change intended. Approved by: fuz Signed-off-by: Faraz Vahedi <kfv@kfv.io> Pull-Request: https://github.com/freebsd/freebsd-src/pull/2188
debug: classified in
04-filenames_plain2 by 'lib/'
Currently mergesort() uses ICOPY_*() to copy data as four byte blocks instead of one byte. However, this is only achievable when both size and base arguments are aligned to four bytes. Use of memcpy() is ideal as 1) it is cleaner and 2) the library will use SIMD for copying when the hardware supports it. Compared to ICOPY_*(), SIMD can support up to 64 bytes. When the SIMD-backed memcpy() find the address is unaligned, it can first copy data up to the nearest aligned address, and then use SIMD operations for faster transfer. Thus memcpy() can give better performance than mergesort()'s own implementation. This is benchmarked on amd64 where there isn't a SIMD-backed implementation yet. However, the baseline implementation in assembly already delivers better performance in unaligned cases although there is some performance drops in aligned cases. The benchmark results and script is available in the Phabricator review. Ideally, more performance improvements will come when amd64 gets SIMD implementation of memcpy(). Signed-off-by: Minsoo Choo <minsoochoo0122@proton.me> Reviewed by: fuz MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D58002
debug: classified in
04-filenames_plain2 by 'lib/'
This commit implements the inverse half-cycle
trigonometric functions:
asinpi(x) = asin(x) / pi Eq. (1)
acospi(x) = acos(x) / pi
atanpi(x) = atan(x) / pi
Implemention details are contained in src/s_asinpi.c and
src/a_atanpi.c, where the details for acospi(x) appear in
the former.
*************
CAVEAT EMPTOR: The ld128 code has been only compiled. It has
not been tested for correctness due to lack of hardware.
*************
Code compiled on AMD Ryzen 7 7700X system run FreeBSD 16.0-CURRENT
main-n284956-de9fe28ab847.
Exhaustive testing of acospif(x), asinpif(x), and atanpif(x)
on the indicated intervals yields
% ./tlibm acospi -fPE -x 0x1p-120 -X 1
Interval tested for acospif: [7.52316e-37,1]
ulp <= 0.5: 99.627% 1002878299 | 99.627% 1002878299
0.5 < ulp <= 0.6: 0.277% 2789599 | 99.904% 1005667898
0.6 < ulp <= 0.7: 0.096% 965062 | 100.000% 1006632960
Max ulp: 0.63661975 at 5.96046412e-08 0x1.fffffep-25
% ./tlibm asinpi -fPED -x 0x1p-120f -X 1.f
Interval tested for asinpif: [7.52316e-37,1]
ulp <= 0.5: 99.851% 1005129353 | 99.851% 1005129353
0.5 < ulp <= 0.6: 0.149% 1501097 | 100.000% 1006630450
0.6 < ulp <= 0.7: 0.000% 2510 | 100.000% 1006632960
Max ulp: 0.68957579 at 5.04878759e-01 0x1.027f78p-1
% ./tlibm atanpi -fPE -x 0x1p-120 -X max > zatanpif.txt &
Interval tested for atanpif: [7.52316e-37,3.40282e+38]
ulp <= 0.5: 99.865% 2077574602 | 99.865% 2077574602
0.5 < ulp <= 0.6: 0.131% 2735011 | 99.997% 2080309613
0.6 < ulp <= 0.7: 0.003% 65170 | 100.000% 2080374783
Max ulp: 0.68433094 at 5.01186252e-01 0x1.009b7cp-1
Testing the double and long double version cannot be done
in an exhaustive manner. For 300 M values, uniformily
distributed in the indicated interals, one finds the max ULP:
Interval tested for acospi: [9.31323e-10,0.25]
xm = 2.4423788416892520e-01, /* 0x3fcf432f, 0xde79920f */
libm = 4.2146222480005391e-01, /* 0x3fdaf93c, 0xb201001c */
mpfr = 4.2146222480005396e-01, /* 0x3fdaf93c, 0xb201001d */
ULP = 0.50499351466286857
Interval tested for acospi: [0.25,0.5]
xm = 4.9689430915631438e-01, /* 0x3fdfcd1d, 0xc9d945c6 */
libm = 3.3447366122373884e-01, /* 0x3fd56804, 0x371513ef */
mpfr = 3.3447366122373889e-01, /* 0x3fd56804, 0x371513f0 */
ULP = 0.57195275455053829
Interval tested for acospi: [0.5,0.75]
xm = 5.0238623667462079e-01, /* 0x3fe0138c, 0x4d0f4be0 */
libm = 3.3245556599062825e-01, /* 0x3fd546f3, 0xb5d36303 */
mpfr = 3.3245556599062820e-01, /* 0x3fd546f3, 0xb5d36302 */
ULP = 0.63427929243758807
Interval tested for acospi: [0.75,1]
xm = 7.5853651919512177e-01, /* 0x3fe845ee, 0x60d8789f */
libm = 2.2591472240382732e-01, /* 0x3fcceac6, 0x0c3465ce */
mpfr = 2.2591472240382729e-01, /* 0x3fcceac6, 0x0c3465cd */
ULP = 0.56915750216472161
Interval tested for asinpi: [9.31323e-10,0.25]
xm = 1.9502362835488171e-01, /* 0x3fc8f688, 0xc4dda0fb */
libm = 6.2478354989018887e-02, /* 0x3faffd29, 0xb6c57c61 */
mpfr = 6.2478354989018881e-02, /* 0x3faffd29, 0xb6c57c60 */
ULP = 0.52347765415885006
Interval tested for asinpi: [0.25,0.5]
xm = 4.9937103583123676e-01, /* 0x3fdff5b1, 0xeeddbf62 */
libm = 1.6643553767987129e-01, /* 0x3fc54dc2, 0x7b9d15a4 */
mpfr = 1.6643553767987126e-01, /* 0x3fc54dc2, 0x7b9d15a3 */
ULP = 0.66214688371031072
Interval tested for asinpi: [0.5,0.75]
xm = 5.0228515250761718e-01, /* 0x3fe012b8, 0x4fe92bbb */
libm = 1.6750722213679006e-01, /* 0x3fc570e0, 0x6c75edd5 */
mpfr = 1.6750722213679009e-01, /* 0x3fc570e0, 0x6c75edd6 */
ULP = 0.78223048105528226
Interval tested for asinpi: [0.75,1]
xm = 7.5425933001419776e-01, /* 0x3fe822e4, 0x7663a4aa */
libm = 2.7200385380185182e-01, /* 0x3fd16882, 0xda1dc13b */
mpfr = 2.7200385380185188e-01, /* 0x3fd16882, 0xda1dc13c */
ULP = 0.53747973176773822
Interval tested for atanpi: [9.31323e-10,0.25]
xm = 1.9666113418757322e-01, /* 0x3fc92c31, 0x29dd6d2f */
libm = 6.1810387818117797e-02, /* 0x3fafa59c, 0x7476baa5 */
mpfr = 6.1810387818117804e-02, /* 0x3fafa59c, 0x7476baa6 */
ULP = 0.54674297446584263
Interval tested for atanpi: [0.25,0.5]
xm = 4.1312119637707068e-01, /* 0x3fda7093, 0xe2ee5494 */
libm = 1.2470309560460152e-01, /* 0x3fbfec8a, 0xc554ebec */
mpfr = 1.2470309560460154e-01, /* 0x3fbfec8a, 0xc554ebed */
ULP = 0.73116638175113347
Interval tested for atanpi: [0.5,0.75]
xm = 5.0018949583396499e-01, /* 0x3fe0018d, 0x66cd1b82 */
libm = 1.4763186871058706e-01, /* 0x3fc2e599, 0xdffacb8f */
mpfr = 1.4763186871058709e-01, /* 0x3fc2e599, 0xdffacb90 */
ULP = 0.69192753950764663
Interval tested for atanpi: [0.75,1]
xm = 7.5007880583359599e-01, /* 0x3fe800a5, 0x448f4c03 */
libm = 2.0484881828445453e-01, /* 0x3fca387c, 0x6f93f71f */
mpfr = 2.0484881828445450e-01, /* 0x3fca387c, 0x6f93f71e */
ULP = 0.65765471872064396
Interval tested for atanpi: [1,2]
xm = 1.0103228000344093e+00, /* 0x3ff02a48, 0x3d88d0a2 */
libm = 2.5163447403817019e-01, /* 0x3fd01ac7, 0x7b229108 */
mpfr = 2.5163447403817013e-01, /* 0x3fd01ac7, 0x7b229107 */
ULP = 0.67409519689166042
Interval tested for atanpi: [2,4]
xm = 2.0231383267437946e+00, /* 0x40002f63, 0x25a530a9 */
libm = 3.5387589538123299e-01, /* 0x3fd6a5e7, 0x156053c6 */
mpfr = 3.5387589538123293e-01, /* 0x3fd6a5e7, 0x156053c5 */
ULP = 0.69695587476021503
Interval tested for atanpi: [4,1.79769e+308]
xm = 4.0000000000000000e+00, /* 0x40100000, 0x00000000 */
libm = 4.2202086962263069e-01, /* 0x3fdb0263, 0xd2508e31 */
mpfr = 4.2202086962263069e-01, /* 0x3fdb0263, 0xd2508e31 */
ULP = 0.27709400511686716
PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=295884
MFC after: 1 month
Reviewed by: fuz
debug: classified in
04-filenames_plain2 by 'lib/'
strfromd(), strfromf(), and strfroml() are implemented directly in terms of gdtoa. If a non-conforming format string is passed, the string "EDOOFUS" is returned and errno set to EDOOFUS as an extension. Reviewed by: fuz MFC after: 1 month Pull-Request: https://github.com/freebsd/freebsd-src/pull/2301 Signed-off-by: Faraz Vahedi <kfv@kfv.io>
debug: classified in
05-summary-prefix by 'lib.*:'
On some platforms, e.g. Linux Clang 22.1.8 / glibc 2.43, strchr() now implements the C23 behaviour where passing a const pointer to strchr() also returns a const pointer. This breaks getopt during the bootstrap build, since it assumes the return value is always a mutable pointer. Since the pointed-to value is never modified, fix this by making the pointer const. MFC after: 1 week Reviewed by: emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58488
debug: classified in
04-filenames_plain2 by 'lib/'
Replace all _open() calls with _openat() in __fts_open(), fts_read(), and fts_children(). Replace statfs() with _fstatfs(). Add fts_dirfd to struct _ftsent, set to the file descriptor of the parent directory. Callers can use openat(ent->fts_dirfd, ent->fts_name, ...) to access files safely without relying on fts_accpath, which enables programs in capability mode to open the files described by _ftsent. This is a preparatory change for fts_openat() which will allow callers to provide a pre-opened directory fd, enabling fts(3) traversal inside Capsicum capability mode. Mirror all fts_open() changes to fts_open_b(). As a result of expanding _ftsend, publish new ELF symbol versions for fts_openat and related functions. Sponsored by: Google LLC (GSoC 2026) Reviewed by: asomers Pull Request: https://github.com/freebsd/freebsd-src/pull/2303
debug: Commit manually moved from "unknown" to "libs".
Add an uncached sysctl based implementation which retrieves individual categories. A cache would be an obvious extension should this optional feature that can only be enabled by an environmental varible have a noticable performance impact in a case that matters. Reviewed by: kib Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D58238
debug: classified in
04-filenames_plain2 by 'lib/'
When fts_children() is called, sp->fts_child is set. On the next fts_read() call, fts_safe_changedir() was incorrectly passed p->fts_dirfd (pointing to the parent directory) instead of -1. This caused fts to fchdir to the parent instead of the child directory, silently skipping the contents of 3rd-level subdirectories. This was observed as a failure in nmtree_test:mtree_create which calls fts_children() internally. Add regression test accpath_correct_after_descent that calls fts_children() on each directory entry and verifies files at depth 3 are still visited correctly. The test fails with the unfixed libc and passes with the fix. Reported by: Herbert J. Skuhra <herbert@gojira.at> Sponsored by: Google LLC (GSoC 2026) Reviewed by: asomers Fixes: https://cgit.freebsd.org/src/commit/?id=4bd01d6ae01 ("fts: refactor to use fd-relative") Pull Request: https://github.com/freebsd/freebsd-src/pull/2354
debug: classified in
04-filenames_plain2 by 'lib/'
libifconfig: Add an SR-IOV VF status query Provide a public helper which retrieves, unpacks, and validates the versioned VF status nvlist. Validate the required VF indices and the shape and version of driver-specific extension namespaces while allowing unknown optional fields. The ioctl argument is not copied back when the command returns EFBIG. Start with a practical buffer and grow it geometrically rather than relying on the required length being observable. Use the helper in ifconfig so other consumers share the same transport and validation behavior.
debug: classified in
05-summary-prefix by 'lib.*:'
rescue: Satisfy libifconfig's libnv dependency in crunched links libifconfig now calls nv(9) routines for the SR-IOV VF status query, so crunched builds that link the static library must also provide libnv. The per-program CRUNCH_LIBS_ifconfig hook cannot do this: crunchgen partially links per-program libraries into the program object and crunchide then localizes every symbol except the stub entry, so members absorbed there cannot satisfy references from another archive on the final link's library list. List libnv globally next to libifconfig.a in rescue(8) and bsdbox. This also makes the existing per-program libnv links redundant; remove them to avoid embedding private localized copies in the crunched binary. Fixes: https://cgit.freebsd.org/src/commit/?id=2d6114f6d26b ("libifconfig: Add an SR-IOV VF status query")
debug: classified in
02-filenames_wildcards by
'.*Makefile'
debug: moved to libs because
'Need to be grouped with
2d6114f6d26bf7dfa5ad94e1db9b09ee7108dc7a'
On powerpc64le with IEEE-128 long double, the long-double compiler-runtime helpers are the *kf* soft-float functions (built from the tf sources, renamed via -D in lib/libcompiler_rt/Makefile.inc) plus the complex multc3/__divtc3. They are compiled into libgcc_s.so by the powerpc64le SRCF block, but were never added to Symbol.map, so they stayed local and unexported. Every other IEEE-128 architecture already exports its scalar long-double runtime -- aarch64 and riscv list the tf helpers in GCC_4.6.0. powerpc64le was simply missed. Because the helpers are unexported, any clang-built shared library that uses long double leaves them undefined (permitted in a DSO), and linking an executable against that DSO then fails under lld's default --no-allow-shlib-undefined. For example science/harminv fails to link its binary against its own libharminv.so with undefined multc3/divtc3; at -O0, mulkf3/addkf3/__subkf3/__unordkf2 appear as well. Export the full runtime, gated on the PowerPC-specific LONG_DOUBLE_IEEE128 predefine so no other architecture is affected: complex multc3/divtc3 in GCC_4.0.0 (beside the other complex mul*c3), and the 28 scalar *kf* functions in GCC_7.0.0. Node placement follows glibc/gcc symbol-versioning history. Differential Revision: https://reviews.freebsd.org/D58248
debug: classified in
04-filenames_plain2 by 'lib/'
Signed-off-by: Ishan Agrawal <iagrawal9990@gmail.com> Sponsored-by: Google LLC (GSoC 2026) Reviewed by: kp
debug: classified in
04-filenames_plain2 by 'lib/'
Signed-off-by: Ishan Agrawal <iagrawal9990@gmail.com> Sponsored-by: Google LLC (GSoC 2026) Reviewed by: kp
debug: classified in
04-filenames_plain2 by 'lib/'
We already verified that the attribute parser tables were correctly sorted. Now also verify that the command decoders are too. While here move the assertions into a constructor so we only run them once.
debug: classified in
04-filenames_plain2 by 'lib/'
libusb: versioning symbols Reviewed by: bapt, kevans Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D55686
debug: classified in
05-summary-prefix by 'lib.*:'
libusb: Mark defualt smybol tag as latest stable version As we might change the libusb ABI in 16, we should mark thje first version as FBSD_1.8 instead of 1.9. Since versioning patch has not landed for a long time, it makes sense to change it directly. Discussed with: kib Fixes: https://cgit.freebsd.org/src/commit/?id=527a82474cb3 ("libusb: versioning symbols") Sponsored by: The FreeBSD Foundation
debug: classified in
04-filenames_plain2 by 'lib/'
Add BOOL_MAX and BITINT_MAXWIDTH macros for C23 compliance, and define the __STDC_VERSION_LIMITS_H__ feature test macro now that the header fully conforms to C23. Reviewed by: fuz Approved by: fuz (mentor) MFC after: 1 month Pull Request: https://github.com/freebsd/freebsd-src/pull/2352
debug: Commit manually moved from "unknown" to "libs".
Several standard library functions are specified to return an unqualified pointer while accepting a pointer to a potentially const-qualified object. N3020 addresses this behaviour, discarding qualifiers due to incompatible pointer types, by introducing qualifier-preserving macros for the affected set of standard library functions. Add `__qualsel()` helper to `<sys/cdefs.h>`, implemented using the generic selection, and define qualifier-preserving macros for that set of functions in `<string.h>`, `<wchar.h>`, and `<stdlib.h>`. Macros are gated on `_STDC_VERSION__ >= 202311L && !__cplusplus`, therefore there is no behavioural change for earlier C modes or C++ translation units. The kernel is likewise unaffected, as it does not include userland headers. As function-like macros, they are transparent except at a call site where the address-of operator is applied, the macro is suppressed via `#undef`, or the identifier appears in parenthesised form; all of which cause the underlying function designator to be used instead. Reviewed by: fuz Approved by: fuz (mentor) MFC after: 1 month Pull Request: https://github.com/freebsd/freebsd-src/pull/2288
debug: classified in
05-summary-prefix by 'lib.*:'
In Linux these are maintained in separate places so a separate copy is needed, but in FreeBSD take advantage of the shared tree to avoid having a duplicate copy that can be stale. Reviewed by: np Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D58575
debug: classified in
05-summary-prefix by 'lib.*:'
Tables that have one element per protocol or address family were previously sized by AF_MAX + 1 since AF_MAX was off by one. Now that AF_MAX has been corrected, we need to apply the opposite correction to these tables. Fixes: https://cgit.freebsd.org/src/commit/?id=ddd850aa7720 ("sys/socket.h: Fix AF_MAX") MFC after: 3 days Sponsored by: Klara, Inc. Sponsored by: NetApp, Inc. Reviewed by: kevans Differential Revision: https://reviews.freebsd.org/D58827
debug: classified in
04-filenames_plain2 by 'lib/'
FreeBSD's libusb has three components: libusb01, libusb10, and libusb20. libusb20 handles communication with character devices. We now requires a backend context for libusb20. The backend context contains contains the capsicumized usbctrl fd and usb directory (/dev/usb) fd so that the library user can enter the capiblity mode safely while using libusb. libusb10 is updated to support capabilities via a context option. Since libusb allows general read/write access, we preserve all possible capabilities when passing backend context to libusb20. It is the responsibility of the libusb user to call cap_enter() at an appropriate time. All base system tools using libusb and libusb20 have been updated to support Capsicum. Reviewed by: adrian, markj Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D51865
debug: classified in
05-summary-prefix by 'lib.*:'
PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296234(exp-run) Relnotes: yes Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57772
debug: classified in
04-filenames_plain2 by 'lib/'
Reviewed by: fuz Approved by: fuz (mentor) MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D58842
debug: classified in
03-filenames_plain1 by
'include/'
Define the __STDC_VERSION_STDIO_H__ feature test macro now that the header fully conforms to C23. Reviewed by: fuz Approved by: fuz (mentor) MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D58842
debug: classified in
05-summary-prefix by 'lib.*:'
When fts_read() descends into a directory whose children were already prefetched by fts_children() (as ls -R does), it changed directory using p->fts_name instead of p->fts_accpath. With a trailing slash on a relative root path (e.g. 'dir/'), the bare name was resolved relative to the wrong directory, so every sibling directory after the first failed with ENOENT and was reported as FTS_DNR. This manifested as 'ls -lR dir/' skipping the contents of all but the first subdirectory. Restore the use of p->fts_accpath, matching the behavior prior to 4bd01d6ae016. Add a regression test that reproduces the exact conditions: fts_children() on each directory, FTS_PHYSICAL without FTS_NOCHDIR, and a trailing slash on the root path. Reported by: Michael Butler <imb@protected-networks.net> Reviewed by: asomers Fixes: https://cgit.freebsd.org/src/commit/?id=4bd01d6ae016 Sponsored by: Google LLC (GSoC 2026) Pull Request: https://github.com/freebsd/freebsd-src/pull/2372
debug: classified in
04-filenames_plain2 by 'lib/'
Rename am_lock description from autofslk -> autfsm. The lock description, autofslk, is used as the description for autofs_softc->sc_lock, which is used to protect autofs requests and the like as opposed to am_lock which protects autofs nodes for a given mount. This change allows witness to distinguish different lock orders for each lock. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D57972
debug: classified in
03-filenames_plain1 by
'sys/fs/'
The OpenZFS merge 80aae8a3f8aa introduced HAVE_SIMD() which checks for HAVE_TOOLCHAIN_* defines via simd_config.h. The kernel module Makefile was updated, but kern.pre.mk (static kernel build) and the libzpool/libzfs Makefiles were missed, still using the old HAVE_SSE2 etc. names. This caused all vectorized raidz, fletcher, and blake3 implementations to be compiled out.
debug: classified in
05-summary-prefix by 'zfs:'
The consequences are: - for nfs exports and fhopen(2), unlinked but still referenced inodes are accessible - for ffs_vput_pair() with unlock_vp = false, spurious ESTALE is not returned when the inode is still alive but unlinked Note that tmpfs does not return ESTALE for the unlinked nodes. The same behavior is claimed for Linux in https://github.com/openzfs/zfs/issues/18699 Reviewed by: rmacklem Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57982
debug: classified in
03-filenames_plain1 by
'sys/ufs/'
Fix two locking violations that could happen during execve, while
executing a file stored on fusefs. Both would cause panics on an
INVARIANTS kernel after 15.0, or a DEBUG_VFS_LOCKS kernel prior to that.
Neither is likely to be noticeable on a release kernel.
* Don't assume that the vnode is exclusively locked during VOP_CLOSE.
It usually is thanks to !MNTK_LOOKUP_SHARED, but isn't during execve,
which locks the vnode outside of the lookup path.
* Totally rewrite fuse_io_invalbuf. It's had a number of problems ever
since its original introduction[^1]:
- Don't assume that the vnode is exclusively locked. That assumption
failed during execve just like the assumption in fuse_vnop_close.
- Don't livelock forever if vinvalbuf returns ENOSPC or EDQUOT.
- Don't attempt to handle multiple threads calling this function at
the same time. That would be impossible if the vnode truly were
exclusively locked. So the code was dead. Or it would've been, if
the assumption hadn't been wrong. Furthermore, both vinvalbuf and
vnode_pager_clean_sync only require a shared vnode lock, and are
already capable of dealing with multiple simultaneous callers.
- Using fvdat->flag in this way would require some sort of mutex
protection, if the vnode weren't exclusively locked.
* Add new test cases that trigger both of the aforementioned panics.
[^1]: https://github.com/glk/fuse-freebsd/commit/efe6eb3005e7633b4e31d5e453eacbaa0cba42fa
PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=295957
Reported by: dan.kotowski@a9development.com
MFC after: 2 weeks
Sponsored by: ConnectWise
Reviewed by: markj
Differential Revision: https://reviews.freebsd.org/D57536
debug: classified in
03-filenames_plain1 by
'sys/fs/'
Previously, an_vnode_lock was initialized with SX_NOWITNESS to silence
lock order reversals. The reversals would occur when autofs_node_vn()
was called with the directory vnode lock held, then lock an_vnode_lock,
then lock the vnode attached to the autofs node. It looked like:
directory vnode -> an_vnode_lock -> vnode attached to autofs node
The established lock order is now vnode -> an_vnode_lock
Currently, we don't have to worry about losing an autofs node during the
unlock/lock as autofs nodes are only removed during an unmount() after
vflush(). When autofs_node_vn() is called, the mountpoint has either
been busied (preventing unmount) or a directory vnode is locked which
prevents vflush() from finishing until the directory vnode is unlocked.
Reviewed by: kib
Differential Revision: https://reviews.freebsd.org/D57857
debug: classified in
03-filenames_plain1 by
'sys/fs/'
Commit 016570c4463d modified the client to handle the upgrade of a read delegation to a write delegation, where the server provides the same delegation stateid to the client. However, it failed to check if the delegation structure was currently in use. Without this patch, if the structure was in use, a use after free could occur. This patch handles the "in use" case by copying the necessary fields into the current/old structure and free's the new one instead of the old one that is "in use". PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296224 MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/fs/'
Skip UFS2 fs_metaspace upper-bound validation that rejects NetBSD FFSv2 WAPBL filesystems due to differing superblock layouts. Detect the condition during mount instead and permit read-only mounts while rejecting read-write mounts with EROFS. This follows NetBSD's recommendation for systems without WAPBL support and avoids modifying unsupported journal metadata. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296022 Signed-off-by: Ricardo Branco <rbranco@suse.de> Reviewed by: imp, kirk Pull Request: https://github.com/freebsd/freebsd-src/pull/2279
debug: classified in
03-filenames_plain1 by
'sys/ufs/'
nfsd: Garbage collect stray NFSv4 state When a file is deleted on the NFS server by another client, any NFSv4 state related to that file is left stranded. This happens because the NFSv4 operations that free the state use a CFH, which is set by a PutFH operation. However, the PutFH fails with ESTALE because the file has been deleted. This patch adds a function called nfsrv_freestrandedstate() that frees all the NFSv4 state related to a file and calls this function when PutFH will be replying ESTALE. While here, a helper function was defined to handle free'ng of the nfslockfile structure and replaces the two places where nearly identical code does this. Reported by: Richard Purdie <richard.purdie@linuxfoundation.org> Tested by: Michael Halstead <mhalstead@linuxfoundation.org> MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'sys/fs/'
nfsd: Commit missing patches for c52bcd09c2a6 Oops, I missed the other files for the commit. This should fix the build. Pointy hat goes on me. MFC after: 2 weeks Fixes: https://cgit.freebsd.org/src/commit/?id=c52bcd09c2a6 ("nfsd: Garbage collect stray NFSv4 state")
debug: classified in
03-filenames_plain1 by
'sys/fs/'
Reviewed by: mckusick Discussed with: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57658
debug: classified in
03-filenames_plain1 by
'sys/fs/'
Reviewed by: mckusick Discussed with: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57658
debug: classified in
03-filenames_plain1 by
'sys/fs/'
After a bypassed VOP, nullfs mirrors the lower vnode's inotify state onto the upper vnode. The flags were checked with lockless reads before being updated with the asserting flag set/unset primitives, so two threads syncing the same vnode concurrently (or a sync racing a watch being established) could both decide to make the same change; the loser then trips the "flags already set" assertion on an INVARIANTS kernel. On other kernels the race is harmless. Keep the lockless check as the fast path, but re-make the decision under the vnode interlock before actually changing the flags. Reproduced in a 4-CPU VM with one thread cycling an inotify watch on a lower-filesystem file while several threads stat(2) the same file through a nullfs mount: the unpatched INVARIANTS kernel panics under this load, the patched kernel runs it to completion. Fixes: https://cgit.freebsd.org/src/commit/?id=f1f230439fa4 ("vfs: Initial revision of inotify") MFC after: 2 weeks Differential Revision: D58344 Reviewed by: markj Assisted-by: Claude Code (Fable 5)
debug: classified in
03-filenames_plain1 by
'sys/fs/'
Differential Revision: https://reviews.freebsd.org/D57898
debug: classified in
03-filenames_plain1 by
'sys/fs/'
If the server is closing (or the device node is going away), or if
devfs_set_cdevpriv() fails, cuse_client_open() returns with the server
reference taken at the top of the function still held and the newly
allocated client still linked on pcs->hcli. Since cuse_client_free()
has not been registered as the cdevpriv destructor at that point,
nothing ever undoes this work: every open() that races the is_closing
window permanently leaks one server reference and one cuse_client.
A leaked reference is fatal on server exit: cuse_server_free()
busy-waits in an uninterruptible pause("W", hz) loop until pcs->refs
drops to 1, which now never happens, so the exiting server process
(e.g. virtual_oss(8)) is left wedged in state "D", immune to SIGKILL,
cuse.ko is pinned (kldunload hangs too), and only a reboot recovers.
Before 634e578ac7b0 the is_closing error path dropped the reference by
calling devfs_clear_cdevpriv(), which ran the cuse_client_free()
destructor. That commit moved devfs_set_cdevpriv() after the
is_closing check to fix the panic paths, but left both error returns
without any cleanup.
Fix by calling cuse_client_free() directly on both error paths. The
client is fully constructed and linked on pcs->hcli at these points,
which is exactly the state cuse_client_free() expects.
PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296291
Fixes: https://cgit.freebsd.org/src/commit/?id=634e578ac7b0 ("cuse: Fix cdevpriv bugs in cuse_client_open()")
Assisted-By: Claude Opus 4.8 (claude-opus-4-8)
Signed-off-by: giacomo <delleceste@gmail.com>
MFC after: 2 weeks
Reviewed by: christos
Pull-Request: https://github.com/freebsd/freebsd-src/pull/2324
debug: classified in
03-filenames_plain1 by
'sys/fs/'
Unlike RFC5661 (the original NFSv4.1 RFC), RFC8881 specifies that a NFS4ERR_DELAY reply to the SEQUENCE operation requires a reply using the same slot/sequence#. This patch fixes handling of this case, so it conforms to RFC8881. Reported by: J. David (j.david.lists@gmail.com) Tested by: J. David (j.david.lists@gmail.com) MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'sys/fs/'
Commit 4d80d4913e79 added a check for nfsess_defunct already being set. This was incorrect because, once set, nfsess_defunct remains set and an additional recovery might be needed. This patch reverts this part of 4d80d4913e79. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297252 Suggested by: olivier MFC after: 3 days Fixes: https://cgit.freebsd.org/src/commit/?id=4d80d4913e79 ("nfs: Fix argument typo to avoid a crash")
debug: classified in
03-filenames_plain1 by
'sys/fs/'
Delegations in NFSv4.0 never worked well and, since the NFSv4.0 protocol is now deprecated, use of delegations for NFSv4.0 is disabled as far as the client can do so. It turns out that some Illumos NFSv4.0 server issues delegations anyhow (even when the callback path is specified as 0.0.0.0) and this can cause use after free problems. This patch deleted some cruft that did an nfsrpc_openrpc() call recursively when an NFSv4.0 server failed to issue a delegation when it had previously done so. This code was only meant to be an optimization and would have been rarely exercised. Since this recursive call of nfsrpc_openrpc() is in some of the backtraces in the bugzilla PR, getting rid of the cruft makes sense. It is not known if this helps w.r.t. the use after free problems at this time. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297233 MFC after: 3 days
debug: classified in
03-filenames_plain1 by
'sys/fs/'
This addresses a race when two vnodes attempt to call vfs_hash_insert(), but only one succeeds. Also, in case of an error from p9fs_reload_stats_dotl(), it marks the vnode for deletion. Reviewed by: kib MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58632
debug: classified in
03-filenames_plain1 by
'sys/fs/'
Since autofs_lookup() calls into autofs_trigger_vn() to perform automounting, and autofs_trigger_vn() unlocks the vnode, it is possible for the unmount to start meantime. Then autofs_trigger() accesses freed memory. At this point, busy can be only done unblocking, and the transient failure must abort the trigger operation. This would cause spurious automounter errors, but at least should prevent accesses to the freed memory. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=294361 Reviewed by: markj, rew Tested by: rew Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58626
debug: classified in
03-filenames_plain1 by
'sys/fs/'
This is a waste of time and results in a use-after-free if linsysfs is loaded and a USB network interface is in use, since USB devices are disconnected at shutdown, which triggers a call into linsysfs, which then tries to destroy a pseudofs node which has already been purged. MFC after: 1 week Reviewed by: glebius Differential Revision: https://reviews.freebsd.org/D58359
debug: classified in
03-filenames_plain1 by
'sys/fs/'
Do the advisory aborts of the in-flight requests before flushing the vnodes. It should mostly eliminate the waits due to requests busying the mp. Reported and reviewed by: rew Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58637
debug: classified in
03-filenames_plain1 by
'sys/fs/'
Previously fts_build() called _dup(_dirfd(dirp)) for every child entry, holding N simultaneous fds for a directory with N children. Redefine fts_dirfd: instead of a fd for the entry's parent directory, it is now a fd for the entry itself, set only for directory entries. One dup per directory in fts_build() instead of one per child. Close fts_dirfd during the directory post-order visit, before advancing to its sibling. To access a file using fd-relative operations, callers should use openat(ent->fts_parent->fts_dirfd, ent->fts_name, ...) instead of openat(ent->fts_dirfd, ent->fts_name, ...). The fd is valid until the directory's post-order visit (FTS_DP). Reported by: Mark Johnston <markj@FreeBSD.org> Fixes: https://cgit.freebsd.org/src/commit/?id=4bd01d6ae016 (fts: refactor to use fd-relative operations) Sponsored by: Google LLC (GSoC 2026) Reviewed by: asomers Pull Request: https://github.com/freebsd/freebsd-src/pull/2360
debug: Commit manually moved from "unknown" to "filesystems".
Kernel stuff (other than networking, filesystems, and drivers).
Move the check out of ktls_enable_(rx|tx) and into ktls_create_session. Reviewed by: gallatin, markj Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D57973
debug: classified in
04-filenames_plain2 by 'sys/'
TLS receive offload is really only beneficial for in-kernel use cases (such as NFS over TLS) or when using a hardware offload. In addition, several recent SAs have involved the TLS receive path, but the only current mitigation for those is to disable TLS offload entirely. Reviewed by: ziaee, gallatin, markj Relnotes: yes Sponsored by: Netflix Sponsored by: Chelsio Communications Co-authored-by: John Baldwin <jhb@FreeBSD.org> Differential Revision: https://reviews.freebsd.org/D57974
debug: classified in
04-filenames_plain2 by 'sys/'
linuxulator: Fix O_PATH file descriptors errno for f*xattr(2) LTP open13 expects these operations to fail with EBADF, matching Linux behavior, but FreeBSD currently returns EOPNOTSUPP for fgetxattr() on an O_PATH fd Look up Linux fd-based xattr descriptors with getvnode() and route the operations through shared kern_extattr_*_fp() helpers so the O_PATH check and the extattr operation use the same referenced file. Apply the same EBADF handling to fsetxattr(), fremovexattr(), and flistxattr() so the xattr paths stay consistent. Signed-off-by: YAO, Xin <mr.yaoxin@outlook.com> PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=295537 Reviewed by: kib Pull Request: https://github.com/freebsd/freebsd-src/pull/2263
debug: classified in
04-filenames_plain2 by 'sys/'
linuxulator: Fix operator precedence for LINUX_XATTR_FLAGS in setxattr() The LINUX_XATTR_FLAGS macro expands to (LINUX_XATTR_CREATE|LINUX_XATTR_REPLACE). Without parentheses around the macro expansion, the bitwise & operator has higher precedence than |, causing incorrect flag evaluation and a compiler warning. Add the missing parentheses around LINUX_XATTR_FLAGS to ensure correct operator grouping, matching the existing usage in getxattr(). Signed-off-by: YAO, Xin <mr.yaoxin@outlook.com> Fixes: https://cgit.freebsd.org/src/commit/?id=2c905456312b ("linuxulator: Fix O_PATH file descriptors errno for f*xattr(2)") Reviewed by: kib Pull Request: https://github.com/freebsd/freebsd-src/pull/2306
debug: classified in
04-filenames_plain2 by 'sys/'
Move the atomic size-probe-and-read logic into a new linux_extattr_get_vp() function in linux_xattr.c instead of modifying the generic extattr_get_vp() in vfs_extattr.c. This keeps Linux-specific getxattr semantics (ERANGE on too-small buffer, EOPNOTSUPP to ENOATTR mapping) self-contained within the linuxulator. The function probes the attribute size and reads the data under a single vnode lock, preventing a TOCTOU race between the size probe and data read. Signed-off-by: YAO, Xin <mr.yaoxin@outlook.com> Reviewed by: kib Pull Request: https://github.com/freebsd/freebsd-src/pull/2263
debug: classified in
04-filenames_plain2 by 'sys/'
CHERI: declare mem{cpy,move}_data
Declare kernel-only, provenance-discarding memcpy_data, and memmove_data
APIs intended to copy raw data which does not contain pointers (e.g.,
buffers on their way to or from network or storage devices). On CHERI
architectures, they will explicitly remove tags from capabilities,
removing any provenance. This reduces the risk of accidental spread of
pointers on CHERI systems.
Document that bcopy preserves pointer provenance.
Reviewed by: ziaee, kib, adrian, markj
Effort: CHERI upstreaming
Sponsored by: DARPA, AFRL, Innovate UK
Differential Revision: https://reviews.freebsd.org/D57662
debug: Commit manually moved from "unknown" to "kernel".
CHERI: add sooptcopyinptr to preserve pointer provenance Most socket options don't involve pointers so make the default sooptcopyin discard provenance and add a sooptcopyinptr that preserves. Reviewed by: markj, emaste Effort: CHERI upstreaming Sponsored by: DARPA, AFRL, Innovate UK Differential Revision: https://reviews.freebsd.org/D57665
debug: classified in
04-filenames_plain2 by 'sys/'
CHERI: make mem{cpy,move}(9) CHERI compatible
- Use intptr_t in place of long as the word type in the core copying
loop where aligned words a copied. This preserved the provenance of
any copied pointers.
- When working with the address of src or dst use ptraddr_t rather than
uintptr_t. This avoid ambigious provenance in expressions involving
multiple addresses.
As a minor tweak, rename the function to memmove since that is the
interface it implements (overlapping src and dst are permitted) and make
memcpy the alias rather than the other way around.
Reviewed by: kib, markj
Effort: CHERI upstreaming
Sponsored by: Innovate UK
Differential Revision: https://reviews.freebsd.org/D57965
debug: classified in
03-filenames_plain1 by
'sys/libkern/'
fetch.9: fix a typo Fixes: https://cgit.freebsd.org/src/commit/?id=a1c52e05f571 ("CHERI: declare fueptr and suptr") Effort: CHERI upstreaming Sponsored by: Innovate UK
debug: classified in 01-style
by '[tT]ypo'
debug: moved to kernel because
'Need to be grouped with
a1c52e05f571607db361f49993b36b0288f1d8f3'
Fixes: https://cgit.freebsd.org/src/commit/?id=d15792780760 ("unix: new implementation of unix/stream & unix/seqpacket") Reviewed by: glebius MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D57967
debug: classified in
04-filenames_plain2 by 'sys/'
Attaching to a jail changes its root directory and its process credentials. These operations both require unlocking the jail, and also need allprison_lock unlocked. That means that if two threads are trying to attach to different jails at the same time, it's possible for the process to end up with one jail's root directory but the other jail's credentials. Solve this by forcing the process into single-threaded mode during system calls that attach to a jail (jail_attach, jail_attach_jd, and sometimes jail_set). Reviewed by: kib, markj MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D57858
debug: classified in
04-filenames_plain2 by 'sys/'
If git is installed and .git exists but git rev-parse failed to report a hash we previously produced just "-dirty" as the git revision. Gate the git commit count and -dirty check on the rev-parse passing. Reviewed by: jlduran Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57995
debug: classified in
04-filenames_plain2 by 'sys/'
It is a handy shortcut that will be used extensively in hwpstate_intel(4) and hwpstate_amd(4). Warn users that it panics if the parent bus does not provide the CPU_IVAR_PCPU instance variable. That condition should be tested by callers (doing so once is enough). Suggest to do that in driver's attach method. Reviewed by: jhb (code) Event: Halifax Hackathon 202606 Location: Seat 36K in AC667, waiting for a gate at Montréal-Trudeau Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57897
debug: classified in
04-filenames_plain2 by 'sys/'
This makes the header more self-contained. The symbol is needed only on 32bit arches, but the include file is provided unconditionally to make the namespace population predictable. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296489 Sponsored by: The FreeBSD Foundation MFC after: 1 week
debug: classified in
04-filenames_plain2 by 'sys/'
When a GID table entry is empty or not yet present in the cache, show_port_gid() falls back to printing a zero GID. Use the existing GID_PRINT_FMT/GID_PRINT_ARGS helpers instead of Linux's %pI6 format, which FreeBSD printf treats as a pointer followed by "I6". This makes empty GID sysctl entries consistently report 0000:0000:0000:0000:0000:0000:0000:0000. Tested by: Wafa Hamzah <wafah@nvidia.com> (mlx5_ib) Reviewed by: jhb, kib Sponsored by: NVIDIA Networking Fixes: https://cgit.freebsd.org/src/commit/?id=6a75471dbcf0 ("OFED: Various changes from Linux 4.19") Differential Revision: https://reviews.freebsd.org/D58042
debug: classified in
04-filenames_plain2 by 'sys/'
inotify: Unconditionally generate IN_IGNORED events for files/dirs The implementation previously only generated an IN_IGNORED event for a deleted watched file if the watch explicitly requested IN_DELETE_SELF. This is not correct, IN_IGNORED should always be raised when the watched subject is deleted. Adjust the implementation of inotify_log_one() accordingly. This also fixes a problem where a deleted watched file's watch would not be removed if IN_DELETE_SELF was not in the watch's event mask, in which case the unlinked vnode would linger until the inotify descriptor itself is closed. Add a regression test. Reported by: jrtc27 Reviewed by: jrtc27 MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D58050
debug: classified in
04-filenames_plain2 by 'sys/'
inotify: Ensure that "allocfail" is initialized in inotify_log_one() Fixes: https://cgit.freebsd.org/src/commit/?id=b70997c8c75a ("inotify: Unconditionally generate IN_IGNORED events for files/dirs")
debug: classified in
04-filenames_plain2 by 'sys/'
jaildesc_alloc() finishes initializing the file structure only after it
is made visible from the file descriptor table via finit(). In that
window, other threads could try to perform operations on the descriptor
and thus access an incompletely initialized jaildesc.
Defer the finit() call until locks are initialized. While here,
simplify the error path for falloc_caps().
Reported by: Yuxiang Yang, Yizhou Zhao, Ao Wang, Xuewei Feng, Qi Li,
and Ke Xu from Tsinghua University using GLM-5.2 from Z.ai
Reviewed by: jamie
MFC after: 1 week
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D58049
debug: classified in
04-filenames_plain2 by 'sys/'
dtrace: Improve DOF section size validation The loop which validates each DOF section assumes that the section header is present, so the section size must be at least as large as the header, otherwise a small OOB access is possible. Reviewed by: christos MFC after: 2 weeks Sponsored by: CHERI Research Centre Differential Revision: https://reviews.freebsd.org/D57975
debug: classified in
04-filenames_plain2 by 'sys/'
dtrace: Fix DOF section bounds validation We must ensure that each DOF section does not overlap with the DOF header or section table. Otherwise the relocations processed in the second pass over sections can manipulate DOF metadata, leading to OOB writes. Reviewed by: christos MFC after: 2 weeks Sponsored by: CHERI Research Centre Differential Revision: https://reviews.freebsd.org/D57976
debug: classified in
04-filenames_plain2 by 'sys/'
dtrace: Improve DOF string table validation The check for a nul terminator implicitly assumes that the section size is positive. Make the assumption explicit. Reviewed by: christos MFC after: 2 weeks Sponsored by: CHERI Research Centre Differential Revision: https://reviews.freebsd.org/D57977
debug: classified in
04-filenames_plain2 by 'sys/'
dtrace: Fix DOF section-specific validation The entry size of the probe section is assumed to be at least sizeof(dof_probe_t) by the loop further below. enoff_sec->dofs_entsize was not being validated at all. When multiplying an index by a table entry size, make sure the multiplication can't overflow. Fix an off-by-one when validating the translated probe argument array. Make sure that the probe argument argvs are valid string offsets even if the argument count is zero. Reviewed by: christos MFC after: 2 weeks Sponsored by: CHERI Research Centre Differential Revision: https://reviews.freebsd.org/D57979
debug: classified in
04-filenames_plain2 by 'sys/'
Fixes: https://cgit.freebsd.org/src/commit/?id=2ec2ba7e232d ("vfs: Add VFS/syscall support for Solaris style extended attributes") Reported by: Yuxiang Yang, Yizhou Zhao, Ao Wang, Xuewei Feng, Qi Li, and Ke Xu from Tsinghua University using GLM-5.2 from Z.ai Reviewed by: rmacklem, kib MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58053
debug: classified in
04-filenames_plain2 by 'sys/'
A test site determined that, for a Mellanox NIC which can handle M_EXTPG mbufs, an improvement of 5-15% for read rate could be achieved if the read reply was in M_EXTPG mbufs. A patch that tried to determine if the outbound NIC supported M_EXTPG mbufs (IFCAP_MEXTPG) did not pass review. However, it does appear that this can be useful for NFS-over-RDMA. (Which just happen to use NICs that do support M_EXTPG mbufs.) As such, this patch enables them is xp_extpg is set to true, which is never for now, but might be set true for RDMA or when vfs.nfsd.enable_mextpg is set non-zero. (It is 0 by default, so this is never enabled by default at this time.) Tested by: Greg Becker <becker.greg@att.net> MFC after: 2 weeks
debug: classified in
04-filenames_plain2 by 'sys/'
Check that the P_WEXIT flag is set. Requested by: markj Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57124
debug: classified in
04-filenames_plain2 by 'sys/'
sys_procdesc: extract procdesc_alloc() Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57124
debug: classified in
04-filenames_plain2 by 'sys/'
sys_procdesc: extract pdtofdflags() Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57124
debug: classified in
04-filenames_plain2 by 'sys/'
sys_procdesc: extract procdesc_destroy() Reviewed byL markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57124
debug: classified in
04-filenames_plain2 by 'sys/'
Introduce pd_fpcount that counts the number of file references to the procdesc. Remove the PDF_CLOSED flag, now it is expressed as pd_fpcount == 0. Only send SIGKILL and clear pointers when we are closing the last file referencing procdesc. This should be nop until the next commit. Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57124
debug: classified in
04-filenames_plain2 by 'sys/'
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57124
debug: classified in
04-filenames_plain2 by 'sys/'
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57124
debug: classified in
04-filenames_plain2 by 'sys/'
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57124
debug: classified in
04-filenames_plain2 by 'sys/'
This is backward ABI-compatible, because the only place in kernel that uses the structure, namely the mlx5_ib_cq.c:mlx5_ib_create_cq() function, copies in as much structure members as provided by userspace. Tested by: Wafa Hamzah <wafah@nvidia.com> Sponsored by: Nvidia networking MFC after: 1 month
debug: classified in
04-filenames_plain2 by 'sys/'
Import Linux upstream commit 3411f9f01b76bd88aa6e0e013847ab6479cb4f24. rdma_umap_priv_init() takes a reference on the rdma_user_mmap entry for every VMA it maps, but rdma_umap_close() never dropped it. The entry was therefore never freed and lingered in ucontext->mmap_xa, tripping WARN_ON(!xa_empty(&ucontext->mmap_xa)) at context teardown and leaking the firmware UAR on every context close. Reviewed by: kib Tested by: Wafa Hamzah <wafah@nvidia.com> Sponsored by: Nvidia networking MFC after: 1 month
debug: classified in
04-filenames_plain2 by 'sys/'
Modern Linuxes don't use ethX for almost 15 years already, see [1] and [2]. The translation logic has always been a source of bugs and PITA. Switch default to not translate (long due!) and schedule removal of the code for FreeBSD 17. [1] https://systemd.io/PREDICTABLE_INTERFACE_NAMES/ [2] https://www.freedesktop.org/software/systemd/man/latest/systemd.net-naming-scheme.html Reviewed by: iwtcex_gmail.com, vvd, melifaro, dchagin Differential Revision: https://reviews.freebsd.org/D57852
debug: classified in
04-filenames_plain2 by 'sys/'
sendfile: stop abusing kern_writev() Provide convenient wrapper kern_filewrite() around fo_write(). Switch to use it in vn_sendfile(). This allows to avoid duplicate fget() when we already have the reference to the file, which creates a correctness race with the userspace. Also td_retval[0] clearing hack can be removed. Reviewed by: glebius, markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58035
debug: classified in
04-filenames_plain2 by 'sys/'
kern_filewrite(): unconditionally calculate cnt, it is used by callers Reported by: dhw, madpilot Tested by: dhw Sponsored by: The FreeBSD Foundation MFC after: 1 week Fixes: https://cgit.freebsd.org/src/commit/?id=dfad790c8cca ("sendfile: stop abusing kern_writev()")
debug: classified in
04-filenames_plain2 by 'sys/'
kern_writefile(): fix several regressions sendfile(): for trailers uio, set uio_rw to UIO_WRITE instead of checking it kern_filewrite(): remove unused argument offset kern_writev(): the check should compare cnt against zero, not uio_resid Reported by: markj Fixes: https://cgit.freebsd.org/src/commit/?id=dfad790c8cca ("sendfile: stop abusing kern_writev()") Sponsored by: The FreeBSD Foundation MFC after: 1 week
debug: classified in
04-filenames_plain2 by 'sys/'
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57163
debug: classified in
04-filenames_plain2 by 'sys/'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57163
debug: classified in
04-filenames_plain2 by 'sys/'
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57163
debug: classified in
04-filenames_plain2 by 'sys/'
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57163
debug: classified in
04-filenames_plain2 by 'sys/'
Order them alphabetically. Remove redundand sys/param.h. Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week
debug: classified in
04-filenames_plain2 by 'sys/'
linux_sys_futex() does not copyin a timespec for the timeout if the
operation is LINUX_FUTEX_TRYLOCK_PI, presumably because it doesn't make
sense to specify a timeout for a try-lock operation. However, this
means that we pass a userspace timespec pointer to
linux_umtx_abs_timeout_init().
Modify linux_futex_lock_pi() to not initialize the timeout if we're
try-locking.
Reviewed by: kib, dchagin
Reported by: Yuxiang Yang, Yizhou Zhao, Ao Wang, Xuewei Feng, Qi Li,
and Ke Xu from Tsinghua University using GLM-5.2 from Z.ai
MFC after: 1 week
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D58061
debug: classified in
04-filenames_plain2 by 'sys/'
This is a mask, so the new value should have taken the next bit to avoid breaking a shell script that's interpreted by a binmisc-activated interpreter. Add a brief note that the new value is only used within the ELF activator. Fixes: https://cgit.freebsd.org/src/commit/?id=389c124fecb0 ("imgact_elf.c indicate that interpreter [...]") Reported by: "polyduekes" on discord, madpilot Reviewed by: kib, sjg (both previous version) Differential Revision: https://reviews.freebsd.org/D58063
debug: classified in
04-filenames_plain2 by 'sys/'
pm_runtime_resume_and_get is used by new versions of amdgpu, and began use between Linux kernel version 6.12, and 6.14. Reviewed by: dumbbell Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57463
debug: classified in
04-filenames_plain2 by 'sys/'
This catches up with 692b0ef1506ba which added CAPENABLED to clock_nanosleep(). Curiously recent additions of the pdopenpid(2) and pddupfd(2) were done before the cited commit, and that regen did not included the change. Sponsored by: The FreeBSD Foundation
debug: classified in
04-filenames_plain2 by 'sys/'
debug: classified in
04-filenames_plain2 by 'sys/'
Reviewed by: jfree MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58084
debug: classified in
04-filenames_plain2 by 'sys/'
The taskqueue thread loop tries to avoid entering and exiting net epoch read sections for every task. This reduces the overhead of net epoch integration, but the implementation wasn't bounding the length of the read section, so a busy taskqueue thread could hold an epoch open for an unbounded period. This is easy to achieve with the epair task, for instance. Bound the number of tasks that we'll execute without observing the global epoch, and provide a sysctl to control it. Let the default bound be eight. Reviewed by: glebius MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58031
debug: classified in
04-filenames_plain2 by 'sys/'
This function is supposed to wait until all pending callbacks have been executed. This is useful in some contexts where we tear down some context (like a VNET jail and its associated UMA zones) synchronously, and we want to make sure that all pending asynchronous callbacks (which may free objects to said UMA zones) have run first. The implementation schedules a callback on each CPU and waits for them all to run. This assumes that, on a given CPU, callbacks are executed in the order that they are pushed. This assumption depends on the implementation of epoch_call_task() and ck_epoch_poll_deferred(), and it is not true in general. Callbacks are pushed onto a per-CPU stack in LIFO order. ck_epoch_poll_deferred() first pulls out the callbacks from epoch - 2, which are always safe to execute, and in so doing reorders them such that the oldest callback as at the top of the stack, so in this case, epoch_call_task() will execute them in order. However, ck_epoch_poll_deferred() may determine that it is safe to execute callbacks from epoch - 1 (or even from the current epoch if there are no active readers), and in this case it will push those callbacks onto the returned stack. This means that epoch_call_task() will invoke those newer destructors before the older ones, which means that epoch_drain_callbacks() may return early. Fix the correctness problem by simply doing all of this twice: once the first callback is invoked, we know that all of the callbacks that were pending at the time that epoch_drain_callbacks() was called are scheduled to be executed, so when the second callback is executed we know that they must be finished. This is slow, but it is already slow, and the slowness is less noticeable after commit dce56594991. I note that in an ideal world, this function would not exist, and all of the teardown would happen asynchronously, rather than the current mismash of synchronous and asynchronous cleanup. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=290201 Reviewed by: glebius MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D58030
debug: classified in
04-filenames_plain2 by 'sys/'
The former is called by the latter. We return NULL because linuxkpi does not implement ACPI (pseudo?) devices associated to regular devices. The amdgpu DRM driver started to use `ACPI_COMPANION()` in Linux 6.13. Reviewed by: emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57577
debug: classified in
04-filenames_plain2 by 'sys/'
It takes a task state as its last argument. We enforce that this state is `TASK_UNINTERRUPTIBLE` for the time being because other states are not interpreted. Change `usleep_range()` to call `usleep_range_state()` with the state set to `TASK_UNINTERRUPTIBLE`, which is what Linux does too. The amdgpu DRM driver starte to use `usleep_range_state()` in Linux 6.13. Reviewed by: emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57579
debug: classified in
04-filenames_plain2 by 'sys/'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58147
debug: classified in
04-filenames_plain2 by 'sys/'
Currently no filesystems support it. Reviewed by: mckusick Discussed with: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57658
debug: classified in
04-filenames_plain2 by 'sys/'
On amd64 there was 4 bytes of padding between the 20-byte p_comm and (for LP64) 8-byte p_sysent, so the addition of p_execblock just caused that padding to be eaten up. However, on i386, there was no such padding, and so the addition of p_execblock rippled through to p_emuldata. Fixes: https://cgit.freebsd.org/src/commit/?id=e1a84b7708c2 ("execve_block(): a mechanism for mutual exclusion with execve() on the process")
debug: classified in
04-filenames_plain2 by 'sys/'
The note type wakes up when there is something for pdwait(2) to report on the process descriptor. Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58123
debug: classified in
04-filenames_plain2 by 'sys/'
We need to wake up the pdwait(2) waiters when procdesc event is reported. Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58172
debug: classified in
04-filenames_plain2 by 'sys/'
Convert several callers to use fget_procdesc(). Eliminate procdesc_find() and directly use fget_procdesc() in sys_pdkill(). Previous code structure required to fdrop() procdesc while the process is locked. Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58117
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: add system_percpu_wq In Linux v6.17 system_wq was replaced (renamed to) system_percpu_wq, with the old name still present. We just alias system_percpu_wq to linux_system_short_wq like we do for system_wq to keep both around for the forseeable future. Note: the original system_wq was a per-cpu queue upstream as well based on my understanding but we never implemented it as such. That means we are still lacking a per-cpu implementation for system_percpu_wq but at least we do not change the status-quo of the LinuxKPI implementation with this. Note2: we should add a check somewhere for LINUXKPI_VESION >= 61700 to print a warning if anyone still uses the system_wq to detect any possible sami-native or out-of-tree drivers relying on this and not properly updating. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: dumbbell; emaste (comments on previous review) Differential Revision: https://reviews.freebsd.org/D57730
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: fix lkpi_pci_get_device() reference counting on device In case we are passed an "odev" (a device to start the search from), that device would have an extra reference. The best way to illustrate this is to look at for_each_pci_dev(), which will return one device after the other. Upon first return we return a pdev with a reference. That pdev is then passed in as odev on the next call. If we do not clear the reference it will be leaked. Sponsored by: The FreeBSD Foundation MFC after: 3 days Fixes: https://cgit.freebsd.org/src/commit/?id=910cf345d0ee9 ("LinuxKPI: pci: implement ...") Reviewed by: dumbbell, emaste Differential Revision: https://reviews.freebsd.org/D57428
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: pci detach: implement a proper detach (release) path There are two paths in the LinuxKPI PCI code to instantiate a "pdev" (LinuxKPI pci_dev). One is using the FreeBSD bus framework and the pdev will be the softc. This commit starts cleaning up the detach path for just that case to the best possible. So far we did a lot of the work in linux_pci_detach_device(), which is the internal handler of the detach function and little in the (*release) callback (devres cleanup only). The problem with that is, that we tear down resources which later in the devres cleanup are needed. With them not being there anymore we panic, e.g., in lkpi_dma_unmap < lkpi_dmam_free_coherent < lkpi_devres_release_free_list. The solution is to migrate most of the cleanup work into the (*release) callback, which will automatically be called when the device (kobj) reference drops to zero. The only work which should be done immediately is to let the dirver do its cleanup; this has to happen before we try to teardown the resources, but also we do want this to happen when detach is called (the first time). One problem we have with the deferred cleanup of the remaining parts is that we do not know upon calling pci_dev_put() whether this cleared the last reference and triggered the cleanup or not but we cannot return from the detach function with pending resources and dangling pointers, which then may be used. In order to work around this, we clear the (*release) callback function when it is run and check for that in the detach routine. If the (*release) callback was not run, we refuse to detach (force would be needed) as we'd rather keep the device than risk a follow-up panic on leaked resources. Given this should not happen in a well programmed world, I believe it is fine to take that and log it to let the user know. Try to leave a few comments behind to help with understanding in the future. With this we can unload the mt7921 driver (or shutdown the system) without panic. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: dumbbell Differential Revision: https://reviews.freebsd.org/D57429
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: 802.11: lkpi_80211_txq_tx_one() only pass sta if added to drv If we are doing a direct (*tx) downcall, only pass sta as meta data if it was added to the driver (via the state machine). This prevents us passing a sta not known to the driver leading to possible follow-up complications/errors. This will usually happen if (a) we are doing software scanning, or (b) if net80211 decides to change the ni from under us and sends a packet with the new ni. Adjust a debug statement before to also have the added_to_drv field in it to ease debugging. Sponsored by: The FreeBSD Foundation MFC after: 3 days
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: pci: fix dma handle type in match function dma_addr_t is a vm_paddr_t which is a uint of some width. Rather than passing pointers of it around pass the value. Comparing the addresses of different storage for the same dma handle (the actual bug here) will not work when passed to the devres match function. Sponsored by: The FreeBSD Foundation Fixes: https://cgit.freebsd.org/src/commit/?id=0a575891211ef ("implement dmam_free_coherent()") MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D58285
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: sg_page() remove superfluous () Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: emaste Differential Revision: https://reviews.freebsd.org/D58295
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: move clear_page() within the linux/page.h file clear_page() would normally live in asm/page.h but adding the file and fixing the dependencies would be too much for a single line. Move the function to the end of the file with a clear separator and make it clear that it does not operate on a 'struct page' but on a page address by changing the argument name and leaving a comment. The function is currently used by at least mthca(4) as the only in-tree consumer, and drm-kmod ttm_pool.c. No functional changes. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: emaste Differential Revision: https://reviews.freebsd.org/D58296
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: prefer struct page [*] over struct vm_page[_t] LinuxKPI is based on Linux 'struct page' which is currently aliased to struct vm_page. Upcoming changes may change that so start using 'struct page *' instead vm_page_t to make future changes transparent. This is a continuation of 9e9c682ff3a1 and should be a NOP. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: emaste (no objections) Differential Revision: https://reviews.freebsd.org/D58297
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: page.h: use atop() and ptoa() instead of PAGE_SHIFT With upcoming changes to 'struct page' this will make the lines easier to read by using the predefined macros from param.h. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: markj, kib Differential Revision: https://reviews.freebsd.org/D58298
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: page.h: resort lines Two of the "page macros" can be abstracted elsewhere in the upcoming struct page work, so sort them away from the four which are here to stay. No functional change. Sponsored by: The FreeBSD Foundation MFC after: 3 days Reviewed by: emaste Differential Revision: https://reviews.freebsd.org/D58299
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: page pool updates and add to the build Split implementation out from the header files. This "page pool" is the very minimalistic version we need in order to support packets on mt76. We allocate the page pool in order to have the meta data available of which we only make limited use. This implementation does no pooling, it does no page fragments for now, it always hands out a full page and frees it upon return. It is written in a way that it can be in the tree before the 'struct page' work it depends on has landed in order to reduce friction for people who want to try mt7921 (or others later) upfront. We use the same #ifdef as in the struct page work for that reason so one knob will turn everything on or off. Once the struct page work has landed and settled we can start filling this with more complexity. In the unlikely event that in the mean time any other consumer would start showing up they will have to be aware that the current code as-is essentially is a NOP without the 'struct page' work. A WARN_ONCE() will notify them. Sponsored by: The FreeBSD Foundation MFC after: 3 days
debug: classified in
04-filenames_plain2 by 'sys/'
Checking hlt_cpus_mask is a no-op, and the mask will be removed in the next commit. However, we can use the more recent CPU_ABSENT() macro to check the status. Reviewed by: olce MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58157
debug: classified in
04-filenames_plain2 by 'sys/'
It is a relic, apparently once populated by a machdep.hlt_cpus sysctl. The sysctl was removed, and ULE has never honored this mask. It is now safe to remove. Remove the mask, and its few remaining references in: sched_4bsd(4), hwpmc(4), and hwt(4). Reviewed by: olce, kib MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58158
debug: classified in
04-filenames_plain2 by 'sys/'
The check is always true, especially after the removal of hlt_cpus_mask from sched_4bsd. Reviewed by: olce, kib MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58159
debug: classified in
04-filenames_plain2 by 'sys/'
This makes an effort to clarify and correct the intent of the code,
which is to either:
1. Create one software crypto worker thread for each CPU, to be pinned
later
2. Create the number of threads requested by the kern.geom.eli.threads
tunable
This is as described in geli(8).
If a CPU were somehow* absent, it should be skipped, but not in the
second case when creating a set number of threads.
To achieve this cleanly and correctly:
- split worker creation logic into a helper function
- keep the loops separate
- debug message for absent CPUs is dropped
- add a short explanatory comment
- style, rename local var to 'nthreads'
*Practically, it is impossible today to get a bootable system with a
sparsely populated CPU map. Thus these concerns are hypothetical and
this change should have no functional effect.
Finally, while here, guard the sc->sc_workers list insertion with the
appropriate mutex. The code is safe from races today, but this gives a
better guarantee.
Reviewed by: kib
MFC after: 1 week
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D58214
debug: classified in
04-filenames_plain2 by 'sys/'
Like the rest of <acpi/video.h>, this function is unimplemented and returns `-ENODEV`. The amdgpu DRM driver started to use it in Linux 6.13. Reviewed by: bz Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57576
debug: classified in
04-filenames_plain2 by 'sys/'
Reviewed by: kib Effort: CHERI upstreaming Sponsored by: DARPA, AFRL Differential Revision: https://reviews.freebsd.org/D58055
debug: classified in
04-filenames_plain2 by 'sys/'
exterr: allow exterr to fit pointers on CHERI targets Switch to uint64ptr_t which is a uint64_t on traditional architectures and a uintptr_t on CHERI architectures. This has no ABI impact on non-CHERI kernels. Fix truncation of 64-bit values on 32-bit kernels. Reviewed by: kib Effort: CHERI upstreaming Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D58056
debug: classified in
04-filenames_plain2 by 'sys/'
exterr_set: sync the definition with the header declaration This unbreaks buildkernel with TARGET=armv7 (32-bit arm). More work may be required in order to unbreak `exterr_set` with 32-bit kernels. Fixes: https://cgit.freebsd.org/src/commit/?id=844009378da9 ("exterr: allow exterr to fit pointers on CHERI targets")
debug: classified in
04-filenames_plain2 by 'sys/'
kern: fix compilation uintptr64_t -> uint64ptr_t Fixes: https://cgit.freebsd.org/src/commit/?id=5cafd6213f145 (exterr_set: sync the definition with the header declaration)
debug: classified in
04-filenames_plain2 by 'sys/'
Remove dependency on sys/proc.h. Reviewed by: imp Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D58235
debug: classified in
04-filenames_plain2 by 'sys/'
m_unshare() had crashed if unmapped mbufs exist in the mbuf chain. This was because memcpy() with mtod() was used without making sure that the mbuf was mapped. Use m_copydata() that cares unmapped mbufs instead. Reviewed by: gallatin Differential Revision: https://reviews.freebsd.org/D58189
debug: classified in
04-filenames_plain2 by 'sys/'
We do this already for ET_REL files, but it was missed here. Note that this function operates only on dynamically loaded files, not on preloaded files. Reviewed by: kib MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58245
debug: classified in
04-filenames_plain2 by 'sys/'
Sponsored by: The FreeBSD Foundation MFC after: 1 week
debug: classified in
04-filenames_plain2 by 'sys/'
Sponsored by: The FreeBSD Foundation MFC after: 1 week
debug: classified in
04-filenames_plain2 by 'sys/'
Sponsored by: The FreeBSD Foundation MFC after: 1 week
debug: classified in
04-filenames_plain2 by 'sys/'
Sponsored by: The FreeBSD Foundation MFC after: 1 week
debug: classified in
04-filenames_plain2 by 'sys/'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58247
debug: classified in
04-filenames_plain2 by 'sys/'
Since malloc(9) even with M_NOWAIT is forbidden when we hold a spinlock, we can't print detailed lock tree as the operation tries to allocate memory. Fixes: https://cgit.freebsd.org/src/commit/?id=fb4b0c91195195561560bb2fb2c1ba8da81f7ccf
debug: classified in
04-filenames_plain2 by 'sys/'
clock_gettime(CLOCK_TAI) can fail, leaving *ovalue uninitialized. Reported by: Hazley Samsudin of GovTech CSG MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58225
debug: classified in
04-filenames_plain2 by 'sys/'
A vm_page's a.queue field records the page queue index for the page queue to which the page belongs. The PGA_ENQUEUED flag indicates whether the page is actually enqueued in that queue's TAILQ. When modifying the a.queue field, you need to hold the page queue lock for the queue corresponding to the old value, unless the old value is PQ_NONE. Suppose a managed page is freed. vm_page_free_prep() calls vm_page_dequeue_deferred(), which checks whether the page belongs to a queue; if so it schedules an asynchronous dequeue operation so that page queue lock acquisitions can be batched if possible. The dequeue operation must be completed before the page's plinks.q fields are reused. So, during page allocation, we call vm_page_dequeue() to finish the dequeue operation. Similarly, since the buddy allocator uses the plinks.q fields for its own internal linkage, vm_freelist_add() calls vm_page_dequeue(). _vm_page_pqstate_commit_dequeue() is the function which actually removes the page from its queue. It sets a.queue = PG_NONE and removes the page from its queue. However, the update to the page's atomic state is relaxed, so on systems with store reordering, it may race with a concurrent enqueue of the page into the buddy queues (probably more likely) or a page queue. Fix this: use a release store to update the page's queue state in _vm_page_pqstate_commit_dequeue(), and make sure that vm_page_dequeue() uses an acquire load when comparing m->a.queue == PQ_NONE. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296767 Reported and tested by: pkubaj Reviewed by: alc, kib MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D58261
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: skbuff: improve debugging Deal with SKB_TRACE_FMT optional arguments; while here properly indent. Add KASSERT to __skb_unlink() to catch incorrect skbuffs encountered while debugging a wireless driver (which had other pre-conditions failing). Sponsored by: The FreeBSD Foundation MFC after: 3 days
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: skbuff: add skb_put_zero() Add skb_put_zero() as a simple wrapper around __skb_put_zero(). Sponsored by: The FreeBSD Foundation MFC after: 3 days
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: skbuff: implement napi_build_skb() Implement napi_build_skb() around linuxkpi_build_skb(). Sponsored by: The FreeBSD Foundation MFC after: 3 days
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: skbuff: implement __skb_linearize() skb_linearize() is used by mt7921, mt7925, and in the general mt76 tx dma code. __skb_linearize() is used in the general iwlwifi TX code but given the way we currently create TX skbs in LinuxKPI 802.11 we never hit that case. Sponsored by: The FreeBSD Foundation MFC after: 3 days
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: skbuff: add support for frags in linuxkpi_skb_copy() Sponsored by: The FreeBSD Foundation MFC after: 3 days
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: skbuff: add reference counting to the skb Sponsored by: The FreeBSD Foundation MFC after: 3 days
debug: classified in
04-filenames_plain2 by 'sys/'
LinuxKPI: skbuff: add initial page pool support Add an internal flag which is set by skb_mark_for_recycle() and upon "skb_free" then selects whether the skb is freed or returned to the page pool. There will likely be more details to figure out once the LinuxKPI page work is done and we support more of the page pool than the bare minimum. Sponsored by: The FreeBSD Foundation MFC after: 3 days
debug: classified in
04-filenames_plain2 by 'sys/'
rtw89(4) would constantly try to start a TX BlockACK session even if no HT or higher was available. The only way to stop this (currently) is to return -EINVAL instead of any other error. Note: we should investigate if/when to call (*set_tid_config)() as that will also offer the ability to forbid BA. Sponsored by: The FreeBSD Foundation Reported by: arved, bnovkov Tested by: bnovkov MFC after: 3 days
debug: classified in
04-filenames_plain2 by 'sys/'
vm_phys: Add a sysctl to dump registered fictitious memory ranges I've wanted this a couple of times in the past. Save the memattr in the fictitious memory segment structure so that we can report it from the sysctl handler, and add conversion routines for each platform. Reviewed by: kib MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58283
debug: classified in
04-filenames_plain2 by 'sys/'
arm64: Fix the build Fixes: https://cgit.freebsd.org/src/commit/?id=a7e483ee146a ("vm_phys: Add a sysctl to dump registered fictitious memory ranges")
debug: classified in
03-filenames_plain1 by
'sys/arm64/'
vm: Make sure NULL is defined for vm_memattr_name() Fixes: https://cgit.freebsd.org/src/commit/?id=a7e483ee146a ("vm_phys: Add a sysctl to dump registered fictitious memory ranges")
debug: classified in
03-filenames_plain1 by '['sys/amd64/',
'sys/arm/', 'sys/arm64/', 'sys/i386/', 'sys/powerpc/',
'sys/riscv/']'
debug: moved to kernel because
'Need to be grouped with
a7e483ee146a93ac89357676fdb9af62ac58b4bc'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58334
debug: classified in
04-filenames_plain2 by 'sys/'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58292
debug: classified in
04-filenames_plain2 by 'sys/'
procdesc: report NOTE_PDSIGCHLD for traced and stopped process on attach of the knote. It is same as for NOTE_EXIT when attaching to the exiting process. Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58327
debug: classified in
04-filenames_plain2 by 'sys/'
kqueue: Fix delivery of unwanted events In both procdesc_kqops_event() and filt_proc(), the event variable can have more than one bit set. This means that: * We cannot compare it directly with NOTE_EXIT; we must binary-and them instead. * We cannot binary-or it with the report mask; we must binary-and it with the request mask first. MFC after: 1 week Fixes: https://cgit.freebsd.org/src/commit/?id=2a5e58c59694 ("procdesc: add NOTE_PDSIGCHLD") Fixes: https://cgit.freebsd.org/src/commit/?id=b328975b9d7c ("procdesc: report NOTE_PDSIGCHLD for traced and stopped process") Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D58395
debug: classified in
04-filenames_plain2 by 'sys/'
When transferring a thread with near 100% CPU statistics (but not 100%; up to 57.5/59≈97.46%) to a CPU where the enqueue offset is ahead of at least 2 from the dequeue one, which requires peculiar conditions to happen (transfer triggered by a bind request or cpuset change, or during balancing if a thread or more existed from a brief amount of time on the origin CPU), the transferred thread can get placed after the dequeue offset, effectively making it appear as a high priority one unduly, causing latency increase for other threads. The change here was missed when changing the enqueue and dequeue offsets update mechanism to recover pre-256-queue-runqueue ULE anti-starvation and fairness behavior. That change opened up the possibility that these two offsets are apart by more than one. Reviewed by: markj Discussed with: Minsoo Choo <minsoo@minsoo.io> Fixes: https://cgit.freebsd.org/src/commit/?id=6792f3411f6d ("sched_ule: Recover previous nice and anti-starvation behaviors") MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57829
debug: classified in
04-filenames_plain2 by 'sys/'
Different command sets have different encoding for op codes, etc. While one can normally puzzle out which is which, it's better to explicitly tag the command set used. Sponsored by: Netflix
debug: classified in
04-filenames_plain2 by 'sys/'
ptrace(2): add PT_GET_CHILDREN Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58315
debug: classified in
04-filenames_plain2 by 'sys/'
kern/sys_ptrace: do not skip P2_PTRACEREQ wait for PT_CLEARSTEP/PT_GET_CHILDREN Reported and reviewed by: markj Fixes: https://cgit.freebsd.org/src/commit/?id=d3b7bbee9275 ("ptrace(2): add PT_GET_CHILDREN") Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58364
debug: classified in
04-filenames_plain2 by 'sys/'
amd64: FRED support FRED support as defined starting from the SDM rev. 90, requires a new 'events' entry point to receive user and kernel mode exceptions and interrupts notifications from the hardware. A minimal asm trampoline is enough, rest can be implemented in C due to the clean FRED organization of the event reporting. The syscall entry is handled by a microptimized assembly path, directly calling into the amd64_syscall() handler, instead of the generic events entry point. Tested by: emaste Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D55829
debug: classified in
04-filenames_plain2 by 'sys/'
amd64: Fix an off-by-one in the fred_ipi_handlers definition Fixes: https://cgit.freebsd.org/src/commit/?id=6e93f5e4d693 ("amd64: FRED support") Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D58378
debug: classified in
03-filenames_plain1 by
'sys/x86/'
amd64: Remove a prototype for an unimplemented function Fixes: https://cgit.freebsd.org/src/commit/?id=6e93f5e4d693 ("amd64: FRED support") Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D58379
debug: classified in
03-filenames_plain1 by
'sys/amd64/'
debug: moved to kernel because
'Need to be grouped with
6e93f5e4d6932c423b89dff8fc08d86f8bdeb7b9'
Return the covered vnode instead. Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58191
debug: classified in
04-filenames_plain2 by 'sys/'
We introduced (PRI_MAX_TIMESHARE - PRI_MIN_TIMESHARE) as part of
ESTCPULIM() in commit eebc148f25c3 ("sched_4bsd: ESTCPULIM(): Allow any
value in the timeshare range") in order to use more than a fixed number
(40) of all the available priority levels in the timeshare range (136
before the 256-queue runqueue work, 224 now) to take into account the
number of ticks a thread has run ('ts_estcpu').
In the computation of a new thread's priority (resetpriority()), in
addition to the "ticks running" contribution, the final priority also
includes a "nice" value contribution. The final value is clamped into
the [PRI_MIN_TIMESHARE; PRI_MAX_TRIMESHARE] range.
Problem is that the new "ticks running" contribution now can lead to
a computed priority value that exceeds PRI_MAX_TRIMESHARE, and is thus
finally clamped to PRI_MAX_TIMESHARE, which becomes an alias for all
out-of-bound values. In particular, this can conflate CPU-hungry
threads. With at least two of them competing on the same CPU, with an
increase of 'ts_estcpu' of ~64 per second (stathz being 127) and the
minimal decay of 4/5 (load average 2 or more), both threads will easily
reach the current clamping of 224 (+ PRI_MIN_TIMESHARE), and be
considered indifferently by the scheduler.
Fix this problem by ensuring that the maximum contribution of
'ts_estcpu' (via ESTCPULIM()) cannot exceed the timeshare range of
priorities when the nice contribution is added to it, so the nice
contribution continues to have an effect on CPU-bound threads.
Introduction of the nice term in ESTCPULIM() (then NICE_WEIGHT *
PRIO_MAX) has been done in commit bdf423572ee3 ("Scheduler fixes
equivalent to the ones logged in the following NetBSD commit...") and
does not appear to have made any real sense even then.
Fixes: https://cgit.freebsd.org/src/commit/?id=bdf423572ee3 ("Scheduler fixes equivalent to the ones logged in the following NetBSD commit...")
Fixes: https://cgit.freebsd.org/src/commit/?id=eebc148f25c3 ("sched_4bsd: ESTCPULIM(): Allow any value in the timeshare range")
MFC after: 2 weeks
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D57826
debug: classified in
04-filenames_plain2 by 'sys/'
The INVERSE_ESTCPU_WEIGHT scaling had been introduced by commit
b698380f33ef ("Quick fix for scaling of statclock ticks in the SMP
case. ...") to leave more discrimination room for multiple CPUs possibly
adding their ticks to the same 'struct ksegrp' (but also slightly
changing how CPU hogs are penalized).
Then, commit 8460a577a4b4 ("Make KSE a kernel option, ...") introduced
the current thread-based code, where tick accounting is only done on the
current thread, which renders this trick obsolete on !KSE.
Finally, when KSE was removed, the trick became generally obsolete.
The trick is actually even harmful because it changes the intended
behavior of priorizing more the CPUs that use the less ticks (and so,
impairs boosting "interactive" processes).
Remove it now. Clamping of 'ts_estcpu' and its relation to the
load-average-based decay may be re-examined later.
Fixes: https://cgit.freebsd.org/src/commit/?id=8460a577a4b4 ("Make KSE a kernel option, ...")
MFC after: 2 weeks
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D57827
debug: classified in
04-filenames_plain2 by 'sys/'
In an upcoming change whose purpose is to stop having 4BSD always
allocate MAXCPU runqueues, wasting space on most machines, 'struct
td_sched' will store the CPU ID to which a thread is bound/pinned
instead of a pointer to the corresponding runqueue. As a consequence,
existing functions manipulating a thread's runqueue will need to point
to the inferred runqueue through a local variable. The name 'runq' is
the ideal one for these local variables, but before this change it
designated the global runqueue, also causing unnecessary ambiguity.
Thus, rename the global runqueue to the more explicit 'runq_global'.
Arguably, this should have been performed as part of commit e17c57b14ba9
("- Implement cpu pinning and binding. (...)").
No functional change (intended).
[olce: Massaged the commit message. Tested with source builds.]
Suggested by: olce
Reviewed by: olce
Tested by: olce
MFC after: 2 weeks
Differential Revision: https://reviews.freebsd.org/D58065
debug: classified in
04-filenames_plain2 by 'sys/'
4BSD has been allocating an array of MAXCPU runqueues, runq_pcpu[],
instead of one runqueue per actually present CPU. On amd64, MAXCPU is
1024 and 'struct runq' is 4128 bytes, causing runq_pcpu[] to take more
than 4 MiB of memory. On the vast majority of current systems, which
have at most 32 cores with SMT, this is a waste of memory.
Besides providing per-CPU runqueues, runq_pcpu[] has also been used to
determine the CPU ID of a given thread's associated runqueue through
pointer arithmetic.
Since per-CPU structures are only allocated for present CPUs, in order
to save space, move the runqueues to per-CPU fields and, for each thread
('struct ts_sched'), replace its runqueue pointer by the CPU ID of the
runqueue it is in (new 'ts_rqcpu' field). Set the thread's CPU ID to
the special NOCPU value when it is running on the global runqueue.
Drop the SKE_RUNQ_PCPU() macro as it is now simply equivalent to
'ts_rqcpu != NOCPU'. Introduce the TS_RUNQ_PTR() macro to get a pointer
to the thread's runqueue, which must be passed to runq_add() and
runq_remove().
[olce: Massaged the commit message. Fixed an inverted KASSERT().
Tested with source builds.]
Reviewed by: olce
Tested by: olce
MFC after: 2 weeks
Differential Revision: https://reviews.freebsd.org/D58000
debug: classified in
04-filenames_plain2 by 'sys/'
We would lock the downcalls during normal operation but not during vap (vif) creation as there was no need for locking. Add the missing locking there as drivers seem to always expect it (by assertion) and cannot distinguish between state. Add the assertions to the downcalls as we need both of them locked and both of them can sleep. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296185 ("rtwhttps://bugs.freebsd.org/bugzilla/show_bug.cgi?id=89(https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=4) freezes the system with INVARIANTS kernel") Debugged by: Artem Bunichev (temcbun gmail.com) Sponsored by: The FreeBSD Foundation MFC after: 3 days
debug: classified in
04-filenames_plain2 by 'sys/'
Allow userland, in particular test cases for EXTERROR conversions, to detect at run time whether extended errors include the descriptive message strings, which depends on the EXTERR_STRINGS kernel option and cannot be probed in any other way. Reviewed by: kib MFC after: 1 week Assisted-by: Claude Code (Fable 5) Differential Revision: https://reviews.freebsd.org/D58321
debug: classified in
04-filenames_plain2 by 'sys/'
On a test system with 1024 cores the size of exec map exceeds 4GB, and all of the operands in the size calculation are 32-bit integers. Tested by: Jim Huang Chen <jim.chen.1827@gmail.com> MFC after: 1 week Sponsored by: AMD (hardware)
debug: classified in
04-filenames_plain2 by 'sys/'
Also be more protective in getsid(). Reported by: arrowd Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differrential revision: https://reviews.freebsd.org/D58393
debug: classified in
04-filenames_plain2 by 'sys/'
Fixes: https://cgit.freebsd.org/src/commit/?id=963629923308 ("kthread_add(): do not allow to attach the thread to a dead or dying process") Reviewed by: kib MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58433
debug: classified in
04-filenames_plain2 by 'sys/'
Reported by: Maik Muench of Secfault Security Reviewed by: kib Fixes: https://cgit.freebsd.org/src/commit/?id=1ad21a652182 ("kern: add pddupfd(2)") Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58403
debug: classified in
04-filenames_plain2 by 'sys/'
The FD_RESOLVE_BENEATH flag is supposed to be sticky. It's set when you receive an fd from a different jail and preserved by openat(<dfd>) etc.. However, if you send the fd to yourself, the flag is stripped since SCM_RIGHTS message don't preserve file descriptor flags. Fix this by preserving those flags and checking for UF_RESOLVE_BENEATH in restrict_rights(). Fixes: https://cgit.freebsd.org/src/commit/?id=350ba9672a7f ("unix: Set O_RESOLVE_BENEATH on fds transferred between jails") Reviewed by: kib MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58317
debug: classified in
04-filenames_plain2 by 'sys/'
As far as I can see, it is impossible for procdesc_exit() to observe pd->pd_fpcount == 0: if procdesc_close() decrements that counter to zero, then it will clean up the procdesc structure too, and this is atomic with respect to the proctree lock. No functional change intended. Reviewed by: kib MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58396
debug: classified in
04-filenames_plain2 by 'sys/'
The scan marker was originally stack-allocated. In commit 1c0f9af5b5224, it became heap-allocated since the marker is visible to other threads and a scanning thread's stack may be swapped out. Now that kernel stacks can no longer be swapped out, we can avoid these heap allocations. Reviewed by: kib MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58402
debug: classified in
04-filenames_plain2 by 'sys/'
uma: Factor out the implementations of uma_zfree_{arg,smr}()
The two function both free an item to a UMA zone, but uma_zfree_arg()
does so in such as way as to ensure that the item will be the first one
returned by a subsequent allocation, while uma_zfree_smr() must defer
reuse of the item and therefore never frees to the per-CPU alloc bucket.
When KASAN is enabled, we actually want uma_zfree_arg() to behave like
uma_zfree_smr(): to improve the reliability of use-after-free detection,
reuse of the newly freed item should be deferred for some time.
Refactor a bit to make it easier to improve KASAN along these lines:
introduce two helper functions, cache_free_item() and cache_free_smr(),
which handle most of the work of interacting with the per-CPU caches.
A subsequent commit will let uma_zfree_arg() use cache_free_smr() when
KASAN is enabled.
No functional change intended.
Reviewed by: rlibby
MFC after: 1 month
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D58268
debug: classified in
04-filenames_plain2 by 'sys/'
uma: Make an effort to defer reuse of items when KASAN is enabled When KASAN is configured, make uma_zfree_arg() free items to the per-CPU free bucket, rather than to the alloc bucket. This means that the item won't be recycled immediately the next time a thread goes to allocate an item from that zone on the same CPU. In other words, the item will stay in a quarantine state longer, which helps make KASAN's use-after-free detection more reliable. Reviewed by: rlibby MFC after: 1 month Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58269
debug: classified in
04-filenames_plain2 by 'sys/'
uma: Avoid allocating from free buckets when KASAN is enabled When uma_zalloc_arg() hits an empty alloc bucket in the per-CPU cache, it tries swapping the alloc and free buckets in the hope that the free bucket has some items available. If not, it has to lock the zone. Disable this behaviour when KASAN is configured in order to further defer reuse of freed items. This forces a free item to go to the per-domain full bucket cache before it becomes accessible to the allocator. Reviewed by: rlibby MFC after: 1 month Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58270
debug: classified in
04-filenames_plain2 by 'sys/'
uma: Enqueue full buckets in FIFO order when KASAN is configured We want to defer reuse of free objects, and this is a trivial way to promote that. Suggested by: rlibby Reviewed by: rlibby, alc MFC after: 1 month Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58312
debug: classified in
04-filenames_plain2 by 'sys/'
This makes it easier to grep for the error message to better understand the call stack when loading firmware modules fails. Fix a cosmetic-only style(9) bug while here in the same function related to another logging message. MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D58380
debug: classified in
04-filenames_plain2 by 'sys/'
If something goes very badly (e.g. forcibly removing a medium while the OS tries to start it), this could end up in params.blksize being 0 (and params.disksize 1). Avoid an integer divide fault, panicking the kernel, by bailing out before. MFC after: 3 days
debug: classified in
04-filenames_plain2 by 'sys/'
Add a NOTE_REAP event for EVFILTER_PROC which provides a notification when the process is reaped. MFC after: 1 week Sponsored by: Klara, Inc. Sponsored by: NetApp, Inc. Reviewed by: kib, markj Differential Revision: https://reviews.freebsd.org/D58313
debug: Commit manually moved from "unknown" to "kernel".
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58463
debug: classified in
04-filenames_plain2 by 'sys/'
This matches the documented prototype and avoids spurious -Wincompatible-pointer-types-discards-qualifiers warnings when passing a constant pathname. Sponsored by: AFRL, DARPA
debug: classified in
04-filenames_plain2 by 'sys/'
debug: Commit manually moved from "unknown" to "kernel".
PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297062 Tested by: Jordan Gordeev <jgopensource@proton.me> Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58472
debug: classified in
04-filenames_plain2 by 'sys/'
p_reapsubtree lives in the p_startcopy/p_endcopy block of struct proc, which is copied during fork without any synchronization. However, the field is not stable except when the proctree lock is held, and indeed may change if p1's reaper exits or explicitly releases its reaper status. This state change can race with fork() and leave the child with an incorrect p_reapsubtree field. Close the race: explicitly copy the field under the proctree lock during fork. Reported by: syzkaller Reviewed by: kib MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58482
debug: classified in
04-filenames_plain2 by 'sys/'
kqueue: Add a helper macro for sleeping on in-flux knotes Other in-flux operations are implemented by this set of macros, so we should do the same for sleeping. No functional change intended. Reviewed by: kib MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58443
debug: classified in
04-filenames_plain2 by 'sys/'
kqueue: Associate marker knotes with a queue Otherwise the assertion in KQ_FLUX_SLEEP_WMESG may fail. kqueue_fork_copy() already handles this. Fixes: https://cgit.freebsd.org/src/commit/?id=1f4b0ea4f3eb ("kqueue: Add a helper macro for sleeping on in-flux knotes") Reported by: syzkaller Reported by: kbowling Reviewed by: kib Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58516
debug: classified in
04-filenames_plain2 by 'sys/'
Otherwise an assertion in umtx_thread_alloc() (TAILQ_EMPTY(&uq->uq_pi_contested)) is violated. This use of TDB_EXIT is hacky, but I cannot see another way to check for an exiting thread without adding some more overhead to kern_thr_exit(). Fixes: https://cgit.freebsd.org/src/commit/?id=2a339d9e3dc1 Reported by: Maik Muench of Secfault Security Reviewed by: kib MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58447
debug: classified in
04-filenames_plain2 by 'sys/'
MFC after: 1 week Sponsored by: Klara, Inc. Sponsored by: NetApp, Inc.
debug: classified in
04-filenames_plain2 by 'sys/'
proc_realparent(): assert that an orphaned child has real parent != parent Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58504
debug: classified in
04-filenames_plain2 by 'sys/'
proc_realparent(): do not mark the child as orphan when reparenting to p_opptr pid Reported and reviewed by: markj Fixes: https://cgit.freebsd.org/src/commit/?id=8cef3c9b768a ("proc_realparent(): assert that an orphaned child has real parent != parent") Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58566
debug: classified in
04-filenames_plain2 by 'sys/'
to avoid using uninitialized value in the KASSERT() statement on the first iteration. Also, do the assert under the proctree_lock, which is not critical but satisfies the invariants. Noted and reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58505
debug: classified in
04-filenames_plain2 by 'sys/'
We reach ndaasync with the CAM device lock held, so we must pass M_NOWAIT to disk_* rather than M_WAITOK. Reviewed by: imp Fixes: https://cgit.freebsd.org/src/commit/?id=628d7a3270b6 ("nda: AC_GETDEV_CHANGED calls media chanaged for sectorsize change") MFC after: 1 week Sponsored by: Amazon Differential Revision: https://reviews.freebsd.org/D58230
debug: classified in
04-filenames_plain2 by 'sys/'
Grow the module collection to answer, each with a single command, the first questions asked when diagnosing a sick system: why is my application stalling, where is the kernel fighting over locks, what file could it not find, why is this process getting EPERM, what killed my process, will that fatal signal actually leave a core behind, what was my process stuck on, where is my kernel memory going, who is creating or entering jails, is the network slow because TCP is resending, how long did my thread wait to run, and is the disk itself slow. Every module keeps to the house style: invocation-name overloading through hard links, predicate-only D with inline lookup tables (no if-statements), and stable providers only (syscall, proc, sched, io, dtmalloc, and the lockstat, vfs, priv, and mib SDT providers), so the modules remain drop-in compatible with older releases (the one documented exception is noted below). No kernel changes: new and extended profiles under cddl/usr.sbin/dwatch/libexec plus one libdtrace inline table (priv.d). slow (slow-fsync, slow-open, slow-read, slow-syscall, slow-write, or any slow-NAME by new link) records syscall entry timestamps in thread-local storage and prints, at return, any call whose latency meets a threshold (DWATCH_SLOW_MS, default 100), naming the syscall, the elapsed time to the microsecond, and any errno returned. The bare profile watches a curated set of filesystem-related calls expected to be fast; slow-syscall watches everything; unrecognized invocation names fall through to syscall::NAME:return with the matching entry probe derived mechanically from the return probe list. lock (lock-adaptive, lock-block, lock-lockmgr, lock-rw, lock-spin, lock-sx, lock-thread) rides the dtrace_lockstat(4) block and spin probes, printing the held-off thread (free from the standard event tag), the holdoff duration, the lock class, the lo_name of the lock through a single cast of arg0 to struct lock_object (the first member of every kernel lock), and reader/writer intent on the probes that report it. Holdoffs shorter than DWATCH_LOCK_MS (default 1; 0 shows everything) are suppressed. namei (namei-enoent, namei-entry, namei-failure) records the pathname at vfs:namei:lookup:entry and reports it with the result at return. Unlike the vop_lookup profile, which reconstructs paths from the name cache one component at a time, this sees the whole path exactly as the process requested it. namei-enoent hunts file-not-found storms -- the single most common use of truss(1) -- without stopping the victim. priv (priv-err, priv-ok) watches priv_check(9) verdicts, naming the exact privilege denied -- something no syscall tracer can see, because by the time EPERM surfaces the priv(9) value is gone. The number is decoded by priv_string[], a new libdtrace inline table in the errno.d and signal.d tradition, mechanically generated from sys/priv.h (247 entries) and installed to /usr/lib/dtrace where dtrace(1) auto-loads it; on older releases it is a drop-in file like the module itself. coredump (coredump-top) watches for delivery of signals whose default action produces a core, per the SIGPROP_CORE entries of the sigproptbl in kern_sig.c, and renders a verdict the same way and in the same order the kernel will decide it: ignored or caught per the target's struct sigacts, then the coredump() gauntlet of kern.coredump, kern.sugid_coredump vs P_SUGID, procctl(2) PROC_TRACE_CTL, and RLIMIT_CORE -- the sysctl knobs read live through kernel globals. Where a coredump-worthy signal will produce no core, the verdict says precisely which policy ate it. coredump-top maintains a cumulative catalog of coredump-worthy signals by process and signal, refreshed every 3 seconds in the style of systop; combine the event profile with `-O cmd' to capture state as each event occurs. hang (hang-top) pairs sched:::sleep with sched:::wakeup through a tid-keyed timestamp array and prints, as each thread wakes, any sleep that meets a threshold (DWATCH_HANG_MS, default 1000), naming the sleeper in the details and the waker in the standard event tag. This is the blocking the slow module structurally cannot see: a syscall that never returns never reports its latency, while hang reports the moment the wait ends, with the full duration. hang-top maintains a cumulative catalog of long sleeps by process (count and maximum) in the style of coredump-top. jail (jail-attach, jail-get, jail-remove, jail-set) watches the jail management plane -- jail(2), jail_set(2), jail_get(2), jail_attach(2), and jail_remove(2) -- naming the operation, the jail id (taken from the entry argument for attach/remove, from the return value for the others), and any errno. Complements the dwatch `-j jail' filter, which scopes any profile to processes inside one jail; this watches who manipulates jails, from any jail or none. dtmalloc (dtmalloc-top, or any dtmalloc-NAME by new link) rides the dtmalloc provider (one malloc and one free probe per malloc(9) type). The event profile prints allocations and frees meeting a size threshold (DWATCH_MALLOC_MIN, default 65536) -- who is allocating huge kernel buffers. dtmalloc-top maintains a running catalog of net bytes and outstanding allocation balance by type, sorted by net bytes so leak suspects rise: a type that climbs without bound while the system is in steady state is the suspect. The catalog reflects activity since the watch began, and is honest about caches holding what they allocate. mib (tcp-retransmit, or any mib-NAME by new link) rides the per-counter mib SDT probes of the network stack. The tcp-retransmit profile curates the counters that signal send-path congestion or loss -- data packet retransmissions, unnecessary retransmissions, retransmit timer expirations, and connections dropped by retransmit exhaustion -- decoded through an inline description table, answering "is this network slow because TCP is resending?" as events with process context rather than netstat(1) deltas. NB: the mib probes exist only in kernels built with options KDTRACE_MIB_SDT (default in -CURRENT via std.debug); the module documents this and dtrace(1) refuses the script elsewhere, making the dependency self-announcing. Four existing modules gain personalities. proc grows proc-signal-fatal, filtering signal-send to signals whose default disposition terminates the receiver, most-notably including kernel-generated SIGSEGV/SIGBUS/SIGILL/SIGFPE that no kill(2) watcher will ever see. errno now reads its invocation name: errno-NAME shows only syscalls returning that errno, where NAME is a symbolic name from errno.d or a number; links are installed for errno-EACCES, errno-ECAPMODE, errno-ENOENT, errno-ENOTCAPABLE, and errno-EPERM (the latter pairs covering capsicum(4) capability-mode violations), and any other errno needs only a new link. sched grows sched-latency, recording a timestamp at sched:::enqueue keyed by tid and printing at sched:::on-cpu any run-queue wait meeting a threshold (DWATCH_SCHED_MS, default 10) -- the literal measurement of scheduler delay on a system with idle CPU that still feels sluggish. io grows io-slow, pairing io:::start with io:::done through a bio-keyed timestamp array and printing any request that meets a threshold (DWATCH_IO_MS, default 100), naming the device, command, size, and elapsed time; watched against zvols and a pool's leaf vdevs this brackets where in a ZFS stack the time is going, without touching unstable providers. Document all of the above plus the DWATCH_HANG_MS, DWATCH_IO_MS, DWATCH_LOCK_MS, DWATCH_MALLOC_MIN, DWATCH_SCHED_MS, and DWATCH_SLOW_MS knobs in dwatch(1). All 46 new invocation names were exercised through `dwatch -d' with a profile-path sandbox emulating the installed hard links: every one sources cleanly and emits the intended D -- probe selection per alias, entry/return and sleep/wakeup pairing through thread-local and global associative arrays, threshold and mask predicates picking up their knobs, aggregation clauses and printa column layout in the -top profiles, multi-line predicate rendering, and `-t' correctly displacing each module's default test were verified by inspection of the generated scripts. Invocations untouched by this pass generate D identical to their previous output. Modules pass sh -n, fit 80 columns, and dwatch.1 passes mandoc -Tlint with no new warnings. A validation harness performing a `dwatch -e' compile per profile against the live kernel globs every staged profile for runs wherever the dtrace device is present. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58093
debug: Commit manually moved from "unknown" to "kernel".
Reviewed by: jah, markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58477
debug: classified in
04-filenames_plain2 by 'sys/'
There are probably more places which could benefit from allowing to interrupt vfs_busy() calls at syscalls top level. Requested by: Peter Eriksson <pen@lysator.liu.se> Reviewed by: jah, markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58477
debug: classified in
04-filenames_plain2 by 'sys/'
Otherwise we'll print an error but carry on regardless, presumably destined to walk off the end of the mapping. Reported by: thebugfixers@pm.me MFC after: 1 week
debug: classified in
04-filenames_plain2 by 'sys/'
knotes with a non-trivial f_copy implementation may be activated before kqueue_fork_copy_knote() is finished. In particular, it may be enqueued at the time that kqueue_fork_copy_knote() calls knote_enqueue(). Guard against this. Add a test case which triggers the race. Fix several other problems with the replication of knote state: - Make sure only the KN_ACTIVE and KN_DISABLED status flags are inherited, the rest should not be copied. - Ignore marker knotes. - Ignore knotes for kqueues. They cannot be safely copied into the child without more work, as kqueues are inherently local to a process; on fork, we need to ensure that such knotes are patched to reference the new kqueue, not the original. - Try to keep knote state stable by holding the kqueue and knlist locks while copying. Approved by: so Security: FreeBSD-SA-26:50.kqueue Security: CVE-2026-58083 Reviewed by: kib Reported by: Hazley Samsudin of GovTech CSG Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58223
debug: classified in
04-filenames_plain2 by 'sys/'
Approved by: so Security: FreeBSD-SA-26:52.if_wg Security: CVE-2026-58085 Reviewed by: markj Sponsored by: Chelsio Communications
debug: classified in
04-filenames_plain2 by 'sys/'
Commit 4be491e1b9b3 ("jail: Optionally allow audit session state to
be configured in a jail") removed the #if 0 around the audit cases
in prison_priv_check() and added the PR_ALLOW_SETAUDIT check under
them. This unintentionally captured the preceding case PRIV_KTRACE,
which used to fall through the disabled block into the unconditional
return (0) of the credential cases: since then, jailed root only has
ktrace privileges (tracing processes with changed credentials, see
ktrcanset()) when the unrelated allow.setaudit knob is enabled, and
conversely gains them when that audit knob is turned on.
Give PRIV_KTRACE back its own unconditional return (0), matching its
comment and the pre-4be491e1b9b3 behaviour.
Approved by: so
Security: FreeBSD-SA-26:53.ktrace
Security: CVE-2026-58086
Fixes: https://cgit.freebsd.org/src/commit/?id=4be491e1b9b3 ("jail: Optionally allow audit session state to be configured in a jail")
Reviewed by: markj
Assisted-by: Claude Code (Fable 5)
debug: classified in
04-filenames_plain2 by 'sys/'
These commands take a snapshot of the size of a semaphore set, then drop
the lock and malloc an appropriately sized array before reacquiring the
lock. A comment explains why this is (probably) safe. Unfortunately,
it's wrong; it is indeed possible for a malicious userspace to create
and destroy 2^{15} sets in the window where the lock is dropped. This
race can lead to out-of-bounds reads and writes, and that can be
exploited to elevate privileges.
Replace the assertions with runtime checks.
Approved by: so
Security: FreeBSD-SA-26:54.sysvsem
Security: CVE-2026-58087
Reported by: Maik Muench of Secfault Security
Reviewed by: kib
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D58421
debug: classified in
04-filenames_plain2 by 'sys/'
In an ELF coredump, each dumped vm_map_entry is represented by a segment. __elfN(coredump) first computes the number of segments by looping over the vm_map entries (in each_dumpable_segment()), then allocates a buffer to hold the ELF header and program headers, then loops over the entries again to populate the program headers. each_dumpable_segment() holds the vm_map read lock, but that lock is dropped between the two calls. If the map is shared with another process, via rfork(), then the map can change. cb_put_phdr() did not account for this, and so could write out of bounds. Add a check to prevent this; simply do not write out excess segments. Approved by: so Security: FreeBSD-SA-26:55.elf Security: CVE-2026-58088 Reported by: Maik Muench of Secfault Security Reviewed by: kib, emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58416
debug: classified in
04-filenames_plain2 by 'sys/'
Reviewed by: kib Obtained from: Linux commit d41861942fc55c14b6280d9568a0d0112037f065 Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D57952
debug: classified in
04-filenames_plain2 by 'sys/'
Otherwise ktls_mbuf_crypto_state() will reject mbufs created by _mb_unmapped_to_ext(), which arises when transmitting packets through an interface that doesn't support unmapped mbufs, and the loopback interface in particular. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296498 Fixes: https://cgit.freebsd.org/src/commit/?id=3444414cb463 ("ktls: Don't attempt to modify non-anonymous mbufs on the receive path") Reviewed by: gallatin, jhb MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57557
debug: classified in
04-filenames_plain2 by 'sys/'
Reported by: Nick Price Tested by: pho Reviewed by: jah, markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58506
debug: classified in
04-filenames_plain2 by 'sys/'
Commit f2202ab5abda did not account for KTLS mbufs. m_unshare() tries to linearize the original mbuf chain and creates a writable copy of it, converting unmapped mbufs. Both of them are unsafe for KTLS mbufs. It is better to return NULL if the mbuf chain contains a KTLS mbuf. Reported by: jhb Reviewed by: jhb Differential Revision: https://reviews.freebsd.org/D58466
debug: classified in
04-filenames_plain2 by 'sys/'
Without this, KASAN has the deficiency that inter-object overflows are not detected most of the time[*] when keg_layout() is able to perfectly pack a slab. Try to overcome this by adjusting the allocation size to include a redzone following the object. With this change, we automatically get a redzone following each item, so any overflow into the redzone will trigger a panic. Most of UMA doesn't need to know about this: at slab allocation time, the whole slab is poisoned, and then kasan_mark_item_valid() will unpoison only the buffer that is available to the consumer. Note that in most zones, most objects will follow another object's redzone, so there is some protection against underflow as well. It might be worthwhile to provide a stronger guarantee here. Add an assertion to item_ctor() that the returned item is properly aligned. I couldn't see any pre-existing checks which verify this. Reviewed by: rlibby MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58271
debug: classified in
04-filenames_plain2 by 'sys/'
malloc: Refactor redzone and sanitizer handling malloc_large() duplicates redzone and KASAN handling that is also present in malloc() and malloc_domainset(). Refactor the implementations to reduce this a bit. Also normalize KMSAN map handling: make malloc() and malloc_domainset() consistent, and do not update the KMSAN shadow map, as we can rely on UMA and kmem_malloc() to handle that. Reviewed by: rlibby MFC after: 3 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58272
debug: classified in
04-filenames_plain2 by 'sys/'
uma: Fix KMSAN integration with malloc zones In commit 459aa032e872 I dropped kmsan_mark() calls from malloc() on the basis that UMA and kmem_malloc() would handle updates of the KMSAN shadow map. However, I missed that UMA explicitly does not handle this. Modify UMA to only omit origin map updates for malloc zones. Fixes: https://cgit.freebsd.org/src/commit/?id=459aa032e872 ("malloc: Refactor redzone and sanitizer handling") Reviewed by: rlibby Differential Revision: https://reviews.freebsd.org/D58574
debug: classified in
04-filenames_plain2 by 'sys/'
We should of course pass the provided domainset rather than copying what plain malloc() does. Fixes: https://cgit.freebsd.org/src/commit/?id=89deca0a3361 ("malloc: make malloc_large closer to standalone") Reviewed by: rlibby MFC after: 3 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58316
debug: classified in
04-filenames_plain2 by 'sys/'
kern_proc_kqueues_out() reported into an intermediate sbuf and copied the result into the caller's. A process that had leaked 468k kqueue descriptors wired 757 MB of M_SBUF while dumping core, over roughly 9M reallocations, then copied the whole thing again. Reviewed by: adrian, markj Differential Revision: https://reviews.freebsd.org/D58536 PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296835 MFC after: 1 week
debug: classified in
04-filenames_plain2 by 'sys/'
All sorts of places in the ELF loading code assume that filesz <= memsz, so check that explicitly up front. Reported by: Jane Smith <thebugfixers@pm.me> (via D57785) Reviewed by: jrtc27, kib Differential Revision: https://reviews.freebsd.org/D58542
debug: classified in
04-filenames_plain2 by 'sys/'
This just invokes xa_insert similar to other xa_*_irq wrappers. Reviewed by: bz Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D58576
debug: classified in
04-filenames_plain2 by 'sys/'
If boot_mute is set the system appears to hang during the mountroot prompt. Temporarily unmute the console so the prompt is visible. Reviewed by: kib MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D58549
debug: classified in
04-filenames_plain2 by 'sys/'
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58407
debug: classified in
04-filenames_plain2 by 'sys/'
Instead of accessing the struct proc and gathering data from it, memoize the data needed for pdwait() on exited process in struct procdesc, at the time of process termination. This allows unlimited number of calls to pdwait(2) on procdesc for terminated process. Change the locking requirements for pd_flags to proctree_lock. This does not modify the pre-patch locking regime, but the change requires it. Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58407
debug: classified in
04-filenames_plain2 by 'sys/'
Add the p_zombieref bitmask into struct proc, which enumerates all legitimate waiters on the process exit status. Among them are parent for PZOMBIEREF_PARENT, and the holder of the process descriptor for PZOMBIEREF_PROCDESC, if the process was created by pdfork(). Require all zombie refs to be cleared to reap zombie. This prevents stealing the exit status from the parent by pdwait()ing on a procdesc obtained by pdopenpid(), or by waitpid() by debugger from the real parent. Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58264
debug: classified in
04-filenames_plain2 by 'sys/'
Reimplement atomic_{set,clear}_16 using atomic_set_32.
Remove emulation of these operations from vm_page.c.
Reviewed by: alc, kib
MFC after: 2 weeks
Differential Revision: https://reviews.freebsd.org/D58580
debug: classified in
04-filenames_plain2 by 'sys/'
sbuf reserves a byte of its buffer for the terminator, so the sbuf created with maxlen held one byte less than the sizing pass had computed. The last record overflowed it, sbuf_bcat() failed, and the error == 0 guard skipped the copy into the caller's sbuf, so the note has been emitted at full size but zero filled since 5e7c43ff02dc. Fixes: https://cgit.freebsd.org/src/commit/?id=5e7c43ff02dc Reviewed by: adrian, markj Differential Revision: https://reviews.freebsd.org/D58583 MFC after: 1 week
debug: classified in
04-filenames_plain2 by 'sys/'
kern_proc_kqueues_out() sized its intermediate sbuf from the preceding sizing pass, so dumping core for a process with many knotes wired a buffer as large as the entire report. Shrank the intermediate to one page and added a drain that copied into the caller's sbuf up to maxlen, stopping the walk once it was reached. Truncation stayed byte exact. A dump of 384k knotes peaked at 20 KB of M_SBUF instead of 445 MB. Reviewed by: adrian, markj Differential Revision: https://reviews.freebsd.org/D58584 MFC after: 1 week
debug: classified in
04-filenames_plain2 by 'sys/'
The "add missing GIDs" loop uses rdma_find_gid_by_port() to test whether a GID already exists, but forgets to drop the reference it returns. So every rescan that finds an existing GID leaks one, which pins the entry and prevents its slot from ever being freed on delete. Just release the reference once the GID is found, like the "remove stale GIDs" loop already does. Reported by: Wafa Hamzah <wafah@nvidia.com> Reviewed by: kib, jhb Sponsored by: Nvidia networking Fixes: https://cgit.freebsd.org/src/commit/?id=6a75471dbcf0 ("OFED: Various changes from Linux 4.19") Differential revision: https://reviews.freebsd.org/D58511
debug: classified in
04-filenames_plain2 by 'sys/'
When cleaning up stale GIDs the scan stopped as soon as rdma_get_gid_attr() failed. But that can also happen for empty entries in the middle of the table, so a single gap left everything after it behind and the GID entries could eventually run out. Now the whole table is scanned and the empty slots are simply skipped. Reviewed by: kib, jhb Sponsored by: Nvidia networking Fixes: https://cgit.freebsd.org/src/commit/?id=6a75471dbcf0 ("OFED: Various changes from Linux 4.19") Differential revision: https://reviews.freebsd.org/D58510
debug: classified in
04-filenames_plain2 by 'sys/'
The static, global index into an array of strings is simple, cheap, and works for the base kernel, but is unworkable for (potentially third-party) kernel modules or for arbitrary userspace code. Swipe a few of the top bits of category to indicate a source with all-zeros being the current model (EXTERR_CAT_SRC_KERN_STATIC). Add two additional sources EXTERR_CAT_SRC_KERN_DYNAMIC and EXTERR_CAT_SRC_USER with stub implementations. Reviewed by: kib Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D58236
debug: Commit manually moved from "unknown" to "kernel".
Make it possible to define categories without compiling their paths into libc (important for third-party modules). The EXTERR_CATEGORY_DYNAMIC macro can be defined to a string describing the compilation unit (generally the path relative to src/sys) which takes the place of EXTERR_CATEGORY. These strings are assembled in linker sets with category numbers assigned at system startup or module load time. The strings can be retrieved from the kern.exterr.categories.<category> sysctl. Reviewed by: kib Sponsored by: Innovate UK Differential Revision: https://reviews.freebsd.org/D58237
debug: classified in
04-filenames_plain2 by 'sys/'
AF_MAX was always intended to be one more than the greatest allocated value. Jeff broke this in 2013. Unfortunately, a bunch of people then decided to adapt to the mistake instead of correcting it. Fixes: https://cgit.freebsd.org/src/commit/?id=863c7e45628d (" - Reserve a special AF for SDP. The one we were incorrectly using before was taken by another AF.") MFC after: 3 days Sponsored by: Klara, Inc. Sponsored by: NetApp, Inc. Reviewed by: kevans, glebius Differential Revision: https://reviews.freebsd.org/D58597
debug: Commit manually moved from "unknown" to "kernel".
Approved by: kib Pull Request: https://github.com/freebsd/freebsd-src/pull/2349
debug: Commit manually moved from "unknown" to "kernel".
For pdwait(2) and pddupfd(2), the returned error is kept EINVAL. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297293 Reviewed by: lwhsu, markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58666
debug: classified in
04-filenames_plain2 by 'sys/'
Drivers which remap PF queues need a stop/mutate/restart transaction only when the interface has live queues. Permit their IOV initialization callback while the interface is administratively down and leave it down afterward. This restores the standard boot-time iovctl.conf workflow for igb and lets other opt-in drivers configure VFs before netif brings the PF up. MFC after: 1 week
debug: classified in
04-filenames_plain2 by 'sys/'
Also add vnode locking wrappers for lockcanrecurse(9) and lockdisablerecurse(9). Reviewed by: jah Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58567
debug: classified in
04-filenames_plain2 by 'sys/'
For some complex nullfs mount configurations, it is possible to get the covered vnode lock for the mount shared with some inside-mount vnode lock. Then at unmount time, vflush() would recurse on the covered vnode lock when reclaiming the vnode. Work around it, by temprorarily allowing recursion on the covered vnode lock. Disable recursion after the unmount if it was not enabled before. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297174 Reviewed by: jah Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58567
debug: classified in
04-filenames_plain2 by 'sys/'
Fixes: https://cgit.freebsd.org/src/commit/?id=ed85203fb7a0 ("vmm: Deduplicate VM and vCPU state management code") Reviewed by: markj MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D58697
debug: classified in
04-filenames_plain2 by 'sys/'
It matches our IEEE80211_ELEMID_HTINFO, that is already in use. Found with: clang -Werror=assign-enum
debug: classified in
04-filenames_plain2 by 'sys/'
Killing a knote releases its file reference, and releasing the last one runs the close path inline. panic: _mtx_lock_sleep: recursed on non-recursive mutex ttymtx Revoking a controlling tty during exit reaches this whenever a knote is still registered on it. Released the knlist lock around the drop and restart the walk. The knote stays valid while the lock is released. MFC: 1 week Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D58681
debug: classified in
04-filenames_plain2 by 'sys/'
iflib counts resets initiated by its transmit watchdog in 69c3e0de01c1. Export the counter in the per-device iflib sysctl tree so every driver provides the diagnostic without a driver callback or duplicate storage. A watchdog reset does not establish how many packets failed. It can recover a hardware stall involving several queued packets or a missed completion involving no packet loss. Stop adding one output error per watchdog event in em(4), igb(4), and igc(4). Remove the redundant driver counters and move the diagnostic to dev.<driver>.<unit>.iflib.tx_watchdog_events. MFC after: 1 month Relnotes: yes
debug: classified in
04-filenames_plain2 by 'sys/'
pci: Add SR-IOV status reporting Add a generic packed-nvlist status query to each /dev/iov/<PF> control device. Report the live VF Enable state, configured and total VF counts, and one record for each configured VF. Each VF record contains its PF-local index, computed PCI location, newbus attachment state, attached driver, and ppt binding. Construct records for hardware VFs whose newbus child is absent so attachment failures remain visible. Version the extensible schema in sys/iov.h. Use fixed-width request fields so the ioctl command and layout are identical for 32-bit callers. Serialize the topology snapshot with Giant, then pack and copy it after releasing Giant.
debug: classified in
04-filenames_plain2 by 'sys/'
pci_iov: Use native types for status ioctl IOV_CONFIG and IOV_GET_SCHEMA expose native pointers and size_t lengths, and pci_iov has no compat32 ioctl translation. Using fixed-width fields for IOV_GET_STATUS alone does not make the interface usable by 32-bit binaries on a 64-bit kernel. It instead complicates otherwise ordinary pointer and length handling. Use void * and size_t like the existing ioctls. This also makes the %zu diagnostic in iovctl correct on ILP32 and removes the unneeded PTRIN conversion. Fixes: https://cgit.freebsd.org/src/commit/?id=6f8b3be1fbd6 ("pci: Add SR-IOV status reporting")
debug: moved to kernel because
'Need to be grouped with
6f8b3be1fbd661bfa11c55081851c36ee1d5d2c1'
This change adds wrappers for the new fine-grained TLB invalidation instructions and extends the capability detection logic to include the Svinval extension, which is mandatory in the RVA23S64 profile. Event: BSDCan 2026 Differential Revision: https://reviews.freebsd.org/D57623 Reviewed by: mhorne, markj
debug: classified in
04-filenames_plain2 by 'sys/'
unix: Fix a missing initialization in uipc_sosend_stream_or_seqpacket() This could be triggered by an in-kernel sender, of which I can't find any examples. Fixes: https://cgit.freebsd.org/src/commit/?id=d15792780760 ("unix: new implementation of unix/stream & unix/seqpacket") Reviewed by: glebius MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58673
debug: classified in
04-filenames_plain2 by 'sys/'
unix: Simplify uipc_detach() uipc_close() handles detaching a unix socket from the vnode to which it's bound, if any, so doing the same in uipc_detach() is redundant. Moreover, it's conceptually wrong that uipc_detach() might need to handle this: detach happens when there are no remaining references to the socket, and that should include the vnode's reference, even though it's not explicitly counted. No functional change intended. Reviewed by: John Ericson <inquire@JohnEricson.me>, glebius MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58675
debug: classified in
04-filenames_plain2 by 'sys/'
unix: Fix some bugs in the SOCK_STREAM receive path The main problem is with the handling of errors from unp_externalize(). It turns out that this was quite broken, and unfortunately it's easy to trigger such errors (e.g., by setting a low per-process fd limit with setrlimit()). In non-peek mode, uipc_soreceive_stream_or_seqpacket() cuts a bunch of mbufs from the head of the socket buffer, to be consumed by userspace. When unp_externalize() returns an error, we splice the removed mbuf chain back onto the head of the socket buffer. This is expensive, but that's ok since such errors are rare. The problem is that this cutting is not correctly implemented: it does not clear the "next" pointer for the last mbuf in the chain, so it still points to the first mbuf still resident in the socket buffer. This means that mc_init_m() creates a chain that still includes the rest of the socket buffer, so splicing the chain back into the socket buffer does not work properly. Fix this: fully detach the control chain from the socket buffer so that we can safely use mc_init_m(). Then, incrementally add data mbufs, taking care to handle "part". Fix some related bugs while here: - Don't swallow the error if unp_externalize() fails and there's nothing left in the socket buffer (i.e., control->m_next == NULL). - Roll back changes to the partially read mbuf. Reviewed by: glebius MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58695
debug: classified in
04-filenames_plain2 by 'sys/'
unix: split unp_connectat() in two Factor the second half — connecting to an already-resolved peer PCB — out into a new `unp_connect_peer()`, leaving `unp_connectat()` with the connection state machine and pathname resolution. No functional change. The helper's contract: the caller guarantees stability of the peer PCB (vnode lock plus `unp_vp_mtxpool` lock for peers found via `VOP_UNP_CONNECT()`), has set `UNP_CONNECTING` on the connecting socket, and clears it again on error; the helper clears it on success. This prepares for connecting to a peer named by something other than a pathname. Signed-off-by: John Ericson <John.Ericson@Obsidian.Systems> Reviewed by: markj MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58404
debug: classified in
04-filenames_plain2 by 'sys/'
unix: factor unp_sun_path() out of bind and connect Extract the AF_UNIX validation plus sun_path/length lookup shared by `uipc_bindat()`, `unp_connect()`, and `unp_connectat()` into a helper that hands back the path pointer and its length. Each caller keeps its own empty-path policy and, where needed, its own copy of the path. Signed-off-by: John Ericson <John.Ericson@Obsidian.Systems> Assisted-by: Claude Code (Claude Opus 4.8 and Fable 5) Reviewed by: markj MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58459
debug: classified in
04-filenames_plain2 by 'sys/'
unix: pin the pathname peer by reference across the connect In the pathname path of `unp_connectat()`, take a reference on the peer socket under the per-vnode `unp_vp_mtxpool` lock, drop that lock, and `vput()` the vnode *before* calling `unp_connect_peer()`, rather than holding the vnode lock across the connect. `unp_connect_peer()` already accepts "a reference on the peer socket" as a stability guarantee (it is exactly what the descriptor path relies on), so this is behaviour-preserving. The payoff is that no vnode lock is held across the connect, which removes the delicate `MPASS(!(return_locked && connreq))` "vput() must not sleep while the peer is locked" invariant on the datagram fast path. That reference then has to be released, and for the reasons described in the code, this can only safely happen *after* the PCB is unlocked. The boolean flag is replaced with a nullable out pointer to return the reference to the caller so that it can carry out this responsibility. No functional change intended. Signed-off-by: John Ericson <John.Ericson@Obsidian.Systems> Assisted-by: Claude Code (Claude Opus 4.8 and Fable 5) Reviewed by: markj MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58460
debug: classified in
04-filenames_plain2 by 'sys/'
unix: factor unp_vnode_peer() out of unp_connectat() Move the "resolve a locked vnode to the referenced peer socket it names" block into a helper. Pure code motion: the caller now calls `unp_vnode_peer()` and keeps the `vput()`/connect/`sorele()` sequence. No functional change intended. Note: This refactor isn't really necessary as `unp_vnode_peer()` will only be called once throughout this entire patch series. I am just including it out of my personal preferences for decomposing tasks into smaller functions --- we can skip this patch if the reviewers don't like this. Signed-off-by: John Ericson <John.Ericson@Obsidian.Systems> Assisted-by: Claude Code (Claude Opus 4.8 and Fable 5) Reviewed by: markj MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58461
debug: classified in
04-filenames_plain2 by 'sys/'
unix: factor unp_connectat_peer() out of unp_connectat() Move the "resolve a connectat(2) target to a referenced peer socket" half of `unp_connectat()` -- the `namei()` lookup and `unp_vnode_peer()` call -- into a helper, leaving `unp_connectat()` with the connection state machine plus a single `unp_connect_peer()`. This is where the next change grows the ways a peer can be named; keeping it a helper up front keeps that change focused on the new resolution logic. No functional change intended. Signed-off-by: John Ericson <John.Ericson@Obsidian.Systems> Assisted-by: Claude Code (Claude Opus 4.8 and Fable 5) Reviewed by: markj MFC after: 2 weeks Differential Revision: https://reviews.freebsd.org/D58462
debug: classified in
04-filenames_plain2 by 'sys/'
unix: allow connectat(2) to name the peer socket by descriptor Accept an empty `sun_path` when `fd` is not `AT_FDCWD`: the descriptor then names the peer unix socket directly, instead of being the starting directory for a pathname lookup. The held file reference keeps the peer PCB stable, playing the role `unp_vp_mtxpool` plays in the pathname path. The descriptor must carry `CAP_CONNECTAT` and refer to an `AF_UNIX` socket (`EPROTOTYPE` otherwise, `ENOTSOCK` for non-sockets). As with a pathname, a stream/seqpacket peer must be listening. No filesystem permission or MAC vnode check applies on this path: possession of the descriptor is the authorization, as with descriptor passing. Note this makes it possible to connect a datagram socket to an unbound peer, which no pathname could previously name. `connect(2)` and the implicit-connect send path pass `AT_FDCWD` and still reject an empty path with `EINVAL`. The `unp_sun_path()` call is hoisted out of `unp_connectat()` because the early exit conditions for the two system calls (`connect(2)` and `connectat(2)`) are slightly different. Additionally, support `/dev/fd/<N>`. In a world with `connectat(2)`, this is largely overkill, but this also allows me to add support for direct peer connections with plain `connect(2)`. I think that is a wise choice because this will allow me to propose this functionality for Linux too without a new system call (saving that conversation for later). Ultimately, I want to see multiple operating systems support this to foster broader userland adoption, which should benefit everyone including FreeBSD --- it's nicer if more 3rd party in addition to 1st party software uses the new kernel functionality. Therefore, I hope this additional feature is also acceptable. Signed-off-by: John Ericson <John.Ericson@Obsidian.Systems> Assisted-by: Claude Code (Claude Opus 4.8 and Fable 5) Reviewed by: markj MFC after: 2 months Differential Revision: https://reviews.freebsd.org/D58405
debug: classified in
04-filenames_plain2 by 'sys/'
unix: only treat an empty sun_path as a peer descriptor for connectat(2)
connect(2) passes AT_FDCWD to unp_connectat(), so the empty-path
descriptor branch added in 6563dcb6b1f5 turned any sockaddr whose
sun_path begins with a NUL byte into getsock(AT_FDCWD), failing with
EBADF where the pathname lookup historically failed with ENOENT.
Linux abstract namespace names are exactly that: the linuxulator
passes them through with the leading NUL intact, and libxcb tries the
abstract socket first, falling back to the pathname socket only on
ENOENT or ECONNREFUSED. The EBADF made every Linux X11 client fail
at startup with "Missing X server or $DISPLAY".
Restrict the descriptor interpretation to fd != AT_FDCWD, matching
the contract stated in 6563dcb6b1f5's commit message ("Accept an
empty sun_path when fd is not AT_FDCWD"): connect(2) again reaches
the pathname lookup and fails with ENOENT as it always did.
Add a regression test: a NUL-leading, nonzero-length sun_path through
connect(2) or connectat(2) with AT_FDCWD must fail the pathname
lookup with ENOENT, not EBADF.
Fixes: https://cgit.freebsd.org/src/commit/?id=6563dcb6b1f5 ("unix: allow connectat(2) to name the peer socket by descriptor")
Reviewed by: John Ericson <John.Ericson@Obsidian.Systems>, markj
Differential Revision: https://reviews.freebsd.org/D58792
debug: classified in
04-filenames_plain2 by 'sys/'
`uipc_listen()` refused a socket that had not been bound, with `EDESTADDRREQ`. That made sense while a pathname was the only way to name a peer: an unbound listener could never be reached, so allowing it would only have created sockets nothing could connect to. Now that `connectat(2)` can name a peer socket by descriptor, an unbound listener *is* reachable, and the restriction only stands in the way. It also left stream sockets oddly stricter than datagram ones, which could already reach an unbound peer. Dropping the check additionally permits `bind(2)` after `listen(2)`: `uipc_bindat()` already allows this, as it only rejects re-binding a socket that has a name. That ordering closes a window listeners otherwise have to leave open. Today the socket file must exist before the socket may listen, so a client connecting in between is refused; binding afterwards publishes the name only once the socket is ready to accept. `unix_seqpacket_test:listen_unbound` asserted the old behaviour, and is inverted accordingly. Signed-off-by: John Ericson <John.Ericson@Obsidian.Systems> Assisted-by: Claude Code (Claude Opus 4.8 and Fable 5) Reviewed by: glebius, markj MFC after: 2 months Differential Revision: https://reviews.freebsd.org/D58683
debug: classified in
04-filenames_plain2 by 'sys/'
taskqueue KPI require wakeup() to be called for each completed task. With everything else there heavily optimized over the years, even when doing nothing this wakeup()'s lock/unlock is significant. Since no external taskqueue consumer can depend on the tq_mutex, we can move the wakeup() out of it. It creates some complications for internal waiters, but those should be much more rare, and can be handled with separate locked wakeups on demand. My tests of taskqueue-intensive ZFS RAIDZ writes on 64-core system show performance improvement from this change ~4%, while same time reducing CPU usage by several percent due to lower lock contention, confirmed by CPU profiler.
debug: classified in
04-filenames_plain2 by 'sys/'
Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58711
debug: classified in
04-filenames_plain2 by 'sys/'
PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296348 Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58785
debug: classified in
04-filenames_plain2 by 'sys/'
In some private discussion it was pointed out that vm_object_split()'s pattern of dropping the source object lock looks dangerous in that the initial assumption that OBJ_ONEMAPPING is set may become false. In practice I believe that the map lock holds this flag stable, but let's assert that. Reviewed by: alc, kib MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D58766
debug: classified in
04-filenames_plain2 by 'sys/'
SYSINIT: add explicit SI_ORDER_LAST Working on cleansing use of (SI_SUB_FOO + 1) construct through the kernel I found a repeating pattern. Often a developer adds a module that depends on certain subsystem to be fully instantiated and they want to put their module SYSINIT right at the end of the SI_SUB_FOO. Such module usually expects that nothing else within this subsystem shall depend on the module. The problem with SI_ORDER_ANY which practically was "the last" until this change is that it is used very widely and people treat it literally as "any", well, because this is what the name says. This lead to many parts that could have dependencies later to be added as SI_ORDER_ANY. So, our developer with the new subsystem that depends on SI_SUB_FOO has three options: 1) Use SI_ORDER_ANY, but grep around ther kernel for other SI_SUB_FOO entries to make sure that no dependencies are set to SI_ORDER_ANY. And in case they are, shift them up and recheck if dependencies of those dependencies are met. 2) Take next subsystem in sysinit list. However, the next one can be SI_SUB_BAR, that is completely irrelevant from SI_SUB_FOO, and our developer doesn't want to put his module's SYSINIT into SI_SUB_BAR, cause it is ugly. 3) Use the (SI_SUB_FOO + 1) construct that violates -Werror=assign-enum. The SI_ORDER_LAST solves this hard choice. If you know that nothing is going to depend on your module within SI_SUB_FOO, but you depend on SI_SUB_FOO, just use SI_ORDER_LAST. Reviewed by: markj, emaste Differential Revision: https://reviews.freebsd.org/D58709
debug: classified in
04-filenames_plain2 by 'sys/'
SYSINIT: add SI_SUB_FIRST This allows to initialize mp_maxid, mp_ncpus and register APICs at the most early stage, guaranteeing that those values will already be available at SI_SUB_TUNABLES. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58712
debug: classified in
04-filenames_plain2 by 'sys/'
SYSINIT: add SI_SUB_NUMA This allows to parse ACPI tables and initialize VM domains before SI_SUB_VM w/o a hack. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58713
debug: classified in
04-filenames_plain2 by 'sys/'
rtnl_if_flags_to_linux() translated the usual IFF_* bits but dropped FreeBSD's IFF_LOWER_UP (IFF_NETLINK_1). Chromium's AddressTrackerLinux only treats a link as online when ifi_flags has UP|LOWER_UP|RUNNING; with LOWER_UP missing, online_links stays empty, ConnectionType is CONNECTION_NONE, and navigator.onLine is false even though TCP/HTTPS work. Linux Chromium under the Linuxulator (e.g. www/linux-brave) then shows a spurious Offline UI; sites that ignore navigator.onLine do not. Native www/chromium is on a different notifier path. Map IFF_LOWER_UP to Linux's IFF_LOWER_UP (1<<16) and define LINUX_IFF_LOWER_UP alongside the existing LINUX_IFF_* constants. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297424 Reviewed by: pouria, adrian (previous revision) Differential Revision: https://reviews.freebsd.org/D58774
debug: classified in
04-filenames_plain2 by 'sys/'
debug: classified in
04-filenames_plain2 by 'sys/'
video: fix v4l2_buffer size assert on non-i386 32-bit ports Split the #else branch into an explicit __i386__ case (68) and a generic ILP32-with-64-bit-time_t case (80) covering arm and powerpc. Fixes: https://cgit.freebsd.org/src/commit/?id=0343ab8a6afa Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58790
debug: classified in
04-filenames_plain2 by 'sys/'
video: add V4L2 compat symbols for ffmpeg/opencv Adds v4l2_std_id, struct v4l2_standard/v4l2_plane, VIDIOC_G_STD/S_STD/ ENUMSTD, V4L2_STD_NTSC*, the MPLANE capability flag, multiplanar types (VIDEO_MAX_PLANES, v4l2_plane_pix_format, v4l2_pix_format_mplane, V4L2_TYPE_IS_MULTIPLANAR), V4L2_PIX_FMT_JPEG/YUV411P/SN9C10X, and the MPEG control class (V4L2_CID_MPEG_BASE, V4L2_CID_MPEG_VIDEO_B_FRAMES). video(4) capture devices are digital-only and never expose these, but ffmpeg's libavdevice/v4l2.c and opencv's cap_v4l.cpp both reference them unconditionally. Fixes their build against sys/videoio.h. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297454 Reviewed by: manu, adrian Differential Revision: https://reviews.freebsd.org/D58793
debug: classified in
04-filenames_plain2 by 'sys/'
video: bump __FreeBSD_version for video(4) refactor Reviewed by: manu, adrian Differential Revision: https://reviews.freebsd.org/D58798
debug: classified in
04-filenames_plain2 by 'sys/'
Empty mchains cannot be copied with simple assignment. I think this bug is mostly harmless: if mcnext is empty, then it won't be accessed again before it is reinitialized in the next loop iteration. So the bug only trips an assertion in INVARIANTS kernels and won't be visible otherwise. Add a regression test which triggers this corner case. Reported by: Jan Bramkamp Fixes: https://cgit.freebsd.org/src/commit/?id=d15792780760 ("unix: new implementation of unix/stream & unix/seqpacket") Reviewed by: glebius MFC after: 1 week Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58791
debug: classified in
04-filenames_plain2 by 'sys/'
Fixes: https://cgit.freebsd.org/src/commit/?id=35164034e390 ("arm64/vmm: Make remaining registers use hypctx_*_sys_reg") Reviewed by: markj MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D58690
debug: classified in
04-filenames_plain2 by 'sys/'
When the terminal cdev is closed due to revoke, ttydev_close() destroys t_inpoll and t_outpoll selinfos. Since corresponding knotes reference files pointing to the same tty cdev, it fdrop()s them. But then the VOP_CLOSE() call would recurse into the ttydev_close() for the same tty. More, because the devfs vnode is already doomed, each close call gets the FREVOKE flag set. As result, the kernel is recursing as deep into the ttydev_close() as there are opened files referencing the same tty, which have the knotes installed. Basically, the recursion level is controlled by userspace. Prevent it by marking the tty that is handled by ttydev_close(), with the TF_INDEVCLOSE flag. Do nothing in ttydev_close() when the flag is already set, avoiding recursion. Fixes: https://cgit.freebsd.org/src/commit/?id=acd5638e268a ("tty: delete knotes when TTY is revoked") Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58706
debug: classified in
04-filenames_plain2 by 'sys/'
This should provide much higher resistence against struct thread layout changes for out-of-tree modules depending on linuxkpi. Reviewed by: bz Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58733
debug: classified in
04-filenames_plain2 by 'sys/'
Since vmspace_iop()/proc_readmem() might return -1 on error from vmspace_rwmem(), account for this and stop reading but return already accumulated data if any, instead of returning an error. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297512 Reported and tested by: Stéphane D'Alu <sdalu@sdalu.com> Reviewed by: markj Fixes: https://cgit.freebsd.org/src/commit/?id=e1b0d051bbf7 ("proc: Allow to make proc_rwmem() operate on a consistent address space") Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58838
debug: classified in
04-filenames_plain2 by 'sys/'
In particular, if there were any bytes moved, and then vm_fault() faulted, do not return an error, but report the short io instead. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297512 Reviewed by: markj Tested by: Stéphane D'Alu <sdalu@sdalu.com> Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58838
debug: classified in
04-filenames_plain2 by 'sys/'
PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297516 Reported by: asomers Fixes: https://cgit.freebsd.org/src/commit/?id=dfad790c8cca ("sendfile: stop abusing kern_writev()") Sponsored by: The FreeBSD Foundation MFC after: 3 days
debug: classified in
04-filenames_plain2 by 'sys/'
Thanks to Vinicius Ferrao <versatushpc.com.br>, there is now a module that implements the server side of RDMA for the FreeBSD NFS server. At least for now, it will be maintained as an "unofficial port" for FreeBSD, since it was built with generative AI and FreeBSD is working on a policy related to these submissions. This patch puts the "glue" needed by Vinicius's nfsrdma.ko module in the system. This "glue" was written by me without the use of AI. The "unofficial port" of nfsrdma.ko will be advertised on freebsd-current@ as soon as it is available. (Vinicius's work was sponsored by VersatupHPC.) Since newnfs_numnfsd is now declared extern in nfs.h, the extern declaration can be removed from assorted files. I'll do that as a separate commit. Suggested by: Vinicius Ferrao <versatushpc.com.br> MFC after: 1 month
debug: classified in
04-filenames_plain2 by 'sys/'
Pre-attach sysctls contain pointers into the iflib context. Any later registration failure that frees the context must first remove that sysctl tree. Failures after a successful IFDI_ATTACH_PRE also did not consistently call IFDI_DETACH or free the private taskqueue. In particular, routing a taskqueue creation failure through the context cleanup could free the driver softc while resources allocated by attach_pre remained live. Track successful interrupt and queue setup and use one common unwind path. Invoke IFDI_DETACH with IFNET_WLOCK dropped and release only resources whose setup completed. Leave a failed IFDI_ATTACH_PRE to unwind its own partial state, as required by the existing driver contract. A failed post-attach can follow driver registration of an SR-IOV schema. Remove that registration before detaching the interface and driver, matching normal deregistration, so a failed attach cannot leave a stale /dev/iov node or make the next attach report EBUSY. A successful attach_pre can now be followed by detach before driver queue allocation. Make the remaining queue-backed interrupt cleanup paths tolerate absent queue arrays. Mark a failed registration as detaching before draining the entire private taskqueue. Drivers can register configuration tasks there, and taskqueue_drain_all() does not wait for work queued during its drain. Make every current non-admin callback reject detaching contexts so late work cannot touch driver state. Drain tasks and call ether_ifdetach() with neither the ifnet nor context lock held. A callback already running may need either lock, while ether_ifdetach() acquires ifnet_detach_sx. Reacquire IFNET_WLOCK before the context lock to preserve the established lock order. The shared automatic core-offset allocator also lacked acquisition state. Late registration failures leaked its reference, while normal detach could decrement a reference belonging to another device when a configured offset or allocation failure meant that this context never acquired one. Record acquisition explicitly and release only references held. MFC after: 2 weeks Reviewed by: gallatin Sponsored by: BBOX.io Differential Revision: https://reviews.freebsd.org/D58721
debug: classified in
04-filenames_plain2 by 'sys/'
static, not static inline, so TUs that don't call it warn. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58823
debug: classified in
04-filenames_plain2 by 'sys/'
static inline, and powerpc's own must_bounce() never calls it. Reviewed by: adrian Differential Revision: https://reviews.freebsd.org/D58825
debug: classified in
04-filenames_plain2 by 'sys/'
linuxkpi: Include <linux/notifier.h> and <linux/device.h> from <linux/pm_qos.h> The i915 DRM driver started to depend on the `bool` type implicitly imported through these headers in Linux 6.13. The previous fix committed in 67df313015906d84d90df8e37795885e81cf8da5 did not reproduce the same includes as Linux. This may have led to other missing implicit definitions later. To prevent another missing include in the future, we already include <linux/plist.h> from <linux/pm_qos.h> and add it as a dummy header. This will be easier to add a proper implementation in the future once we actually need it. Reviewed by: bz, emaste MFC after: 3 days Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57570
debug: classified in
04-filenames_plain2 by 'sys/'
linuxkpi: Define `__GFP_HIGH` in <linux/gfp.h> The DRM drivers TTM memory manager started to use it in Linux 6.15. Reviewed by: emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58760
debug: classified in
04-filenames_plain2 by 'sys/'
linuxkpi: Add `kunit_fail_current_test()` This is part of some unit testing framework. The DRM drivers generic code started to use it in Linux 6.15. Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58249
debug: classified in
04-filenames_plain2 by 'sys/'
linuxkpi: Define `PCI_CLASS_BRIDGE_HOST` The i915 DRM driver started to use it in Linux 6.15. Sponsored by: The FreeBSD Foundation Differential Revision: reviews.freebsd.org/D58250
debug: classified in
04-filenames_plain2 by 'sys/'
linuxkpi: Fix return type of `kobject_uevent_env()` The function returns an int on Linux. Let's return 0 (success). Sponsored by: The FreeBSD Foundation Differential Revision: reviews.freebsd.org/D58252
debug: classified in
04-filenames_plain2 by 'sys/'
linuxkpi: Create empty <linux/sprintf.h> The DRM drivers generic code started to include this header in Linux 6.15, though nothing from it is used apparently. Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58253
debug: classified in
04-filenames_plain2 by 'sys/'
linuxkpi: Include <linux/page-flags.h> from <linux/mm.h> This reproduces the same namespace pollution as Linux. Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58761
debug: classified in
04-filenames_plain2 by 'sys/'
linux: implement pkey_alloc, pkey_free and pkey_mprotect Bridge the Linux memory protection key syscalls to FreeBSD's native MPK support instead of returning ENOSYS. Modern Linux software probes these at startup: Chromium-based browsers (found via www/linux-brave) use protection keys for V8's heap and JIT sandboxing, and glibc >= 2.27 exposes the full API. pkey_alloc() allocates from a per-process bitmap kept in the process emuldata (key 0 implicitly allocated, matching Linux's mm_pkey_allocation_map; ENOSPC once keys 1..15 are exhausted or when PKU is absent, as Linux returns on such hardware) and applies the requested initial access rights to the calling thread's PKRU, located in the XSAVE area via xsave_area_offset(). pkey_free() is bookkeeping only: as on Linux, freeing neither untags pages nor updates PKRU. pkey_mprotect() performs the protection change and tags the range through amd64_pkru_update(), factored out of sysarch(2)'s AMD64_SET_PKRU/AMD64_CLEAR_PKRU implementation so that both share the same argument checking and map read lock synchronization with a parallel pmap_vmspace_copy() on fork; tags die with the mapping, matching Linux VMA semantics. A pkey of -1 degrades to plain mprotect. The allocation map is inherited on fork and reset on exec. At exec the Linux sysvecs initialize PKRU to 0x55555554, Linux's init_pkru default (access disabled for keys 1..15), so memory tagged with a not yet allocated key is inaccessible to threads that were never granted rights -- the property V8's thread isolation relies on. Setting PKRU at exec initializes the user FPU state slightly earlier than the lazy first-use path; the state would be initialized moments later in rtld/libc startup regardless. Protection key faults already deliver SEGV_PKUERR through the existing siginfo translation. The common code carries no architecture ifdefs. Machine-dependent state lives in struct linux_pemuldata_md, embedded in the process emuldata in the manner of struct mdthread, and common code calls per-arch lifecycle hooks (linux_pemuldata_init_md/_exec_md) and pkey back ends after performing the parameter validation Linux applies regardless of hardware support. On amd64 the implementation lives in sys/amd64/linux/linux_pkru.c, compiled into linux_common and serving both the 64-bit and 32-bit Linux ABIs. Elsewhere (arm64, i386) linux_emul_md.c provides stubs returning what Linux returns on hardware without protection keys (ENOSPC from pkey_alloc; pkey_mprotect with a pkey of -1 acts as plain mprotect), so applications take their normal no-PKU fallback instead of the ENOSYS path. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297427 MFC after: 1 month Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D58782
debug: classified in
04-filenames_plain2 by 'sys/'
linux: unbreak arm64 linux_emul_md.c after pkey syscalls linux_emul.h uses struct image_args without a file-scope forward declaration. The new arm64 (and i386) stubs include that header without imgact.h first, which fails the build under -Werror. Include it the same way linux_pkru.c already does, and declare the type next to struct image_params so the header is self-contained. Reported by: tuexen Fixes: https://cgit.freebsd.org/src/commit/?id=bdb561843e86 MFC after: 1 month
debug: classified in
04-filenames_plain2 by 'sys/'
The K1 user manual lists three separate SDHCI devices but the upstream DTS file only defines the eMMC device. Create a temporary overlay to allow the BananaPi-F3 to boot from the SD card until this is addressed upstream. Differential Revision: https://reviews.freebsd.org/D57177 Reviewed by: mhorne
debug: classified in
04-filenames_plain2 by 'sys/'
This update brings spdxtool(1), with the ability to generate software bill of material files (SBOM) in the SPDX 3.0.1 format (JSON-LD). Reviewed by: markj Approved by: markj Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57953
debug: Commit manually moved from "unknown" to "build".
We have separate ports for Ccache 3 and 4. Suggest both, rather than only the Ccache 3 port. Rearrange the text somewhat to avoid an excessively ragged edge on a standard 80-column terminal. MFC after: 1 week Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58005
debug: classified in
03-filenames_plain1 by
'tools/build/'
On most architectures we end up not needing ABIBreak.cpp as, although some of the sources here do reference EnableABIBreakingChecks (or, if assertions are disabled, DisableABIBreakingChecks) at a source level, we compile with -ffunction-sections and -fdata-sections, and link with --gc-sections, and it happens to be the case that all references can be GC'ed. However, prior to LLVM 21, the RISC-V backend did not apply -fdata-sections to .sdata, where references to these symbols end up, and for some files we're building with such references we end up not being able to GC .sdata due to the other unrelated data in it, meaning that we do in fact need to build ABIBreak.cpp. Whilst we could make this conditional on the architecture, it's a tiny file, and it's a bit fragile to rely on GC behaviour, so just include it unconditionally. Reviewed by: dim, emaste Fixes: https://cgit.freebsd.org/src/commit/?id=770cf0a5f02d ("Fixups after llvm-project main llvmorg-21-init-19288-gface93e724f4 merge") MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D58044
debug: classified in
02-filenames_wildcards by
'.*Makefile'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57124
debug: classified in
02-filenames_wildcards by
'.*Makefile'
Retire the GNU subtree With GNU diff and cdialog gone, this is now an empty shell. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D55425
debug: Commit manually moved from "unknown" to "build".
Add a few missed files to ObsoleteFiles.inc There were still some left-over files under usr/tests/gnu/usr.bin/diff, causing the directory to not be fully removed. Add these to OLD_FILES. Fixes: https://cgit.freebsd.org/src/commit/?id=134a4c78d070
debug: classified in
03-filenames_plain1 by
'ObsoleteFiles.inc'
debug: moved to build because
'Need to be grouped with
134a4c78d070f8c4ea43a060a7ae28d22ac39558'
Reviewed by: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57163
debug: classified in
02-filenames_wildcards by
'.*Makefile'
-I${SRCTOP}/sys/contrib/xz-embedded/linux/lib/xz isn't used, and
.PATH: ${SRCTOP}/sys/contrib/xz-embedded/freebsd isn't used either.
Remove them both to simplify things a little.
Sponsored by: Netflix
debug: classified in
02-filenames_wildcards by
'.*Makefile'
The new world may use system calls that are not in the currently-running
kernel, so we cannot chroot into the new environment to run `make
installworld`, `etcupdate`, etc. Partially revert commit 16702050ac95
("beinstall: perform pre-installworld steps") and switch back to using
DESTDIR for installworld and so on.
Reported by: olivier
Reviewed by: olivier
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D50682
debug: classified in
03-filenames_plain1 by
'tools/build/'
I introduced it in commit 1b49115a40ad ("Promote llvm-cov to a
standalone option"). llvm-cov was previously enabled as part of the
CLANG_EXTRAS option. I made it a standalone, default-enabled option for
parity with the tools provided by the GCC-based toolchain.
We no longer provide an in-tree GCC toolchain. Now, just build llvm-cov
along with Clang to simplify build infrastructure.
Reviewed by: dim
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D58155
debug: classified in
05-summary-prefix by 'build:'
RANLIB is not used by our build, so there is no need to set it. Reviewed by: imp Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58156
debug: classified in
02-filenames_wildcards by
'.*Makefile'
For the BIOS, add xzfs support. This is a tiny increase in the loader size, but allows us to fetch compressed files from any of the filesystems we support, including over the network. For EFI, also add gzipfs and bzip2fs support we well. The increment for these files is tiny. Sponsored by: Netflix
debug: classified in
02-filenames_wildcards by
'.*Makefile'
Sponsored by: Netflix
debug: classified in
03-filenames_plain1 by
'share/mk/'
The tcp_bblog facility provides structured logging of TCP stack activity for debugging and performance analysis. It is implemented in the kernel and allows per-connection tracing of TCP events with low overhead. Reviewed by: tuexen, ziaee MFC after: 1 week Relnotes: yes Differential Revision: https://reviews.freebsd.org/D56252
debug: classified in
02-filenames_wildcards by
'.*Makefile'
sbintime.9 is a manual page that documents the usage of sbintime_t and its helper functions. MFC after: 1 week Reviewed by: ziaee, markj Differential Revision: https://reviews.freebsd.org/D57931
debug: classified in
02-filenames_wildcards by
'.*Makefile'
The debugfs options between the various modules (core and chipsets) are not 100% de-coupled. This means we may run into unresolveable symbols at load time of the modules if we enable certain options generally or for core but not for the chipset. For now: always build the core module with debugfs support. Migrate the CONFIG_MAC80211_DEBUGFS flag into the Makefile of each chipset so we can individually turn it on. Sponsored by: The FreeBSD Foundation MFC after: 3 days
debug: classified in
02-filenames_wildcards by
'.*Makefile'
This is included via acpivar.h so needs to be in SRCS to be generated. Reported by: bz Fixes: https://cgit.freebsd.org/src/commit/?id=bc49842769bd ("acpi_einj: Support for ACPI error injection") Sponsored by: Arm Ltd
debug: classified in
02-filenames_wildcards by
'.*Makefile'
Add a workaround for the Arm Cortex-A53 erratum 843419. This has been targeted when the build is either unoptimised for any CPU/architecture or targets the Cortex-A53 or ARMv8.0 architecture. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296240 PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296395 Reported by: Hal Murray <halmurray+freebsd@sonic.net> Reported by: Andreas Schuh <x55839@icloud.com> Reviewed by: cognet, mmel Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D58212
debug: classified in
03-filenames_plain1 by
'share/mk/'
Since the devd rules use sysrc, bsdconfig should be installed. MFC after: 3 days
debug: classified in
02-filenames_wildcards by
'.*Makefile'
Until D57524 is not reviewed and committed we will have a missing function declaration which prevents us to compile (in) debugfs for mt76 core and mt7921. Temporary disable debugfs again. Sponsored by: The FreeBSD Foundation MFC after: 3 days
debug: classified in
02-filenames_wildcards by
'.*Makefile'
We defined CONFIG_DEBUG_FILE only in libwpautils, not in wpa_supplicant, so all it did was enable code that never got called. Enable it at the top level so it also applies to wpa_supplicant(8), and the -f option mentioned in the manual page now actually works. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=281617 MFC after: 1 week Reviewed by: cy Differential Revision: https://reviews.freebsd.org/D57723
debug: classified in
02-filenames_wildcards by
'.*Makefile'
The ssh-sk-helper utility only functions if/when MK_USB == yes. Installing it on systems where MK_USB == no doesn't make sense. Differential Revision: https://reviews.freebsd.org/D58246
debug: classified in
02-filenames_wildcards by
'.*Makefile'
Commit 1876de606eb8 exposed missing symbols that the port security/krb5
installed that the base system did not install. Part of the solution
was to make libprofile.so private (not libprofile.a) just as the port
does, Red Hat Enterprise Linux does, and as installing MIT KRB5 by hand
does. The actual fix for this was to put symbols and their corresponding
functions into the correct librarires, i.e. libkrb5.so and othes, just
as the port, Red Hat, and manually installed via tarball do.
Unfortunately INTERNALLIB disables the include of bsd.incs.mk and the
install of header files. This is still needed to install profile.h into
/usr/include (just as the port installs it into ${LOCALBASE}/include
and RHEL installs it in /usr/include). This commit fixes this by
installing profile.h into /usr/include from the krb5/include Makfile.
Reported by: fluffy
Tested by: fluffy
Reviewed by: fluffy
Fixes: https://cgit.freebsd.org/src/commit/?id=1876de606eb8
MFC after: 3 days
Differential Revision: https://reviews.freebsd.org/D58286
debug: classified in
02-filenames_wildcards by
'.*Makefile'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58463
debug: classified in
02-filenames_wildcards by
'.*Makefile'
We used to pass CONFIGURE_ARGS to the make command which builds pkg,
but ports/ports-mgmt/pkg/Makefile has its own CONFIGURE_ARGS and the
version we were providing at the command line didn't contain the
--mandir setting which was added to the port with pkg 2.8.0. This
broke release builds.
Instead of passing --prefix=${LOCALBASE} via CONFIGURE_ARGS, pass
PREFIX=${LOCALBASE}; the port Makefile passes that value through to
its configure script. We also used to pass a --host parameter, but
that seems to have become unnecessary at some point in the past decade.
MFC after: 1 day
Sponsored by: Amazon
debug: classified in
02-filenames_wildcards by
'release/.*'
This module has several source files, with many conditional on the platform architecture. Make it easier to read, and better for future diffs against these lists. - Convert to one SRC per line - Simplify arm/armv7 condition - Remove now-empty header comment - Minor formatting MFC after: 1 week Sponsored by: The FreeBSD Foundation
debug: classified in
02-filenames_wildcards by
'.*Makefile'
Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58531
debug: classified in
02-filenames_wildcards by
'.*Makefile'
Document supported controllers, PF and VF naming, PCI_IOV and IOMMU requirements, queue and lifecycle constraints, iovctl schema, filtering and anti-spoof policy, mailbox and MDD recovery, shared hardware limits, rate control, and statistics cadence. Relnotes: yes Sponsored by: BBOX.io
debug: classified in
02-filenames_wildcards by
'.*Makefile'
Google Cloud recommends migrating from gsutil to gcloud storage CLI. Update gce-do-upload target to use `gcloud storage buckets create` and `gcloud storage cp` instead of `gsutil mb` and `gsutil cp` commands. PR: conf/https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297016 Reviewed by: lwhsu MFC after: 3 days Differential Revision: https://reviews.freebsd.org/D58464
debug: classified in
02-filenames_wildcards by
'.*Makefile'
If one of the source files we copy is non-writeable, cp will create a non-writeable copy. If the original is later modified, cp will fail to overwrite the copy since it is not writeable. Using cp -f ensures the copy always succeeds, as long as the object directory is writeable. MFC after: 1 week Sponsored by: Klara, Inc. Sponsored by: NetApp, Inc.
debug: classified in
02-filenames_wildcards by
'.*Makefile'
Increase EFI partition size to begin rootfs at 64mb. I believe this was my original intention. I have a microSD card with 8mb block size which emits an advisory in verbose dmesg about the misaligned partition. MFC after: 1 week Sponsored by: The FreeBSD Foundation
debug: classified in
02-filenames_wildcards by
'release/.*'
uart(4), unix(4), veriexec(4), video(4) and the gzero(4) MLINK are
not USB things, but they were in the .if ${MK_USB} != "no" block.
So if we build with WITHOUT_USB, these man pages are lost. Move
them out of the block.
MFC after: 3 days
Sponsored by: The FreeBSD Foundation
debug: classified in
02-filenames_wildcards by
'.*Makefile'
Document supported virtual-function families, driver features, queue negotiation, PF-controlled policy, and media limitations. MFC after: 2 weeks Sponsored by: BBOX.io
debug: classified in
02-filenames_wildcards by
'.*Makefile'
This completes step 5 from Committer's Guide. Approved by: jbo (mentor) Differential Revision: https://reviews.freebsd.org/D57934
debug: classified in
03-filenames_plain1 by
'share/misc/committers-ports.dot'
In order to merge merge commits (such as vendor imports), we need to tell git cherry-pick which of the two branches referenced in the commit is the mainline. In our case, it is always the first. Approved by: markj
debug: classified in
03-filenames_plain1 by
'tools/tools/git/'
Previously we searched commits based on the author email address, but this isn't really right: if I commit something from a contributor, I'm still responsible for MFCing it, so really we should be filtering on the committer. Add a new --committer option to filter results by committer email address, defaulting to the user.email value in the git config. Keep the --author option, but don't filter by author unless the option is explicitly specified. Reported by: des Reviewed by: des Differential Revision: https://reviews.freebsd.org/D58126
debug: classified in
03-filenames_plain1 by
'tools/tools/git/'
This allows one to resume from a conflict with a plain `git cherry-pick --continue`, whereas before one would have to re-run the original git-mfc command after resolving the conflict and running `git cherry-pick --continue`. Suggested by: des Reviewed by: des Differential Revision: https://reviews.freebsd.org/D58129
debug: classified in
03-filenames_plain1 by
'tools/tools/git/'
Commit hashes listed in ~/.git-mfc-ignore are not listed in output of git-mfc --dangling or --pending. This is handy for silencing output about commits that are tagged for MFC or as fixing another commit, but which were not MFCed for some reason or other. Requested by: des Reviewed by: des Differential Revision: https://reviews.freebsd.org/D58161
debug: classified in
03-filenames_plain1 by
'tools/tools/git/'
This silences warnings when running git-mfc --pending against stable/13, 14 and 15. Reviewed by: des Differential Revision: https://reviews.freebsd.org/D58162
debug: classified in
03-filenames_plain1 by
'tools/tools/git/'
Sponsored by: Netflix
debug: classified in
03-filenames_plain1 by
'.git-blame-ignore-revs'
git-mfc: Slightly relax the regex used to search for reverts Prompted by commit 9dfaf1cb37f8ac89cf in FreeBSD src. Reported by: des
debug: classified in
03-filenames_plain1 by
'tools/tools/git/'
git-mfc: Let the upstream for PRERELEASE branches be main Such branches are in code slush but are the same as stable branches for the purpose of MFCs.
debug: classified in
03-filenames_plain1 by
'tools/tools/git/'
git-mfc: Improve handling of remotes If we can't figure out which remote to use, print a useful error instead of assuming that "freebsd" is the right remote to use.
debug: classified in
03-filenames_plain1 by
'tools/tools/git/'
- Make it work even when git arc isn't run from the root of the repo. - If the patch fails to apply, let git partially apply the patch and generate rej files for inspection. While here, remove the return value from apply_rev(), it's never actually used. Reviewed by: jhb Differential Revision: https://reviews.freebsd.org/D58532
debug: classified in
03-filenames_plain1 by
'tools/tools/git/'
Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58515
debug: classified in
03-filenames_plain1 by
'.mailmap'
Somehow a few commits ended up with "null" appended to Nick's name and email address. Reviewed by: Nick Price <nick@spun.io> Differential Revision: https://reviews.freebsd.org/D58517
debug: classified in
03-filenames_plain1 by
'.mailmap'
Instead of making the user run the underlying git-cherry-pick command after a conflict. Requested by: des Reviewed by: des Differential Revision: https://reviews.freebsd.org/D58514
debug: classified in
03-filenames_plain1 by
'tools/tools/git/'
debug: classified in
03-filenames_plain1 by
'tools/tools/git/'
Completed steps 5-6 and 10 in the committer's guide. Reviewed by: jhb Approved by: jhb (mentor) Differential Revision: https://reviews.freebsd.org/D58507
debug: classified in
03-filenames_plain1 by '['.mailmap',
'share/misc/committers-src.dot',
'usr.bin/calendar/calendars/calendar.freebsd']'
debug: classified in
03-filenames_plain1 by
'share/misc/bsd-family-tree'
Phabricator user names are not useful identifiers outside of phabricator, don't use them if we can avoid it.
debug: classified in
03-filenames_plain1 by
'tools/tools/git/'
Reviewed by: dteske, fuz Approved by: dteske (mentor), fuz (mentor) Differential Revision: https://reviews.freebsd.org/D58700
debug: classified in
03-filenames_plain1 by
'share/misc/committers-src.dot'
Reviewed by: dteske, fuz Approved by: dteske (mentor), fuz (mentor) Differential Revision: https://reviews.freebsd.org/D58700
debug: classified in
03-filenames_plain1 by
'.mailmap'
Reviewed by: dteske, fuz Approved by: dteske (mentor), fuz (mentor) Differential Revision: https://reviews.freebsd.org/D58700
debug: classified in
03-filenames_plain1 by
'usr.bin/calendar/calendars/calendar.freebsd'
There is no timeout period for merging from stable to releng branches, so we should ignore "MFC after" tags. While here, lift some uses of re.compile() out of loops. Reported by: des
debug: classified in
03-filenames_plain1 by
'tools/tools/git/'
In my repos the remote "freebsd" is git@gitrepo.freebsd.org:src.git. In particular, the last component is delimited by a colon, not a slash. Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D48951
debug: classified in
03-filenames_plain1 by
'tools/tools/git/'
Show the differences between local commits and their associated Phabricator reviews, i.e., what "git arc update" would upload. For each commit, the review's current raw diff is applied to the commit's parent in a temporary index and the resulting tree is compared against the commit itself. An empty diff means the commit and the review are in sync. This makes it easy to check whether local amendments have diverged from the posted review before updating it, or to confirm that a review is current before landing. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D58789
debug: classified in
03-filenames_plain1 by
'tools/tools/git/'
And clean up luacheck warnings. Sponsored by: Klara, Inc. Differential Revision: https://reviews.freebsd.org/D48950
debug: classified in
03-filenames_plain1 by
'tools/tools/git/'
There is no functional change for existing tests, but allows to write a test that would expect an immediate success of bind(2).
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
- Test SOCK_DGRAM (UDP) sockets. - Test binding to 0:port and to a addr:port in presence of connected socket using the port. Differential Revision: https://reviews.freebsd.org/D56707
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
Just avoid repeating the test program name in every test case name. No functional change. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D56727
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
This fixes an endianness bug in sys/netinet/ip_reass_test. Just use the code from RFC 1071. Reported by: glebius Reviewed by: glebius, Timo Völker MFC after: 1 week Sponsored by: Netflix, Inc. Differential Revision: https://reviews.freebsd.org/D57988
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
/sbin/ping and /sbin/ping6 are hard-linked, and the vmmap sysctl handler doesn't know which name was used to launch the process. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296116 MFC after: 3 days Fixes: https://cgit.freebsd.org/src/commit/?id=080a4087014e ("tests: Fix race condition in aslr_setuid")
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
MFC after: 1 week
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
Reviewed by: kib
MFC with: 5c32aa785184 ("kern: add pdopenpid(2)")
Differential Revision: https://reviews.freebsd.org/D58023
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57163
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
In order to reuse the sendfile_helper program in pf tests, move it to tests/sys/common directory, indicatint that it is also used from another places than sys/kern. Also make the readlen variable static. Reviewed by: gelbius, kp Differential Revision: https://reviews.freebsd.org/D58040
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
In order to use the sendfile_helper program in a pf test script that requires non-loopback interfaces, add functionality to sendfile with a TCP socket that is connected to a remote host. The behavior for unix sockets and TCP loopback sockets is unchanged. Reviewed by: glebius Differential Revision: https://reviews.freebsd.org/D58041
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
MFC after: 3 days
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
Reported by: gcc -Werror=shadow Reviewed by: asomers, markj Fixes: https://cgit.freebsd.org/src/commit/?id=ee1c3d38a26a ("fusefs: fix vnode locking violations during execve") Differential Revision: https://reviews.freebsd.org/D58130
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
Make sure we have reachability when one of our nexthops gets down without deleting the route. Differential Revision: https://reviews.freebsd.org/D57552
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
This is a script that eventually will test boot with qemu all the supproted combinations for the boot loader. There's several things that could be done with gptboot or boot0sio (or not) that aren't tested. We don't test the 10-odd hardware root devices we support, nor do we test complex scenarios like RELAXED vs STRICT zfs efi booting. However, the scenarios we do support are included here. We test aarch64, amd64, armv7, powerpc64, powerpc64le, and riscv64 for BIOS, UEFI, and Prep and OpenFirmware (as appropriate) crossed with CDROM, MBR and GPT (and some hybrid) crossed with lua, 4th and simple loaders. Plus some linuxboot and memdisk scenarios, including the recently added compression for ram disk scenarios: === Results: 67 passed, 3 failed, 9 timed out (of 79) === The timeouts are well understood, usually failure to find the root disk. The failures are bad console assumptions. netboot-bios fails because TFTP with a single packet buffer in qemu gives horrible throughput, so the test takes 18-20 minutes. Now that I have a dashboard, I can fix the rest one by one. There's also a powerpc architecture that you can request specifically, but it's just for convenience and tests with the non-functional mac99 qemu machine. I will eventually eliminate this architecture. I added it to make sure the FreeBSD version wasn't too hard coded since this framework pulls from CD images to get the binaries for the minimal root used in testing and there's no 15.x 32-bit powerpc images. We need to add http and nfs root booting tests, but that's for the future. Plus there's some other functional tests that we should also add for different types of root (usb, sata, sas, nvme, ufs, emmc, sd, etc) that would be useful to test, especailly the non-sata/non-nvme ones. How we do that is still TBD. I leaned on claude to iterate over the recipes that I've developed over the years, collected off the internet or got on IRC recently to produce this framework. Most of this code is fairly good, while a few parts, especailly some of the comments, are detectable as AI produced. My plans are to iteratively improve those. Since this is just a test, and since I've broken many scenarios w/o realizing, it's a good tradeoff. I've not made it an ATF test since we test all the architectures, but I'm open to feedback in this area. Total time to test all the architectures is about 10 minutes. It assumes you've built GENERIC* and the boot loader for all the architectures too. In the future, I plan on moving to MINIMAL for all the boot testing, but likely only after PCI devmatch is integrated into it. That would be incrementally faster test times. The man page is decent, but was also generated by Claude with only trivial edits by me to date.... But at least there's a man page for it, though neither it nor the script is installed onto the system. Sponsored by: Netflix Assisted-by: Claude Code (Opus 4.6, Opus 4.8(1M) and Sonet 5.0) Differential Revision: https://reviews.freebsd.org/D58008
debug: Commit manually moved from "unknown" to "tests".
Help validate my assertion that "physmem will never report empty ranges". Part of this is covered by the existing tests, which check the merging of adjacent/overlapping regions. The other part is to ensure that addition of zero-sized ranges is ignored. The physmem implementation also includes logic to ignore the first physical page of memory (physical addresses 0 to PAGE_SIZE-1). Add a second test case for this. Reviewed by: markj MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D45914
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
debug: classified in
03-filenames_plain1 by
'tools/test/'
The fix for this is being tracked upstream here: https://github.com/onetrueawk/awk/issues/269 While here, just cd into $SRCDIR while executing tests, since the test engine isolates every testcase's working directory. This ensures that the xfail actually applies to the next command. Reviewed by: mhorne MFC after: 3 days Sponsored by: The FreeBSD Foundation
debug: classified in
02b-filenames_wildcards2 by
'usr.bin/.*/tests/.*'
Attach a process-mode counting PMC to the current process, start it, then detach and release it while it is still loaded on the hardware - the case that previously leaked the PMC's runcount reference and wedged pmc_wait_for_pmc_idle() at release. A second case does the same from a multi-threaded process so the sibling threads' references have to be drained too. The tests need an allocatable process-mode counting event and skip where none is available (hwpmc(4) not loaded, or a VM without a vPMU). Reviewed by: adrian MFC after: 2 weeks Assisted-by: Claude Code (Fable 5) Differential Revision: https://reviews.freebsd.org/D58343
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
stress2: Updated the exclude file
debug: classified in
03-filenames_plain1 by
'tools/test/'
stress2: Added a comment
debug: classified in
03-filenames_plain1 by
'tools/test/'
stress2: Added a regression test
debug: classified in
03-filenames_plain1 by
'tools/test/'
Skip the message-content check on kernels that do not advertise the exterr_strings feature, and pin the output format by clearing EXTERROR_VERBOSE. Reviewed by: kib MFC after: 1 week Assisted-by: Claude Code (Fable 5) Differential Revision: https://reviews.freebsd.org/D58322
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
This requested fix[0] was not complete before the change was committed. Cleans up this error message when running tests[1]: "Cannot 'start' ipfilter. Set ipfilter_enable to YES in /etc/rc.conf or use 'onestart' instead of 'start'." [0] https://reviews.freebsd.org/D21065?id=60288#inline-131488 [1] https://ci.freebsd.org/job/FreeBSD-main-amd64-test/28917/testReport/sys.netpfil.common/rdr/ipfnat_local_redirect/ Fixes: https://cgit.freebsd.org/src/commit/?id=f97a8a36153a9 MFC after: 3 days Sponsored by: The FreeBSD Foundation
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
This keeps the skipped test message consistent with others. Reviewed by: netchild MFC after: 3 days Sponsored by: The FreeBSD Foundation
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
The time_unit test case uses PID 1 as a target for pwait. This doesn't work in a jail. Since all we need is a process that we know won't die while the test is running, we may as well use ourselves. MFC after: 1 week Sponsored by: Klara, Inc. Sponsored by: NetApp, Inc. Reviewed by: ngie Differential Revision: https://reviews.freebsd.org/D58418
debug: classified in
02b-filenames_wildcards2 by
'bin/.*/tests/.*'
The function create_staticobj() is only used inside this translation unit. Clang produces a -Wmissing-prototypes warning during standard buildworld. This warning will become a fatal compile error if MK_WERROR is enabled for hardened builds. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=285870 Fixes: https://cgit.freebsd.org/src/commit/?id=ee9ce1078 ("libc: tests: add some tests for __cxa_atexit...") Signed-off-by: Zhang Qiyue <peter-open-source.probing805@aleeas.com> Reviewed-by: ngie Pull-Request: https://github.com/freebsd/freebsd-src/pull/2321
debug: classified in
03-filenames_plain1 by
'lib/libc/tests/'
This change converts the longhand form of `extern "C" {` and its
corresponding `}` into `__BEGIN_DECLS` and `__END_DECLS`, respectively.
The new form is much easier to grep for and is a best practice to use in
the FreeBSD tree.
This is meant to be a non-functional change.
MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'lib/libc/tests/'
pwait: Test the new -r option Test that pwait without -r reports a process as soon as it terminates, while pwait with -r does not report it until it has been reaped. MFC after: 1 week Sponsored by: Klara, Inc. Sponsored by: NetApp, Inc. Reviewed by: kib Differential Revision: https://reviews.freebsd.org/D58385
debug: classified in
02b-filenames_wildcards2 by
'bin/.*/tests/.*'
pwait: Fix pwait_normal test case Reported by: markj Fixes: https://cgit.freebsd.org/src/commit/?id=e115066370dc ("pwait: Test the new -r option")
debug: classified in
02b-filenames_wildcards2 by
'bin/.*/tests/.*'
Add tests for both IPv4 and IPv6 routes with the prefsrc attribute. Also test IPv4 routes over IPv6 nexthops and borrow their IPv4 addresses from the loopback interface. Reviewed by: glebius Differential Revision: https://reviews.freebsd.org/D58326
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
The child exited immediately after pdfork(), so the parent's pdopenpid() could catch it mid-exit (P_WEXIT) and fail with EBUSY. Block the child on a pipe until the parent has opened the second descriptor, then release it Approved by: markj Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D58546
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
Add a regression test for gre(4) to make sure all of the gre capabilities and options are working as intended. Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D55363
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
Some of the preadv() and readv() tests were not initializing the iovecs they pass to the system call. When the system call is expected to fail, that's fine since the FORTIFY_SOURCE checks cause the process to be aborted. However, in the rest of the test cases, the (p)readv() call could cause spurious test failures, e.g., when an uninitialized iov entry points to the current stack frame and the canary gets overwritten. Modify the tests to explicitly initialize iov entries to avoid this. The "iov" variants don't have this problem, so leave them alone. Reviewed by: kevans MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58289
debug: classified in
03-filenames_plain1 by
'lib/libc/tests/'
Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58530
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58569
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
pdwait's capsicum/enotcap and procdesc's pdopenpid_capmode enter capability mode. Require security_capability_mode (and security_capabilities for enotcap) so the cases skip cleanly on kernels built without CAPABILITIES instead of failing. Approved by: asomers, gallatin Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D58545
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
Sponsored by: The FreeBSD Foundation MFC after: 1 week
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
debug: classified in
03-filenames_plain1 by
'tools/tools/crypto/cryptocheck.c'
Cover the new fd-direct connect path: stream connect and data passing, the peer address reported by `getpeername(2)`, datagram to an unbound peer, the `EINVAL`/`ENOTSOCK`/`EPROTOTYPE`/`ECONNREFUSED` error matrix, and the Capsicum token semantics — a descriptor limited to `CAP_CONNECTAT` can be connected to but not listened on, accepted from, or read, and one lacking `CAP_CONNECTAT` cannot be a connect target. Stream listeners are always bound: `uipc_listen()` refuses unbound sockets with `EDESTADDRREQ`, so an unbound fd-direct listener is not reachable even with this feature. Signed-off-by: John Ericson <John.Ericson@Obsidian.Systems> Assisted-by: Claude Code (Claude Opus 4.8 and Fable 5) Reviewed by: markj MFC after: 2 months Differential Revision: https://reviews.freebsd.org/D58406
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
This test was already marked as always skipped. Fixes: https://cgit.freebsd.org/src/commit/?id=069a67374ed9641ff1ada2aecaac1cc61a560649 Reviewed by: pouria Differential Revision: https://reviews.freebsd.org/D58114
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
tests/netinet/socket_afinet: unroll multibind test into a table The test has 6 dimensions: address family, socket type, socket option on the first socket, socket option on the second socket, is first socket bound to specific address or wildcard and is the second socket priveleged or not. Before the change 3 dimensions are implemented as 3 nested for() loops, 2 dimensions are implemented as repetitions in the test body and one dimension as two actions in the innermost loop. I'm about to add one more dimension: whether the second socket is bound to a specific address or wildcard instead of using first socket's getsockopt(2) result. Also, there is a change under discussion that would make SOCK_STREAM sockets behave different to SOCK_DGRAM. That would break result consistency in the dimensions of socket type. We expect that consistency in the dimension of address families shall never break, thus this one remains a for() loop. The priveleged & non- privileged bind(2) attempts also remain as two actions, but expected results are in the table. The rest of dimensions are unrolled into a table, which at the moment has quite a lot of lines with identical results. However, as more tests are added and SOCK_STREAM behavior changes, the table will get more mixed results. Also, reading a test that is written in a declarative manner a table is much easier and modifying it is more resistent to accidential breakage. Differential Revision: https://reviews.freebsd.org/D58085
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
tests/netinet/socket_afinet: multibind second socket can be different Allows to add tests to the table where the second socket doesn't take address from the first. No functional change yet, all tests test the same conditions. Differential Revision: https://reviews.freebsd.org/D58087
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
tests/netinet/socket_afinet: add more tests to multibind Add tests where first socket and second socket are bound to different addresses, e.g. first specific and second wildcard and vice versa. Mark success with SO_REUSEPORT on the second socket as a bug suspect. Mark failure to bind to INADDR_ANY in presence of other UID's specific bound socket to the same port as probably too strict. Differential Revision: https://reviews.freebsd.org/D58088
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
Fix a typo in the ZFS multi_dataset_4 test, where a path separator was missing. Reported by: markj MFC after: 1 week
debug: classified in
02b-filenames_wildcards2 by
'usr.sbin/.*/tests/.*'
Reviewed by: fuz Approved by: fuz (mentor) MFC after: 1 month Pull Request: https://github.com/freebsd/freebsd-src/pull/2352
debug: classified in
03-filenames_plain1 by
'lib/libc/tests/'
We created so many states that our bulk-sync occasionally caused epair to drop packets, which in turn caused the test to fail. That's not what we're testing here, make it more robust by creating fewer states. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297307 Sponsored by: Rubicon Communications, LLC ("Netgate")
debug: classified in
02b-filenames_wildcards2 by
'tests\/.*'
These could go in other categories, but it's more clear if they're here instead.
The flag is -D, but it was written as a second -d. Add a period too. MFC after: 3 days
debug: classified in 01-style
by '[tT]ypo'
Reviewed by: markj Differential Revision: https://reviews.freebsd.org/D57928
debug: classified in 01-style
by '[sS]tyle'
Fixes: https://cgit.freebsd.org/src/commit/?id=c3c8f4d9e662 ("cpu: New cpu_get_pcpuid(), retrieves internal CPU ID") Sponsored by: The FreeBSD Foundation
debug: classified in 01-style
by '[tT]ypo'
Rename handler function type 'lapic_thermal_handle_function' to the
shorter 'lapic_thermal_handler_t'. Move it closer to the function
declaration block where it is used. Make it a true function type (no
pointer) and add explicit pointer marks on usage.
Rename 'lapic_thermal_function_value' to the more immediately clear
'lapic_thermal_function_arg'. In lapic_thermal_enable(), use 'func_arg'
as the argument name for the handler argument, which at least refers to
function 'func', rather than the generic 'value'.
Finally, rename the global handler variable from
'lapic_thermal_function_ptr' to the shorter 'lapic_thermal_function'
(dynamic functions can be referenced only through a pointer).
MFC with: 87ba088fa310 ("x86/local_apic.c: Add support for installing a thermal interrupt handler")
Sponsored by: The FreeBSD Foundation
debug: classified in 01-style
by '[sS]tyle'
MFC after: 1 week
debug: classified in 01-style
by '[tT]ypo'
We should exit the net epoch instead of acquiring one more entry. Reported by: Wafa Hamzah <wafah@nvidia.com> Reviewed by: jhb Sponsored by: Nvidia networking Fixes: https://cgit.freebsd.org/src/commit/?id=4726b80d9379 ("OFED: Various changes from Linux 4.20") Differential revision: https://reviews.freebsd.org/D58127
debug: classified in 01-style
by '[tT]ypo'
Reviewed by: mckusick Discussed with: markj Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D57658
debug: classified in 01-style
by '[sS]tyle'
Sponsored by: The FreeBSD Foundation MFC after: 3 days
debug: classified in 01-style
by '[sS]tyle'
if administrator mistakenly types into configuration file anchor=authpf_test where 'authpf_test' is followed by white space, the authpf(8) is going to use anchor 'authpf_test ' instead of the 'authpf_test' which is defined in pf.conf(5) as 'anchor authpf_test/*' issue kindly reported and patch submitted by Avinash Duduskar <avinash.duduskar (_at_) gmail (_dot_) com> OK sashan@ PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296958 MFC after: 1 week Obtained from: OpenBSD, sashan <sashan@openbsd.org>, 2d12a8e44d Sponsored by: Rubicon Communications, LLC ("Netgate")
debug: classified in 01-style
by '[wW]hite space'
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58463
debug: classified in 01-style
by '[sS]tyle'
Also use bool for the 'cancel' argument for cond_wait_common(). Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58463
debug: classified in 01-style
by '[sS]tyle'
Show nhop flags like invalid nexthop to debug cases like the PR below. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296883 Reviewed by: glebius Differential Revision: https://reviews.freebsd.org/D58347
debug: classified in 01-style
by '[sS]tyle'
manuals: Fix Fx and nearby mechanical typos Fix compiler warnings related to the Fx macro, as well as all other mechanical typos that were visible within one screenful of them. These cause rendering glitches on various toolchains with various of the five and a half decades of rich output formats and tooling manpages scale to. The *x macro set specifies operating systems. These macros take the rest of the line as an argument. Sometimes, a space was not used to separate the argument of Fx and the trailing period. Another, FreeBSD Foundation was misrepresented as an operating system version instead of an author. Two more had other parts of the sentence supplied as an argument to Fx. While I had those open, fix the other mechancial typos visible on those specific screenfulls. Fix a list width glitch, correct section typo AUTHOR to AUTHORS, and switch AUTHORS sections containing prose to prose-mode so that they wrap freely when rendered. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297248 MFC after: 3 days Fixes: https://cgit.freebsd.org/src/commit/?id=d39e310c7d6a ("man/man3: add stdbit.3") Fixes: https://cgit.freebsd.org/src/commit/?id=d790b16bbf0c ("add man pages for stdbit functions") Fixes: https://cgit.freebsd.org/src/commit/?id=b61850c4e6f6 ("net.link.bridge.member_ifaddrs to false") Reported by: wosch (groff is complaining about incorrect Fx usage)
debug: classified in 01-style
by '[tT]ypo'
manuals: Fix more Fx and nearby mechanical typos Fix compiler warnings related to the Fx macro, as well as all other mechanical typos that were visible within one screenful of them. These cause rendering glitches on various toolchains with various of the five and a half decades of rich output formats and tooling manpages scale to. The *x macro set specifies operating systems. These macros take the rest of the line as an argument. Sometimes, a space was not used to separate the argument of Fx and the trailing period. Others had other parts of the sentence supplied as an argument to Fx. While here, fix the other mechanical typos visible on those specific screenfulls. Correct section typo AUTHOR to AUTHORS, markup utilities with Sy, and apply line break after the end of a sentence. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=297248 MFC after: 3 days Reported by: wosch (are you sure that's all of the broken Fx'es?) Fixes: https://cgit.freebsd.org/src/commit/?id=ff2bc641599a ("Fix Fx and nearby mechanical typos") Fixes: https://cgit.freebsd.org/src/commit/?id=d790b16bbf0c ("add man pages for stdbit functions") Fixes: https://cgit.freebsd.org/src/commit/?id=6c57e368eb17 ("implement C23 memalignment()") Fixes: https://cgit.freebsd.org/src/commit/?id=b06338167d64 ("ROUTE_MPATH and FIB_ALGO") Fixes: https://cgit.freebsd.org/src/commit/?id=7e1affa242ca ("revise divert-to and divert-reply")
debug: classified in 01-style
by '[tT]ypo'
MFC after: 1 week
debug: classified in 01-style
by '[tT]ypo'
- s/pointr/pointer/ Obtained from: NetBSD MFC after: 3 days
debug: classified in 01-style
by '[tT]ypo'
Reviewed by: fuz Approved by: fuz (mentor) MFC after: 1 month Pull Request: https://github.com/freebsd/freebsd-src/pull/2352
debug: classified in 01-style
by '[tT]ypo'
One is the parameter name.
debug: classified in 01-style
by '[tT]ypo'
- s/uneccessarily/unnecessarily/ Obtained from: NetBSD MFC after: 3 days
debug: classified in 01-style
by '[tT]ypo'
- s/modifing/modifying/ MFC after: 3 days
debug: classified in 01-style
by '[tT]ypo'
- s/errornous/erroneous/ MFC after: 3 days
debug: classified in 01-style
by '[tT]ypo'
- s/predifined/predefined/ MFC after: 3 days
debug: classified in 01-style
by '[tT]ypo'
- s/modifing/modifying/ MFC after: 3 days
debug: classified in 01-style
by '[tT]ypo'
- s/modifing/modifying/ MFC after: 3 days
debug: classified in 01-style
by '[tT]ypo'
- s/varaiables/variables/ MFC after: 3 days
debug: classified in 01-style
by '[tT]ypo'
- s/staring/starting/ MFC after: 5 days
debug: classified in 01-style
by '[tT]ypo'
debug: classified in
03-filenames_plain1 by
'contrib/'
This automatically computes the correct PKG_CONFIG_PATH with LOCALBASE from the environment (when set) or from the "user.localbase" sysctl, in this order. Reviewed by: des Approved by: des Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57246
debug: Commit manually moved from "unknown" to "contrib".
Merge commit 'e988c5eab5231646c612d35ff5b16122cebfbf6a'
debug: classified in
05-summary-prefix by 'Merge '
In delete(), when copying the deleted character to the d_char buffer, don't assume that it fits. utf8_prev() may return a sequence of more than 5 bytes. In insert_utf8(), fix the copy-up of the line. We extended the line by "len" bytes, so "temp" has to be repositioned accordingly. Compare with plain insert(). Use sizeof when copying to buffers instead of hard-coding buffer sizes. Don't dynamically allocate d_char, there is no need. Fixes: https://cgit.freebsd.org/src/commit/?id=62fba0054d9e ("ee: add unicode support") Reported by: Sayono Hiragi (overflow in delete()) Reviewed by: bapt MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57996
debug: classified in
03-filenames_plain1 by
'contrib/'
Otherwise one can't easily attach gdb to ee. Reviewed by: bapt MFC after: 2 weeks Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D57997
debug: classified in
03-filenames_plain1 by
'contrib/'
When looking up self process we can use `ps -p $$` directly rather than grep which may find other processes ending in the expected PID. Sponsored by: Dell Inc. Reviewed by: markj, vangyzen Differential Revision: https://reviews.freebsd.org/D58019
debug: classified in
03-filenames_plain1 by
'cddl/contrib/'
This is the last remaining piece of GPL software in the base system. The installer transitioned to bsddialog four years ago, and the last remaining dialog consumer, dpv, was turned off more than two years ago. Retire dpv, libdpv, libfigpar (used only by dpv), and dialog itself. Reviewed by: dteske Differential Revision: https://reviews.freebsd.org/D55424
debug: Commit manually moved from "unknown" to "contrib".
Changes: https://github.com/eggert/tz/blob/2026c/NEWS MFC after: 3 days
debug: classified in
03-filenames_plain1 by
'contrib/'
MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'contrib/'
Full release notes are available at https://www.openssh.com/txt/release-10.4 Selected highlights from the release notes: Potentially-incompatible changes -------------------------------- * sshd(8): configuration dump mode ("sshd -G") now writes directives in mixed case (e.g. "PubkeyAuthentication") whereas previously it emitted only lower-case names. * ssh(1), sshd(8): make the transport protocol stricter by disconnecting if the peer sends non-KEX messages during a post- authentication key re-exchange. Previously a malicious peer could continue sending non-key exchange messages without penalty. These would be buffered, causing memory to be wasted up until the connection terminated or the server/client hit a memory limit. Implementations that do not restrict messages sent during key exchange as per RFC4253 section 7.1 may be disconnected. Reported by Marko Jevtic. Changes since OpenSSH 10.3 ========================== This release contains a number of security fixes as well as general bugfixes and a couple of new features. Security ======== * sftp(1): when downloading files on the command-line using "sftp host:/path .", a malicious server could cause the file to be downloaded to an unexpected location. This issue was identified by the Swival Security Scanner. * scp(1): when copying files between two remote destinations, do not allow a malicious server to write files to the parent directory of the intended target directory. This issue was identified by the Swival Security Scanner. * sshd(8): DisableForwarding=yes didn't override PermitTunnel=yes as it was documented to do. Note that PermitTunnel is not enabled by default. Reported independently by Huzaifa Sidhpurwala of Redhat and Marko Jevtic. * sshd(8): avoid a potential pre-authentication denial of service when GSSAPIAuthentication was enabled (this feature is off by default). This was not mitigated by MaxAuthTries, but would be penalised by PerSourcePenalties. This was reported by Manfred Kaiser of the milCERT AT (Austrian Ministry of Defence). * sshd(8): fix a number of cases where the minimum authentication delay was not being enforced. Reported by the Orange Cyberdefense Vulnerability Team. * ssh(1): fix a possible client-side use-after-free if the server changes its host key during a key reexchange. This was reported by Zhenpeng (Leo) Lin of Depthfirst. New features ------------ * All: add experimental support for a composite post-quantum signature scheme that combines ML-DSA 44 and Ed25519 as specified in draft-miller-sshm-mldsa44-ed25519-composite-sigs. This scheme is not enabled by default. To use it, you'll need to add it to HostKeyAlgorithms, PubkeyAcceptedAlgorithms, etc. Keys may be generated using "ssh-keygen -t mldsa44-ed25519". Bugfixes -------- * sshd(8): avoid sending observably different messages for valid vs invalid users in GSSAPIAuthentication (disabled by default). * ssh(1), sshd(8): fix several bugs that incorrectly classified bulk traffic as interactive. bz3972, bz3958 * ssh-keygen(1), ssh-add(1): skip unsupported key types when downloading resident keys from a FIDO token. Previously, downloads would abort when one was encountered. GHPR657 Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58083
debug: classified in
05-summary-prefix by 'OpenSSH:'
We don't use this note type today, but as a general purpose ELF diagnostic tool readelf(1) ought to decode it. References: https://fedoraproject.org/wiki/Changes/Package_information_on_ELF_objects https://systemd.io/ELF_PACKAGE_METADATA/ Reviewed by: fuz Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D47524
debug: classified in
03-filenames_plain1 by
'contrib/'
Differential Revision: https://reviews.freebsd.org/D58333 Approved by: ivy MFC after: 3 days Changelog: https://github.com/vstakhov/libucl/releases/tag/0.9.4
debug: classified in
03-filenames_plain1 by
'contrib/'
Add -P as shorthand for --pause-before-cleanup. MFC after: 1 week Reviewed by: ngie Differential Revision: https://reviews.freebsd.org/D56613
debug: classified in
03-filenames_plain1 by
'contrib/'
Release notes at
https://community.nlnetlabs.nl/t/unbound-1-25-2-released
Merge commit 'c68e7bcd81d62e9f5364c6da22fd9917976acf85'
Security: CVE-2026-14586
Security: CVE-2026-32665
Security: CVE-2026-40691
Security: CVE-2026-41637
Security: CVE-2026-42955
Security: CVE-2026-44621
Security: CVE-2026-44687
Security: CVE-2026-44690
Security: CVE-2026-46582
Security: CVE-2026-50045
Security: CVE-2026-50046
Security: CVE-2026-50243
Security: CVE-2026-50248
Security: CVE-2026-50251
Security: CVE-2026-50252
Security: CVE-2026-52863
Security: CVE-2026-54478
Security: CVE-2026-55708
Security: CVE-2026-55717
Security: CVE-2026-55973
Security: CVE-2026-55990
Security: CVE-2026-55991
Security: CVE-2026-56416
Security: CVE-2026-56444
debug: classified in
05-summary-prefix by 'unbound:'
Update the mt76/zzz_fw_ports_fwget.sh script to set fwget to download mt7921 and mt7925 rather than the these days non-existent mt792x flavor. Sponsored by: The FreeBSD Foundation MFC after: 30 days Differential Revision: https://reviews.freebsd.org/D57242
debug: classified in
03-filenames_plain1 by
'sys/contrib'
Reviewed by: markj, ngie Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D58458
debug: classified in
03-filenames_plain1 by
'contrib/'
[NFC][ELF][PPC64] Pass address not offset to writePPC64LoadAndBranch (#212275) Every caller currently subtracts the TOC base in its argument, so move that into common code inside writePPC64LoadAndBranch. This will also allow a different computation to be used in some cases in a future commit. Note that offset is now unsigned not signed; even previously, all arguments were uint64_t, and all uses are unsigned, so making it signed doesn't make much sense. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'contrib/'
[ELF][PowerPC] Don't assume TOC pointer is valid in IPLT entries (#207555) Unlike normal PLT entries, IPLT entries can be called indirectly even when in PIEs/DSOs, and so there's no guarantee on what's in the TOC pointer register at that time. Therefore we must emit variants of the existing code that work without it, whether r12-relative (playing the same role as MIPS's $25) in the same number of instructions, or first retrieving PC in an i386-like manner, being careful not to clobber LR. On 32-bit PowerPC even direct calls to IPLT entries face the same issue, since we'd use the TOC base of the resolver, which may not be the same as the caller, even within the same object. Normal canonical PLTs still look broken on 64-bit PowerPC as they use the TOC pointer register too, and similarly on 32-bit PowerPC for PIEs. We should probably treat these cases the same as PIE on i386 (except including PDEs for 64-bit PowerPC), where it's an error due to the use of %ebx in PLT entries. Bump LLD_FREEBSD_VERSION for this fix as otherwise an existing system linker will be deemed new enough to use and produce broken kernels for TARGET=powerpc (regardless of TARGET_ARCH/MACHINE/MACHINE_ARCH) builds. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=294369 MFC after: 1 week
debug: classified in
05-summary-prefix by 'Merge '
[libunwind][PPC64] Fix unw_getcontext corrupting callee-saved VSX registers on LE (#198371) This is the first of two independent fixes for libunwind on ppc64le (ELFv2 ABI, little-endian), where two separate bugs together cause SIGSEGV during backtracing. This commit addresses the VSX register corruption; the TOC-restore fault is handled in a follow-up. Both were discovered while debugging lang/rust build failures with RUST_BACKTRACE=1 on FreeBSD/powerpc64le (IBM POWER9). On ppc64le, `unw_getcontext` saves each VS register with an in-place `xxswapd n, n` followed by `stxvd2x`. The swap is needed because `stxvd2x` stores doublewords in the wrong order on LE. However, the macro never applies a second `xxswapd` to restore the register after the store, so all 64 VS registers are permanently corrupted on return from `unw_getcontext`. This affects every callee-saved VSX register: f14-f31 (VSR14-VSR31) and VR20-VR31 (VSR52-VSR63). After `_Unwind_Backtrace` returns, any code that uses these registers sees wrong values. In practice this manifests as SIGSEGV inside hashbrown's `reserve_rehash`: VR20-VR31 are corrupted before a SIMD comparison loop runs, producing an out-of-bounds access. Fix: add a second `xxswapd n, n` after the `stxvd2x` store. Since `xxswapd` is its own inverse, the pair is a no-op on the architectural register while still writing the correctly byte-swapped value to memory. MFC after: 1 week
debug: classified in
03-filenames_plain1 by
'contrib/'
libarchive 3.8.9 ChangeLog: https://github.com/libarchive/libarchive/compare/v3.8.7...v3.8.9 Obtained from: libarchive Vendor commit: 27cbc7827172698143e440801fc0ba39ccb4f1f5 MFC after: 2 weeks
debug: classified in
03-filenames_plain1 by
'contrib/'
On some platforms, e.g. Linux Clang 22.1.8 / glibc 2.43, strchr() now implements the C23 behaviour where passing a const pointer to strchr() also returns a const pointer. This breaks libucl during the bootstrap build, since it assumes the return value is always a mutable pointer. Instead of assigning directly to params->prefix (which is const), use a non-const temporary variable and assign the result after we've done the modification. MFC after: 1 week Reviewed by: bofh, bapt Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58490
debug: classified in
03-filenames_plain1 by
'contrib/'
On some platforms, e.g. Linux Clang 22.1.8 / glibc 2.43, strchr() now implements the C23 behaviour where passing a const pointer to strchr() also returns a const pointer. This breaks mandoc during the bootstrap build, since it assumes the return value is always a mutable pointer. In read.c, make the existing temporary pointer const, and for the mandoc_asprintf() call, add a new mutable local. In mdoc.c and out.c, since the data is mutable and is mutated here, remove const from the temporary pointers. MFC after: 1 week Reviewed by: fuz Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58495
debug: classified in
03-filenames_plain1 by
'contrib/'
On some platforms, e.g. Linux Clang 22.1.8 / glibc 2.43, strchr() now implements the C23 behaviour where passing a const pointer to strchr() also returns a const pointer. This breaks libelftc during the bootstrap build, since it assumes the return value is always a mutable pointer. Since the returned pointer is never modified in either case, make it const. MFC after: 1 week Reviewed by: jkoshy, markj, dim, emaste Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D58497
debug: classified in
03-filenames_plain1 by
'contrib/'
Release notes at
https://community.nlnetlabs.nl/t/unbound-1-26-0-released
Merge commit '84ffc29dc8ddb0c946db5cb3b3c1310bec6a9e6c'
debug: classified in
05-summary-prefix by 'unbound:'
Reviewed by: markj MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D58634
debug: classified in
03-filenames_plain1 by
'contrib/'
Found with: clang -Werror=assign-enum
debug: classified in
03-filenames_plain1 by
'sys/contrib'
Changes: https://github.com/libexpat/libexpat/blob/R_2_8_3/expat/Changes Security: CVE-2026-72522 MFC after: 1 week
debug: classified in
05-summary-prefix by 'contrib/'
MFC after: 3 days
debug: classified in
05-summary-prefix by 'MFV:'
Release notes at https://www.sqlite.org/releaselog/3_53_3.html. Obtained from: https://www.sqlite.org/2026/sqlite-autoconf-3530300.tar.gz MFC after: 2 weeks Merge commit 'e698feec080925c6cffa9ec31be884daa5cea536'
debug: classified in
03-filenames_plain1 by
'contrib/'
zfs: Wire sha512 offload to the build FreeBSD main just got the CPUID_STDEXT4_SHA512 define. OpenZFS PR #18732
debug: classified in 00-reverts
by 'This reverts commit
\b([0-9a-fA-F]{40})\b'
Revert "zfs: Wire sha512 offload to the build" This reverts commit cd61eb4f6681b13d98b6a7be252500ad30f05f74. Some people report module load failure due to undefined symbol. I don't have those problems myself, so it might be a question of full rebuild. But I don't have time right now, so just revert.
debug: classified in 00-reverts
by 'This reverts commit
\b([0-9a-fA-F]{40})\b'
This reverts commit 3e3fd1fde8e168910edc538966111c0b5f03cd5f. This appears to break chainbooting with boot1.efi and similar scenarios with Root-on-ZFS scenarios. Revert until it's better understood. PR: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=296309 Sponsored by: Netflix Differential Revision: https://reviews.freebsd.org/D58071
debug: classified in 00-reverts
by 'This reverts commit
\b([0-9a-fA-F]{40})\b'
This reverts commit 74654ba3b1b3bcf6ba8870a54310accbb6adbf0b. Apparently it breaks cross building from Linux for some reason. I'll admit I didn't even know we supported cross building from Linux.
debug: classified in 00-reverts
by 'This reverts commit
\b([0-9a-fA-F]{40})\b'
pkg: Add -j and -r options This allows pkg(7) to be used to bootstrap a jail or chroot, and to recognize the -j and -r options and pass them through to pkg(8) if already bootstrapped. Note that this does not address the issue of repository keys. If using a signed package repository, you will still need to copy /usr/share/keys into the target environment before or after bootstrapping, or pkg will be unable to verify package signatures. MFC after: 1 week Reviewed by: imp, bapt Differential Revision: https://reviews.freebsd.org/D58165
debug: classified in 00-reverts
by 'This reverts commit
\b([0-9a-fA-F]{40})\b'
Revert "pkg: Add -j and -r options" This reverts commit d94e034d504682be56fc2e9d20ac2c0fe15b70ec at the request of des@, as it seems to have broken the pass-through case.
debug: classified in 00-reverts
by 'This reverts commit
\b([0-9a-fA-F]{40})\b'
rk_gpio: defer level-IRQ EOI until source line is driven low
The previous PIC bring-up (ccda002ca10) added pic_disable_intr,
pic_enable_intr, pic_pre_ithread, and pic_post_ithread, but omitted
pic_post_filter. Per the PIC contract pic_post_filter is non-optional;
a follow-up enforcement pass is planned that will panic() if any of the
three (pic_pre_ithread, pic_post_ithread, pic_post_filter) is missing.
This patch also fixes the EOI ordering for level-triggered IRQs (raised
by mhorne in the v1 review). Writing PORTA_EOI before intr_isrc_dispatch
is correct for edge pins, but wrong for level pins: the source device
has not yet deasserted the line, so the latch immediately re-arms and
the controller storms.
- rk_gpio_intr: EOI edge pins per-pin before dispatch (matches the
pre-patch behavior for the common case); for level pins defer EOI
to the post-dispatch path. Stray (no consumer) level pins still
get EOI'd here because no consumer will run to clear the source.
- rk_pic_post_filter: new method, EOI level pins after the filter
has read+cleared the source device's IRQ register.
- rk_pic_post_ithread: EOI level pins after the ithread has driven
the source low, before unmasking, so the chip latch is clean when
we re-enable delivery.
Shape mirrors tegra_gpio(4) (sys/arm/nvidia/tegra_gpio.c). No new
sysctls, no scaffolding.
Smoke-tested on RockPro64 (RK3399) with fusb302 INT_N (level-low GPIO
IRQ): IRQ rate steady at ~28/s under USB-C activity vs the 210 kHz
storm the original missing-mask bug produced.
Signed-off-by: Kyle Crenshaw <B1nc0d3x@gmail.com>
Reviewed by: mhorne
Fixes: https://cgit.freebsd.org/src/commit/?id=ccda002ca10f ("rk_gpio: implement PIC masking methods and mask unhandled IRQs")
Pull Request: https://github.com/freebsd/freebsd-src/pull/2245
debug: classified in 00-reverts
by 'This reverts commit
\b([0-9a-fA-F]{40})\b'
Revert "rk_gpio: defer level-IRQ EOI until source line is driven low" There is a more correct / preferable scheme for handling of EOI. Requested-by: mmel This reverts commit 8ffb400bfd64102ac2a49639ccbbfffbe0c6f127.
debug: classified in 00-reverts
by 'This reverts commit
\b([0-9a-fA-F]{40})\b'
tests/ktls: merge two sysctl checking helpers into one No functional change.
debug: classified in 00-reverts
by 'This reverts commit
\b([0-9a-fA-F]{40})\b'
Revert "tests/ktls: merge two sysctl checking helpers into one" With certain sysctl configuration the test will fail. This reverts commit 801c0f383c0a719165c21ff5c29f231fb7b920c4.
debug: classified in 00-reverts
by 'This reverts commit
\b([0-9a-fA-F]{40})\b'
This was a good idea, but we don't build metapackages in the kmods repo so it ends up breaking the release build. I might resurrect this change if/when the kmods repo includes the wifi-firmware-kmod metapackage. This reverts commit bda8028146694ee490543b35e3349e060936fde4. MFC after: 1 second
debug: classified in 00-reverts
by 'This reverts commit
\b([0-9a-fA-F]{40})\b'
A native route Netlink interface will replace this stack. Requested by: glebius This reverts commit 1ccf543b21eff6e0828142e5c1d09519247143f4. This reverts commit 2c04cfa148ec4dd5cef7e228aaea6a05957fcb15. This reverts commit 2d6114f6d26bf7dfa5ad94e1db9b09ee7108dc7a. This reverts commit d15f2551b25f79ddcbe289faa95e655100b952da. This reverts commit ceb282bbd62eed5e84df9abaede0dd183f66997a. This reverts commit c30021fe0df9e045a17292dbe50dfc054b69871f. This reverts commit fb1820d23a04856a6d3047b4c088cc8df8f76da1. This reverts commit 8696cc600f44767e7988a92c8e6fb943e97d4cc7.
debug: classified in 00-reverts
by 'This reverts commit
\b([0-9a-fA-F]{40})\b'
This reverts commit 45645518ea19ccb4761aee3a525aab2f323d37d4. Although this changed looks like it should just be a harmless change to bookkeeping, it turns out that it changes the termination condition of the initial device scan, resulting in it never finishing. This causes the boot to hang forever coming up. Since I don't have good access to hardware, I'm reverting until the exact details can be sorted out. Reported by: Edward Scroop Sponsored by: Netflix MFC After: 1 week
debug: classified in 00-reverts
by 'This reverts commit
\b([0-9a-fA-F]{40})\b'
Not classified automatically, and waiting for manual attention.
-- no commits in this category this week --
Dates:
cgit.freebsd.org/src. Git accurately records the
order of commits, but not their dates.Automatic grouping:
This reverts commit \\b([0-9a-fA-F]{40})\\b
and the hash was found in this week's commits.
Automatic categories:
Source code:
Generated with commits-periodical 0.20 at 2026-08-17 16:52:52+00:00.
This work is supported by Tarsnap Backup Inc.
Alternate version: 2026-07-01 (release)