Introduce apci-generic-initiator device to the domain XML.
Example definition:
<acpi-generic-initiator>
<alias name="gi1" />
<pci-dev>dev0</pci-dev>
<numa-node>1</numa-node>
</acpi-generic-initiator>
This enables partitioning of PCI resources into multiple isolated
instances, each requiring a dedicated NUMA node definition, that can be
represented by the acpi-generic-initiator object.
Signed-off-by: Andrea Righi <arighi(a)nvidia.com>
---
src/ch/ch_domain.c | 1 +
src/conf/domain_conf.c | 128 +++++++++++++++++++++++++++++++++
src/conf/domain_conf.h | 1 +
src/conf/domain_postparse.c | 1 +
src/conf/domain_validate.c | 40 +++++++++++
src/libxl/libxl_driver.c | 6 ++
src/lxc/lxc_driver.c | 6 ++
src/qemu/qemu_command.c | 1 +
src/qemu/qemu_domain.c | 2 +
src/qemu/qemu_domain_address.c | 4 ++
src/qemu/qemu_driver.c | 3 +
src/qemu/qemu_hotplug.c | 5 ++
src/qemu/qemu_postparse.c | 1 +
src/qemu/qemu_validate.c | 1 +
src/test/test_driver.c | 4 ++
15 files changed, 204 insertions(+)
diff --git a/src/ch/ch_domain.c b/src/ch/ch_domain.c
index 4f5966adce..224a97bd79 100644
--- a/src/ch/ch_domain.c
+++ b/src/ch/ch_domain.c
@@ -159,6 +159,7 @@ chValidateDomainDeviceDef(const virDomainDeviceDef *dev,
case VIR_DOMAIN_DEVICE_CONTROLLER:
case VIR_DOMAIN_DEVICE_CHR:
case VIR_DOMAIN_DEVICE_HOSTDEV:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
break;
case VIR_DOMAIN_DEVICE_LEASE:
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 3d5836ee0e..576f617153 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -342,6 +342,7 @@ VIR_ENUM_IMPL(virDomainDevice,
"audio",
"crypto",
"pstore",
+ "acpiinitiator",
);
VIR_ENUM_IMPL(virDomainDiskDevice,
@@ -3704,6 +3705,9 @@ void virDomainDeviceDefFree(virDomainDeviceDef *def)
case VIR_DOMAIN_DEVICE_PSTORE:
virDomainPstoreDefFree(def->data.pstore);
break;
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
+ virDomainAcpiInitiatorDefFree(def->data.acpiinitiator);
+ break;
case VIR_DOMAIN_DEVICE_LAST:
case VIR_DOMAIN_DEVICE_NONE:
break;
@@ -4630,6 +4634,8 @@ virDomainDeviceGetInfo(const virDomainDeviceDef *device)
return &device->data.crypto->info;
case VIR_DOMAIN_DEVICE_PSTORE:
return &device->data.pstore->info;
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
+ return device->data.acpiinitiator->info;
/* The following devices do not contain virDomainDeviceInfo */
case VIR_DOMAIN_DEVICE_LEASE:
@@ -4738,6 +4744,9 @@ virDomainDeviceSetData(virDomainDeviceDef *device,
case VIR_DOMAIN_DEVICE_PSTORE:
device->data.pstore = devicedata;
break;
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
+ device->data.acpiinitiator = devicedata;
+ break;
case VIR_DOMAIN_DEVICE_NONE:
case VIR_DOMAIN_DEVICE_LAST:
break;
@@ -4963,6 +4972,13 @@ virDomainDeviceInfoIterateFlags(virDomainDef *def,
return rc;
}
+ device.type = VIR_DOMAIN_DEVICE_ACPI_INITIATOR;
+ for (i = 0; i < def->nacpiinitiator; i++) {
+ device.data.acpiinitiator = def->acpiinitiator[i];
+ if ((rc = cb(def, &device, def->acpiinitiator[i]->info, opaque)) != 0)
+ return rc;
+ }
+
/* If the flag below is set, make sure @cb can handle @info being NULL */
if (iteratorFlags & DOMAIN_DEVICE_ITERATE_MISSING_INFO) {
device.type = VIR_DOMAIN_DEVICE_GRAPHICS;
@@ -5023,6 +5039,7 @@ virDomainDeviceInfoIterateFlags(virDomainDef *def,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
break;
}
#endif
@@ -13402,6 +13419,60 @@ virDomainHostdevDefParseXML(virDomainXMLOption *xmlopt,
}
+static virDomainAcpiInitiatorDef *
+virDomainAcpiInitiatorDefParseXML(virDomainXMLOption *xmlopt,
+ xmlNodePtr node,
+ xmlXPathContextPtr ctxt,
+ unsigned int flags)
+{
+ virDomainAcpiInitiatorDef *def;
+ xmlNodePtr cur;
+
+ VIR_XPATH_NODE_AUTORESTORE(ctxt)
+
+ ctxt->node = node;
+
+ if (!(def = virDomainAcpiInitiatorDefNew()))
+ goto error;
+
+ for (cur = node->children; cur; cur = cur->next) {
+ if (cur->type != XML_ELEMENT_NODE)
+ continue;
+
+ if (xmlStrEqual(cur->name, BAD_CAST "alias")) {
+ def->name = virXMLPropString(cur, "name");
+ if (!def->name)
+ goto error;
+ } else if (xmlStrEqual(cur->name, BAD_CAST "pci-dev")) {
+ def->pciDev = virXMLNodeContentString(cur);
+ if (!def->pciDev)
+ goto error;
+ } else if (xmlStrEqual(cur->name, BAD_CAST "numa-node")) {
+ xmlChar *content = xmlNodeGetContent(cur);
+
+ if (!content)
+ goto error;
+ if (virStrToLong_i((const char *)content, NULL, 10, &def->numaNode)
< 0) {
+ xmlFree(content);
+ goto error;
+ }
+ xmlFree(content);
+ }
+ }
+
+ if (def->info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_NONE) {
+ if (virDomainDeviceInfoParseXML(xmlopt, node, ctxt, def->info,
+ flags) < 0)
+ goto error;
+ }
+ return def;
+
+ error:
+ virDomainAcpiInitiatorDefFree(def);
+ return NULL;
+}
+
+
static virDomainRedirdevDef *
virDomainRedirdevDefParseXML(virDomainXMLOption *xmlopt,
xmlNodePtr node,
@@ -14403,6 +14474,12 @@ virDomainDeviceDefParse(const char *xmlStr,
return NULL;
}
break;
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
+ if (!(dev->data.acpiinitiator = virDomainAcpiInitiatorDefParseXML(xmlopt,
node,
+ ctxt, flags))) {
+ return NULL;
+ }
+ break;
case VIR_DOMAIN_DEVICE_NONE:
case VIR_DOMAIN_DEVICE_LAST:
break;
@@ -19822,6 +19899,23 @@ virDomainDefParseXML(xmlXPathContextPtr ctxt,
}
VIR_FREE(nodes);
+ /* analysis of the acpi generic initiator */
+ if ((n = virXPathNodeSet("./devices/acpi-generic-initiator", ctxt,
&nodes)) < 0)
+ return NULL;
+
+ def->acpiinitiator = g_new0(virDomainAcpiInitiatorDef *, n);
+
+ for (i = 0; i < n; i++) {
+ virDomainAcpiInitiatorDef *acpiinitiator;
+
+ acpiinitiator = virDomainAcpiInitiatorDefParseXML(xmlopt, nodes[i], ctxt,
flags);
+ if (!acpiinitiator)
+ return NULL;
+
+ def->acpiinitiator[def->nacpiinitiator++] = acpiinitiator;
+ }
+ VIR_FREE(nodes);
+
/* analysis of the user namespace mapping */
if ((n = virXPathNodeSet("./idmap/uid", ctxt, &nodes)) < 0)
return NULL;
@@ -20749,6 +20843,17 @@ virDomainHostdevDefCheckABIStability(virDomainHostdevDef *src,
}
+static bool
+virDomainAcpiInitiatorDefCheckABIStability(virDomainAcpiInitiatorDef *src,
+ virDomainAcpiInitiatorDef *dst)
+{
+ if (!virDomainDeviceInfoCheckABIStability(src->info, dst->info))
+ return false;
+
+ return true;
+}
+
+
static bool
virDomainSmartcardDefCheckABIStability(virDomainSmartcardDef *src,
virDomainSmartcardDef *dst)
@@ -22097,6 +22202,11 @@ virDomainDefCheckABIStabilityFlags(virDomainDef *src,
goto error;
}
+ for (i = 0; i < src->nacpiinitiator; i++) {
+ if (!virDomainAcpiInitiatorDefCheckABIStability(src->acpiinitiator[i],
dst->acpiinitiator[i]))
+ goto error;
+ }
+
if ((!src->redirfilter && dst->redirfilter) ||
(src->redirfilter && !dst->redirfilter)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
@@ -22267,6 +22377,7 @@ virDomainDefCheckABIStabilityFlags(virDomainDef *src,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
break;
}
#endif
@@ -28313,6 +28424,19 @@ virDomainPstoreDefFormat(virBuffer *buf,
return 0;
}
+static void
+virDomainAcpiInitiatorDefFormat(virBuffer *buf,
+ virDomainAcpiInitiatorDef *acpiinitiator)
+{
+ g_auto(virBuffer) attrBuf = VIR_BUFFER_INITIALIZER;
+ g_auto(virBuffer) childBuf = VIR_BUFFER_INIT_CHILD(buf);
+
+ virBufferAsprintf(&childBuf, "<alias name=\"%s\" />\n",
acpiinitiator->name);
+ virBufferAsprintf(&childBuf, "<pci-dev>%s</pci-dev>\n",
acpiinitiator->pciDev);
+ virBufferAsprintf(&childBuf, "<numa-node>%d</numa-node>\n",
acpiinitiator->numaNode);
+
+ virXMLFormatElement(buf, "acpi-generic-initiator", &attrBuf,
&childBuf);
+}
int
virDomainDefFormatInternal(virDomainDef *def,
@@ -28788,6 +28912,9 @@ virDomainDefFormatInternalSetRootName(virDomainDef *def,
if (def->pstore)
virDomainPstoreDefFormat(buf, def->pstore, flags);
+ for (n = 0; n < def->nacpiinitiator; n++)
+ virDomainAcpiInitiatorDefFormat(buf, def->acpiinitiator[n]);
+
virBufferAdjustIndent(buf, -2);
virBufferAddLit(buf, "</devices>\n");
@@ -28948,6 +29075,7 @@ virDomainDeviceIsUSB(virDomainDeviceDef *dev,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
break;
}
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 74840cdb39..6917ba35ba 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -88,6 +88,7 @@ typedef enum {
VIR_DOMAIN_DEVICE_AUDIO,
VIR_DOMAIN_DEVICE_CRYPTO,
VIR_DOMAIN_DEVICE_PSTORE,
+ VIR_DOMAIN_DEVICE_ACPI_INITIATOR,
VIR_DOMAIN_DEVICE_LAST
} virDomainDeviceType;
diff --git a/src/conf/domain_postparse.c b/src/conf/domain_postparse.c
index bf33f29638..acdfbdc679 100644
--- a/src/conf/domain_postparse.c
+++ b/src/conf/domain_postparse.c
@@ -757,6 +757,7 @@ virDomainDeviceDefPostParseCommon(virDomainDeviceDef *dev,
case VIR_DOMAIN_DEVICE_IOMMU:
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
case VIR_DOMAIN_DEVICE_PSTORE:
ret = 0;
break;
diff --git a/src/conf/domain_validate.c b/src/conf/domain_validate.c
index 563558d920..69f92d15eb 100644
--- a/src/conf/domain_validate.c
+++ b/src/conf/domain_validate.c
@@ -2281,6 +2281,43 @@ virDomainHostdevDefValidate(const virDomainHostdevDef *hostdev)
}
+static int
+virDomainAcpiInitiatorDefValidate(const virDomainDef *def,
+ const virDomainAcpiInitiatorDef *acpiinitiator)
+{
+ const size_t nodeCount = virDomainNumaGetNodeCount(def->numa);
+ size_t i;
+
+ if (!nodeCount) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("No NUMA node defined"));
+ return -1;
+ }
+
+ for (i = 0; i < nodeCount; i++)
+ if (acpiinitiator->numaNode == i)
+ break;
+ if (i == nodeCount) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("acpi-generic-initiator must have a valid NUMA node"));
+ return -1;
+ }
+
+ if (acpiinitiator->name[0] == '\0') {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("acpi-generic-initiator must have a name"));
+ return -1;
+ }
+
+ if (acpiinitiator->pciDev[0] == '\0') {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("acpi-generic-initiator must have a PCI device assigned"));
+ return -1;
+ }
+
+ return 0;
+}
+
/**
* virDomainMemoryGetMappedSize:
* @mem: memory device definition
@@ -3199,6 +3236,9 @@ virDomainDeviceDefValidateInternal(const virDomainDeviceDef *dev,
case VIR_DOMAIN_DEVICE_PSTORE:
return virDomainPstoreDefValidate(dev->data.pstore);
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
+ return virDomainAcpiInitiatorDefValidate(def, dev->data.acpiinitiator);
+
case VIR_DOMAIN_DEVICE_LEASE:
case VIR_DOMAIN_DEVICE_WATCHDOG:
case VIR_DOMAIN_DEVICE_HUB:
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index edf7b37581..1c9e57305d 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -3495,6 +3495,7 @@ libxlDomainAttachDeviceLive(libxlDriverPrivate *driver,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("device type '%1$s' cannot be attached"),
virDomainDeviceTypeToString(dev->type));
@@ -3603,6 +3604,7 @@ libxlDomainAttachDeviceConfig(virDomainDef *vmdef,
virDomainDeviceDef *dev)
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("persistent attach of device is not supported"));
return -1;
@@ -3972,6 +3974,7 @@ libxlDomainDetachDeviceLive(libxlDriverPrivate *driver,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("device type '%1$s' cannot be detached"),
virDomainDeviceTypeToString(dev->type));
@@ -4063,6 +4066,7 @@ libxlDomainDetachDeviceConfig(virDomainDef *vmdef,
virDomainDeviceDef *dev)
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("persistent detach of device is not supported"));
return -1;
@@ -4126,6 +4130,7 @@ libxlDomainUpdateDeviceLive(virDomainObj *vm, virDomainDeviceDef
*dev)
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("device type '%1$s' cannot be updated"),
virDomainDeviceTypeToString(dev->type));
@@ -4189,6 +4194,7 @@ libxlDomainUpdateDeviceConfig(virDomainDef *vmdef,
virDomainDeviceDef *dev)
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("persistent update of device is not supported"));
return -1;
diff --git a/src/lxc/lxc_driver.c b/src/lxc/lxc_driver.c
index 22266c1ab6..4caf75af2f 100644
--- a/src/lxc/lxc_driver.c
+++ b/src/lxc/lxc_driver.c
@@ -3024,6 +3024,7 @@ lxcDomainAttachDeviceConfig(virDomainDef *vmdef,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("persistent attach of device is not supported"));
break;
@@ -3090,6 +3091,7 @@ lxcDomainUpdateDeviceConfig(virDomainDef *vmdef,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("persistent update of device is not supported"));
break;
@@ -3172,6 +3174,7 @@ lxcDomainDetachDeviceConfig(virDomainDef *vmdef,
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
_("persistent detach of device is not supported"));
break;
@@ -3274,6 +3277,7 @@ lxcDomainAttachDeviceMknodHelper(pid_t pid G_GNUC_UNUSED,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
virReportError(VIR_ERR_INTERNAL_ERROR,
_("Unexpected device type %1$d"),
data->def->type);
@@ -3950,6 +3954,7 @@ lxcDomainAttachDeviceLive(virLXCDriver *driver,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("device type '%1$s' cannot be attached"),
virDomainDeviceTypeToString(dev->type));
@@ -4368,6 +4373,7 @@ lxcDomainDetachDeviceLive(virLXCDriver *driver,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("device type '%1$s' cannot be detached"),
virDomainDeviceTypeToString(dev->type));
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
index 54130ac4f0..acae9240f7 100644
--- a/src/qemu/qemu_command.c
+++ b/src/qemu/qemu_command.c
@@ -991,6 +991,7 @@ qemuBuildVirtioDevGetConfigDev(const virDomainDeviceDef *device,
case VIR_DOMAIN_DEVICE_IOMMU:
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
case VIR_DOMAIN_DEVICE_LAST:
default:
break;
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index df1ed0223d..008748227d 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -8721,6 +8721,7 @@ qemuDomainPrepareChardevSourceOne(virDomainDeviceDef *dev,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
break;
}
@@ -10655,6 +10656,7 @@ qemuDomainDeviceBackendChardevForeachOne(virDomainDeviceDef *dev,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
/* no chardev backend */
break;
}
diff --git a/src/qemu/qemu_domain_address.c b/src/qemu/qemu_domain_address.c
index 970ae3949d..aac0ca7ece 100644
--- a/src/qemu/qemu_domain_address.c
+++ b/src/qemu/qemu_domain_address.c
@@ -471,6 +471,7 @@ qemuDomainDeviceSupportZPCI(virDomainDeviceDef *device)
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
break;
case VIR_DOMAIN_DEVICE_NONE:
@@ -819,6 +820,9 @@ qemuDomainDeviceCalculatePCIConnectFlags(virDomainDeviceDef *dev,
return pciFlags;
}
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
+ return pciFlags;
+
case VIR_DOMAIN_DEVICE_MEMBALLOON:
switch (dev->data.memballoon->model) {
case VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO_TRANSITIONAL:
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 1d0da1028f..1ab0e6c0c5 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -6877,6 +6877,7 @@ qemuDomainAttachDeviceConfig(virDomainDef *vmdef,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
case VIR_DOMAIN_DEVICE_LAST:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("persistent attach of device '%1$s' is not
supported"),
@@ -7096,6 +7097,7 @@ qemuDomainDetachDeviceConfig(virDomainDef *vmdef,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
case VIR_DOMAIN_DEVICE_LAST:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("persistent detach of device '%1$s' is not
supported"),
@@ -7222,6 +7224,7 @@ qemuDomainUpdateDeviceConfig(virDomainDef *vmdef,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
case VIR_DOMAIN_DEVICE_LAST:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("persistent update of device '%1$s' is not
supported"),
diff --git a/src/qemu/qemu_hotplug.c b/src/qemu/qemu_hotplug.c
index 28ca321c5c..d043623767 100644
--- a/src/qemu/qemu_hotplug.c
+++ b/src/qemu/qemu_hotplug.c
@@ -3534,6 +3534,7 @@ qemuDomainAttachDeviceLive(virDomainObj *vm,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
case VIR_DOMAIN_DEVICE_LAST:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("live attach of device '%1$s' is not
supported"),
@@ -5453,6 +5454,7 @@ qemuDomainRemoveAuditDevice(virDomainObj *vm,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
case VIR_DOMAIN_DEVICE_LAST:
/* libvirt doesn't yet support detaching these devices */
break;
@@ -5558,6 +5560,7 @@ qemuDomainRemoveDevice(virQEMUDriver *driver,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
case VIR_DOMAIN_DEVICE_LAST:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("don't know how to remove a %1$s device"),
@@ -6453,6 +6456,7 @@ qemuDomainDetachDeviceLive(virDomainObj *vm,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
case VIR_DOMAIN_DEVICE_LAST:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("live detach of device '%1$s' is not
supported"),
@@ -7445,6 +7449,7 @@ qemuDomainUpdateDeviceLive(virDomainObj *vm,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
case VIR_DOMAIN_DEVICE_LAST:
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("live update of device '%1$s' is not
supported"),
diff --git a/src/qemu/qemu_postparse.c b/src/qemu/qemu_postparse.c
index 49009ae2e4..3ec1514943 100644
--- a/src/qemu/qemu_postparse.c
+++ b/src/qemu/qemu_postparse.c
@@ -906,6 +906,7 @@ qemuDomainDeviceDefPostParse(virDomainDeviceDef *dev,
case VIR_DOMAIN_DEVICE_RNG:
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
ret = 0;
break;
diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c
index 3e3e368da3..d92770dc68 100644
--- a/src/qemu/qemu_validate.c
+++ b/src/qemu/qemu_validate.c
@@ -5527,6 +5527,7 @@ qemuValidateDomainDeviceDef(const virDomainDeviceDef *dev,
case VIR_DOMAIN_DEVICE_PSTORE:
return qemuValidateDomainDeviceDefPstore(dev->data.pstore, def, qemuCaps);
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
case VIR_DOMAIN_DEVICE_LEASE:
case VIR_DOMAIN_DEVICE_PANIC:
case VIR_DOMAIN_DEVICE_NONE:
diff --git a/src/test/test_driver.c b/src/test/test_driver.c
index 6f18b2b2c8..5c706a1035 100644
--- a/src/test/test_driver.c
+++ b/src/test/test_driver.c
@@ -10459,6 +10459,7 @@ testDomainAttachDeviceLive(virDomainObj *vm,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
case VIR_DOMAIN_DEVICE_LAST:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("live attach of device '%1$s' is not
supported"),
@@ -10602,6 +10603,7 @@ testDomainUpdateDevice(virDomainDef *vmdef,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
case VIR_DOMAIN_DEVICE_LAST:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("persistent update of device '%1$s' is not
supported"),
@@ -10973,6 +10975,7 @@ testDomainRemoveDevice(testDriver *driver,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
case VIR_DOMAIN_DEVICE_LAST:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("live detach of device '%1$s' is not
supported"),
@@ -11044,6 +11047,7 @@ testDomainDetachDeviceLive(testDriver *driver,
case VIR_DOMAIN_DEVICE_AUDIO:
case VIR_DOMAIN_DEVICE_CRYPTO:
case VIR_DOMAIN_DEVICE_PSTORE:
+ case VIR_DOMAIN_DEVICE_ACPI_INITIATOR:
case VIR_DOMAIN_DEVICE_LAST:
virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("live detach of device '%1$s' is not
supported"),
--
2.48.1