On 03/14/2016 11:42 AM, Andrea Bolognani wrote:
On Fri, 2016-03-11 at 14:01 -0500, John Ferlan wrote:
> Please read my logic in patch 20 before doing anything - I'm in the
> middle of it... scroll down for my short thoughts [1]...
Your comments to patch 20 are extremely detailed, so it will
take me a while to go through them and reply properly.
In the meantime, I'll give a short reply to your short
thoughts :)
>>>> virPCIDeviceListDel(pcidevs, dev);
>>>> continue;
> [1] this...
>
>>>> }
>>>> + } else {
>>>> + virPCIDeviceListDel(pcidevs, dev);
>>>> + continue;
> [1] ... and this mean...
>
>>>> }
>>>>
>>>> VIR_DEBUG("Removing PCI device %s from active list",
> [1] ... this doesn't happen!
The code goes like this:
activeDev = virPCIDeviceListFind(mgr->activePCIHostdevs, dev);
if (activeDev) {
const char *usedby_drvname;
const char *usedby_domname;
virPCIDeviceGetUsedBy(activeDev, &usedby_drvname, &usedby_domname);
if (STRNEQ_NULLABLE(drv_name, usedby_drvname) ||
STRNEQ_NULLABLE(dom_name, usedby_domname)) {
virPCIDeviceListDel(pcidevs, dev);
continue;
}
} else {
virPCIDeviceListDel(pcidevs, dev);
continue;
}
VIR_DEBUG("Removing PCI device %s from active list",
virPCIDeviceGetName(dev));
virPCIDeviceListDel(mgr->activePCIHostdevs, dev);
i++;
So 'dev' is used too look up 'activeDev' (should be 'actual',
but
the variable renaming patch has not been applyed at this point in
time) in the active list.
If no match is found, it means that the PCI device 'dev' is
referring to is not actually active, and we should remove it from
'pcidevs' (so that it doesn't get processed further) and move on
to the next one.
If a match is found, but the actual device is used either by a
different driver or by a different domain, we do the same thing:
remove 'dev' from 'pcidevs' and move on.
If neither of the above is true, namely if the device *is* active
and *is* used by the driver and domain we're processing, *then*
we proceed to remove it from the active list and, later, reattach
it to the host.
It should be noted that "making sure the devices we're about to
reattach to the host are the ones this domain is using" and
"remove devices from the active list" are split in patch 22,
with the latter being joined with "add devices to the inactive
list".
All in all, I believe this is still correct and can be pushed
along with patches 18 and 19 (after taking care of your
comments there) before moving on with the more troublesome
patch 20. Let me know whether you agree :)
I probably changed my mind 20 times while reviewing 20-22. I think in
retrospect my secondary comments were incorrect since we could get to
that removal of the device from the active list if the drv_name and
dom_name match.
I think later when we move from activeList to inactiveList things are a
bit clearer, but like we've already agreed upon - this is code that once
you step in it, it's hard to get it off the bottom of your foot.
So, I agree let's ACK this one and move on. It's worth noting that once
this patch is complete 'pcidevs' will be the list of activeDevs that
were removed.
John