FreeBSD/src 407c7c3sys/compat/linux linux_futex.c

linux/futex: Don't load a timeout when try-locking a mutex

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
DeltaFile
+8-5sys/compat/linux/linux_futex.c
+8-51 files

FreeBSD/src 23e94b0tests/sys/kern procdesc.c

pddupfd(2): add basic test

Reviewed by:    markj
Sponsored by:   The FreeBSD Foundation
MFC after:      1 week
Differential revision:  https://reviews.freebsd.org/D57163
DeltaFile
+74-0tests/sys/kern/procdesc.c
+74-01 files

FreeBSD/src f87f97dsys/kern sys_process.c

kern/sys_process.c: clean up includes

Order them alphabetically.
Remove redundand sys/param.h.

Reviewed by:    markj
Sponsored by:   The FreeBSD Foundation
MFC after:      1 week
DeltaFile
+9-10sys/kern/sys_process.c
+9-101 files

FreeBSD/src 2a41a8flib/libsys Symbol.sys.map, sys/sys procdesc.h

libsys: export pddupfd(2)

Reviewed by:    markj
Tested by:      pho
Sponsored by:   The FreeBSD Foundation
MFC after:      1 week
Differential revision:  https://reviews.freebsd.org/D57163
DeltaFile
+1-0lib/libsys/Symbol.sys.map
+1-0sys/sys/procdesc.h
+2-02 files

FreeBSD/src c20558elib/libsys pdfork.2 Makefile.sys

pdfork.2: document pddupfd()

Reviewed by:    markj
Tested by:      pho
Sponsored by:   The FreeBSD Foundation
MFC after:      1 week
Differential revision:  https://reviews.freebsd.org/D57163
DeltaFile
+53-4lib/libsys/pdfork.2
+2-1lib/libsys/Makefile.sys
+55-52 files

FreeBSD/src 1ad21a6sys/kern sys_procdesc.c kern_descrip.c

kern: add pddupfd(2)

Reviewed by:    markj
Tested by:      pho
Sponsored by:   The FreeBSD Foundation
MFC after:      1 week
Differential revision:  https://reviews.freebsd.org/D57163
DeltaFile
+82-0sys/kern/sys_procdesc.c
+6-2sys/kern/kern_descrip.c
+7-0sys/kern/syscalls.master
+95-23 files

FreeBSD/src 080a7fesys/compat/freebsd32 freebsd32_systrace_args.c freebsd32_syscall.h, sys/kern systrace_args.c

Regen.
DeltaFile
+30-0sys/compat/freebsd32/freebsd32_systrace_args.c
+30-0sys/kern/systrace_args.c
+7-0sys/sys/sysproto.h
+2-1sys/sys/syscall.h
+2-1sys/compat/freebsd32/freebsd32_syscall.h
+2-1sys/sys/syscall.mk
+73-36 files not shown
+81-312 files

FreeBSD/src 046a4efsys/kern subr_capability.c, sys/sys capsicum.h caprights.h

Add CAP_PDDUPFD capability

Reviewed by:    markj
Tested by:      pho
Sponsored by:   The FreeBSD Foundation
MFC after:      1 week
Differential revision:  https://reviews.freebsd.org/D57163
DeltaFile
+4-2sys/sys/capsicum.h
+1-0sys/sys/caprights.h
+1-0sys/kern/subr_capability.c
+6-23 files

FreeBSD/src 193fd49sys/sys capsicum.h

sys/capsicum.h: fix comment for CAP_PDWAIT

Reviewed by:    markj
Sponsored by:   The FreeBSD Foundation
MFC after:      1 week
Differential revision:  https://reviews.freebsd.org/D57163
DeltaFile
+1-6sys/sys/capsicum.h
+1-61 files

FreeBSD/src 77b6adbsys/kern kern_descrip.c sys_generic.c, sys/sys file.h

fget_remote(): return fcaps and fde_flags if requested

