Stefan Hajnoczi <[email protected]> writes: > The VIRTIO 1.0 code will need to perform additional steps but it will > reuse the common virtqueue setup/cleanup code. Make these functions > public. > > Make sure to invoke callbacks via QVirtioBus instead of directly calling > the virtio-pci Legacy versions of these functions. > > Signed-off-by: Stefan Hajnoczi <[email protected]> > --- > tests/libqos/virtio-pci.h | 8 ++++++++ > tests/libqos/virtio-pci.c | 19 ++++++++++--------- > 2 files changed, 18 insertions(+), 9 deletions(-) > > diff --git a/tests/libqos/virtio-pci.h b/tests/libqos/virtio-pci.h > index 443e53affc..b620c30451 100644 > --- a/tests/libqos/virtio-pci.h > +++ b/tests/libqos/virtio-pci.h > @@ -63,4 +63,12 @@ void > qvirtio_pci_set_msix_configuration_vector(QVirtioPCIDevice *d, > QGuestAllocator *alloc, uint16_t > entry); > void qvirtqueue_pci_msix_setup(QVirtioPCIDevice *d, QVirtQueuePCI *vqpci, > QGuestAllocator *alloc, uint16_t > entry); > + > +/* Used by Legacy and Modern virtio-pci code */ > +QVirtQueue *qvirtio_pci_virtqueue_setup_common(QVirtioDevice *d, > + QGuestAllocator *alloc, > + uint16_t index); > +void qvirtio_pci_virtqueue_cleanup_common(QVirtQueue *vq, > + QGuestAllocator *alloc); > + > #endif > diff --git a/tests/libqos/virtio-pci.c b/tests/libqos/virtio-pci.c > index 651f6dbfc6..3fb4af4016 100644 > --- a/tests/libqos/virtio-pci.c > +++ b/tests/libqos/virtio-pci.c > @@ -198,8 +198,9 @@ static void qvirtio_pci_set_queue_address(QVirtioDevice > *d, QVirtQueue *vq) > qpci_io_writel(dev->pdev, dev->bar, VIRTIO_PCI_QUEUE_PFN, pfn); > } > > -static QVirtQueue *qvirtio_pci_virtqueue_setup(QVirtioDevice *d, > - QGuestAllocator *alloc, uint16_t > index) > +QVirtQueue *qvirtio_pci_virtqueue_setup_common(QVirtioDevice *d, > + QGuestAllocator *alloc, > + uint16_t index) > { > uint32_t feat; > uint64_t addr; > @@ -207,11 +208,11 @@ static QVirtQueue > *qvirtio_pci_virtqueue_setup(QVirtioDevice *d, > QVirtioPCIDevice *qvpcidev = container_of(d, QVirtioPCIDevice, vdev); > > vqpci = g_malloc0(sizeof(*vqpci)); > - feat = qvirtio_pci_get_guest_features(d); > + feat = d->bus->get_guest_features(d); > > - qvirtio_pci_queue_select(d, index); > + d->bus->queue_select(d, index); > vqpci->vq.index = index; > - vqpci->vq.size = qvirtio_pci_get_queue_size(d); > + vqpci->vq.size = d->bus->get_queue_size(d); > vqpci->vq.free_head = 0; > vqpci->vq.num_free = vqpci->vq.size; > vqpci->vq.align = VIRTIO_PCI_VRING_ALIGN; > @@ -231,12 +232,12 @@ static QVirtQueue > *qvirtio_pci_virtqueue_setup(QVirtioDevice *d, > addr = guest_alloc(alloc, qvring_size(vqpci->vq.size, > VIRTIO_PCI_VRING_ALIGN)); > qvring_init(qvpcidev->pdev->bus->qts, alloc, &vqpci->vq, addr); > - qvirtio_pci_set_queue_address(d, &vqpci->vq); > + d->bus->set_queue_address(d, &vqpci->vq); > > return &vqpci->vq; > } > > -static void qvirtio_pci_virtqueue_cleanup(QVirtQueue *vq, > +void qvirtio_pci_virtqueue_cleanup_common(QVirtQueue *vq, > QGuestAllocator *alloc) > { > QVirtQueuePCI *vqpci = container_of(vq, QVirtQueuePCI, vq); > @@ -266,8 +267,8 @@ static const QVirtioBus qvirtio_pci_legacy = { > .queue_select = qvirtio_pci_queue_select, > .get_queue_size = qvirtio_pci_get_queue_size, > .set_queue_address = qvirtio_pci_set_queue_address, > - .virtqueue_setup = qvirtio_pci_virtqueue_setup, > - .virtqueue_cleanup = qvirtio_pci_virtqueue_cleanup, > + .virtqueue_setup = qvirtio_pci_virtqueue_setup_common, > + .virtqueue_cleanup = qvirtio_pci_virtqueue_cleanup_common, > .virtqueue_kick = qvirtio_pci_virtqueue_kick, > };
Reviewed-by: Sergio Lopez <[email protected]>
signature.asc
Description: PGP signature
