Re: [PATCH 00/13] Introduce IOMMU-API TLB Flushing Interface
From: Joerg Roedel
Date: Thu Aug 17 2017 - 11:22:28 EST
On Thu, Aug 17, 2017 at 08:54:07AM -0600, Alex Williamson wrote:
> So _sync() does imply that they're slower, but iommu_map() does not
> imply that a _flush() is required. One is a performance issue, the
> other is an API usability issue. If the sync version is used
> sub-optimally, it's a performance issue, not a correctness issue. If
> the async version is used without an explicit flush, it's a correctness
> issue. Therefore, I would lean towards making the asynchronous mode
> explicit and providing good documentation and comments to steer
> developers to the async version. I think it makes the API harder to
> use incorrectly.
I agree that it makes the API a bit more complicated to use. But that
can be solved by documenting it and by converting the main users (for me
that is VFIO and dma-iommu.c) of it to the unsynchronized interface,
because people will look at existing users and just do what they do.
Introducing _sync functions instead of _async ones also has the
side-effect that it puts pressure on the maintainers of the code to
convert it to the async interface, because they now see explicitly that
they use the slow version and start looking for ways to make things
faster.
What I absolutly don't want is that the whole explicit TLB flushing
of the IOMMU-API (as introduced in this patch-set) is considered some
optional part of the API, as it would be when I just introduce _async
versions of map/unmap/map_sg.
Regards,
Joerg