Reviewed by:    markj
Tested by:      pho
Sponsored by:   The FreeBSD Foundation
MFC after:      1 week
Differential revision:  https://reviews.freebsd.org/D57163
DeltaFile
+16-3sys/kern/kern_descrip.c
+2-2sys/kern/sys_generic.c
+2-1sys/sys/file.h
+1-1sys/kern/kern_event.c
+21-74 files

FreeBSD/src dfad790sys/kern sys_generic.c kern_sendfile.c, sys/sys syscallsubr.h

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
DeltaFile
+30-11sys/kern/sys_generic.c
+13-12sys/kern/kern_sendfile.c
+2-0sys/sys/syscallsubr.h
+45-233 files

FreeBSD/src 11bd6adsys/compat/linux linux_if.c

linux: switch off interface name translation and schedule its removal

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
DeltaFile
+18-3sys/compat/linux/linux_if.c
+18-31 files

FreeBSD/src 6cfc526sys/dev/acpica acpi_apei.c

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:  9313f6b01485ad9a0b7cc59b459f5714533587c3
DeltaFile
+1-1sys/dev/acpica/acpi_apei.c
+1-11 files

FreeBSD/src 81bab70usr.sbin/acpi Makefile, usr.sbin/acpi/einj einj.c einj.8

einj: Tool to manage APEI error injection

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
DeltaFile
+256-0usr.sbin/acpi/einj/einj.c
+73-0usr.sbin/acpi/einj/einj.8
+4-0usr.sbin/acpi/einj/Makefile
+1-1usr.sbin/acpi/Makefile
+334-14 files

FreeBSD/src bc49842share/man/man4 acpi_einj.4 Makefile, sys/dev/acpica acpi_einj.c acpiio.h

acpi_einj: Support for ACPI error injection

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
DeltaFile
+777-0sys/dev/acpica/acpi_einj.c
+58-0share/man/man4/acpi_einj.4
+39-0sys/dev/acpica/acpiio.h
+7-0sys/modules/acpi/acpi_einj/Makefile
+1-0share/man/man4/Makefile
+1-0sys/modules/acpi/Makefile
+883-06 files

FreeBSD/src 9313f6bsys/conf files, sys/dev/acpica acpi_apei_bus.c acpi_apei.c

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
DeltaFile
+435-0sys/dev/acpica/acpi_apei_bus.c
+39-120sys/dev/acpica/acpi_apei.c
+54-0sys/dev/acpica/apeivar.h
+49-0sys/dev/acpica/apei_if.m
+2-0sys/conf/files
+579-1205 files

FreeBSD/src e1f4a8csys/x86/include apicvar.h, sys/x86/x86 local_apic.c

x86/local_apic.c: Thermal interrupt support: Additional style fixes

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
DeltaFile
+11-11sys/x86/x86/local_apic.c
+4-2sys/x86/include/apicvar.h
+15-132 files

FreeBSD/src 87ba088sys/amd64/amd64 apic_vector.S, sys/x86/include apicvar.h

x86/local_apic.c: Add support for installing a thermal interrupt handler

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
DeltaFile
+72-2sys/x86/x86/local_apic.c
+8-4sys/x86/include/apicvar.h
+9-0sys/amd64/amd64/apic_vector.S
+89-63 files

FreeBSD/src 1ea204bsys/netinet in_pcb.c in_pcb.h

inpcb: make net.inet.ip.portrange port number limiting sysctls unsigned

And make net.inet.ip.portrange.randomized boolean.

Reviewed by:            pouria, tuexen, markj
Differential Revision:  https://reviews.freebsd.org/D57291
DeltaFile
+24-24sys/netinet/in_pcb.c
+9-9sys/netinet/in_pcb.h
+33-332 files

FreeBSD/src 3fdb1b6sys/netinet6 in6_pcb.c

