tighten up the tx start/completion handling of the producer and consumer.
authordlg <dlg@openbsd.org>
Sun, 30 Jul 2023 01:41:05 +0000 (01:41 +0000)
committerdlg <dlg@openbsd.org>
Sun, 30 Jul 2023 01:41:05 +0000 (01:41 +0000)
commit535a77a4f646e145c89e5deeea20ceaceaf9a8eb
tree0f7669864b40ab2ca8d8b1e4fb272a83896fe8e8
parent7678612e0cb2422e6a5b1e72bc670f52f7309513
tighten up the tx start/completion handling of the producer and consumer.

the hypervisor obvious snoops the descriptor rings like crazy, and
it can run and complete transmit of packets as soon as the ownership
bit is set on the descriptor and before the txh register is updated
with the producer index. txintr would only process tx completions
if the producer and consumer indexes the driver maintains were
different, but would then go and pop every packet the hardware said
was done off the ring.

this changes txintr so it will only iterate over packets between
the driver consumer and producer indexes. also, have the start code
update the producer before flipping the ownership bit in the ring.
this keeps the start and intr code in sync.
sys/dev/pci/if_vmx.c