mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-03-12 04:58:32 +03:00
libxl: support creating domain with VF assignment from a pool
Add codes to support creating domain with network defition of assigning SRIOV VF from a pool. Signed-off-by: Chunyan Liu <cyliu@suse.com> Signed-off-by: Jim Fehlig <jfehlig@suse.com>
This commit is contained in:
parent
4dc5d8f2c1
commit
da6bbc51fb
@ -36,6 +36,7 @@
|
||||
#include "virtime.h"
|
||||
#include "locking/domain_lock.h"
|
||||
#include "xen_common.h"
|
||||
#include "network/bridge_driver.h"
|
||||
|
||||
#define VIR_FROM_THIS VIR_FROM_LIBXL
|
||||
|
||||
@ -764,6 +765,10 @@ libxlDomainCleanup(libxlDriverPrivatePtr driver,
|
||||
if (net->ifname &&
|
||||
STRPREFIX(net->ifname, LIBXL_GENERATED_PREFIX_XEN))
|
||||
VIR_FREE(net->ifname);
|
||||
|
||||
/* cleanup actual device */
|
||||
virDomainNetRemoveHostdev(vm->def, net);
|
||||
networkReleaseActualDevice(vm->def, net);
|
||||
}
|
||||
}
|
||||
|
||||
@ -900,6 +905,46 @@ libxlDomainFreeMem(libxl_ctx *ctx, libxl_domain_config *d_config)
|
||||
return -1;
|
||||
}
|
||||
|
||||
static int
|
||||
libxlNetworkPrepareDevices(virDomainDefPtr def)
|
||||
{
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < def->nnets; i++) {
|
||||
virDomainNetDefPtr net = def->nets[i];
|
||||
int actualType;
|
||||
|
||||
/* If appropriate, grab a physical device from the configured
|
||||
* network's pool of devices, or resolve bridge device name
|
||||
* to the one defined in the network definition.
|
||||
*/
|
||||
if (networkAllocateActualDevice(def, net) < 0)
|
||||
return -1;
|
||||
|
||||
actualType = virDomainNetGetActualType(net);
|
||||
if (actualType == VIR_DOMAIN_NET_TYPE_HOSTDEV &&
|
||||
net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
|
||||
/* Each type='hostdev' network device must also have a
|
||||
* corresponding entry in the hostdevs array. For netdevs
|
||||
* that are hardcoded as type='hostdev', this is already
|
||||
* done by the parser, but for those allocated from a
|
||||
* network / determined at runtime, we need to do it
|
||||
* separately.
|
||||
*/
|
||||
virDomainHostdevDefPtr hostdev = virDomainNetGetActualHostdev(net);
|
||||
virDomainHostdevSubsysPCIPtr pcisrc = &hostdev->source.subsys.u.pci;
|
||||
|
||||
if (hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
|
||||
hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI)
|
||||
pcisrc->backend = VIR_DOMAIN_HOSTDEV_PCI_BACKEND_XEN;
|
||||
|
||||
if (virDomainHostdevInsert(def, hostdev) < 0)
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
libxlConsoleCallback(libxl_ctx *ctx, libxl_event *ev, void *for_callback)
|
||||
{
|
||||
@ -1050,6 +1095,9 @@ libxlDomainStart(libxlDriverPrivatePtr driver, virDomainObjPtr vm,
|
||||
goto cleanup;
|
||||
VIR_FREE(priv->lockState);
|
||||
|
||||
if (libxlNetworkPrepareDevices(vm->def) < 0)
|
||||
goto cleanup_dom;
|
||||
|
||||
if (libxlBuildDomainConfig(driver->reservedGraphicsPorts, vm->def,
|
||||
cfg->ctx, &d_config) < 0)
|
||||
goto cleanup_dom;
|
||||
|
@ -534,6 +534,9 @@ endif ! WITH_XEN
|
||||
|
||||
if WITH_LIBXL
|
||||
libxl_LDADDS = ../src/libvirt_driver_libxl_impl.la
|
||||
if WITH_NETWORK
|
||||
libxl_LDADDS += ../src/libvirt_driver_network_impl.la
|
||||
endif WITH_NETWORK
|
||||
libxl_LDADDS += $(LDADDS)
|
||||
|
||||
xlconfigtest_SOURCES = \
|
||||
|
Loading…
x
Reference in New Issue
Block a user