On 06/04/2021 17:54, John Garry wrote:
Hi Robin,
Sorry if the phrasing was unclear there - the allusion to default
domains is new, it just occurred to me that what we do there is in
fact fairly close to what I've suggested previously for this. In that
case, we have a global policy set by the command line, which *can* be
overridden per-domain via sysfs at runtime, provided the user is
willing to tear the whole thing down. Using a similar approach here
would give a fair degree of flexibility but still mean that changes
never have to be made dynamically to a live domain.
So are you saying that we can handle it similar to how we now can handle
changing default domain for an IOMMU group via sysfs? If so, that just
is not practical here. Reason being that this particular DMA engine
provides the block device giving / mount point, so if we unbind the
driver, we lose / mount point.
And I am not sure if the end user would even know how to set such a
tunable. Or, in this case, why the end user would not want the optimized
range configured always.
I'd still rather if the device driver could provide info which can be
used to configure this before or during probing.
As a new solution, how about do both of these:
a. Add a per-IOMMU group sysfs file to set this tunable. Works same as
how we change the default domain, and has all the same
restrictions/steps. I think that this is what you are already suggesting.
b. Provide a DMA mapping API to set this value, similar to this current
series. In the IOMMU backend for that API, we record a new range value
and return -EPROBE_DEFER when successful. In the reprobe we reset the
default domain for the devices' IOMMU group, with the IOVA domain rcache
range configured as previously requested. Again, allocating the new
default domain is similar to how we change default domain type today.
This means that we don't play with a live domain. Downside is that we
need to defer the probe.
Thanks,
John