On 2023/8/11 3:18, Jason Gunthorpe wrote:
On Thu, Jul 27, 2023 at 01:48:37PM +0800, Lu Baolu wrote:
To avoid open code everywhere.
Signed-off-by: Lu Baolu <baolu.lu@xxxxxxxxxxxxxxx>
---
include/linux/iommu.h | 11 ++++++++++-
drivers/iommu/iommu.c | 20 ++++++++++++++++++--
2 files changed, 28 insertions(+), 3 deletions(-)
Seems like overkill at this point..
Also, I think this is probably upside down.
We want to create the domains as fault enabled in the first place.
A fault enabled domain should never be attached to something that
cannot support faults. It should also not support changing the fault
handler while it exists.
Thus at the creation point would be the time to supply the fault handler
as part of requesting faulting.
Taking an existing domain and making it faulting enabled is going to
be really messy in all the corner cases.
Yes. Agreed.
My advice (and Robin will probably hate me), is to define a new op:
struct domain_alloc_paging_args {
struct fault_handler *fault_handler;
void *fault_data
};
struct iommu_domain *domain_alloc_paging2(struct device *dev, struct
domain_alloc_paging_args *args)
The point would be to leave the majority of drivers using the
simplified, core assisted, domain_alloc_paging() interface and they
just don't have to touch any of this stuff at all.
Obviously if handler is given then the domain will be initialized as
faulting.
Perhaps we also need an internal helper for iommu drivers to check the
iopf capability of the domain.
Best regards,
baolu