OpenBSD cvs log

created 2020-11-21T18:44:20Z
begin 2020-06-24T00:00:00Z
end 2020-06-25T00:00:00Z
path src/sys
commits 24

date 2020-06-24T00:40:53Z
author dlg
files src/sys/arch/sparc64/dev/pyro.c log diff annotate
message remove ifdeffed out code for redistributing pyro eq interrupts over cpus.

when sparc64 attaches cpus early during boot, it really just allocates
the software state for them (ie, the devices and the cpu_info
structs) and fills them in with information from openfirmware, but
it doesnt actually spin them up in a physical sense until just
before root is mounted. in between that, we now set up pyro with
an msi event queue per cpu, and target the interrupts for those
event queues at the different cpus. if a device generates an msi
interrupt before the cpus are spun up, pyro will fire an interrupt
at those cpus, but cos they're not running yet, they don't handle
the interrupt, and the event queue never gets processed. because
the msi interrupt state is never cleared by the pyro interrupt
handler because the cpu didn't run it, any further msi interrupts
from that pci device don't cause the eq interrupt to fire again,
so it gets stuck.

one approach to dealing with this is to target all the event queues
that pyro sets up at the boot cpu, and once the other cpus are
running we go through and retarget the event queue interrupts at
the different cpus. this means the boot cpu works on the other cpus
behalf until they're running, and it avoids the eq interrupts being
ignored before the other cpus are running.

another approach is to spin the cpus up when they're attached, so
they'll be set up to process early pyro interrupts, even if they
sit at splhigh until after autoconf has run. i had a quick go at
this and it didn't go well.

the approach we went with was to avoid having the device in question
generate interrupts early.

i left the redistributing code in the tree so people might discover
it if needed, or at least see this description of what's happening.

kettenis@ seemed ok with leaving the code in jmatthew@s
pci_intr_establish_cpu commit, but removing it after. this is that
removal.

date 2020-06-24T01:35:29Z
author krw
files src/sys/dev/ic/qlw.c log diff annotate
src/sys/dev/pv/xbf.c log diff annotate
message Nuke some pointless *_dev_probe() and *_dev_free() functions and
set/trust the scsiconf.c probing limits. Same as was done to
vioblk(4).

ok dlg@

date 2020-06-24T01:36:18Z
author krw
files src/sys/arch/sparc64/dev/vdsk.c log diff annotate
message Nuke some pointless *_dev_probe() and *_dev_free() functions and
set/trust the scsiconf.c probing limits. Same as was done to
vioblk(4).

ok dlg@

date 2020-06-24T06:19:06Z
author dlg
files src/sys/dev/pci/if_vmx.c log diff annotate
message actually use pci_intr_establish_cpu with cpus from the intrmap.

sigh, i don't know how i forgot this.

yes jmatthew@

date 2020-06-24T07:46:10Z
author patrick
files src/sys/dev/usb/umass.c log diff annotate
message Apply sc->sc_xfer_flags to control transfers as well. These are used
so that in polled-mode the USB transfers are marked synchronous. In
case that sending commands to the USB mass storage fails, the control
transfers are used to reset the device. Without the synchronous flag,
the STOP command sent by sd(4) on powerdown would wait for completion
indefinitely, possibly hanging the machine.

ok gerhard@

