FreeBSD/src deddfa3sys/kern sched_4bsd.c

sched_4bsd: Allocate runqueues only for present CPUs

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

    [11 lines not shown]
DeltaFile
+30-27sys/kern/sched_4bsd.c
+30-271 files

FreeBSD/src 26ef666sys/kern sched_4bsd.c

sched_4bsd: Rename the global runqueue

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.]


    [5 lines not shown]
DeltaFile
+16-16sys/kern/sched_4bsd.c
+16-161 files

FreeBSD/src 5217b4asys/kern sched_4bsd.c

sched_4bsd: Remove obsolete SMP scaling for ticks per priority level

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

    [6 lines not shown]
DeltaFile
+0-4sys/kern/sched_4bsd.c
+0-41 files

FreeBSD/src e8dec00sys/kern sched_4bsd.c

sched_4bsd: Fix conflating priority of differently-niced CPU-bound threads

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

    [20 lines not shown]
DeltaFile
+7-5sys/kern/sched_4bsd.c
+7-51 files

FreeBSD/src 94b21dasys/fs/nfs nfs.h, sys/fs/nfsserver nfs_nfsdkrpc.c nfs_nfsdport.c

nfsd: Optionally enable use of M_EXTPG mbufs for read replies

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.)

(cherry picked from commit d516e52373e1768ea84bf1ca220671a44f413abe)
DeltaFile
+17-1sys/fs/nfsserver/nfs_nfsdkrpc.c
+10-6sys/fs/nfsserver/nfs_nfsdport.c
+5-2sys/fs/nfsserver/nfs_nfsdserv.c
+1-0sys/rpc/svc.h
+1-0sys/fs/nfs/nfs.h
+34-95 files

FreeBSD/src e7efe2fshare/man/man4 firewire.4

firewire: remove deprecation notice from manual page

Reviewed by:    ziaee, imp
Differential Revision:  https://reviews.freebsd.org/D58267
DeltaFile
+0-5share/man/man4/firewire.4
+0-51 files

FreeBSD/src dd56711sys/dev/firewire firewire.c fwohci.c

firewire: replace magic numbers with named constants

No functional change.

Reviewed by:    adrian
Differential Revision:  https://reviews.freebsd.org/D58311
DeltaFile
+38-19sys/dev/firewire/firewire.c
+25-15sys/dev/firewire/fwohci.c
+13-7sys/dev/firewire/if_fwip.c
+13-2sys/dev/firewire/firewirereg.h
+7-3sys/dev/firewire/fwohci_pci.c
+4-3sys/dev/firewire/fwisound.h
+100-496 files not shown
+112-5812 files

FreeBSD/src 8a76565sys/dev/firewire fwohci.c firewire.c

firewire: remove dead code across the subsystem

Reviewed by:    adrian
Differential Revision:  https://reviews.freebsd.org/D58310
DeltaFile
+0-158sys/dev/firewire/fwohci.c
+2-118sys/dev/firewire/firewire.c
+0-54sys/dev/firewire/sbp.c
+0-33sys/dev/firewire/sbp_targ.c
+0-32sys/dev/firewire/if_fwe.c
+0-11sys/dev/firewire/if_fwip.c
+2-4063 files not shown
+3-4289 files

FreeBSD/src 23ea903sys/dev/firewire firewire.c

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
DeltaFile
+4-3sys/dev/firewire/firewire.c
+4-31 files

FreeBSD/src 5b7449asys/dev/firewire firewire.c

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
DeltaFile
+3-1sys/dev/firewire/firewire.c
+3-11 files

FreeBSD/src d325993sys/dev/firewire firewire.c fwcrom.c

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
DeltaFile
+14-1sys/dev/firewire/firewire.c
+7-0sys/dev/firewire/fwcrom.c
+5-0sys/dev/firewire/fwisound.c
+5-0sys/dev/firewire/fwcam.c
+1-0sys/dev/firewire/iec13213.h
+32-15 files

FreeBSD/src 4a4bcdcsys/dev/bwi if_bwi.c, sys/dev/bwn if_bwn.c

net80211: update drivers to allocate sequence numbers in the raw path

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:

    [6 lines not shown]
DeltaFile
+15-1sys/dev/bwi/if_bwi.c
+8-1sys/dev/bwn/if_bwn.c
+2-0sys/dev/ral/rt2560.c
+2-0sys/dev/ral/rt2860.c
+2-0sys/dev/usb/wlan/if_ural.c
+29-25 files

FreeBSD/src 1d89845share/man/man4 aq.4

aq(4): Document the Atlantic 2 (AQC113/114/115/116) devices

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 at spun.io>
Differential Revision:  https://reviews.freebsd.org/D58144
DeltaFile
+37-8share/man/man4/aq.4
+37-81 files

FreeBSD/src c3e38c0usr.sbin/vidcontrol vidcontrol.c

vidcontrol: Disallow -i mode with vt(4)

vt(4) does not (currently) support changing the video mode.  Report that
-i mode is not supported rather than printing an empty list.

PR:             207411
Sponsored by:   The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D58163
DeltaFile
+5-2usr.sbin/vidcontrol/vidcontrol.c
+5-21 files

FreeBSD/src 29d1a32sys/kern vfs_lookup.c vfs_syscalls.c

lookup: do not return vp_crossmp as dvp for mount over the reg file

Return the covered vnode instead.

