[PATCH v4 02/11] PCI: liveupdate: Track outgoing preserved PCI devices

David Matlack dmatlack at google.com
Thu Apr 30 14:22:25 PDT 2026


On Thu, Apr 30, 2026 at 1:42 PM Vipin Sharma <vipinsh at google.com> wrote:
>
> On Thu, Apr 30, 2026 at 08:36:36PM +0000, David Matlack wrote:
> > On 2026-04-30 11:25 AM, Vipin Sharma wrote:
> > > On Tue, Apr 28, 2026 at 02:12:13PM -0700, David Matlack wrote:
> > > > On Tue, Apr 28, 2026 at 1:20 PM Vipin Sharma <vipinsh at google.com> wrote:
> > > > >
> > > > > On Thu, Apr 23, 2026 at 09:23:06PM +0000, David Matlack wrote:
> > > > > > +int pci_liveupdate_preserve(struct pci_dev *dev)
> > > > > > +{
> >
> > > > > > +     if (ser->nr_devices == ser->max_nr_devices)
> > > > > > +             return -ENOSPC;
> > > > > > +
> > > > > > +     for (i = 0; i < ser->max_nr_devices; i++) {
> > > > > > +             /*
> > > > > > +              * Start searching at index ser->nr_devices. This should result
> > > > > > +              * in a constant time search under expected conditions (devices
> > > > > > +              * are not getting unpreserved).
> > > > > > +              */
> > > > > > +             int index = (ser->nr_devices + i) % ser->max_nr_devices;
> > > > > > +             struct pci_dev_ser *dev_ser = &ser->devices[index];
> > > > > > +
> > > > > > +             if (dev_ser->refcount)
> > > > > > +                     continue;
> > > > > > +
> > > > > > +             pci_info(dev, "Device will be preserved across next Live Update\n");
> > > > > > +             ser->nr_devices++;
> > > > > > +
> > > > > > +             dev_ser->domain = pci_domain_nr(dev->bus);
> > > > > > +             dev_ser->bdf = pci_dev_id(dev);
> > > > > > +             dev_ser->refcount = 1;
> > > > > > +
> > > > > > +             dev->liveupdate_outgoing = dev_ser;
> > > > > > +             return 0;
> > > > > > +     }
> > > > > > +
> > > > > > +     return -ENOSPC;
> > > > >
> > > > > Since it is executing under a mutex, and we already failed
> > > > > 'if (ser->nr_devices == ser->max_nr_devices) check above, will we ever reach
> > > > > here and return -ENOSPC?
> > > >
> > > > Yeah I wouldn't expect to ever reach here.
> > >
> > > Will you be removing it or want to keep it just in case scenario?
> >
> > I'm not sure how I would remove it. The code doesn't not compile without
> > a return.
>
> Oh, I meant, inside loop a break and outside just return 0, that way it
> won't be a dead code.

That would hide bugs if the refcounts in the array got messed up. How about:

  /* This should never be reached. */
  return WARN_ON_ONCE(-ENOSPC);



More information about the kexec mailing list