From: Jason Gunthorpe Date: Tue, 21 Feb 2023 15:11:03 +0000 (-0400) Subject: Merge tag 'v6.2' into iommufd.git for-next X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=939204e4df962982cbc84acc26b29b421dd530a8;p=linux.git Merge tag 'v6.2' into iommufd.git for-next Resolve conflicts from the signature change in iommu_map: - drivers/infiniband/hw/usnic/usnic_uiom.c Switch iommu_map_atomic() to iommu_map(.., GFP_ATOMIC) - drivers/vfio/vfio_iommu_type1.c Following indenting change for GFP_KERNEL Signed-off-by: Jason Gunthorpe --- 939204e4df962982cbc84acc26b29b421dd530a8 diff --cc drivers/infiniband/hw/usnic/usnic_uiom.c index aeeaca65ace96,a2857accc4273..2a5cac2658ecc --- a/drivers/infiniband/hw/usnic/usnic_uiom.c +++ b/drivers/infiniband/hw/usnic/usnic_uiom.c @@@ -276,8 -276,8 +276,8 @@@ iter_chunk size = pa_end - pa_start + PAGE_SIZE; usnic_dbg("va 0x%lx pa %pa size 0x%zx flags 0x%x", va_start, &pa_start, size, flags); - err = iommu_map_atomic(pd->domain, va_start, - pa_start, size, flags); + err = iommu_map(pd->domain, va_start, pa_start, - size, flags, GFP_KERNEL); ++ size, flags, GFP_ATOMIC); if (err) { usnic_err("Failed to map va 0x%lx pa %pa size 0x%zx with err %d\n", va_start, &pa_start, size, err); @@@ -293,8 -293,8 +293,8 @@@ size = pa - pa_start + PAGE_SIZE; usnic_dbg("va 0x%lx pa %pa size 0x%zx flags 0x%x\n", va_start, &pa_start, size, flags); - err = iommu_map_atomic(pd->domain, va_start, - pa_start, size, flags); + err = iommu_map(pd->domain, va_start, pa_start, - size, flags, GFP_KERNEL); ++ size, flags, GFP_ATOMIC); if (err) { usnic_err("Failed to map va 0x%lx pa %pa size 0x%zx with err %d\n", va_start, &pa_start, size, err); diff --cc drivers/vfio/vfio_iommu_type1.c index 7bea5594bc459,2209372f236db..a44ac3fe657c0 --- a/drivers/vfio/vfio_iommu_type1.c +++ b/drivers/vfio/vfio_iommu_type1.c @@@ -1865,15 -1867,22 +1867,22 @@@ static void vfio_test_domain_fgsp(struc if (!pages) return; - ret = iommu_map(domain->domain, 0, page_to_phys(pages), PAGE_SIZE * 2, - IOMMU_READ | IOMMU_WRITE | IOMMU_CACHE, GFP_KERNEL); - if (!ret) { - size_t unmapped = iommu_unmap(domain->domain, 0, PAGE_SIZE); + list_for_each_entry(region, regions, list) { + start = ALIGN(region->start, PAGE_SIZE * 2); + if (start >= region->end || (region->end - start < PAGE_SIZE * 2)) + continue; - if (unmapped == PAGE_SIZE) - iommu_unmap(domain->domain, PAGE_SIZE, PAGE_SIZE); - else - domain->fgsp = true; + ret = iommu_map(domain->domain, start, page_to_phys(pages), PAGE_SIZE * 2, - IOMMU_READ | IOMMU_WRITE | IOMMU_CACHE); ++ IOMMU_READ | IOMMU_WRITE | IOMMU_CACHE, GFP_KERNEL); + if (!ret) { + size_t unmapped = iommu_unmap(domain->domain, start, PAGE_SIZE); + + if (unmapped == PAGE_SIZE) + iommu_unmap(domain->domain, start + PAGE_SIZE, PAGE_SIZE); + else + domain->fgsp = true; + } + break; } __free_pages(pages, order);