[libvirt] [PATCH v3 10/18] qemu: set/use proper pciConnectFlags during hotplug
Andrea Bolognani
abologna at redhat.com
Thu Oct 6 13:01:11 UTC 2016
On Tue, 2016-09-20 at 15:14 -0400, Laine Stump wrote:
> Before now, all the qemu hotplug functions assumed that all devices to
> be hotplugged were legacy PCI endpoint devices
> (VIR_PCI_CONNECT_TYPE_PCI_DEVICE). This worked out "okay", because all
> devices *are* legacy PCI endpoint devices on x86/440fx machinetypes,
> and hotplug didn't work properly on machinetypes using PCIe anyway
> (hotplugging onto a legacy PCI slot doesn't work, and until commit
> b87703cf any attempt to manually specify a PCIe address for a
> hotplugged device would be erroneously rejected).
>
> This patch makes all qemu hotplug operations honor the pciConnectFlags
> set by the single all-knowing function
> qemuDomainDeviceConnectFlagsInternal().
[...]
> @@ -485,17 +485,17 @@ virDomainPCIAddressReserveSlot(virDomainPCIAddressSetPtr addrs,
>
> int
> virDomainPCIAddressEnsureAddr(virDomainPCIAddressSetPtr addrs,
> - virDomainDeviceInfoPtr dev)
> + virDomainDeviceInfoPtr dev,
> + virDomainPCIConnectFlags flags)
> {
> int ret = -1;
> char *addrStr = NULL;
> - /* Flags should be set according to the particular device,
> - * but only the caller knows the type of device. Currently this
> - * function is only used for hot-plug, though, and hot-plug is
> - * only supported for standard PCI devices, so we can safely use
> - * the setting below */
> - virDomainPCIConnectFlags flags = (VIR_PCI_CONNECT_HOTPLUGGABLE |
> - VIR_PCI_CONNECT_TYPE_PCI_DEVICE);
> +
> + /* if pciConnectFlags is 0, the particular model of this device
s/pciConnectFlags/flags/
[...]
> @@ -2032,6 +2032,33 @@ qemuDomainAssignAddresses(virDomainDefPtr def,
> return 0;
> }
>
> +/**
> + * qemuDomainEnsurePCIAddress:
> + *
> + * if @dev should have a PCI address but doesn't, assign
> + * an address on a compatible PCI bus. Validate that any
> + * existing address is on a compatible bus.
> + *
> + * @obj: the virDomainObjPtr for the domain. This will include
> + * qemuCaps and address cache (if there is one)
> + *
> + * @dev: the device that we need to ensure has a PCI address
> + *
> + * returns 0 on success (and any new address set in dev->...info) -1
> + * on failure.
The new address is set, not returned, so that information
doesn't belong in this section. The description already
mention the fact that an address will be assigned if needed
anyway.
[...]
> @@ -1584,10 +1590,12 @@ qemuDomainChrRemove(virDomainDefPtr vmdef,
> }
>
> static int
> -qemuDomainAttachChrDeviceAssignAddr(virDomainDefPtr def,
> +qemuDomainAttachChrDeviceAssignAddr(virDomainObjPtr vm,
> qemuDomainObjPrivatePtr priv,
Please change the type of the first argument from
virDomainDefPtr to virDomainObjPtr in a separate commit,
and use that chance to remove the qemuDomainObjPrivatePtr
argument altogether - you can retrieve it from @vm the
same way you already retrieve the DomainDef.
ACK
--
Andrea Bolognani / Red Hat / Virtualization
More information about the libvir-list
mailing list