date 2020-06-24T08:52:53Z
author mvs
files src/sys/net/if_pppx.c log diff annotate
message Fix `IFF_RUNNING' bit handling for pppx(4) and pppac(4).

ok mpi@

date 2020-06-24T09:43:20Z
author patrick
files src/sys/dev/usb/xhci.c log diff annotate
message Acknowledge xhci(4) interrupts before calling usb_schedsoftintr().

On powerdown (halt -p), sd(4)'s suspend function tries to powerdown
a USB mass storage using a STOP command. In that case we are already
cold and splhigh(), so that the xhci is supposed to run in polling-
mode.

usb_schedsoftintr() behaves differently when running in polling-mode.
Instead of scheduling a soft interrupt, it immediately dequeues from
the event queue. But dequeueing means touching the xhci registers.

Apparently we need to acknowledge the interrupts before touching those
registers, the hardware doesn't like it otherwise and we will never get
an interrupt status for the second transfer.

ok gerhard@

date 2020-06-24T11:17:21Z
author dlg
files src/sys/dev/pci/if_ixl.c log diff annotate
message get rid of the per device sff lock because we only use the global one.

no functional change

date 2020-06-24T16:07:53Z
author krw
files src/sys/scsi/scsiconf.h log diff annotate
message Adapters that do not appear as a target on the SCSI bus must set
'adapter_target' to a value greater than or equal to
'adapater_buswidth' to allow all possible targets to be probed.

Add SDEV_NO_ADAPTER_TARGET (0xffff), a value guaranteed to
be greater than or equal to the u_int16_t 'adapter_buswidth'.

ok dlg@ as part of a larger diff.

date 2020-06-24T17:24:35Z
author fcambus
files src/sys/dev/wsfont/bold8x16-iso1.h log diff annotate
src/sys/dev/wsfont/bold8x16.h log diff annotate
src/sys/dev/wsfont/gallant12x22.h log diff annotate
message Use C99 initializers in wsdisplay_font struct definitions for
"Boldface", "Boldface.iso1", and "Gallant".

OK mpi@

date 2020-06-24T18:33:50Z
author krw
files src/sys/dev/ic/mfi.c log diff annotate
src/sys/dev/pci/mfii.c log diff annotate
src/sys/dev/pci/mpii.c log diff annotate
src/sys/dev/pci/vmwpvs.c log diff annotate
message Use SDEV_NO_ADAPTER_TARGET instead of -1 to indicate
the adapter is not a target on the bus.

ok dlg@ as part of a larger diff.

date 2020-06-24T18:47:56Z
author krw
files src/sys/arch/sparc64/dev/vdsk.c log diff annotate
message Use SDEV_NO_ADAPTER_TARGET instead of the value of adapter_buswidth to
indicate the adapter is not a target on the bus.

ok dlg@ as part of a larger diff.

date 2020-06-24T18:47:57Z
author krw
files src/sys/dev/ic/gdt_common.c log diff annotate
src/sys/dev/ic/qla.c log diff annotate
src/sys/dev/pv/vioblk.c log diff annotate
src/sys/dev/pv/xbf.c log diff annotate
message Use SDEV_NO_ADAPTER_TARGET instead of the value of adapter_buswidth to
indicate the adapter is not a target on the bus.

ok dlg@ as part of a larger diff.

date 2020-06-24T18:59:30Z
author krw
files src/sys/dev/softraid.c log diff annotate
src/sys/dev/vscsi.c log diff annotate
src/sys/dev/ata/atascsi.c log diff annotate
src/sys/dev/ic/aac.c log diff annotate
src/sys/dev/ic/ami.c log diff annotate
src/sys/dev/ic/cac.c log diff annotate
src/sys/dev/ic/ciss.c log diff annotate
src/sys/dev/ic/twe.c log diff annotate
src/sys/dev/pci/arc.c log diff annotate
src/sys/dev/pci/ips.c log diff annotate
src/sys/dev/pci/mfii.c log diff annotate
src/sys/dev/pci/qle.c log diff annotate
src/sys/dev/pv/hvs.c log diff annotate
src/sys/dev/pv/vioscsi.c log diff annotate
src/sys/scsi/mpath.c log diff annotate
message Use SDEV_NO_ADAPTER_TARGET instead of the value that is being
aassigned to adapter_buswidth to indicate the adapter is not a target
on the bus.

ok dlg@ as part of a larger diff.

date 2020-06-24T19:35:11Z
author krw
files src/sys/dev/atapiscsi/atapiscsi.c log diff annotate
message Use SDEV_NO_ADAPTER_TARGET instead of '7' to indicate the adapter is
not a target on the bus. adapter_buswidth is 2.

ok dlg@ as part of a larger diff.

date 2020-06-24T20:19:14Z
author kettenis
files src/sys/arch/powerpc64/powerpc64/db_trace.c log diff annotate
message Terminate stack trace at userland boundary.

ok gkoehler@

date 2020-06-24T20:49:11Z
author kettenis
files src/sys/arch/powerpc64/include/frame.h log diff annotate
src/sys/arch/powerpc64/powerpc64/locore.S log diff annotate
src/sys/arch/powerpc64/powerpc64/machdep.c log diff annotate
message First stab at making signal handling work.

date 2020-06-24T22:03:40Z
author cheloha
files src/sys/arch/i386/i386/apm.c log diff annotate
src/sys/arch/loongson/dev/apm.c log diff annotate
src/sys/arch/sparc64/sparc64/intr.c log diff annotate
src/sys/crypto/idgen.c log diff annotate
src/sys/dev/pci/drm/include/linux/timekeeping.h log diff annotate
src/sys/dev/pv/vmmci.c log diff annotate
src/sys/dev/pv/vmt.c log diff annotate
message kernel: use gettime(9)/getuptime(9) in lieu of time_second(9)/time_uptime(9)

time_second(9) and time_uptime(9) are widely used in the kernel to
quickly get the system UTC or system uptime as a time_t. However,
time_t is 64-bit everywhere, so it is not generally safe to use them
on 32-bit platforms: you have a split-read problem if your hardware
cannot perform atomic 64-bit reads.

This patch replaces time_second(9) with gettime(9), a safer successor
interface, throughout the kernel. Similarly, time_uptime(9) is replaced
with getuptime(9).

There is a performance cost on 32-bit platforms in exchange for
eliminating the split-read problem: instead of two register reads you
now have a lockless read loop to pull the values from the timehands.
This is really not *too* bad in the grand scheme of things, but
compared to what we were doing before it is several times slower.

There is no performance cost on 64-bit (__LP64__) platforms.

With input from visa@, dlg@, and tedu@.

Several bugs squashed by visa@.

ok kettenis@

date 2020-06-24T22:03:41Z
author cheloha
files src/sys/dev/acpi/acpi.c log diff annotate
src/sys/dev/gpio/gpiodcf.c log diff annotate
src/sys/dev/ic/aac.c log diff annotate
src/sys/dev/ic/ncr53c9x.c log diff annotate
src/sys/dev/ic/wd33c93.c log diff annotate
src/sys/dev/pci/mfii.c log diff annotate
src/sys/dev/usb/udcf.c log diff annotate
src/sys/kern/vfs_sync.c log diff annotate
message kernel: use gettime(9)/getuptime(9) in lieu of time_second(9)/time_uptime(9)

time_second(9) and time_uptime(9) are widely used in the kernel to
quickly get the system UTC or system uptime as a time_t. However,
time_t is 64-bit everywhere, so it is not generally safe to use them
on 32-bit platforms: you have a split-read problem if your hardware
cannot perform atomic 64-bit reads.

This patch replaces time_second(9) with gettime(9), a safer successor
interface, throughout the kernel. Similarly, time_uptime(9) is replaced
with getuptime(9).

There is a performance cost on 32-bit platforms in exchange for
eliminating the split-read problem: instead of two register reads you
now have a lockless read loop to pull the values from the timehands.
This is really not *too* bad in the grand scheme of things, but
compared to what we were doing before it is several times slower.

There is no performance cost on 64-bit (__LP64__) platforms.

With input from visa@, dlg@, and tedu@.

Several bugs squashed by visa@.

ok kettenis@

date 2020-06-24T22:03:42Z
author cheloha
files src/sys/kern/sysv_msg.c log diff annotate
src/sys/kern/sysv_sem.c log diff annotate
src/sys/kern/sysv_shm.c log diff annotate
src/sys/kern/vfs_syscalls.c log diff annotate
src/sys/net/bridgectl.c log diff annotate
src/sys/net/if_bridge.c log diff annotate
src/sys/net/if_pflow.c log diff annotate
src/sys/net/if_ppp.c log diff annotate
src/sys/net/pf.c log diff annotate
src/sys/net/pf_if.c log diff annotate
src/sys/net/pf_ioctl.c log diff annotate
src/sys/net/rtsock.c log diff annotate
message kernel: use gettime(9)/getuptime(9) in lieu of time_second(9)/time_uptime(9)

time_second(9) and time_uptime(9) are widely used in the kernel to
quickly get the system UTC or system uptime as a time_t. However,
time_t is 64-bit everywhere, so it is not generally safe to use them
on 32-bit platforms: you have a split-read problem if your hardware
cannot perform atomic 64-bit reads.

This patch replaces time_second(9) with gettime(9), a safer successor
interface, throughout the kernel. Similarly, time_uptime(9) is replaced
with getuptime(9).

There is a performance cost on 32-bit platforms in exchange for
eliminating the split-read problem: instead of two register reads you
now have a lockless read loop to pull the values from the timehands.
This is really not *too* bad in the grand scheme of things, but
compared to what we were doing before it is several times slower.

There is no performance cost on 64-bit (__LP64__) platforms.

With input from visa@, dlg@, and tedu@.

Several bugs squashed by visa@.

ok kettenis@

date 2020-06-24T22:03:43Z
author cheloha
files src/sys/net/if_bpe.c log diff annotate
src/sys/net/if_pfsync.c log diff annotate
src/sys/net/pf_norm.c log diff annotate
src/sys/net/pf_table.c log diff annotate
src/sys/net/route.c log diff annotate
src/sys/netinet/if_ether.c log diff annotate
src/sys/netinet/ip_ipsp.c log diff annotate
src/sys/netinet/ip_output.c log diff annotate
src/sys/netinet/ip_spd.c log diff annotate
src/sys/netinet/ipsec_input.c log diff annotate
src/sys/netinet/ipsec_output.c log diff annotate
message kernel: use gettime(9)/getuptime(9) in lieu of time_second(9)/time_uptime(9)

time_second(9) and time_uptime(9) are widely used in the kernel to
quickly get the system UTC or system uptime as a time_t. However,
time_t is 64-bit everywhere, so it is not generally safe to use them
on 32-bit platforms: you have a split-read problem if your hardware
cannot perform atomic 64-bit reads.

This patch replaces time_second(9) with gettime(9), a safer successor
interface, throughout the kernel. Similarly, time_uptime(9) is replaced
with getuptime(9).

There is a performance cost on 32-bit platforms in exchange for
eliminating the split-read problem: instead of two register reads you
now have a lockless read loop to pull the values from the timehands.
This is really not *too* bad in the grand scheme of things, but
compared to what we were doing before it is several times slower.

There is no performance cost on 64-bit (__LP64__) platforms.

With input from visa@, dlg@, and tedu@.

Several bugs squashed by visa@.

ok kettenis@

date 2020-06-24T22:03:44Z
author cheloha
files src/sys/netinet6/in6.c log diff annotate
src/sys/netinet6/in6.h log diff annotate
src/sys/netinet6/ip6_forward.c log diff annotate
src/sys/netinet6/ip6_id.c log diff annotate
src/sys/netinet6/ip6_mroute.c log diff annotate
src/sys/netinet6/nd6.c log diff annotate
src/sys/nfs/nfs_subs.c log diff annotate
src/sys/nfs/nfs_vnops.c log diff annotate
src/sys/ufs/ext2fs/ext2fs_alloc.c log diff annotate
src/sys/ufs/ext2fs/ext2fs_vfsops.c log diff annotate
message kernel: use gettime(9)/getuptime(9) in lieu of time_second(9)/time_uptime(9)

time_second(9) and time_uptime(9) are widely used in the kernel to
quickly get the system UTC or system uptime as a time_t. However,
time_t is 64-bit everywhere, so it is not generally safe to use them
on 32-bit platforms: you have a split-read problem if your hardware
cannot perform atomic 64-bit reads.

This patch replaces time_second(9) with gettime(9), a safer successor
interface, throughout the kernel. Similarly, time_uptime(9) is replaced
with getuptime(9).

There is a performance cost on 32-bit platforms in exchange for
eliminating the split-read problem: instead of two register reads you
now have a lockless read loop to pull the values from the timehands.
This is really not *too* bad in the grand scheme of things, but
compared to what we were doing before it is several times slower.

There is no performance cost on 64-bit (__LP64__) platforms.

With input from visa@, dlg@, and tedu@.

Several bugs squashed by visa@.

ok kettenis@

date 2020-06-24T22:03:45Z
author cheloha
files src/sys/ufs/ffs/ffs_vfsops.c log diff annotate
src/sys/ufs/ufs/inode.h log diff annotate
src/sys/ufs/ufs/ufs_quota.c log diff annotate
src/sys/uvm/uvm_meter.c log diff annotate
message kernel: use gettime(9)/getuptime(9) in lieu of time_second(9)/time_uptime(9)

time_second(9) and time_uptime(9) are widely used in the kernel to
quickly get the system UTC or system uptime as a time_t. However,
time_t is 64-bit everywhere, so it is not generally safe to use them
on 32-bit platforms: you have a split-read problem if your hardware
cannot perform atomic 64-bit reads.

This patch replaces time_second(9) with gettime(9), a safer successor
interface, throughout the kernel. Similarly, time_uptime(9) is replaced
with getuptime(9).

There is a performance cost on 32-bit platforms in exchange for
eliminating the split-read problem: instead of two register reads you
now have a lockless read loop to pull the values from the timehands.
This is really not *too* bad in the grand scheme of things, but
compared to what we were doing before it is several times slower.

There is no performance cost on 64-bit (__LP64__) platforms.

With input from visa@, dlg@, and tedu@.

Several bugs squashed by visa@.

ok kettenis@

date 2020-06-24T22:36:31Z
author dlg
files src/sys/dev/pci/if_ixl.c log diff annotate
message set IFQ_SET_MAXLEN to the number of slots on the tx ring, not 1.

this effectively enables tx mitigation on this chip. hrvoje popovski
tested it and discovered it adds about 20% to forwarding performance
on his test machine, and brings it more in line with ix(4) performance.

jmatthew thinks i copied setting it to 1 from myx, but myx resets
it to a proper value later on when it figures out what the chip is
capable of. how embarrassment.