On Fri, May 16, 2025 at 10:19:09AM +0200, Cédric Le Goater wrote: > On 5/12/25 17:32, Steve Sistare wrote: > > Do not reset a vfio-pci device during CPR. > > > > Signed-off-by: Steve Sistare <steven.sist...@oracle.com> > > --- > > hw/pci/pci.c | 13 +++++++++++++ > > 1 file changed, 13 insertions(+) > > > > diff --git a/hw/pci/pci.c b/hw/pci/pci.c > > index fe38c4c..2ba2e0f 100644 > > --- a/hw/pci/pci.c > > +++ b/hw/pci/pci.c > > @@ -32,6 +32,8 @@ > > #include "hw/pci/pci_host.h" > > #include "hw/qdev-properties.h" > > #include "hw/qdev-properties-system.h" > > +#include "migration/cpr.h" > > +#include "migration/misc.h" > > #include "migration/qemu-file-types.h" > > #include "migration/vmstate.h" > > #include "net/net.h" > > @@ -537,6 +539,17 @@ static void pci_reset_regions(PCIDevice *dev) > > static void pci_do_device_reset(PCIDevice *dev) > > { > > + /* > > + * A PCI device that is resuming for cpr is already configured, so do > > + * not reset it here when we are called from qemu_system_reset prior to > > + * cpr load, else interrupts may be lost for vfio-pci devices. It is > > + * safe to skip this reset for all PCI devices, because vmstate load > > will > > + * set all fields that would have been set here. > > + */ > > + if (cpr_is_incoming()) { > > Why can't we use cpr_is_incoming() in vfio instead of using an heuristic > on saved fds? > > Thanks, > > C.
Think I agree. > > > > + return; > > + } > > + > > pci_device_deassert_intx(dev); > > assert(dev->irq_state == 0);