On Wed, Dec 02, 2009 at 07:22:11PM +0100, Juan Quintela wrote: > "Michael S. Tsirkin" <m...@redhat.com> wrote: > > On Wed, Dec 02, 2009 at 01:04:13PM +0100, Juan Quintela wrote: > >> diff --git a/hw/virtio.c b/hw/virtio.c > >> index c136005..b565bf9 100644 > >> --- a/hw/virtio.c > >> +++ b/hw/virtio.c > >> @@ -643,8 +643,10 @@ void virtio_save(VirtIODevice *vdev, QEMUFile *f) > >> qemu_put_be32(f, vdev->vq[i].vring.num); > >> qemu_put_be64(f, vdev->vq[i].pa); > >> qemu_put_be16s(f, &vdev->vq[i].last_avail_idx); > >> - if (vdev->binding->save_queue) > >> - vdev->binding->save_queue(vdev->binding_opaque, i, f); > >> + if (vdev->type == VIRTIO_PCI && > >> + virtio_pci_msix_present(vdev->binding_opaque)) { > >> + qemu_put_be16s(f, &vdev->vq[i].vector); > >> + } > >> } > >> } > >> > > > > I think this will break build on systems without PCI > > because virtio_pci.c is not linked in there. > > Correct? > > It compiles for syborg (it has pci). There are no other users. > > > Making generic virtio.c depend on virtio_pci.c looks > > wrong in any case. We have bindings to > > resolve exactly this dependency problem. > > There is no way that you throw "this" blob to vmstate and it will know > what to do there. if it is needed, we can create an empty > virtio_pci_msix_present() function for !CONFIG_PCI. > > Later, Juan.
That's not the idea. virtio knows nothing about msix etc. This belongs in the binding. If you want to know the number of vectors, please put something like ->get_nvectors in the binding and call that to figure out whether virtio has multivector. -- MST