[PATCH v3 07/24] vfio/pci: Preserve vfio-pci device files across Live Update
Jason Gunthorpe
jgg at nvidia.com
Tue Apr 21 11:44:33 PDT 2026
On Tue, Apr 21, 2026 at 10:40:29AM -0700, David Matlack wrote:
> On Mon, Mar 23, 2026 at 4:58 PM David Matlack <dmatlack at google.com> wrote:
>
> > +static int vfio_pci_liveupdate_freeze(struct liveupdate_file_op_args *args)
> > +{
> > + struct vfio_device *device = vfio_device_from_file(args->file);
> > + struct vfio_pci_core_device *vdev;
> > + struct pci_dev *pdev;
> > + int ret;
> > +
> > + vdev = container_of(device, struct vfio_pci_core_device, vdev);
> > + pdev = vdev->pdev;
> > +
> > + guard(mutex)(&device->dev_set->lock);
> > +
> > + /*
> > + * Userspace must disable interrupts on the device prior to freeze so
> > + * that the device does not send any interrupts until new interrupt
> > + * handlers have been established by the next kernel.
> > + */
> > + if (vdev->irq_type != VFIO_PCI_NUM_IRQS) {
> > + pci_err(pdev, "Freeze failed! Interrupts are still enabled.\n");
> > + return -EINVAL;
> > + }
> > +
> > + ret = pci_load_saved_state(pdev, vdev->pci_saved_state);
> > + if (ret)
> > + return ret;
> > +
> > + vfio_pci_core_try_reset(vdev);
>
> I think a call to pci_clear_master() is needed here to so the device
> stops issuing memory transactions while VFIO is trying to resetting
> it.
That doesn't sound right, reset should always work..
Didn't look beyond this hunk but why is a function called 'freeze'
donig a reset anyhow?
> Sashiko also wondered if pci_clear_master() is needed to ensure that
> the device has bus mastering disabled during the kexec
Only devices that are not being preserved..
> think that is actually an issue. vfio_pci_core_enable() makes sure
> that vdev->pci_saved_state has bus mastering disabled, so
> pci_restore_state() below here should guaranteed it is clear during
> kexec.
.. and bus mastering should not be disabled on any device expecting to
be preserved ..
Jason
More information about the kexec
mailing list