On Tue, 2011-01-18 at 15:42 +0200, Michael S. Tsirkin wrote: > Fix virtio-pci error handling in the mask notifiers: be careful to undo > exactly what we did so far. > > Reported-by: Alex Williamson <alex.williamson@xxxxxxxxxx> > Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx> > --- Looks right. Acked-by: Alex Williamson <alex.williamson@xxxxxxxxxx> > hw/virtio-pci.c | 12 ++++++++++++ > 1 files changed, 12 insertions(+), 0 deletions(-) > > diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c > index bf3cf4f..dd8887a 100644 > --- a/hw/virtio-pci.c > +++ b/hw/virtio-pci.c > @@ -612,6 +612,9 @@ static int virtio_pci_mask_notifier(PCIDevice *dev, unsigned vector, > return 0; > undo: > while (--n >= 0) { > + if (virtio_queue_vector(vdev, n) != vector) { > + continue; > + } > virtio_pci_mask_vq(dev, vector, virtio_get_queue(vdev, n), !masked); > } > return r; > @@ -681,9 +684,18 @@ static int virtio_pci_set_guest_notifiers(void *opaque, bool assign) > > assign_error: > /* We get here on assignment failure. Recover by undoing for VQs 0 .. n. */ > + if (assign) { > + msix_unset_mask_notifier(&proxy->pci_dev); > + } > + > while (--n >= 0) { > virtio_pci_set_guest_notifier(opaque, n, !assign); > } > + > + if (!assign) { > + msix_set_mask_notifier(&proxy->pci_dev, > + virtio_pci_mask_notifier); > + } > return r; > } > -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html