Hi Baolu,
On Thursday, August 29, 2019 3:43:31 AM CEST Lu Baolu wrote:
Hi Janusz,inform
On 8/28/19 10:17 PM, Janusz Krzysztofik wrote:
We should avoid kernel panic when a intel_unmap() is called againstDoes that mean you suggest to replace
a non-existent domain.
BUG_ON(!domain);
with something like
if (WARN_ON(!domain))
return;
and to not care of orphaned mappings left allocated? Is there a way to
shouldn'tusers that their active DMA mappings are no longer valid and they
pointers?call dma_unmap_*()?
But we shouldn't expect the IOMMU driver notShouldn't then the IOMMU driver take care of cleaning up resources still
cleaning up the domain info when a device remove notification comes and
wait until all file descriptors being closed, right?
allocated on device remove before it invalidates and forgets their
You are right. We need to wait until all allocated resources (iova and
mappings) to be released.
How about registering a callback for BUS_NOTIFY_UNBOUND_DRIVER, and
removing the domain info when the driver detachment completes?
Device core calls BUS_NOTIFY_UNBOUND_DRIVER on each driver unbind, regardless
of a device being removed or not. As long as the device is not unplugged and
the BUS_NOTIFY_REMOVED_DEVICE notification not generated, an unbound driver is
not a problem here.
Morever, BUS_NOTIFY_UNBOUND_DRIVER is called even before
BUS_NOTIFY_REMOVED_DEVICE so that wouldn't help anyway.
Last but not least, bus events are independent of the IOMMU driver use via
DMA-API it exposes.
If keeping data for unplugged devices and reusing it on device re-plug is not
acceptable then maybe the IOMMU driver should perform reference counting of
its internal resources occupied by DMA-API users and perform cleanups on last
release?