Re: [PATCH v2 5/7] libqos: expose common virtqueue setup/cleanup functions
On 11/10/2019 10.56, Stefan Hajnoczi wrote: > 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 > --- > tests/libqos/virtio-pci.h | 8 > tests/libqos/virtio-pci.c | 19 ++- > 2 files changed, 18 insertions(+), 9 deletions(-) Reviewed-by: Thomas Huth
Re: [PATCH v2 5/7] libqos: expose common virtqueue setup/cleanup functions
Stefan Hajnoczi 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 > --- > 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, >vq, addr); > -qvirtio_pci_set_queue_address(d, >vq); > +d->bus->set_queue_address(d, >vq); > > return >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 signature.asc Description: PGP signature
[PATCH v2 5/7] libqos: expose common virtqueue setup/cleanup functions
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 --- 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, >vq, addr); -qvirtio_pci_set_queue_address(d, >vq); +d->bus->set_queue_address(d, >vq); return >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, }; -- 2.21.0