提交 1610b71a 编写于 作者: S Shradha Shah 提交者: Laine Stump

qemu: support netdevs from <forward mode='hostdev'> networks

For network devices allocated from a network with <forward
mode='hostdev'>, there is a need to add the newly minted hostdev to
the hostdevs array.

In this case we also need to call qemuPrepareHostDevices just for this
one device, as the standard call to initialize all the hostdevs that
were defined directly in the domain's configuration has already been
made by the time we allocate a device from a libvirt network, and thus
have something that needs initializing.
Signed-off-by: NShradha Shah <sshah@solarflare.com>
上级 a818f8cf
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
#include <config.h> #include <config.h>
#include "qemu_command.h" #include "qemu_command.h"
#include "qemu_hostdev.h"
#include "qemu_capabilities.h" #include "qemu_capabilities.h"
#include "qemu_bridge_filter.h" #include "qemu_bridge_filter.h"
#include "cpu/cpu.h" #include "cpu/cpu.h"
...@@ -5222,12 +5223,41 @@ qemuBuildCommandLine(virConnectPtr conn, ...@@ -5222,12 +5223,41 @@ qemuBuildCommandLine(virConnectPtr conn,
actualType = virDomainNetGetActualType(net); actualType = virDomainNetGetActualType(net);
if (actualType == VIR_DOMAIN_NET_TYPE_HOSTDEV) { if (actualType == VIR_DOMAIN_NET_TYPE_HOSTDEV) {
/* type='hostdev' interfaces are handled in codepath if (net->type == VIR_DOMAIN_NET_TYPE_NETWORK) {
* for standard hostdev (NB: when there is a network virDomainHostdevDefPtr hostdev = virDomainNetGetActualHostdev(net);
* with <forward mode='hostdev', there will need to be virDomainHostdevDefPtr found;
* code here that adds the newly minted hostdev to the /* For a network with <forward mode='hostdev'>, there is a need to
* hostdevs array). * add the newly minted hostdev to the hostdevs array.
*/ */
if (qemuAssignDeviceHostdevAlias(def, hostdev,
(def->nhostdevs-1)) < 0) {
goto error;
}
if (virDomainHostdevFind(def, hostdev, &found) < 0) {
if (virDomainHostdevInsert(def, hostdev) < 0) {
virReportOOMError();
goto error;
}
if (qemuPrepareHostdevPCIDevices(driver, def->name, def->uuid,
&hostdev, 1) < 0) {
goto error;
}
}
else {
virReportError(VIR_ERR_INTERNAL_ERROR,
_("PCI device %04x:%02x:%02x.%x "
"allocated from network %s is already "
"in use by domain %s"),
hostdev->source.subsys.u.pci.domain,
hostdev->source.subsys.u.pci.bus,
hostdev->source.subsys.u.pci.slot,
hostdev->source.subsys.u.pci.function,
net->data.network.name,
def->name);
goto error;
}
}
continue; continue;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册