Hi Antonios, On Thu, 27 Nov 2014 18:22:53 Antonios Motakis wrote: >VFIO_IOMMU_TYPE1 keeps track for each domain it knows a list of protection >flags it always applies to all mappings in the domain. This is used for >domains that support IOMMU_CAP_CACHE_COHERENCY. > >Refactor this slightly, by keeping track instead that a given domain >supports the capability, and applying the IOMMU_CACHE protection flag when >doing the actual DMA mappings. > >This will allow us to reuse the behavior for IOMMU_CAP_NOEXEC, which we >also want to keep track of, but without applying it to all domains that >support it unless the user explicitly requests it. > >Signed-off-by: Antonios Motakis <a.motakis@xxxxxxxxxxxxxxxxxxxxxx> >--- > drivers/vfio/vfio_iommu_type1.c | 25 +++++++++++++++++-------- > 1 file changed, 17 insertions(+), 8 deletions(-) > >diff --git a/drivers/vfio/vfio_iommu_type1.c b/drivers/vfio/vfio_iommu_type1.c >index 4a9d666..c54dab8 100644 >--- a/drivers/vfio/vfio_iommu_type1.c >+++ b/drivers/vfio/vfio_iommu_type1.c > if (ret) > return ret; > >@@ -731,7 +740,7 @@ static int vfio_iommu_type1_attach_group(void *iommu_data, > } > > if (iommu_capable(bus, IOMMU_CAP_CACHE_COHERENCY)) >- domain->prot |= IOMMU_CACHE; >+ domain->caps |= IOMMU_CAP_CACHE_COHERENCY; IMHO this is not good since IOMMU_CAP_CACHE_COHERENCY is not a bitfield but an enum See include/linux/iommu.h enum iommu_cap { IOMMU_CAP_CACHE_COHERENCY, /* IOMMU can enforce cache coherent DMA transactions */ IOMMU_CAP_INTR_REMAP, /* IOMMU supports interrupt isolation */ IOMMU_CAP_NOEXEC, /* IOMMU_NOEXEC flag */ }; One possible fix would to redefine the enum with values with bitfiled values enum iommu_cap { IOMMU_CAP_CACHE_COHERENCY = 1, /* IOMMU can enforce cache coherent DMA transactions */ IOMMU_CAP_INTR_REMAP = 2, /* IOMMU supports interrupt isolation */ IOMMU_CAP_NOEXEC = 4, /* IOMMU_NOEXEC flag */ }; Regards Rémy >_______________________________________________ >kvmarm mailing list >kvmarm@xxxxxxxxxxxxxxxxxxxxx https://lists.cs.columbia.edu/mailman/listinfo/kvmarm -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html