On 06/04/2016 13:11, Cornelia Huck wrote:
>> > +static void virtio_queue_notify_aio_vq(VirtQueue *vq)
>> > +{
>> > + if (vq->vring.desc && vq->handle_aio_output) {
>> > + VirtIODevice *vdev = vq->vdev;
>> > +
>> > + trace_virtio_queue_notify(vdev, vq - vdev->vq, vq);
>> > + vq->handle_aio_output(vdev, vq);
>> > + }
>> > +}
>> > +
> So this avoids reentrancy, but might we miss one notify if
> ->handle_aio_output has already been unset? What am I missing?
Calling the notifier just before unset is handled by using "false,
false" when unsetting the notifier, and only setting
vq->handle_aio_output after the notifier has been unset.
Patch 7 makes things clearer.
Paolo