On 18 November 2015 at 22:04, Alex Williamson <alex.william...@redhat.com> wrote: > On Tue, 2015-11-17 at 10:46 +0300, Pavel Fedin wrote: >> On some architectures TARGET_PAGE_ALIGN() is not enough to get the right >> alignment. For example on ARM TARGET_PAGE_BITS is 10 because some old CPUs >> support 1K page size, while minimum SMMU page size is 4K.
> I don't understand how this is supposed to work, if we align to a larger > size than the processor, then there are processor size pages of RAM than > could be handed out as DMA targets for devices, but we can't map them > through the IOMMU. Thus if the guest tries to use them, we get IOMMU > faults in the host and likely memory corruption in the guest because the > device can't read or write to the page it's supposed to. This doesn't > seem like the right solution. Thanks, There are a number of different interesting page sizes here: * the host kernel page size * the target CPU architecture's worst-case smallest page size * the page size the guest kernel is actually using at the moment (consider a 4K-page guest kernel on a 64K-page host kernel) These don't necessarily have to all be the same. I would expect VFIO to be interested in the host kernel page size, not TARGET_PAGE_ALIGN. It might also be interested in the in-practice guest kernel page settings, but you can't actually determine those from outside. (In general non-TCG code should probably not try to use the TARGET_PAGE_* constants.) thanks -- PMM