aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/lguest/lguest.c6
-rw-r--r--drivers/lguest/lguest_device.c2
-rw-r--r--include/linux/lguest_launcher.h4
3 files changed, 8 insertions, 4 deletions
diff --git a/Documentation/lguest/lguest.c b/Documentation/lguest/lguest.c
index 804520633fcf..aa2574ca94c7 100644
--- a/Documentation/lguest/lguest.c
+++ b/Documentation/lguest/lguest.c
@@ -1030,7 +1030,7 @@ static void update_device_status(struct device *dev)
1030 /* Zero out the virtqueues. */ 1030 /* Zero out the virtqueues. */
1031 for (vq = dev->vq; vq; vq = vq->next) { 1031 for (vq = dev->vq; vq; vq = vq->next) {
1032 memset(vq->vring.desc, 0, 1032 memset(vq->vring.desc, 0,
1033 vring_size(vq->config.num, getpagesize())); 1033 vring_size(vq->config.num, LGUEST_VRING_ALIGN));
1034 lg_last_avail(vq) = 0; 1034 lg_last_avail(vq) = 0;
1035 } 1035 }
1036 } else if (dev->desc->status & VIRTIO_CONFIG_S_FAILED) { 1036 } else if (dev->desc->status & VIRTIO_CONFIG_S_FAILED) {
@@ -1211,7 +1211,7 @@ static void add_virtqueue(struct device *dev, unsigned int num_descs,
1211 void *p; 1211 void *p;
1212 1212
1213 /* First we need some memory for this virtqueue. */ 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 / getpagesize(); 1215 / getpagesize();
1216 p = get_pages(pages); 1216 p = get_pages(pages);
1217 1217
@@ -1228,7 +1228,7 @@ static void add_virtqueue(struct device *dev, unsigned int num_descs,
1228 vq->config.pfn = to_guest_phys(p) / getpagesize(); 1228 vq->config.pfn = to_guest_phys(p) / getpagesize();
1229 1229
1230 /* Initialize the vring. */ 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 /* Append virtqueue to this device's descriptor. We use 1233 /* Append virtqueue to this device's descriptor. We use
1234 * device_config() to get the end of the device's current virtqueues; 1234 * device_config() to get the end of the device's current virtqueues;
diff --git a/drivers/lguest/lguest_device.c b/drivers/lguest/lguest_device.c
index a661bbdae3d6..f062dc55c573 100644
--- a/drivers/lguest/lguest_device.c
+++ b/drivers/lguest/lguest_device.c
@@ -250,7 +250,7 @@ static struct virtqueue *lg_find_vq(struct virtio_device *vdev,
250 /* Figure out how many pages the ring will take, and map that memory */ 250 /* Figure out how many pages the ring will take, and map that memory */
251 lvq->pages = lguest_map((unsigned long)lvq->config.pfn << PAGE_SHIFT, 251 lvq->pages = lguest_map((unsigned long)lvq->config.pfn << PAGE_SHIFT,
252 DIV_ROUND_UP(vring_size(lvq->config.num, 252 DIV_ROUND_UP(vring_size(lvq->config.num,
253 PAGE_SIZE), 253 LGUEST_VRING_ALIGN),
254 PAGE_SIZE)); 254 PAGE_SIZE));
255 if (!lvq->pages) { 255 if (!lvq->pages) {
256 err = -ENOMEM; 256 err = -ENOMEM;
diff --git a/include/linux/lguest_launcher.h b/include/linux/lguest_launcher.h
index e7217dc58f39..bd0eba760522 100644
--- a/include/linux/lguest_launcher.h
+++ b/include/linux/lguest_launcher.h
@@ -59,4 +59,8 @@ enum lguest_req
59 LHREQ_IRQ, /* + irq */ 59 LHREQ_IRQ, /* + irq */
60 LHREQ_BREAK, /* + on/off flag (on blocks until someone does off) */ 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#endif /* _LINUX_LGUEST_LAUNCHER */ 66#endif /* _LINUX_LGUEST_LAUNCHER */