On Tue, Nov 29, 2016 at 21:54:11 +0000, Valeriy E. Ushakov wrote: > Module Name: src > Committed By: uwe > Date: Tue Nov 29 21:54:11 UTC 2016 > > Modified Files: > src/sys/dev/pci: if_vioif.c > > Log Message: > vioif_start() - do not call virtio_enqueue_abort() after error from > virtio_enqueue_reserve(), as it's already done by the latter, so we > ended up with a kind of "double free" that messed up out free list of > vq_entry's. > > This is even documented in a "typical usage" comment in virtio.c (and > those quotes are not intended to be sarcastic). > > PR 51132 - virtio net device stuck for UDP burst transmission > > > To generate a diff of this commit: > cvs rdiff -u -r1.26 -r1.27 src/sys/dev/pci/if_vioif.c
This seems to be a common problem, as both ld at virtio and viornd drivers do the same mistake too. I'd appreciate if people can fix and test (with simulated failure if necessary). I wonder if http://gnats.netbsd.org/50604 might be caused by this as the first time you run out of vq_entry's, you will end up with a messed up free list. -uwe
