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