Tested by:      pho
Sponsored by:   The FreeBSD Foundation
MFC after:      1 week
Differential revision:  https://reviews.freebsd.org/D58191
DeltaFile
+30-4sys/kern/vfs_lookup.c
+8-1sys/kern/vfs_syscalls.c
+38-52 files

FreeBSD/src 6ee5895bin/sh sh.1

sh.1: Document which features are non-POSIX

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
DeltaFile
+63-16bin/sh/sh.1
+63-161 files

FreeBSD/src 6e93f5esys/amd64/amd64 trap.c exception.S

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
DeltaFile
+558-0sys/amd64/amd64/trap.c
+282-0sys/amd64/amd64/exception.S
+73-31sys/amd64/amd64/machdep.c
+55-21sys/amd64/amd64/mp_machdep.c
+68-5sys/amd64/amd64/cpu_switch.S
+43-0sys/amd64/amd64/initcpu.c
+1,079-5716 files not shown
+1,155-8422 files

FreeBSD/src 0e5b138sys/x86/include apicvar.h, sys/x86/xen xen_arch_intr.c

x86 xen: provide the prototype for xen_arch_intr_handle_upcall() in x86/apicvar.h

Sponsored by:   The FreeBSD Foundation
MFC after:      1 week
Differential revision:  https://reviews.freebsd.org/D56005
DeltaFile
+2-0sys/x86/include/apicvar.h
+0-1sys/x86/xen/xen_arch_intr.c
+2-12 files

FreeBSD/src e4a457dsys/net if_geneve.c

if_geneve: Fix mbuf leak on ip_ecn_egress

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
DeltaFile
+5-16sys/net/if_geneve.c
+5-161 files

FreeBSD/src 14d1ad2sys/compat/linuxkpi/common/include/linux pm_runtime.h

linuxkpi: Add pm_runtime_resume_and_get

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

(cherry picked from commit 7e1245aafeece1a56af292c2652c6b835ccb6f10)
DeltaFile
+6-0sys/compat/linuxkpi/common/include/linux/pm_runtime.h
+6-01 files

FreeBSD/src b273481usr.bin/vtfontcvt vtfontcvt.c

vtfontcvt: Avoid dead store in add_char

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
DeltaFile
+4-4usr.bin/vtfontcvt/vtfontcvt.c
+4-41 files

FreeBSD/src 009e83bsys/dev/mlx5/mlx5_ib mlx5_ib_devx.c

mlx5ib: use the eventfd_ctx API for DEVX event subscriptions

(cherry picked from commit 40cc9de950f7e6ba2049467fa05c46b9161f49a5)
DeltaFile
+12-10sys/dev/mlx5/mlx5_ib/mlx5_ib_devx.c
+12-101 files

FreeBSD/src fab43c0sys/dev/mlx5/mlx5_ib mlx5_ib_devx.c

mlx5ib: initialize DEVX subscription state before the eventfd fdget()

(cherry picked from commit 9c7629d69cebafba3eea6787d3bfc100d60c3b19)
DeltaFile
+6-7sys/dev/mlx5/mlx5_ib/mlx5_ib_devx.c
+6-71 files

FreeBSD/src 7b0e4a7sys/dev/mlx5/mlx5_core mlx5_eq.c

mlx5: pass the full EQE to the DEVX event notifier

(cherry picked from commit 0e9bbbdcbea8edc6ad259a9428234b494014bc4e)
DeltaFile
+1-1sys/dev/mlx5/mlx5_core/mlx5_eq.c
+1-11 files

FreeBSD/src 86cdda1sys/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

(cherry picked from commit 07f780cb7f8eab1aa6e84d3ed6785144d0d3cc47)
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 012c852sys/dev/mlx5/mlx5_core mlx5_cq.c

mlx5: guard against a NULL CQ event handler in mlx5_cq_event()

(cherry picked from commit 284e06dec78ffbbf8919dc0aa11073ecabba7176)
DeltaFile
+2-1sys/dev/mlx5/mlx5_core/mlx5_cq.c
+2-11 files

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

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

(cherry picked from commit a7298669cd53a9fc8446c53db6872bc2f64c508d)
DeltaFile
+2-0sys/ofed/drivers/infiniband/core/ib_uverbs_main.c
+2-01 files

FreeBSD/src 2c713c3sys/dev/mlx5/mlx5_ib mlx5_ib_main.c

mlx5ib: advertise write-combining support for dynamic BlueFlame UARs

(cherry picked from commit 80902b8b7cd409ade11048dc78212e7d43475c65)
DeltaFile
+10-0sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
+10-01 files

FreeBSD/src c122d64sys/dev/mlx5/mlx5_ib mlx5_ib_main.c

mlx5ib: allocate IB queue counters as a shared resource

(cherry picked from commit 412aa220aeb920dcbc0f2b3effbbb51ad41c7fc3)
DeltaFile
+26-6sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
+26-61 files

FreeBSD/src c15fa82sys/dev/mlx5/mlx5_ib mlx5_ib_main.c mlx5_ib.h

mlx5ib: encode dynamic UAR mmap offsets in the reserved command range

(cherry picked from commit 631e57d54c137e9393c47075db09a6c7fb84c6ed)
DeltaFile
+21-3sys/dev/mlx5/mlx5_ib/mlx5_ib_main.c
+11-0sys/dev/mlx5/mlx5_ib/mlx5_ib.h
+32-32 files