By removing the redundant num field and including a pointer to where we should notify, it exactly matches the virtio_pci one now. Signed-off-by: Rusty Russell <rusty@xxxxxxxxxxxxxxx> --- drivers/virtio/virtio_pci_legacy.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/drivers/virtio/virtio_pci_legacy.c b/drivers/virtio/virtio_pci_legacy.c index c7aadcb..429f593 100644 --- a/drivers/virtio/virtio_pci_legacy.c +++ b/drivers/virtio/virtio_pci_legacy.c @@ -81,15 +81,15 @@ struct virtio_pci_vq_info /* the actual virtqueue */ struct virtqueue *vq; - /* the number of entries in the queue */ - int num; - /* the virtual address of the ring queue */ void *queue; /* the list node for the virtqueues list */ struct list_head node; + /* Notify area for this vq. */ + u16 __iomem *notify; + /* MSI-X vector (or none) */ unsigned msix_vector; }; @@ -225,11 +225,11 @@ static void vp_reset(struct virtio_device *vdev) /* the notify function used when creating a virt queue */ static void vp_notify(struct virtqueue *vq) { - struct virtio_pci_device *vp_dev = to_vp_device(vq->vdev); + struct virtio_pci_vq_info *info = vq->priv; - /* we write the queue's selector into the notification register to - * signal the other end */ - iowrite16(vq->index, vp_dev->ioaddr + VIRTIO_PCI_LEGACY_QUEUE_NOTIFY); + /* we write the queue selector into the notification register + * to signal the other end */ + iowrite16(vq->index, info->notify); } /* Handle a configuration change: Tell driver if it wants to know. */ @@ -440,7 +440,6 @@ static struct virtqueue *setup_vq(struct virtio_device *vdev, unsigned index, if (!info) return ERR_PTR(-ENOMEM); - info->num = num; info->msix_vector = msix_vec; size = PAGE_ALIGN(vring_size(num, VIRTIO_PCI_LEGACY_VRING_ALIGN)); @@ -455,7 +454,7 @@ static struct virtqueue *setup_vq(struct virtio_device *vdev, unsigned index, vp_dev->ioaddr + VIRTIO_PCI_LEGACY_QUEUE_PFN); /* create the vring */ - vq = vring_new_virtqueue(index, info->num, + vq = vring_new_virtqueue(index, num, VIRTIO_PCI_LEGACY_VRING_ALIGN, vdev, true, info->queue, vp_notify, callback, name); if (!vq) { @@ -465,6 +464,7 @@ static struct virtqueue *setup_vq(struct virtio_device *vdev, unsigned index, vq->priv = info; info->vq = vq; + info->notify = vp_dev->ioaddr + VIRTIO_PCI_LEGACY_QUEUE_NOTIFY; if (msix_vec != VIRTIO_MSI_NO_VECTOR) { iowrite16(msix_vec, @@ -521,7 +521,8 @@ static void vp_del_vq(struct virtqueue *vq) /* Select and deactivate the queue */ iowrite32(0, vp_dev->ioaddr + VIRTIO_PCI_LEGACY_QUEUE_PFN); - size = PAGE_ALIGN(vring_size(info->num, VIRTIO_PCI_LEGACY_VRING_ALIGN)); + size = PAGE_ALIGN(vring_size(vq->vring.num, + VIRTIO_PCI_LEGACY_VRING_ALIGN)); free_pages_exact(info->queue, size); kfree(info); } -- 1.7.10.4 _______________________________________________ Virtualization mailing list Virtualization@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linuxfoundation.org/mailman/listinfo/virtualization