OpenBSD cvs log

created 2024-01-23T22:09:54Z
begin 2024-01-15T00:00:00Z
end 2024-01-16T00:00:00Z
path src/sys
commits 7

date 2024-01-15T01:15:37Z
author cheloha
files src/sys/kern/kern_clockintr.c log diff annotate
src/sys/sys/clockintr.h log diff annotate
message clockintr: move CLST_IGNORE_REQUESTS from cl_flags to cq_flags

In the near future, we will add support for destroying clockintr
objects. When this happens, it will no longer be safe to dereference
the pointer to the expired clockintr during the dispatch loop in
clockintr_dispatch() after reentering cq_mtx. This means we will not
be able to safely check for the CLST_IGNORE_REQUESTS flag.

So replace the CLST_IGNORE_REQUESTS flag in cl_flags with the
CQ_IGNORE_REQUESTS flag in cq_flags. The semantics are the same.
Both cl_flags and cq_flags are protected by cq_mtx.

Note that we cannot move the CLST_IGNORE_REQUESTS flag to cr_flags in
struct clockrequest: that member is owned by the dispatching CPU and
is not mutated with atomic operations.

date 2024-01-15T02:35:23Z
author dv
files src/sys/dev/fdt/virtio_mmio.c log diff annotate
src/sys/dev/pci/virtio_pci.c log diff annotate
message vio(4): poll device status after issuing device reset.

The virtio spec says a driver "should" wait for a device to report
a clear device status after performing a reset. In some hypervisors,
this doesn't matter as the vcpu's io instruction emulation and
virtio network device emulation happen serially in the same thread.
In hypervisors like vmd(8), device reset happens asynchronously and
the driver can't assume the device is ready.

This race condition results in mbuf pool corruption, causing panics.

Bug reported and reproduced by bluhm@. Root cause found and diff
from sf@. ok dv@ and committed on sf@'s behalf with his permission.

date 2024-01-15T08:56:45Z
author jmatthew
files src/sys/dev/pci/if_bnxt.c log diff annotate
message The maximum number of ring slots a tx packet can use is 32, which is
indicated by writing 0 to the 5 bit 'BD count' field in the first slot.
Accordingly, mask the value we're writing there.

Each packet uses one slot for offload information and then one per DMA
segment, which means the maximum number of DMA segments must be 31 rather
than 32. Trying to send a packet using 33 slots makes the nic firmware
very upset.

ok dlg@

date 2024-01-15T11:58:45Z
author kettenis
files src/sys/arch/arm64/arm64/cpu.c log diff annotate
src/sys/arch/arm64/include/cpu.h log diff annotate
message We can't call kstat_create(9) when bringing up the secondary CPUs as it
uses an rwlock and curproc isn't initialized yet for these CPUs at this
point. As a result we hit a "locking against myself" panic if there is
any lock contention.

Fix this by adding a new ci_midr member to struct cpu_info which gets
initialized when we identify the CPUs and use that to attach the kstat
stuff.

ok tobhe@, dlg@

date 2024-01-15T13:27:20Z
author kettenis
files src/sys/arch/arm64/dev/aplhidev.c log diff annotate
message Fetch touchpad dimensions from firmware instead of hardcoding the values
for the original 13" M1 MacBook.

ok mlarkin@

date 2024-01-15T15:47:37Z
author mvs
files src/sys/kern/kern_exit.c log diff annotate
src/sys/kern/kern_fork.c log diff annotate
src/sys/kern/kern_proc.c log diff annotate
src/sys/kern/kern_sysctl.c log diff annotate
src/sys/sys/proc.h log diff annotate
message Introduce priterator(), the `ps_list' iterator. Some of `allprocess'
list walkthroughs have context switch within, so make exit1() wait
until the last reference released.

Reported-by: [email protected]

ok bluhm claudio

date 2024-01-15T16:57:31Z
author kettenis
files src/sys/arch/arm64/dev/rtkit.c log diff annotate
message Add support for bringing up RTKit while !cold.

ok tobhe@