mirror of
https://github.com/openbsd/src.git
synced 2024-12-21 23:18:00 -08:00
77d0f8231d
virtio 1.x requires that all queue setup, including the queue interrupt vector, is done before setting the queue_enable register to 1. This conflicts with how we do things right now: * We implicitly make queue setup in virtio_alloc_vq(), which is called from the child driver attach functions. This also sets queue_enable=1. * Later, we allocate the interrupts and set the queue interrupt vectors in the second half of the virtio transport attach functions. This is a violation of a MUST from the standard and causes problems with some hypervisors, in particular those that have no virtio 0.9 support, which has no such ordering requirements. To fix this: * Move the interrupt allocation to a new virtio_attach_finish() function. This does all queue setup, including the interrupt vectors. * Don't call virtio_setup_queue() in virtio_alloc_vq() anymore. * We can also move the setting of the DRIVER_OK flag into this function. virtio_attach_finish() must be called before using any virtqueue or writing any virtio config register. While there, * also streamline the attach error handling in all drivers. * skip initially setting sc_config_change to NULL, the softc is initialized to 0. ok jan@ tested by bluhm@ |
||
---|---|---|
.. | ||
acpi | ||
adb | ||
ata | ||
atapiscsi | ||
cardbus | ||
dec | ||
dt | ||
efi | ||
eisa | ||
fdt | ||
gpio | ||
hid | ||
hil | ||
i2c | ||
ic | ||
isa | ||
microcode | ||
mii | ||
ofw | ||
onewire | ||
pci | ||
pckbc | ||
pcmcia | ||
puc | ||
pv | ||
rasops | ||
sbus | ||
sdmmc | ||
spi | ||
sun | ||
tc | ||
usb | ||
videomode | ||
vmm | ||
wscons | ||
wsfont | ||
x86emu | ||
audio_if.h | ||
audio.c | ||
bio.c | ||
biovar.h | ||
clock_subr.h | ||
cninit.c | ||
cons.c | ||
cons.h | ||
diskmap.c | ||
firmload.c | ||
hotplug.c | ||
ipmi.c | ||
ipmi.h | ||
ipmivar.h | ||
kcov.c | ||
kstat.c | ||
ksyms.c | ||
midi_if.h | ||
midi.c | ||
midivar.h | ||
mulaw.c | ||
mulaw.h | ||
radio_if.h | ||
radio.c | ||
radiovar.h | ||
rd.c | ||
rnd.c | ||
rndis.h | ||
softraid_concat.c | ||
softraid_crypto.c | ||
softraid_raid0.c | ||
softraid_raid1.c | ||
softraid_raid1c.c | ||
softraid_raid5.c | ||
softraid_raid6.c | ||
softraid.c | ||
softraidvar.h | ||
spdmem.c | ||
spdmemvar.h | ||
video_if.h | ||
video.c | ||
vnd.c | ||
vndioctl.h | ||
vscsi.c | ||
vscsivar.h |