On 12/10/2015 10:03 AM, Andrea Bolognani wrote: > On Wed, 2015-12-09 at 15:15 -0500, John Ferlan wrote: >> On 11/24/2015 08:56 AM, Andrea Bolognani wrote: >>> We increase the limit before plugging in a PCI hostdev or a memory >>> module because some memory might need to be locked due to eg. VFIO. >>> >>> Of course we should do the opposite after unplugging a device: this >>> was already the case for memory modules, but not for hostdevs. >>> --- >>> src/qemu/qemu_hotplug.c | 6 ++++++ >>> 1 file changed, 6 insertions(+) >>> >>> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c >>> index a5c134a..04baeff 100644 >>> --- a/src/qemu/qemu_hotplug.c >>> +++ b/src/qemu/qemu_hotplug.c >>> @@ -3070,6 +3070,12 @@ qemuDomainRemoveHostDevice(virQEMUDriverPtr driver, >>> networkReleaseActualDevice(vm->def, net); >>> virDomainNetDefFree(net); >>> } >>> + >>> + /* QEMU might no longer need to lock as much memory, eg. we just detached >>> + * a VFIO device, so adjust the limit here */ >>> + if (qemuDomainAdjustMaxMemLock(vm) < 0) >>> + VIR_WARN("Failed to adjust locked memory limit"); >>> + >>> ret = 0; >>> >>> cleanup: >>> >> >> 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 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. It was clear to me when I wrote it ;-) John -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list