Thread (24 messages) 24 messages, 5 authors, 2018-02-15

Re: [PATCH 07/37] iommu: Add a page fault handler

From: Jean-Philippe Brucker <hidden>
Date: 2018-02-15 13:49:41
Also in: kvm, linux-acpi, linux-arm-kernel, linux-iommu, linux-pci

On 14/02/18 07:18, Jacob Pan wrote:
[...]
quoted
+/* Used to store incomplete fault groups */
+static LIST_HEAD(iommu_partial_faults);
+static DEFINE_SPINLOCK(iommu_partial_faults_lock);
+
should partial fault list be per iommu?
That would be good, but I don't see an easy way to retrieve the iommu
instance in report_device_fault(). Maybe the driver should pass it to
report_device_fault(), and we can then store partial faults in struct
iommu_device.

[...]
quoted
+/**
+ * iommu_report_device_fault() - Handle fault in device driver or mm
+ *
+ * If the device driver expressed interest in handling fault, report
it through
+ * the callback. If the fault is recoverable, try to page in the
address.
+ */
+int iommu_report_device_fault(struct device *dev, struct
iommu_fault_event *evt) +{
+	int ret = -ENOSYS;
+	struct iommu_domain *domain = iommu_get_domain_for_dev(dev);
+
+	if (!domain)
+		return -ENODEV;
+
+	/*
+	 * if upper layers showed interest and installed a fault
handler,
+	 * invoke it.
+	 */
+	if (iommu_has_device_fault_handler(dev)) {
I think Alex pointed out this is racy, so adding a mutex to the
iommu_fault_param and acquire it would help. Do we really
atomic handler?
Yes I think a few IOMMU drivers will call this function from IRQ context,
so a spinlock might be better for acquiring iommu_fault_param.
quoted
+		struct iommu_fault_param *param =
dev->iommu_param->fault_param; +
+		return param->handler(evt, param->data);
Even upper layer (VFIO) registered handler to propagate PRQ to a guest
to fault in the pages, we may still need to keep track of the page
requests that need page response later, i.e. last page in group or
stream request in vt-d. This will allow us sanitize the page response
come back from the guest/VFIO.
In my next round, I am adding a per device list under iommu_fault_param
for pending page request. This will also address the situation where
guest failed to send response. We can enforce time or credit limit of
pending requests based on this list.
Sounds good

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