On Fri, 2023-01-06 at 14:03 -0400, Jason Gunthorpe wrote: > On Fri, Jan 06, 2023 at 10:24:50AM -0700, Alex Williamson wrote: > > > > - ret = iommu_map(domain->domain, 0, page_to_phys(pages), PAGE_SIZE * 2, > > > - IOMMU_READ | IOMMU_WRITE | IOMMU_CACHE); > > > - if (!ret) { > > > - size_t unmapped = iommu_unmap(domain->domain, 0, PAGE_SIZE); > > > + list_for_each_entry(region, regions, list) { > > > + if (region->end - region->start < PAGE_SIZE * 2 || > > > + region->start % (PAGE_SIZE*2)) > > > > Maybe this falls into the noise, but we don't care if region->start is > > aligned to a double page, so long as we can map an aligned double page > > within the region. Maybe something like: > > > dma_addr_t start = ALIGN(region->start, PAGE_SIZE * 2); > > > > if (start >= region->end || (region->end - start < PAGE_SIZE * 2)) > > continue; > > Yeah, that is more technically correct > > Jason Makes sense, will incorporate this into v3. Thanks, Niklas