On Thu, 17 Oct 2019 12:33:47 +0200 Jens Freimann <jfreim...@redhat.com> 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 <jfreim...@redhat.com> 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, Alex