netinet6: further refactor in6_pcbconnect()

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:  90ea8e89d9b751e8b5ae90ef3397883b035788e5
Reviewed by:            pouria
Differential Revision:  https://reviews.freebsd.org/D57987
DeltaFile
+19-15sys/netinet6/in6_pcb.c
+19-151 files

FreeBSD/src 0083a4dtests/sys/kern procdesc.c

tests/procdesc: Add some test cases for pdopenpid()

Reviewed by:    kib
MFC with:       5c32aa785184 ("kern: add pdopenpid(2)")
Differential Revision:  https://reviews.freebsd.org/D58023
DeltaFile
+467-0tests/sys/kern/procdesc.c
+467-01 files

FreeBSD/src 3e3752csys/net if_bridge.c

if_bridge: Remove unused disable parameter in bridge_stop

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 at freebsd.org>
Reviewed by:    kp
Pull-Request:   https://github.com/freebsd/freebsd-src/pull/2290
DeltaFile
+5-5sys/net/if_bridge.c
+5-51 files

FreeBSD/src 07f780csys/dev/mlx5 mlx5_ifc.h driver.h, sys/dev/mlx5/mlx5_core mlx5_srq.c

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 at nvidia.com>
Sponsored by:   Nvidia networking
MFC after:      1 month
DeltaFile
+27-3sys/dev/mlx5/mlx5_core/mlx5_srq.c
+1-1sys/dev/mlx5/mlx5_ifc.h
+1-0sys/dev/mlx5/driver.h
+29-43 files

FreeBSD/src 284e06dsys/dev/mlx5/mlx5_core mlx5_cq.c

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 at nvidia.com>
Sponsored by:   Nvidia networking
MFC after:      1 month
DeltaFile
+2-1sys/dev/mlx5/mlx5_core/mlx5_cq.c
+2-11 files

FreeBSD/src 0e9bbbdsys/dev/mlx5/mlx5_core mlx5_eq.c

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 at nvidia.com>
Sponsored by:   Nvidia networking
MFC after:      1 month
DeltaFile
+1-1sys/dev/mlx5/mlx5_core/mlx5_eq.c
+1-11 files

FreeBSD/src a729866sys/ofed/drivers/infiniband/core ib_uverbs_main.c

ofed/ib_uverbs: release rdma_user_mmap entry ref in rdma_umap_close()

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 at nvidia.com>
Sponsored by:   Nvidia networking
MFC after:      1 month
DeltaFile
+2-0sys/ofed/drivers/infiniband/core/ib_uverbs_main.c
+2-01 files

FreeBSD/src 80902b8sys/dev/mlx5/mlx5_ib mlx5_ib_main.c

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 at nvidia.com>
Sponsored by:   Nvidia networking
MFC after:      1 month
DeltaFile
+10-0sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
+10-01 files

FreeBSD/src 631e57dsys/dev/mlx5/mlx5_ib mlx5_ib_main.c mlx5_ib.h

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 at nvidia.com>
Sponsored by:   Nvidia networking
MFC after:      1 month
DeltaFile
+21-3sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
+11-0sys/dev/mlx5/mlx5_ib/mlx5_ib.h
+32-32 files

FreeBSD/src 412aa22sys/dev/mlx5/mlx5_ib mlx5_ib_main.c

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 at nvidia.com>
Sponsored by:   Nvidia networking
MFC after:      1 month
DeltaFile
+26-6sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
+26-61 files

FreeBSD/src bfe14bfsys/dev/mlx5 mlx5_ifc.h, sys/dev/mlx5/mlx5_core mlx5_eq.c

mlx5: mark completion EQs as a shared resource for DEVX uids

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 at nvidia.com>
Sponsored by:   Nvidia networking
MFC after:      1 month
DeltaFile
+8-0sys/dev/mlx5/mlx5_core/mlx5_eq.c
+7-1sys/dev/mlx5/mlx5_ifc.h
+15-12 files