--- a/hw/virtio.c 2012-09-18 17:10:48.000000000 +0200 +++ b/hw/virtio.c 2012-10-08 11:08:06.038031336 +0200 @@ -19,7 +19,9 @@ #include "qemu-barrier.h" /* The alignment to use between consumer and producer parts of vring. - * x86 pagesize again. */ + * x86 pagesize again. This is the default, used by transports like PCI + * which don't provide a means for the guest to tell the host the alignment. + */ #define VIRTIO_PCI_VRING_ALIGN 4096 typedef struct VRingDesc @@ -53,6 +55,7 @@ typedef struct VRing { unsigned int num; + unsigned int align; target_phys_addr_t desc; target_phys_addr_t avail; target_phys_addr_t used; @@ -90,7 +93,7 @@ vq->vring.avail = pa + vq->vring.num * sizeof(VRingDesc); vq->vring.used = vring_align(vq->vring.avail + offsetof(VRingAvail, ring[vq->vring.num]), - VIRTIO_PCI_VRING_ALIGN); + vq->vring.align); } static inline uint64_t vring_desc_addr(target_phys_addr_t desc_pa, int i) @@ -640,6 +643,12 @@ return vq - &vdev->vq[0]; } +void virtio_queue_set_align(VirtIODevice *vdev, int n, int align) +{ + vdev->vq[n].vring.align = align; + virtqueue_init(&vdev->vq[n]); +} + void virtio_queue_notify_vq(VirtQueue *vq) { if (vq->vring.desc) { @@ -680,6 +689,7 @@ abort(); vdev->vq[i].vring.num = queue_size; + vdev->vq[i].vring.align = VIRTIO_PCI_VRING_ALIGN; vdev->vq[i].handle_output = handle_output; return &vdev->vq[i]; --- a/hw/virtio.h 2012-09-18 17:10:48.000000000 +0200 +++ b/hw/virtio.h 2012-10-08 11:08:06.039031295 +0200 @@ -178,6 +178,7 @@ void virtio_queue_set_addr(VirtIODevice *vdev, int n, target_phys_addr_t addr); target_phys_addr_t virtio_queue_get_addr(VirtIODevice *vdev, int n); int virtio_queue_get_num(VirtIODevice *vdev, int n); +void virtio_queue_set_align(VirtIODevice *vdev, int n, int align); void virtio_queue_notify(VirtIODevice *vdev, int n); uint16_t virtio_queue_vector(VirtIODevice *vdev, int n); void virtio_queue_set_vector(VirtIODevice *vdev, int n, uint16_t vector); _______________________________________________ kvmarm mailing list kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/cucslists/listinfo/kvmarm