Il 07/05/2014 17:12, Peter Maydell ha scritto:
> - if (memory_access_is_direct(mr, is_write)) {
> + if (xen_enabled() && memory_access_is_direct(mr, is_write)) {
> hwaddr page = ((addr & TARGET_PAGE_MASK) + TARGET_PAGE_SIZE) - addr;
> len = MIN(page, len);
> }
We should put this patch in (both as an efficiency thing and an
expedient fix) but we really need to either track down which
callers of this API are relying on the returned plen not being
truncated, or we need to fix Xen to not truncate either. This
is just a bandaid IMHO.
Fixing Xen to not truncate is not possible because of the Xen mapcache,
unless of course QEMU is changed to avoid the mapcache completely on
64-bit hosts. I'm not sure if that makes sense from the Xen point of view.
Regarding fixing callers, a known one is virtio-scsi which is a bug and
on my todo list. But another is VFIO, which cannot accept truncation if
the IOMMU page size is greater than TARGET_PAGE_SIZE.
Paolo