Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

virtio: hand virtio ring alignment as argument to vring_new_virtqueue

This allows each virtio user to hand in the alignment appropriate to
their virtio_ring structures.

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
Acked-by: Christian Borntraeger <borntraeger@de.ibm.com>

+9 -6
+2 -2
drivers/lguest/lguest_device.c
··· 259 259 260 260 /* OK, tell virtio_ring.c to set up a virtqueue now we know its size 261 261 * and we've got a pointer to its pages. */ 262 - vq = vring_new_virtqueue(lvq->config.num, vdev, lvq->pages, 263 - lg_notify, callback); 262 + vq = vring_new_virtqueue(lvq->config.num, LGUEST_VRING_ALIGN, 263 + vdev, lvq->pages, lg_notify, callback); 264 264 if (!vq) { 265 265 err = -ENOMEM; 266 266 goto unmap;
+2 -1
drivers/s390/kvm/kvm_virtio.c
··· 193 193 if (err) 194 194 goto out; 195 195 196 - vq = vring_new_virtqueue(config->num, vdev, (void *) config->address, 196 + vq = vring_new_virtqueue(config->num, KVM_S390_VIRTIO_RING_ALIGN, 197 + vdev, (void *) config->address, 197 198 kvm_notify, callback); 198 199 if (!vq) { 199 200 err = -ENOMEM;
+2 -2
drivers/virtio/virtio_pci.c
··· 249 249 vp_dev->ioaddr + VIRTIO_PCI_QUEUE_PFN); 250 250 251 251 /* create the vring */ 252 - vq = vring_new_virtqueue(info->num, vdev, info->queue, 253 - vp_notify, callback); 252 + vq = vring_new_virtqueue(info->num, VIRTIO_PCI_VRING_ALIGN, 253 + vdev, info->queue, vp_notify, callback); 254 254 if (!vq) { 255 255 err = -ENOMEM; 256 256 goto out_activate_queue;
+2 -1
drivers/virtio/virtio_ring.c
··· 274 274 }; 275 275 276 276 struct virtqueue *vring_new_virtqueue(unsigned int num, 277 + unsigned int vring_align, 277 278 struct virtio_device *vdev, 278 279 void *pages, 279 280 void (*notify)(struct virtqueue *), ··· 293 292 if (!vq) 294 293 return NULL; 295 294 296 - vring_init(&vq->vring, num, pages, PAGE_SIZE); 295 + vring_init(&vq->vring, num, pages, vring_align); 297 296 vq->vq.callback = callback; 298 297 vq->vq.vdev = vdev; 299 298 vq->vq.vq_ops = &vring_vq_ops;
+1
include/linux/virtio_ring.h
··· 115 115 struct virtqueue; 116 116 117 117 struct virtqueue *vring_new_virtqueue(unsigned int num, 118 + unsigned int vring_align, 118 119 struct virtio_device *vdev, 119 120 void *pages, 120 121 void (*notify)(struct virtqueue *vq),