Skip to content

Commit 00271ca

Browse files
niklas88joergroedel
authored andcommitted
iommu/virtio: Make use of ops->iotlb_sync_map
Pull out the sync operation from viommu_map_pages() by implementing ops->iotlb_sync_map. This allows the common IOMMU code to map multiple elements of an sg with a single sync (see iommu_map_sg()). Link: https://lore.kernel.org/lkml/20230726111433.1105665-1-schnelle@linux.ibm.com/ Signed-off-by: Niklas Schnelle <schnelle@linux.ibm.com> Reviewed-by: Jean-Philippe Brucker <jean-philippe@linaro.org> Link: https://lore.kernel.org/r/20231120-viommu-sync-map-v3-1-50a57ecf78b5@linux.ibm.com Signed-off-by: Joerg Roedel <jroedel@suse.de>
1 parent 2cc14f5 commit 00271ca

1 file changed

Lines changed: 16 additions & 1 deletion

File tree

drivers/iommu/virtio-iommu.c

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -843,7 +843,7 @@ static int viommu_map_pages(struct iommu_domain *domain, unsigned long iova,
843843
.flags = cpu_to_le32(flags),
844844
};
845845

846-
ret = viommu_send_req_sync(vdomain->viommu, &map, sizeof(map));
846+
ret = viommu_add_req(vdomain->viommu, &map, sizeof(map));
847847
if (ret) {
848848
viommu_del_mappings(vdomain, iova, end);
849849
return ret;
@@ -912,6 +912,20 @@ static void viommu_iotlb_sync(struct iommu_domain *domain,
912912
viommu_sync_req(vdomain->viommu);
913913
}
914914

915+
static int viommu_iotlb_sync_map(struct iommu_domain *domain,
916+
unsigned long iova, size_t size)
917+
{
918+
struct viommu_domain *vdomain = to_viommu_domain(domain);
919+
920+
/*
921+
* May be called before the viommu is initialized including
922+
* while creating direct mapping
923+
*/
924+
if (!vdomain->nr_endpoints)
925+
return 0;
926+
return viommu_sync_req(vdomain->viommu);
927+
}
928+
915929
static void viommu_get_resv_regions(struct device *dev, struct list_head *head)
916930
{
917931
struct iommu_resv_region *entry, *new_entry, *msi = NULL;
@@ -1058,6 +1072,7 @@ static struct iommu_ops viommu_ops = {
10581072
.unmap_pages = viommu_unmap_pages,
10591073
.iova_to_phys = viommu_iova_to_phys,
10601074
.iotlb_sync = viommu_iotlb_sync,
1075+
.iotlb_sync_map = viommu_iotlb_sync_map,
10611076
.free = viommu_domain_free,
10621077
}
10631078
};

0 commit comments

Comments
 (0)