Fix compiler core dumps on MacOS on Apple Silicon (PR toolchain/60904),
by disabling the use of the broken arm64 asm that comes with the present
version of GMP (we can re-enable it when we upgrade).
beaglebone: fix sysctl hw.clk crashing the kernel
The clock gate driver on the beaglebone black did not provide a clock rate function, but a clock rate function is mandatory. This caused a null pointer dereference when running "sysctl hw.clk".
sun4v: Introduce a SAVE_WINREGS macro for future debugging.
To be used for tracing stability issues in the kernel.
The SAVE_WINREGS macro can be called from relevant places
in the locore.s file to dump the contents of all the register windows.
Function for printing out the contents of the debug area will be
added later.
Import rsu(4), a driver for Realtek's 802.11n FullMAC USB Wi-Fi adapters.
This is a port of the OpenBSD/FreeBSD driver by Damien Bergamini.
The hardware is less common as a discrete adapter than urtwn(4),
perhaps due to being more expensive, or being targeted at embedded
systems with slow CPUs. Adapters pop up on eBay now and then from
manufacturers like Sitecom. I have two such devices from scouring
eBay.
It is a work-in-progress - the device attaches and detaches but is
not yet usable, so not enabled yet. Committing mostly for easier
review and collaboration.
Fix PR kern/60896 queue-length bugs in RAIDframe configuration.
Support queue lengths up to 255 (256 could technically be supported
but this could cause trouble if a user boots an old kernel with a new RAID
set, so we clamp at 255).
Correctly update in-core and on-disk queue lengths when they are changed
via raidctl for an existing set. Don't treat a mismatched queue length
in the on-disk label as an error, avoiding breaking RAID sets in some
reconstruction-to-spare cases.
Fix raidctl create to use the documented default queue length of 100
instead of 1.
am335x, am18xx: make the sdmmc drivers get along with each other
The am18xx and the am335x share a DMA controller used by the sdmmc controller. However, the am335x starts a transfer, then the DMA while the am18xx starts the DMA, then the transfer.
Currently, the DMA driver resets DMA events when starting a transfer, which breaks the am335x because it start the DMA after the transfer, so events can already accumulate. This commit rolls back the change that resets DMA events when starting a transfer.
However, this is now an issue on the am18xx, where due to a hardware quirk, it is possible for DMA events to accumulate on transfers that don't use the DMA. The fix is to always reset the DMA events on transfers with and without DMA.
libc/gen/Makefile.inc Avoid building while cleaning
Don't try and build the user version info for sysctl while
cleaning, the needed tools probably don't exist yet.
Eliminate very low concurrency limit in RAIDframe, improving write throughput as much as 25%.
RAIDframe maintains a per-set freelist of "emergency buffers" to ensure it can perform I/O
under heavy memory pressure. The freelist size was 10, and each I/O request can require
up to 2 buffers in some recovery conditions, so raidPtr->openings was limited to RAIDOUTSTANDING,
which was set to 6 (this was a bug; it should have been 5).
There is no need at all for this limit for RAID 0 or RAID 1 sets; they do not buffer I/O in
the relevant way. Eliminate the allocation entirely in this case; openings is set as the
configured queue length for the RAID set.
For parity RAID sets, we dynamically size two freelists of pre-allocated buffers and the
openings value so that we consume no more than 1% of system RAM per set:
openings = MIN(maxQueueDepth, MAX(RAIDOUTSTANDING, (1% of physmem), bytes_per_opening))
stripe buffers: 2 * openings
I/O buffers: openings * max_stripes_per_bp * numCol
RAIDOUTSTANDING (now used as a floor) remains 6.
[16 lines not shown]
cnmagic(9): minor tweaks
Call it a "magic sequence" (not "magic key sequence") - there are no
"keys" in the serial input and wscons(4) does not even use cnmagic(9),
so. Mention that latter fact in CAVEATS.
Document CNC_BREAK.
cpufreq_dt: communicate full voltage range to regulators
In the last commit, fdtbus_regulator_set_voltage got changed to accept the voltage as a target, min, max triple from a min, max pair. This commit switched the cpufreq code over to sending the full voltage triple to regulators if it is available in the device tree.
This fixes PR 60671
fdtbus_regulator_set_voltage_triple: support target/min/max
Some dt-bindings specify voltages as target/min/max, while the NetBSD fdt subsystem only supported min/max.
This PR introduces fdtbus_regulator_set_voltage_triple that tries to set the voltage to an optimal value before falling back to the full range.
See PR 60671
sun4v: Try to use the hypervisor interrupt api version 2 if version 3 fails.
Version 3 systems are working ok - trying to fix the setup when a version 2
system is used.
Not tested on yet.
riscv: Make comapt32 compile.
Note: I doubt it will work -- cpu_getmcontext32 and cpu_setmcontext32
appear to be missing save/restore of most registers, so signal
delivery will probably trash them. Also not sure whether to use
l->l_private or tf->tf_reg[_REG_TP] here (or _X_TP). TBD!
PR port-riscv/60889: riscv64: compat_netbsd32 is busticated
sys/conf/files: riscv has no EXEC_AOUT either even for compat32.
Do the same ifdef dance as for mips and arm.
Fixes:
> /home/riastradh/netbsd/current/src/sys/compat/netbsd32/netbsd32_exec_aout.c: In function 'exec_netbsd32_makecmds':
> /home/riastradh/netbsd/current/src/sys/compat/netbsd32/netbsd32_exec_aout.c:119:15: error: 'NETBSD32_MID_MACHINE' undeclared (first use in this function)
> 119 | case (NETBSD32_MID_MACHINE << 16) | ZMAGIC:
> | ^~~~~~~~~~~~~~~~~~~~
PR port-riscv/60889: riscv64: compat_netbsd32 is busticated
printf(3): try to improve description of positional arguments
Don't use "field" to refer to positional argument specification in
`%n$`, as the term is already used for the output field (as in "field
width", etc).
Reword the `*n$` paragraph that first refers to `n` as "one or more
decimal digits" and contrasts it with the "digit string" that actually
refers to an explicitly specified width or precision far away on the
previous page/screen (!). This is very unobvious, especially when you
read the page out of order, as one often does.
The result of this (intentionally) localized edits is still pretty
poor overall, but at least it fixes, hopefully, the two most glaring
problems. Further editorial help is welcome.
drm: Nix `highmem' memory accounting.
This led to confusing dmesg output when the kernel map size was
enlarged between 9 and 10, probably by this commit:
> Module Name: src
> Committed By: chs
> Date: Wed Aug 3 01:52:11 UTC 2022
>
> Modified Files:
> src/sys/uvm: uvm_km.c
>
> Log Message:
> for platforms which define NKMEMPAGES_MAX_UNLIMITED, set nkmempages
> high enough to allow the kernel to map all of RAM into kmem,
> so that free physical pages rather than kernel virtual space is
> the limiting factor in allocating kernel memory. this gives ZFS
> more flexibility in tuning how much memory to use for its ARC cache.
>
[13 lines not shown]
Make mpl115a2 return correct values.
Do not byteswap calibration coefficients - apparently, this was always
wrong. Properly wait before reading. Calculate in 64-bit arithmetic.
Use ENVSYS_PRESSURE.