diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in
index a403ba8c5bb2621e115db8d318f00449af4aa999..f05350e80fef414f659036f0a77b4a1821508e1e 100644
--- a/docs/formatdomain.html.in
+++ b/docs/formatdomain.html.in
@@ -515,9 +515,15 @@
However, the value will be rounded up to the nearest kibibyte
by libvirt, and may be further rounded to the granularity
supported by the hypervisor. Some hypervisors also enforce a
- minimum, such as
- 4000KiB. unit
since
- 0.9.11
+ minimum, such as 4000KiB.
+
+ In the case of crash, optional attribute dumpCore
+ can be used to control whether the guest memory should be
+ included in the generated coredump or not (values "on", "off").
+
+ unit
since 0.9.11,
+ dumpCore
since 0.10.2
+ (QEMU only)
currentMemory
The actual allocation of memory for the guest. This value can
be less than the maximum allocation, to allow for ballooning
diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng
index afa6bbd19f6265ff44ecb96aa51cf1ae4fddc9c4..75afac2e151f0c197ab23ed71991f0f80f098c98 100644
--- a/docs/schemas/domaincommon.rng
+++ b/docs/schemas/domaincommon.rng
@@ -470,6 +470,14 @@
+
+
+
+ on
+ off
+
+
+
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index d6f2ebfe20a3e188834fe52cb13fb85f18dc5391..4b20b72f3a5798791a1f3e91ed17622edc62afa3 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -381,6 +381,11 @@ VIR_ENUM_IMPL(virDomainSoundModel, VIR_DOMAIN_SOUND_MODEL_LAST,
"ac97",
"ich6")
+VIR_ENUM_IMPL(virDomainMemDump, VIR_DOMAIN_MEM_DUMP_LAST,
+ "default",
+ "on",
+ "off")
+
VIR_ENUM_IMPL(virDomainMemballoonModel, VIR_DOMAIN_MEMBALLOON_MODEL_LAST,
"virtio",
"xen",
@@ -8524,6 +8529,18 @@ static virDomainDefPtr virDomainDefParseXML(virCapsPtr caps,
&def->mem.cur_balloon, false) < 0)
goto error;
+ /* and info about it */
+ tmp = virXPathString("string(./memory[1]/@dumpCore)", ctxt);
+ if (tmp) {
+ def->mem.dump_core = virDomainMemDumpTypeFromString(tmp);
+
+ if (def->mem.dump_core <= 0) {
+ virReportError(VIR_ERR_XML_ERROR, _("Bad value '%s'"), tmp);
+ goto error;
+ }
+ VIR_FREE(tmp);
+ }
+
if (def->mem.cur_balloon > def->mem.max_balloon) {
/* Older libvirt could get into this situation due to
* rounding; if the discrepancy is less than 1MiB, we silently
@@ -13266,8 +13283,13 @@ virDomainDefFormatInternal(virDomainDefPtr def,
xmlIndentTreeOutput = oldIndentTreeOutput;
}
- virBufferAsprintf(buf, " %llu\n",
+ virBufferAddLit(buf, " mem.dump_core)
+ virBufferAsprintf(buf, " dumpCore='%s'",
+ virDomainMemDumpTypeToString(def->mem.dump_core));
+ virBufferAsprintf(buf, " unit='KiB'>%llu\n",
def->mem.max_balloon);
+
virBufferAsprintf(buf, " %llu\n",
def->mem.cur_balloon);
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index d719d57dad7b2d6f6c47871c6a899fb033815bf3..fae699f7d91a6884ca4346d167aaf5a5e9a01266 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -1320,6 +1320,14 @@ struct _virDomainRedirFilterDef {
virDomainRedirFilterUsbDevDefPtr *usbdevs;
};
+enum virDomainMemDump {
+ VIR_DOMAIN_MEM_DUMP_DEFAULT = 0,
+ VIR_DOMAIN_MEM_DUMP_ON,
+ VIR_DOMAIN_MEM_DUMP_OFF,
+
+ VIR_DOMAIN_MEM_DUMP_LAST,
+};
+
enum {
VIR_DOMAIN_MEMBALLOON_MODEL_VIRTIO,
VIR_DOMAIN_MEMBALLOON_MODEL_XEN,
@@ -1641,6 +1649,7 @@ struct _virDomainDef {
unsigned long long max_balloon; /* in kibibytes */
unsigned long long cur_balloon; /* in kibibytes */
bool hugepage_backed;
+ int dump_core; /* enum virDomainMemDump */
unsigned long long hard_limit; /* in kibibytes */
unsigned long long soft_limit; /* in kibibytes */
unsigned long long min_guarantee; /* in kibibytes */
@@ -2177,6 +2186,7 @@ VIR_ENUM_DECL(virDomainChrTcpProtocol)
VIR_ENUM_DECL(virDomainChrSpicevmc)
VIR_ENUM_DECL(virDomainSoundCodec)
VIR_ENUM_DECL(virDomainSoundModel)
+VIR_ENUM_DECL(virDomainMemDump)
VIR_ENUM_DECL(virDomainMemballoonModel)
VIR_ENUM_DECL(virDomainSmbiosMode)
VIR_ENUM_DECL(virDomainWatchdogModel)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 0b538950e94abb8949251be21826932b6f94ff7d..0b6068d4415bc22fccf66ff2b3ddb642cfefcee3 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -426,6 +426,8 @@ virDomainLiveConfigHelperMethod;
virDomainLoadAllConfigs;
virDomainMemballoonModelTypeFromString;
virDomainMemballoonModelTypeToString;
+virDomainMemDumpTypeFromString;
+virDomainMemDumpTypeToString;
virDomainNetDefFree;
virDomainNetFind;
virDomainNetGetActualBandwidth;