On Thu, 17 Oct 2019 12:33:47 +0200
Jens Freimann <address@hidden> wrote:
On Tue, Oct 15, 2019 at 01:03:17PM -0600, Alex Williamson wrote:
>On Fri, 11 Oct 2019 13:20:05 +0200
>Jens Freimann <address@hidden> wrote:
>
>> This is implementing the host side of the net_failover concept
>> (https://www.kernel.org/doc/html/latest/networking/net_failover.html)
>>
>> Changes since v2:
>> * back out of creating failover pair when it is a non-networking
>> vfio-pci device (Alex W)
>> * handle migration state change from within the migration thread. I do a
>> timed wait on a semaphore and then check if all unplugs were
>> succesful. Added a new function to each device that checks the device
>> if the unplug for it has happened. When all devices report the succesful
>> unplug *or* the time/retries is up, continue with the migration or
>> cancel. When not all devices could be unplugged I am cancelling at the
>> moment. It is likely that we can't plug it back at the destination which
>> would result in degraded network performance.
>> * fix a few bugs regarding re-plug on migration source and target
>> * run full set of tests including migration tests
>> * add patch for libqos to tolerate new migration state
>> * squashed patch 1 and 2, added patch 8
>>
>> The general idea is that we have a pair of devices, a vfio-pci and a
>> virtio-net device. Before migration the vfio device is unplugged and data
>> flows to the virtio-net device, on the target side another vfio-pci device
>> is plugged in to take over the data-path. In the guest the net_failover
>> module will pair net devices with the same MAC address.
>>
>> * Patch 1 adds the infrastructure to hide the device for the qbus and qdev
APIs
>>
>> * Patch 2 sets a new flag for PCIDevice 'partially_hotplugged' which we
>> use to skip the unrealize code path when doing a unplug of the primary
>> device
>>
>> * Patch 3 sets the pending_deleted_event before triggering the guest
>> unplug request
>
>These only cover pcie hotplug, is this feature somehow dependent on
>pcie? There's also ACPI-based PCI hotplug, SHPC hotplug, and it looks
>like s390 has it's own version (of course) of PCI hotplug. IMO, we
>either need to make an attempt to support this universally or the
>option needs to fail if the hotplug controller doesn't support partial
>removal. Thanks,
It is possible to make it work with non-pcie hotplug but as the first
step I want to enable it for pcie only. For that I would add a check
into pci_qdev_realize(), where I also check if the device is an
ethernet device, and fail if it is not a pcie device. Would that work
for you?
How would libvirt introspect what topologies are supported rather than
trial and error? I think this solves my issue that I get bugs that the
failover pair option doesn't work on vfio-pci depending on the
topology, but it really just pushes the problem up the stack. Thanks,