[libvirt] [PATCH 20/21] qemu_hotplug: consolidate all common detach code in qemuDomainDetachDeviceLive
Laine Stump
laine at laine.org
Fri Mar 22 14:08:17 UTC 2019
On 3/22/19 8:32 AM, Peter Krempa wrote:
> On Thu, Mar 21, 2019 at 18:29:00 -0400, Laine Stump wrote:
>> Now that all the qemuDomainDetachPrep*() functions look nearly
>> identical at the end, we can put one copy of that identical code in
>> qemuDomainDetachDeviceLive() at the point after the individual prep
>> functions have been called, and remove the duplicated code from all
>> the prep functions. The code to locate the target "detach" device
>> based on the "match" device remains, as do all device-type-specific
>> validations.
>>
>> Unfortunately there are a few things going on at once in this patch,
>> which makes it a bit more difficult to follow than the others; it was
>> just impossible to do the changes in stages and still have a
>> buildable/testable tree at each step.
>>
>> The other changes of note:
>>
>> * The individual prep functions no longer need their driver or async
>> args, so those are removed, as are the local "ret" variables, since
>> in all cases the functions just directly return -1 or 0.
>>
>> * Some of the prep functions were checking for a valid alias and/or
>> for attempts to detach a multifunction PCI device, but not all. In
>> fact, both checks are valid (or at least harmless) for *all* device
>> types, so they are removed from the prep functions, and done a
>> single time in the common function.
>>
>> (any attempts to *create* an alias when there isn't one has been
>> removed, since that is doomed to failure anyway; the only way the
>> device wouldn't have an alias is if 1) the domain was created by
>> calling virsh qemu-attach to attach an existing qemu process to
>> libvirt, and 2) the qemu command that started said process used "old
>> style" arguments for creating devices that didn't have any device
>> ids. Even if we constructed a device id for one of these devices,
>> qemu wouldn't recognize it in the device_del command anyway, so we
>> may as well fail earlier with "device missing alias" rather than
>> failing later with "couldn't delete device net0".)
>>
>> * Only one type of device has shutdown code that must not be called
>> until after *all* validation of the device is done (including
> Why don't we put that to the RemoveDevice handler for network? We
> teardown all related stuff usually after unplug of the frontend.
That is a good question! I'm not sure why network devices have this part
of their shutdown handled early. I don't think we should make that
change here though. I can insert an earlier patch to do it, hoping that
it won't break anything, or I can make a later patch that moves it after
this change, which seems kind of superfluous, but would make it simpler
to revert in case it causes a regression. What's your opinion?
>
>> checking for multifunction PCI and valid alias, which is done in the
>> toplevel common code). For this reason, the Net function has been
>> split in two, with the 2nd half (qemuDomainDetachShutdownNet())
>> called from the common function, right before sending the delete
>> command to qemu.
>>
>> Signed-off-by: Laine Stump <laine at laine.org>
>> ---
>> src/qemu/qemu_hotplug.c | 497 ++++++++++++----------------------------
>> 1 file changed, 149 insertions(+), 348 deletions(-)
>>
>> diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
>> index 5e5ffe16d3..de7a7a2c95 100644
>> --- a/src/qemu/qemu_hotplug.c
>> +++ b/src/qemu/qemu_hotplug.c
>> @@ -5208,7 +5208,7 @@ qemuDomainRemoveRedirdevDevice(virQEMUDriverPtr driver,
>> }
>>
>>
>> -static inline void
>> +static void
> Use ATTRIBUTE_UNUSED rather than inline.
I couldn't remember where was the proper place to put ATTRIBUTE_UNUSED
in the function definition, and no matter where I put it it didn't work,
so I gave up and used inline. Obviously that doesn't work for all
compilers though, so I'll figure out the right place.
>
>> qemuDomainRemoveAuditDevice(virDomainObjPtr vm,
>> virDomainDeviceDefPtr detach,
>> bool success)
More information about the libvir-list
mailing list