Thread (36 messages) 36 messages, 5 authors, 2017-07-25

[PATCH 3/5] iommu/arm-smmu-v3: add IOMMU_CAP_BYPASS to the ARM SMMUv3 driver

From: Alex Williamson <hidden>
Date: 2017-07-24 17:16:35
Also in: kvm, linux-iommu, lkml

On Thu, 20 Jul 2017 12:17:12 +0100
Robin Murphy [off-list ref] wrote:
On 20/07/17 10:10, Will Deacon wrote:
quoted
On Thu, Jul 20, 2017 at 09:32:00AM +0530, Anup Patel wrote:  
quoted
On Wed, Jul 19, 2017 at 5:23 PM, Will Deacon [off-list ref] wrote:  
quoted
There are two things here:

  1. iommu_present() is pretty useless, because it applies to a "bus" which
     doesn't actually tell you what you need to know for things like the
     platform_bus, where some masters might be upstream of an SMMU and
     others might not be.  
I agree with you. The iommu_present() check in vfio_iommu_group_get()
is not much useful. We only reach line which checks iommu_present()
when iommu_group_get() returns NULL for given "struct device *". If there
is no IOMMU group for a "struct device *" then it means there is no IOMMU
HW doing translations for such device.

If we drop the iommu_present() check (due to above reasons) in
vfio_iommu_group_get() then we don't require the IOMMU_CAP_BYPASS
and we can happily drop PATCH1, PATCH2, and PATCH3.

I will remove the iommu_present() check in vfio_iommu_group_get()
because it is only comes into actions when VFIO_NOIOMMU is
enabled. This will also help us drop PATCH1-to-PATCH3.  
I don't think that's the right answer. Whilst iommu_present has obvious
shortcomings, its intention is clear: it should tell you whether a given
*device* is upstream of an IOMMU. So the right fix is to make this
per-device, instead of per-bus. Removing it altogether is worse than leaving
it like it is.  
Not really - if there is an IOMMU up and running to the point of setting
bus ops, every device it cares about can be expected to have a group
already (there are only a couple of drivers left that don't use groups,
and they're hardly relevant to VFIO). Thus iommu_group_get() already is
the de-facto per-device IOMMU check.

And having looked into it, I'm now spinning a couple of patches to
finish off making groups truly mandatory so that that can be less
de-facto ;)
No, look at vfio-noiommu and even vfio-mdev devices for devices which
have an iommu group but there is no physical iommu supporting them.
iommu_present() is how we can distinguish these groups and therefore
not generate a segfault in trying to use the full IOMMU API on them.
Thanks,

Alex
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help