Re: [PATCH v16 4/7] s390/pci: Store PCI error information for passthrough devices
From: Farhan Ali
Date: Mon May 18 2026 - 12:57:08 EST
On 5/18/2026 3:07 AM, Niklas Schnelle wrote:
On Thu, 2026-05-14 at 11:00 -0700, Farhan Ali wrote:
For a passthrough device we need co-operation from user space to recover--- snip ---
the device. This would require to bubble up any error information to user
space. Let's store this error information for passthrough devices, so it
can be retrieved later.
We can now have userspace drivers (vfio-pci based) on s390x. The userspace
drivers will not have any KVM fd and so no kzdev associated with them. So
we need to update the logic for detecting passthrough devices to not depend
on struct kvm_zdev.
Reviewed-by: Matthew Rosato <mjrosato@xxxxxxxxxxxxx>
Signed-off-by: Farhan Ali <alifm@xxxxxxxxxxxxx>
---
arch/s390/include/asm/pci.h | 30 ++++++++
arch/s390/pci/pci.c | 1 +
arch/s390/pci/pci_event.c | 114 +++++++++++++++++--------------
drivers/vfio/pci/vfio_pci_zdev.c | 18 ++++-
4 files changed, 109 insertions(+), 54 deletions(-)
@@ -216,12 +223,23 @@ static pci_ers_result_t zpci_event_attempt_error_recovery(struct pci_dev *pdev)This incorrectly treats it as not-mediated recovery when the queue runs
goto out_unlock;
}
+ mediated_recovery = zpci_store_pci_error(pdev, ccdf) == 0 ? true : false;
+
full and zpci_store_pci_error() returns -ENOMEM (Sashiko also noticed
this though the explanation is a bit hard to read).
Yes, will fix in next revision.
ers_res = zpci_event_notify_error_detected(pdev, driver);The unlock here seems like a bad leftover from the previous code.
if (ers_result_indicates_abort(ers_res)) {
status_str = "failed (abort on detection)";
goto out_unlock;
}
+ if (mediated_recovery) {
+ pr_info("%s: Leaving recovery of pass-through device to user-space\n",
+ pci_name(pdev));
+ ers_res = PCI_ERS_RESULT_RECOVERED;
+ status_str = "in progress";
+ mutex_unlock(&zdev->pending_errs_lock);
You're not holding that lock here. (Also found by Sashiko).
Ugh yes, left this from last version. Will fix.
Thanks
Farhan
+ goto out_unlock;--- snip ---
+ }
+