So while what you say is all technically true, I'm not sure this is necessary.
I agree. However, Lukas's comment made me wonder about the future: if we eventually need to preserve non-PCI devices (like a TPM), should we be designing a common identification mechanism for all buses now? Or should we settle on BDF for PCI and invent stable identifiers for other bus types as they become necessary?
Well, at least PCI subsystem should use BDF..
BDF must be stable for PCI live update to work correctly.
You are probably right that the matching of preserved data to a struct device should be more general though.
Right, we need a mechanism to ensure early in boot that any preserved device does not auto-bind to a driver later in boot.
Using the UEFI Device Path format seems like a good way not to re-invent something that already exists. For example, while a preserved PCI device looks like this: Acpi(PNP0A03,0)/Pci(1E|0)/Pci(0|0) (Luka's example)
We can seamlessly support other device types later using their native paths without changing the identification schema:
TPM: Acpi(PNP0C31,0) IPMI/BMC: Acpi(PNP0A03,0)/Pci(1F|0)/BMC(1,0xCA2) NVMe (PCI-attached): Acpi(PNP0A03,0)/Pci(1C|0)/Pci(0|0)/NVMe(1,00-00-...) etc...
Pasha