On 01/12/17 12:46, Stefan Hajnoczi wrote: > The virtio_queue_set_notification() nesting introduced for AioContext polling > raised an assertion with virtio-net (even in non-polling mode). Converting > virtio-net and virtio-crypto to use virtio_queue_set_notification() in a > nesting fashion would be invasive and isn't worth it. > > Patch 1 contains the revert to resolve the bug that Doug noticed. > > Patch 2 is a less efficient but safe alternative. > > Stefan Hajnoczi (2): > Revert "virtio: turn vq->notification into a nested counter" > virtio: disable notifications again after poll succeeded > > hw/virtio/virtio.c | 21 +++++++++------------ > 1 file changed, 9 insertions(+), 12 deletions(-) >
I confirm that with current master (2ccede18bd24fce5db83fef3674563a1f256717b), my TCG aarch64 guest, running ArmVirtQemu UEFI firmware, crashes with the following assertion failure: qemu-system-aarch64: .../hw/virtio/virtio.c:215: virtio_queue_set_notification: Assertion `vq->notification_disabled > 0' failed. This guest does not use iPXE's UEFI SNP driver for virtio-net, instead it uses OVMF's own, built-in VirtioNetDxe driver. With both patches applied, everything works fine. The assertion failure is gone, and I could ping a public host from the UEFI shell command line. Tested-by: Laszlo Ersek <ler...@redhat.com> I'm unsure if my use case covers polling mode, so it might be prudent to add the tag to patch #1 only. I set the breakpoint that you gave Doug (using "virsh start --paused" + attaching GDB to the running QEMU process, before the firmware got any chance to execute), and the breakpoint (virtio_queue_host_notifier_aio_poll_begin) didn't fire during the test. Thanks! Laszlo