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

Vipin Sharma
2026-04-28T20:20:35Z

On Thu, Apr 23, 2026 at 09:23:06PM +0000, David Matlack wrote:
> +int pci_liveupdate_preserve(struct pci_dev *dev)
> +{
> + struct pci_ser *ser;
> + int i, ret;
> +
> + guard(mutex)(&pci_flb_outgoing_lock);
> +
> + ret = liveupdate_flb_get_outgoing(&pci_liveupdate_flb, (void **)&ser);
> + if (ret)
> + return ret;
> +
> + if (!ser)
> + return -ENOENT;
> +
> + if (dev->is_virtfn)
> + return -EINVAL;
> +
> + if (dev->liveupdate_outgoing)
> + return -EBUSY;
> +
> + 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?

> diff --git a/include/linux/kho/abi/pci.h b/include/linux/kho/abi/pci.h
> index 5c0e92588c00..5b4c8d9e462c 100644
> --- a/include/linux/kho/abi/pci.h
> +++ b/include/linux/kho/abi/pci.h
> @@ -23,19 +23,20 @@
> * incrementing the version number in the PCI_LUO_FLB_COMPATIBLE string.
> */
>
> -#define PCI_LUO_FLB_COMPATIBLE "pci-v1"
> +#define PCI_LUO_FLB_COMPATIBLE "pci-v2"

Just curious, why did we change the version here? It's not like just
previous patch is working enough to perform a live update. As the config
is experimental, can't we just keep it PCI-v1 for the whole series?

>