
On Thu, 2015-12-10 at 12:11 -0500, John Ferlan wrote:
Since the add was in qemuDomainAttachHostPCIDevice, why is the remove not in qemuDomainDetachHostPCIDevice? Doing it here would mean it's call for any host device removal - whether or not it was ever added.
Because qemuDomainDetachHostPCIDevice() is where we ask for the device to be removed from the guest, but we have to wait for it to actually be removed (and for the guest definition to be updated) before changing the memory locking limit.
I guess I could move this code to qemuDomainDetachThisHostDevice(), but keeping it close to where the guest definition is updated looks cleaner to me.
Yeah - this all got confusing as I was paging back and forth... "DetachDevice" and "RemoveDevice"... Then I reviewed another change for shmem and got even more confused.
I know what you mean: the code could sure use some moving around to make it a bit more symmetric. And what about the names? qemuDomainDetachDiskDevice() qemuDomainDetachDeviceDiskLive() Ehm... qemuDomainDetachHostPCIDevice() qemuDomainDetachHostDevice() qemuDomainDetachThisHostDevice() Oh boy :)
I also fail to see how a device that was never added could be removed, could you please elaborate?
Since qemuDomainRemoveHostDevice could be called for any host device removal and not specifically the HostPCIDevice, I was pointing out by calling qemuDomainAdjustMaxMemLock there you could be calling it even when a HostPCIDevice wasn't being removed.
Oh, I get it now. Calling qemuDomainAdjustMaxMemLock() more than necessary shouldn't really cause any harm, but adding a check for hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI around the call is even better. Would that address your concerns?
It was clear to me when I wrote it ;-)
Again, I know exactly what you mean ;) Cheers. -- Andrea Bolognani Software Engineer - Virtualization Team