Introduce the definition of a new acpi-generic-initiator object that can
be used to link a PCI device with multiple NUMA nodes.
Link:
https://mail.gnu.org/archive/html/qemu-arm/2024-03/msg00358.html
Signed-off-by: Andrea Righi <arighi(a)nvidia.com>
---
src/conf/domain_conf.c | 25 +++++++++++++++++++++++++
src/conf/domain_conf.h | 13 +++++++++++++
src/conf/schemas/domaincommon.rng | 19 +++++++++++++++++++
src/conf/virconftypes.h | 2 ++
4 files changed, 59 insertions(+)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 49555efc56..3d5836ee0e 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -3457,6 +3457,19 @@ virDomainHostdevDefNew(void)
}
+virDomainAcpiInitiatorDef *
+virDomainAcpiInitiatorDefNew(void)
+{
+ virDomainAcpiInitiatorDef *def;
+
+ def = g_new0(virDomainAcpiInitiatorDef, 1);
+
+ def->info = g_new0(virDomainDeviceInfo, 1);
+
+ return def;
+}
+
+
static virDomainTPMDef *
virDomainTPMDefNew(virDomainXMLOption *xmlopt)
{
@@ -3517,6 +3530,18 @@ void virDomainHostdevDefFree(virDomainHostdevDef *def)
g_free(def);
}
+void virDomainAcpiInitiatorDefFree(virDomainAcpiInitiatorDef *def)
+{
+ if (!def)
+ return;
+
+ VIR_FREE(def->name);
+ VIR_FREE(def->pciDev);
+
+ virDomainDeviceInfoFree(def->info);
+ g_free(def);
+}
+
void virDomainHubDefFree(virDomainHubDef *def)
{
if (!def)
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 9da6586e66..74840cdb39 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -122,6 +122,7 @@ struct _virDomainDeviceDef {
virDomainAudioDef *audio;
virDomainCryptoDef *crypto;
virDomainPstoreDef *pstore;
+ virDomainAcpiInitiatorDef *acpiinitiator;
} data;
};
@@ -353,6 +354,13 @@ typedef enum {
VIR_DOMAIN_STARTUP_POLICY_LAST
} virDomainStartupPolicy;
+struct _virDomainAcpiInitiatorDef {
+ char *name;
+ char *pciDev;
+ int numaNode;
+ virDomainDeviceInfo *info; /* Guest address */
+};
+
/* basic device for direct passthrough */
struct _virDomainHostdevDef {
/* If 'parentnet' is non-NULL it means this host dev was
@@ -3210,6 +3218,9 @@ struct _virDomainDef {
size_t ntpms;
virDomainTPMDef **tpms;
+ size_t nacpiinitiator;
+ virDomainAcpiInitiatorDef **acpiinitiator;
+
/* Only 1 */
virDomainMemballoonDef *memballoon;
virDomainNVRAMDef *nvram;
@@ -3690,6 +3701,8 @@ virDomainVideoDef *virDomainVideoDefNew(virDomainXMLOption
*xmlopt);
void virDomainVideoDefFree(virDomainVideoDef *def);
G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainVideoDef, virDomainVideoDefFree);
void virDomainVideoDefClear(virDomainVideoDef *def);
+virDomainAcpiInitiatorDef *virDomainAcpiInitiatorDefNew(void);
+void virDomainAcpiInitiatorDefFree(virDomainAcpiInitiatorDef *def);
virDomainHostdevDef *virDomainHostdevDefNew(void);
void virDomainHostdevDefFree(virDomainHostdevDef *def);
void virDomainHubDefFree(virDomainHubDef *def);
diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng
index 3328a63205..1a8846246e 100644
--- a/src/conf/schemas/domaincommon.rng
+++ b/src/conf/schemas/domaincommon.rng
@@ -6837,6 +6837,7 @@
<ref name="shmem"/>
<ref name="memorydev"/>
<ref name="crypto"/>
+ <ref name="acpi-generic-initiator"/>
</choice>
</zeroOrMore>
<zeroOrMore>
@@ -7656,6 +7657,24 @@
</element>
</define>
+ <define name="acpi-generic-initiator">
+ <element name="acpi-generic-initiator">
+ <interleave>
+ <element name="alias">
+ <attribute name="name">
+ <text/>
+ </attribute>
+ </element>
+ <element name="pci-dev">
+ <text/>
+ </element>
+ <element name="numa-node">
+ <text/>
+ </element>
+ </interleave>
+ </element>
+ </define>
+
<define name="crypto">
<element name="crypto">
<attribute name="model">
diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h
index 59be61cea4..564c06638e 100644
--- a/src/conf/virconftypes.h
+++ b/src/conf/virconftypes.h
@@ -118,6 +118,8 @@ typedef struct _virDomainHostdevCaps virDomainHostdevCaps;
typedef struct _virDomainHostdevDef virDomainHostdevDef;
+typedef struct _virDomainAcpiInitiatorDef virDomainAcpiInitiatorDef;
+
typedef struct _virDomainHostdevSubsys virDomainHostdevSubsys;
typedef struct _virDomainHostdevSubsysMediatedDev virDomainHostdevSubsysMediatedDev;
--
2.48.1