On Tue, Oct 27, 2015 at 01:51:20PM +0200, Michael S. Tsirkin wrote: > On Tue, Oct 27, 2015 at 10:47:54AM +0200, Michael S. Tsirkin wrote: > > TL;DR: > > This fixes virtio in a way transparent to guest. > > We should now be able to revert commits aa8580cd and df0acded19ec which > > worked > > around it in a way that's not transparent. > > I didn't check dataplane BTW. Igor? Stefan?
It doesn't handle it: /* TODO handle non-contiguous memory across region boundaries */ iov->iov_base = vring_map(&mr, desc->addr, desc->len, desc->flags & VRING_DESC_F_WRITE); if (!iov->iov_base) { error_report("Failed to map descriptor addr %#" PRIx64 " len %u", (uint64_t)desc->addr, desc->len); return -EFAULT; } The assumption is that vring_map() can map the full desc->len bytes. The same logic that you're trying to add in this series could be added to vring_pop() but it makes the number of sg list entries accepted by QEMU variable and dependent on DIMMs :(. Previously guests could be sure that 1024 sgs work.