On Fri, 25 Oct 2019 12:52:32 +0200 Jens Freimann <jfreim...@redhat.com> wrote:
> On Wed, Oct 23, 2019 at 12:06:48PM -0600, Alex Williamson wrote: > >On Wed, 23 Oct 2019 10:27:02 +0200 > >Jens Freimann <jfreim...@redhat.com> wrote: > [...] > >> @@ -2101,6 +2104,20 @@ static void pci_qdev_realize(DeviceState *qdev, > >> Error **errp) > >> } > >> } > >> > >> + if (pci_dev->net_failover_pair_id) { > >> + if (!pci_is_express(pci_dev)) { > >> + error_setg(errp, "failover device is not a PCIExpress > >> device"); > >> + error_propagate(errp, local_err); > >> + return; > >> + } > > > >Did we decide we don't need to test that the device is also in a > >hotpluggable slot? Are there also multi-function considerations that > >should be prevented or documented? For example, if a user tries to > >configure both the primary and failover NICs in the same slot, I assume > >bad things will happen. > > I added this check > > if (!(pci_dev->cap_present & QEMU_PCI_CAP_MULTIFUNCTION) > && (PCI_FUNC(pci_dev->devfn) == 0)) { > qdev->allow_unplug_during_migration = true; > } else { > error_setg(errp, "failover: primary device must be in its own " > "PCI slot"); > error_propagate(errp, local_err); > pci_qdev_unrealize(DEVICE(pci_dev), NULL); > return; > } > > When I first add a vfio-pci with net_failover_pair_id=x,multifunction=on > and addr=0.0 I will now get an error. > > (qemu) device_add > vfio-pci,...,bus=root2,net_failover_pair_id=net1,multifunction=on,addr=0.0 > Error: failover: primary device must be in its own PCI slot > > If I put in a virtio-net device in slot 0 and then try to add a > vfio-pci device in the same slot I get the following error message: > > -device > virtio-net-pci,...id=net1bus=root1,failover=on,multifunction=on,addr=0.0 > (qemu) device_add > vfio-pci,id=hostdev1,host=0000:5e:00.2,bus=root1,net_failover_pair_id=net1,addr=0.1 > Error: PCI: slot 0 function 0 already ocuppied by virtio-net-pci, > new func vfio-pci cannot be exposed to guest. Cool, looks good. Thanks, Alex