
On Fri, Feb 16, 2024 at 07:46:01 -0800, Andrea Bolognani wrote:
On Fri, Feb 16, 2024 at 04:09:12PM +0100, Peter Krempa wrote:
On Wed, Feb 14, 2024 at 18:11:16 +0100, Andrea Bolognani wrote:
+ /* Make sure the 'none' USB controller doesn't have an address + * associated with it, as that would trip up later checks */ + if (cont->model == VIR_DOMAIN_CONTROLLER_MODEL_USB_NONE) + cont->info.type = VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE;
One thing I'm slightly unsure about is whether the removal of address won't have effect on generation of other addresses and thus in certain very weird situations could trip up the virDomainDefCheckABIStability check.
Since the usb controller itself was never seen by the guest ABI that part will be okay, but not reserving the address for it could cause issues.
Now for migration this shouldn't be a problem unless somebody is passing very weird migration XMLs.
For new VMs it can theoretically cause re-ordering of devices on the PCI bus.
For new VMs, the guest ABI has not been set in stone yet so even if devices and controllers were to be shuffled around it wouldn't matter.
For existing VMs, all addressess will have been recorded in the domain XML and libvirt would never attempt to change them.
Note that historically we've considered that in most cases a partial XML to be freshly defined or used with virDomainCreateXML() should be ABI compatible with how we've treated it historically. It is in certain cases not practical/possible, but generally this should be kept as much as possible. Basically we can't decide to remove an auto-added device. For shuffling addresses around, while we shouldn't do just for the heck of it, it can be a reasonable change. If a user cares about the address they should put it into the XML.
The point about migration is potentially a good one though. The incoming XML will have the (default) model and address, but after parsing they will be gone. Will that trip the ABI stability check?
No, unless you're providing a custom migration XML there's no ABI stability check happening. The XML formatted by libvirt is considered to be authoritative and well-enough defined. Additionally there's nothing to check the ABI against, as the source of the migration is simply declaring what's happening.
I'm never sure at what point of the process that gets executed, and on which inputs.