On 10/19/19 8:38 AM, Stefan Hajnoczi wrote:
> Instead of just passing the vring page frame number, pass the full
> QVirtQueue. This will allow the VIRTIO 1.0 transport to program the
> fine-grained vring address registers in the future.
>
> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
> Reviewed-by: Sergio Lopez <slp@redhat.com>
> Reviewed-by: Thomas Huth <thuth@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
> ---
> tests/libqos/virtio.h | 2 +-
> tests/libqos/virtio-mmio.c | 6 ++++--
> tests/libqos/virtio-pci.c | 6 ++++--
> 3 files changed, 9 insertions(+), 5 deletions(-)
>
> diff --git a/tests/libqos/virtio.h b/tests/libqos/virtio.h
> index 5777683a2a..407d8fc088 100644
> --- a/tests/libqos/virtio.h
> +++ b/tests/libqos/virtio.h
> @@ -80,7 +80,7 @@ struct QVirtioBus {
> uint16_t (*get_queue_size)(QVirtioDevice *d);
>
> /* Set the address of the selected queue */
> - void (*set_queue_address)(QVirtioDevice *d, uint32_t pfn);
> + void (*set_queue_address)(QVirtioDevice *d, QVirtQueue *vq);
>
> /* Setup the virtqueue specified by index */
> QVirtQueue *(*virtqueue_setup)(QVirtioDevice *d, QGuestAllocator *alloc,
> diff --git a/tests/libqos/virtio-mmio.c b/tests/libqos/virtio-mmio.c
> index 4db1f1b8bc..e0a2bd7bc6 100644
> --- a/tests/libqos/virtio-mmio.c
> +++ b/tests/libqos/virtio-mmio.c
> @@ -143,9 +143,11 @@ static uint16_t qvirtio_mmio_get_queue_size(QVirtioDevice *d)
> return (uint16_t)qtest_readl(dev->qts, dev->addr + QVIRTIO_MMIO_QUEUE_NUM_MAX);
> }
>
> -static void qvirtio_mmio_set_queue_address(QVirtioDevice *d, uint32_t pfn)
> +static void qvirtio_mmio_set_queue_address(QVirtioDevice *d, QVirtQueue *vq)
> {
> QVirtioMMIODevice *dev = container_of(d, QVirtioMMIODevice, vdev);
> + uint64_t pfn = vq->desc / dev->page_size;
> +
> qtest_writel(dev->qts, dev->addr + QVIRTIO_MMIO_QUEUE_PFN, pfn);
> }
>
> @@ -179,7 +181,7 @@ static QVirtQueue *qvirtio_mmio_virtqueue_setup(QVirtioDevice *d,
>
> addr = guest_alloc(alloc, qvring_size(vq->size, dev->page_size));
> qvring_init(dev->qts, alloc, vq, addr);
> - qvirtio_mmio_set_queue_address(d, vq->desc / dev->page_size);
> + qvirtio_mmio_set_queue_address(d, vq);
>
> return vq;
> }
> diff --git a/tests/libqos/virtio-pci.c b/tests/libqos/virtio-pci.c
> index 7ecf5d0a52..e4fa318dcc 100644
> --- a/tests/libqos/virtio-pci.c
> +++ b/tests/libqos/virtio-pci.c
> @@ -199,9 +199,11 @@ static uint16_t qvirtio_pci_get_queue_size(QVirtioDevice *d)
> return qpci_io_readw(dev->pdev, dev->bar, VIRTIO_PCI_QUEUE_NUM);
> }
>
> -static void qvirtio_pci_set_queue_address(QVirtioDevice *d, uint32_t pfn)
> +static void qvirtio_pci_set_queue_address(QVirtioDevice *d, QVirtQueue *vq)
> {
> QVirtioPCIDevice *dev = container_of(d, QVirtioPCIDevice, vdev);
> + uint64_t pfn = vq->desc / VIRTIO_PCI_VRING_ALIGN;
> +
> qpci_io_writel(dev->pdev, dev->bar, VIRTIO_PCI_QUEUE_PFN, pfn);
> }
>
> @@ -239,7 +241,7 @@ 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.desc / VIRTIO_PCI_VRING_ALIGN);
> + qvirtio_pci_set_queue_address(d, &vqpci->vq);
>
> return &vqpci->vq;
> }
>