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

virtio: use LGUEST_VRING_ALIGN instead of relying on pagesize

This doesn't really matter, since lguest is i386 only at the moment,
but we could actually choose a different value. (lguest doesn't have
a guarenteed ABI).

Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>

+8 -4
+3 -3
Documentation/lguest/lguest.c
··· 1030 1030 /* Zero out the virtqueues. */ 1031 1031 for (vq = dev->vq; vq; vq = vq->next) { 1032 1032 memset(vq->vring.desc, 0, 1033 - vring_size(vq->config.num, getpagesize())); 1033 + vring_size(vq->config.num, LGUEST_VRING_ALIGN)); 1034 1034 lg_last_avail(vq) = 0; 1035 1035 } 1036 1036 } else if (dev->desc->status & VIRTIO_CONFIG_S_FAILED) { ··· 1211 1211 void *p; 1212 1212 1213 1213 /* First we need some memory for this virtqueue. */ 1214 - pages = (vring_size(num_descs, getpagesize()) + getpagesize() - 1) 1214 + pages = (vring_size(num_descs, LGUEST_VRING_ALIGN) + getpagesize() - 1) 1215 1215 / getpagesize(); 1216 1216 p = get_pages(pages); 1217 1217 ··· 1228 1228 vq->config.pfn = to_guest_phys(p) / getpagesize(); 1229 1229 1230 1230 /* Initialize the vring. */ 1231 - vring_init(&vq->vring, num_descs, p, getpagesize()); 1231 + vring_init(&vq->vring, num_descs, p, LGUEST_VRING_ALIGN); 1232 1232 1233 1233 /* Append virtqueue to this device's descriptor. We use 1234 1234 * device_config() to get the end of the device's current virtqueues;
+1 -1
drivers/lguest/lguest_device.c
··· 250 250 /* Figure out how many pages the ring will take, and map that memory */ 251 251 lvq->pages = lguest_map((unsigned long)lvq->config.pfn << PAGE_SHIFT, 252 252 DIV_ROUND_UP(vring_size(lvq->config.num, 253 - PAGE_SIZE), 253 + LGUEST_VRING_ALIGN), 254 254 PAGE_SIZE)); 255 255 if (!lvq->pages) { 256 256 err = -ENOMEM;
+4
include/linux/lguest_launcher.h
··· 59 59 LHREQ_IRQ, /* + irq */ 60 60 LHREQ_BREAK, /* + on/off flag (on blocks until someone does off) */ 61 61 }; 62 + 63 + /* The alignment to use between consumer and producer parts of vring. 64 + * x86 pagesize for historical reasons. */ 65 + #define LGUEST_VRING_ALIGN 4096 62 66 #endif /* _LINUX_LGUEST_LAUNCHER */