RINGSIZE
ring_cfg[3] |= SET_VAL(RINGSIZE, ring->cfgsize)
mapsize = vring_size(RINGSIZE, ALIGN)
+ RINGSIZE * 2 * sizeof(int)
+ RINGSIZE * 6 * sizeof(struct vring_desc);
vring_init(&vrh.vring, RINGSIZE, host_map, ALIGN);
vringh_init_user(&vrh, features, RINGSIZE, true,
data = guest_map + vring_size(RINGSIZE, ALIGN);
indirects = (void *)data + (RINGSIZE + 1) * 2 * sizeof(int);
vq = vring_new_virtqueue(0, RINGSIZE, ALIGN, &gvdev.vdev, true,
__kfree_ignore_end = indirects + RINGSIZE * 6;
dbuf = data + (xfers % (RINGSIZE + 1));
__kmalloc_fake = indirects + (xfers % RINGSIZE) * 4;
struct scatterlist guest_sg[RINGSIZE], *sgs[2];
struct vring_used_elem used[RINGSIZE];
memset(__user_addr_min, 0, vring_size(RINGSIZE, ALIGN));
vq = vring_new_virtqueue(0, RINGSIZE, ALIGN, &vdev, true, false,
vring_init(&vrh.vring, RINGSIZE, __user_addr_min, ALIGN);
vringh_init_user(&vrh, vdev.features, RINGSIZE, true,
__kmalloc_fake = __user_addr_min + vring_size(RINGSIZE, ALIGN);
__kfree_ignore_start = __user_addr_min + vring_size(RINGSIZE, ALIGN);
sg_init_table(guest_sg, RINGSIZE);
for (i = 0; i < RINGSIZE; i++) {
__kmalloc_fake = __user_addr_min + vring_size(RINGSIZE, ALIGN);
err = virtqueue_add_outbuf(vq, guest_sg, RINGSIZE, &err, GFP_KERNEL);
assert(riov.used == RINGSIZE);
assert(riov.used == RINGSIZE * USER_MEM/4);
for (i = 0; i < RINGSIZE * USER_MEM/4; i += 3) {
if (err != 3 && i + err != RINGSIZE * USER_MEM/4)
for (i = 0; i < RINGSIZE; i++) {
for (i = 0; i < RINGSIZE; i++) {
assert(vrh.vring.used->idx % RINGSIZE != 0);
err = vringh_complete_multi_user(&vrh, used, RINGSIZE);
for (i = 0; i < RINGSIZE; i++) {
vq = vring_new_virtqueue(0, RINGSIZE, ALIGN, &vdev, true,
vring_init(&vring, RINGSIZE, __user_addr_min, ALIGN);