On Tue, Nov 01, 2016 at 12:11:14PM +0000, Jaroslav Safka wrote:
This first change introduces xml parsing support for preallocated
shared file descriptor based memory backing.
It allows vhost-user to be used without hugepages.
New xml elements:
<memoryBacking>
<source type='file|anonymous'/>
<access mode='shared|private'/>
<allocation mode='immediate|ondemand'/>
</memoryBacking>
---
docs/schemas/domaincommon.rng | 30 +++++
src/conf/domain_conf.c | 138 ++++++++++++++++-----
src/conf/domain_conf.h | 33 +++++
.../qemuxml2xmlout-memorybacking-set.xml | 40 ++++++
.../qemuxml2xmlout-memorybacking-unset.xml | 40 ++++++
tests/qemuxml2xmltest.c | 3 +
6 files changed, 251 insertions(+), 33 deletions(-)
create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-memorybacking-set.xml
create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-memorybacking-unset.xml
Tests will fail after this patch, the source files for the tests are missing.
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 03506cb..97ef769 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -830,6 +830,21 @@ VIR_ENUM_IMPL(virDomainDiskMirrorState,
VIR_DOMAIN_DISK_MIRROR_STATE_LAST,
"abort",
"pivot")
+VIR_ENUM_IMPL(virDomainMemorySource, VIR_DOMAIN_MEMORY_SOURCE_LAST,
+ "none",
+ "file",
+ "anonymous")
+
+VIR_ENUM_IMPL(virDomainMemoryAccess, VIR_DOMAIN_MEMORY_ACCESS_LAST,
+ "none",
+ "shared",
+ "private")
+
This is the same as virNumaMemAccess from numa_conf.c, you should change that
one to this type so it's not duplicated.
+VIR_ENUM_IMPL(virDomainMemoryAllocation,
VIR_DOMAIN_MEMORY_ALLOCATION_LAST,
+ "none",
+ "immediate",
+ "ondemand")
+
VIR_ENUM_IMPL(virDomainLoader,
VIR_DOMAIN_LOADER_TYPE_LAST,
"rom",
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index 24aa79c..f50b575 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -567,6 +567,32 @@ typedef enum {
VIR_DOMAIN_DISK_MIRROR_STATE_LAST
} virDomainDiskMirrorState;
+# define VIR_DOMAIN_MEMORY_DEFAULT_PATH "/var/lib/libvirt/qemu"
+
This is wrong. You should use domain's priv->libDir which is per-domain
directory which is properly labelled and configurable. Also it is
handled so that it works on upgrades, etc.
+typedef enum {
+ VIR_DOMAIN_MEMORY_SOURCE_NONE = 0, /* No memory source defined */
+ VIR_DOMAIN_MEMORY_SOURCE_FILE, /* Memory source is set as file */
+ VIR_DOMAIN_MEMORY_SOURCE_ANONYMOUS, /* Memory source is set as anonymous */
+
+ VIR_DOMAIN_MEMORY_SOURCE_LAST,
+} virDomainMemorySource;
+
+typedef enum {
+ VIR_DOMAIN_MEMORY_ACCESS_NONE = 0, /* No memory access defined */
+ VIR_DOMAIN_MEMORY_ACCESS_SHARED, /* Memory access is set as shared */
+ VIR_DOMAIN_MEMORY_ACCESS_PRIVATE, /* Memory access is set as private */
+
+ VIR_DOMAIN_MEMORY_ACCESS_LAST,
+} virDomainMemoryAccess;
+
Same here for the virNumaMemAccess, of course.