On 9/16/2026 12:05 PM, Matthew Rosato wrote:
+ pbdev->state = ZPCI_FS_ERROR;
+ s390_pci_generate_error_event(ERR_EVENT_PERMERR,
pbdev->fh,
+ pbdev->fid, 0, 0);
A permanent error will indicate to the guest that PCI device in
unusable, in that case would the guest drive a device re-initialization?
Would it be better to generate a ERR_EVENT_SERVAC to allow the guest to
attempt recovery and so drive the mappings again?
The problem is that if we hit this scenario, we've exhausted the vfio
DMA limit for the device, so there is no way to create more mappings
without freeing some other ones up.
In the case of a RPCIT, we can ask the guest to try and free up all
stale/invalidated mappings to make room, but in this case
1) we have no mechanism to ask the guest to do that
2) we are in the middle replaying only the valid mappings, so there are
no invalid mappings to flush anyway -- so we're really in a permanent
error case here -- the number of vfio-allowed concurrent DMA mappings is
less than what our IOMMU wishes to replay. AFAICT this can only get
solved by forcing the guest to throw everything out and start over.
I think in reality, you would only hit this in a migration scenario with
a vfio-pci device (which we don't support with this series) where the
vfio DMA limit is lower on the target than it was on the host.
If you hit this doing IOMMU replay of a vfio-pci device without a
migration involved then the limit should be the same as it was before
replay and it should have been impossible to map more than the vfio DMA
limit (so if you managed it, a permanent error also seems reasonable
because there may be a deeper issue).
Would an 0x3a trigger a total wipe of the IOMMU contents that we were
trying to replay? If yes, it might be something to consider if/when we
support vfio-pci migration but I'm not sure it makes sense under the
current scenario(s) where we should never hit this path.
Thanks,
Matt
I think on 0x3a the guest will attempt a hot reset and so I think will
also re-initialize the IOMMU [1]. But as you said this only would apply
in the case of vfio-pci and may not be applicable to the virtio case. We
can re-visit this if/when we support vfio-pci migration.
[1] https://elixir.bootlin.com/linux/v7.2.5/source/arch/s390/pci/pci.c#L731
Reviewed-by: Farhan Ali <[email protected]>