Hi Cédric,
On 27/10/26 9:38 PM, Cédric Le Goater wrote:
index 428ab2f069..931df22add 100644
--- a/hw/vfio/pci.c
+++ b/hw/vfio/pci.c
@@ -1949,6 +1949,38 @@ static void vfio_mmap_set_enabled(VFIOPCIDevice
*vdev, bool enabled)
}
}
+/*
+ * Prevent a pending INTx mmap timer from restoring BAR mmap while
+ * the PE is undergoing EEH reset. Keep BAR accesses on the VFIO
+ * region read/write path until PE configuration completes.
+ */
+void vfio_pci_eeh_pre_reset(PCIDevice *pdev)
+{
+ VFIOPCIDevice *vdev = VFIO_PCI_DEVICE(pdev);
+
+ if (vdev->intx.mmap_timer) {
+ timer_del(vdev->intx.mmap_timer);
+ }
+
+ vfio_mmap_set_enabled(vdev, false);
+}
+
+void vfio_pci_eeh_post_configure(PCIDevice *pdev)
+{
+ VFIOPCIDevice *vdev = VFIO_PCI_DEVICE(pdev);
+
+ if (vdev->interrupt == VFIO_INT_INTx && vdev->intx.pending) {
+ if (vdev->intx.mmap_timer && vdev->intx.mmap_timeout) {
+ timer_mod(vdev->intx.mmap_timer,
+ qemu_clock_get_ms(QEMU_CLOCK_VIRTUAL) +
+ vdev->intx.mmap_timeout);
+ }
+ return;
+ }
+
+ vfio_mmap_set_enabled(vdev, true);
+}
+
static void vfio_bar_prepare(VFIOPCIDevice *vdev, int nr)
{
VFIOBAR *bar = &vdev->bars[nr];
diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h
index c9ab949870..63fa378fbc 100644
--- a/hw/vfio/pci.h
+++ b/hw/vfio/pci.h
@@ -266,6 +266,8 @@ struct vfio_pci_hot_reset_info;
void vfio_pci_pre_reset(VFIOPCIDevice *vdev);
void vfio_pci_post_reset(VFIOPCIDevice *vdev);
+void vfio_pci_eeh_pre_reset(PCIDevice *pdev);
+void vfio_pci_eeh_post_configure(PCIDevice *pdev);
bool vfio_pci_host_match(PCIHostDeviceAddress *addr, const char *name);
int vfio_pci_get_pci_hot_reset_info(VFIOPCIDevice *vdev,
struct vfio_pci_hot_reset_info
**info_p);
These are POWER-only routines. Why put them under hw/vfio/pci.c ?
Yes, agreed.
These helpers are specific to the sPAPR EEH recovery sequence, so putting
vfio_pci_eeh_pre_reset() and vfio_pci_eeh_post_configure() in generic
VFIO PCI code is not the right layering.
I'll move the EEH-specific pre-reset/post-configure handling back into
hw/ppc/spapr_pci_vfio.c and remove the corresponding declarations from
hw/vfio/pci.h.
Thanks,
Narayana Murty.>
C.