diff --git a/meson.build b/meson.build index cfdccd1d05..582a178c78 100644 --- a/meson.build +++ b/meson.build @@ -676,6 +676,7 @@ headers = [ 'sched.h', 'sys/auxv.h', 'sys/ioctl.h', + 'sys/mman.h', 'sys/mount.h', 'sys/syscall.h', 'sys/ucred.h', diff --git a/src/qemu/qemu.conf.in b/src/qemu/qemu.conf.in index e1f3046177..59af58b4d4 100644 --- a/src/qemu/qemu.conf.in +++ b/src/qemu/qemu.conf.in @@ -710,8 +710,8 @@ # Determine if guest RAM is included in QEMU core dumps. By # default guest RAM will be excluded if a new enough QEMU is -# present. Setting this to '1' will force guest RAM to always -# be included in QEMU core dumps. +# present and host kernel supports it. Setting this to '1' will +# force guest RAM to always be included in QEMU core dumps. # # This setting will be ignored if the guest XML has set the # dumpCore attribute on the element. diff --git a/src/qemu/qemu_conf.c b/src/qemu/qemu_conf.c index 0d90a87392..a912790c3c 100644 --- a/src/qemu/qemu_conf.c +++ b/src/qemu/qemu_conf.c @@ -26,6 +26,10 @@ #include #include +#ifdef WITH_SYS_MMAN_H +# include +#endif + #include "virerror.h" #include "qemu_conf.h" #include "qemu_capabilities.h" @@ -287,6 +291,14 @@ virQEMUDriverConfig *virQEMUDriverConfigNew(bool privileged, cfg->deprecationBehavior = g_strdup("none"); cfg->storageUseNbdkit = USE_NBDKIT_DEFAULT; +#ifndef MADV_DONTDUMP + /* QEMU uses Linux extensions to madvise() (MADV_DODUMP/MADV_DONTDUMP) to + * include/exclude guest memory from core dump. These might be unavailable + * on some systems. Provide sane default. */ + VIR_INFO("Host kernel doesn't support MADV_DONTDUMP. Enabling dump_guest_core"); + cfg->dumpGuestCore = true; +#endif + return g_steal_pointer(&cfg); } diff --git a/tests/testutilsqemu.c b/tests/testutilsqemu.c index ee6cae218a..4daee432e5 100644 --- a/tests/testutilsqemu.c +++ b/tests/testutilsqemu.c @@ -407,6 +407,8 @@ int qemuTestDriverInit(virQEMUDriver *driver) cfg->hugetlbfs[0].deflt = true; cfg->hugetlbfs[1].size = 1048576; + cfg->dumpGuestCore = false; + driver->privileged = true; return 0;