Hi ----- Original Message ----- > On Mon, Nov 06, 2017 at 01:09:09PM +0100, marcandre.lureau@xxxxxxxxxx wrote: > >From: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx> > > > >Starting from qemu 2.11, the `-device vmcoreinfo` will create a fw_cfg > >entry for a guest to store dump details, necessary to process kernel > >dump with KASLR enabled and providing additional kernel details. > > > >Since the device is a singleton and shouldn't use additional hardware > >resources, I decided to map this to a <feature> element in the libvirt > >domain XML. Feel free to argue and decide if it is better to have it > >under <devices> instead. > > > > So is this similar to -fw_cfg name=etc/vmcoreinfo,file=X but in this case it > is > not backed by a file, but collected by QEMU itself? correct > > I'm OK with this being a feature. Should I split the commit or can I resubmit like this without RFC? Thanks > > >The device is arm/x86 only for now (targets that support fw_cfg+dma). > > > >Related to: > >https://bugzilla.redhat.com/show_bug.cgi?id=1395248 > > > >Signed-off-by: Marc-André Lureau <marcandre.lureau@xxxxxxxxxx> > >--- > > docs/formatdomain.html.in | 4 +++ > > docs/schemas/domaincommon.rng | 5 +++ > > src/conf/domain_conf.c | 5 ++- > > src/conf/domain_conf.h | 1 + > > src/qemu/qemu_capabilities.c | 2 ++ > > src/qemu/qemu_capabilities.h | 1 + > > src/qemu/qemu_command.c | 26 +++++++++++++++ > > .../qemuxml2argvdata/qemuxml2argv-vmcoreinfo.args | 25 ++++++++++++++ > > tests/qemuxml2argvdata/qemuxml2argv-vmcoreinfo.xml | 28 ++++++++++++++++ > > tests/qemuxml2argvtest.c | 1 + > > .../qemuxml2xmlout-vmcoreinfo.xml | 38 > > ++++++++++++++++++++++ > > tests/qemuxml2xmltest.c | 1 + > > 12 files changed, 136 insertions(+), 1 deletion(-) > > create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-vmcoreinfo.args > > create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-vmcoreinfo.xml > > create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-vmcoreinfo.xml > > > >diff --git a/docs/formatdomain.html.in b/docs/formatdomain.html.in > >index 92e14a919..d87a32a89 100644 > >--- a/docs/formatdomain.html.in > >+++ b/docs/formatdomain.html.in > >@@ -1878,6 +1878,10 @@ > > which is also known as a split I/O APIC mode. > > <span class="since">Since 3.4.0</span> (QEMU/KVM only) > > </dd> > >+ <dt><code>vmcoreinfo</code></dt> > >+ <dd>Enable QEMU vmcoreinfo device to let the guest kernel save debug > >+ details. <span class="since">Since 3.10.0</span> (QEMU only) > >+ </dd> > > </dl> > > > > <h3><a id="elementsTime">Time keeping</a></h3> > >diff --git a/docs/schemas/domaincommon.rng b/docs/schemas/domaincommon.rng > >index 9cec1a063..86cbe2c8c 100644 > >--- a/docs/schemas/domaincommon.rng > >+++ b/docs/schemas/domaincommon.rng > >@@ -4736,6 +4736,11 @@ > > <optional> > > <ref name="ioapic"/> > > </optional> > >+ <optional> > >+ <element name="vmcoreinfo"> > >+ <empty/> > >+ </element> > >+ </optional> > > </interleave> > > </element> > > </optional> > >diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > >index 400e90032..3a9b56cd2 100644 > >--- a/src/conf/domain_conf.c > >+++ b/src/conf/domain_conf.c > >@@ -148,7 +148,8 @@ VIR_ENUM_IMPL(virDomainFeature, VIR_DOMAIN_FEATURE_LAST, > > "vmport", > > "gic", > > "smm", > >- "ioapic") > >+ "ioapic", > >+ "vmcoreinfo") > > > > VIR_ENUM_IMPL(virDomainCapabilitiesPolicy, > > VIR_DOMAIN_CAPABILITIES_POLICY_LAST, > > "default", > >@@ -18710,6 +18711,7 @@ virDomainDefParseXML(xmlDocPtr xml, > > case VIR_DOMAIN_FEATURE_VIRIDIAN: > > case VIR_DOMAIN_FEATURE_PRIVNET: > > case VIR_DOMAIN_FEATURE_HYPERV: > >+ case VIR_DOMAIN_FEATURE_VMCOREINFO: > > case VIR_DOMAIN_FEATURE_KVM: > > def->features[val] = VIR_TRISTATE_SWITCH_ON; > > break; > >@@ -26052,6 +26054,7 @@ virDomainDefFormatInternal(virDomainDefPtr def, > > case VIR_DOMAIN_FEATURE_ACPI: > > case VIR_DOMAIN_FEATURE_PAE: > > case VIR_DOMAIN_FEATURE_VIRIDIAN: > >+ case VIR_DOMAIN_FEATURE_VMCOREINFO: > > case VIR_DOMAIN_FEATURE_PRIVNET: > > switch ((virTristateSwitch) def->features[i]) { > > case VIR_TRISTATE_SWITCH_ABSENT: > >diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h > >index be38792c6..add668025 100644 > >--- a/src/conf/domain_conf.h > >+++ b/src/conf/domain_conf.h > >@@ -1723,6 +1723,7 @@ typedef enum { > > VIR_DOMAIN_FEATURE_GIC, > > VIR_DOMAIN_FEATURE_SMM, > > VIR_DOMAIN_FEATURE_IOAPIC, > >+ VIR_DOMAIN_FEATURE_VMCOREINFO, > > > > VIR_DOMAIN_FEATURE_LAST > > } virDomainFeature; > >diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c > >index 7cb091056..44a2833a7 100644 > >--- a/src/qemu/qemu_capabilities.c > >+++ b/src/qemu/qemu_capabilities.c > >@@ -443,6 +443,7 @@ VIR_ENUM_IMPL(virQEMUCaps, QEMU_CAPS_LAST, > > /* 270 */ > > "vxhs", > > "virtio-blk.num-queues", > >+ "vmcoreinfo", > > ); > > > > > >@@ -1670,6 +1671,7 @@ struct virQEMUCapsStringFlags virQEMUCapsObjectTypes[] > >= { > > { "pcie-root-port", QEMU_CAPS_DEVICE_PCIE_ROOT_PORT }, > > { "qemu-xhci", QEMU_CAPS_DEVICE_QEMU_XHCI }, > > { "spapr-pci-host-bridge", QEMU_CAPS_DEVICE_SPAPR_PCI_HOST_BRIDGE }, > >+ { "vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO }, > > }; > > > > static struct virQEMUCapsStringFlags virQEMUCapsObjectPropsVirtioBalloon[] > > = { > >diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h > >index cacc2b77e..0cd9755a8 100644 > >--- a/src/qemu/qemu_capabilities.h > >+++ b/src/qemu/qemu_capabilities.h > >@@ -429,6 +429,7 @@ typedef enum { > > /* 270 */ > > QEMU_CAPS_VXHS, /* -drive file.driver=vxhs via query-qmp-schema */ > > QEMU_CAPS_VIRTIO_BLK_NUM_QUEUES, /* virtio-blk-*.num-queues */ > >+ QEMU_CAPS_DEVICE_VMCOREINFO, /* -device vmcoreinfo */ > > > > QEMU_CAPS_LAST /* this must always be the last item */ > > } virQEMUCapsFlags; > >diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c > >index 8708b79ed..b903b27b9 100644 > >--- a/src/qemu/qemu_command.c > >+++ b/src/qemu/qemu_command.c > >@@ -9727,6 +9727,29 @@ qemuBuildTPMCommandLine(virCommandPtr cmd, > > } > > > > > >+static int > >+qemuBuildVMCoreInfoCommandLine(virCommandPtr cmd, > >+ const virDomainDef *def, > >+ virQEMUCapsPtr qemuCaps) > >+{ > >+ virTristateSwitch vmci = def->features[VIR_DOMAIN_FEATURE_VMCOREINFO]; > >+ > >+ if (vmci != VIR_TRISTATE_SWITCH_ON) { > >+ return 0; > >+ } > >+ > >+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMCOREINFO)) { > >+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s", > >+ _("vmcoreinfo is not available " > >+ "with this QEMU binary")); > >+ return -1; > >+ } > >+ > >+ virCommandAddArgList(cmd, "-device", "vmcoreinfo", NULL); > >+ return 0; > >+} > >+ > >+ > > static int > > qemuBuildPanicCommandLine(virCommandPtr cmd, > > const virDomainDef *def, > >@@ -10146,6 +10169,9 @@ qemuBuildCommandLine(virQEMUDriverPtr driver, > > if (qemuBuildNVRAMCommandLine(cmd, def, qemuCaps) < 0) > > goto error; > > > >+ if (qemuBuildVMCoreInfoCommandLine(cmd, def, qemuCaps) < 0) > >+ goto error; > >+ > > if (snapshot) > > virCommandAddArgList(cmd, "-loadvm", snapshot->def->name, NULL); > > > >diff --git a/tests/qemuxml2argvdata/qemuxml2argv-vmcoreinfo.args > >b/tests/qemuxml2argvdata/qemuxml2argv-vmcoreinfo.args > >new file mode 100644 > >index 000000000..772e5a071 > >--- /dev/null > >+++ b/tests/qemuxml2argvdata/qemuxml2argv-vmcoreinfo.args > >@@ -0,0 +1,25 @@ > >+LC_ALL=C \ > >+PATH=/bin \ > >+HOME=/home/test \ > >+USER=test \ > >+LOGNAME=test \ > >+QEMU_AUDIO_DRV=none \ > >+/usr/bin/qemu-system-i686 \ > >+-name QEMUGuest1 \ > >+-S \ > >+-M pc \ > >+-m 214 \ > >+-smp 1,sockets=1,cores=1,threads=1 \ > >+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \ > >+-nographic \ > >+-nodefaults \ > >+-chardev > >socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\ > >+server,nowait \ > >+-mon chardev=charmonitor,id=monitor,mode=readline \ > >+-no-acpi \ > >+-boot c \ > >+-usb \ > >+-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \ > >+-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \ > >+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3 \ > >+-device vmcoreinfo > >diff --git a/tests/qemuxml2argvdata/qemuxml2argv-vmcoreinfo.xml > >b/tests/qemuxml2argvdata/qemuxml2argv-vmcoreinfo.xml > >new file mode 100644 > >index 000000000..f8e586531 > >--- /dev/null > >+++ b/tests/qemuxml2argvdata/qemuxml2argv-vmcoreinfo.xml > >@@ -0,0 +1,28 @@ > >+<domain type='qemu'> > >+ <name>QEMUGuest1</name> > >+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> > >+ <memory unit='KiB'>219100</memory> > >+ <currentMemory unit='KiB'>219100</currentMemory> > >+ <vcpu placement='static'>1</vcpu> > >+ <os> > >+ <type arch='i686' machine='pc'>hvm</type> > >+ <boot dev='hd'/> > >+ </os> > >+ <features> > >+ <vmcoreinfo/> > >+ </features> > >+ <clock offset='utc'/> > >+ <on_poweroff>destroy</on_poweroff> > >+ <on_reboot>restart</on_reboot> > >+ <on_crash>destroy</on_crash> > >+ <devices> > >+ <emulator>/usr/bin/qemu-system-i686</emulator> > >+ <disk type='block' device='disk'> > >+ <source dev='/dev/HostVG/QEMUGuest1'/> > >+ <target dev='hda' bus='ide'/> > >+ <address type='drive' controller='0' bus='0' target='0' unit='0'/> > >+ </disk> > >+ <controller type='ide' index='0'/> > >+ <memballoon model='virtio'/> > >+ </devices> > >+</domain> > >diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c > >index 2e07b85aa..7b9b846ef 100644 > >--- a/tests/qemuxml2argvtest.c > >+++ b/tests/qemuxml2argvtest.c > >@@ -2810,6 +2810,7 @@ mymain(void) > > DO_TEST_PARSE_ERROR("cpu-cache-emulate-l2", QEMU_CAPS_KVM); > > DO_TEST_PARSE_ERROR("cpu-cache-passthrough3", QEMU_CAPS_KVM); > > DO_TEST_PARSE_ERROR("cpu-cache-passthrough-l3", QEMU_CAPS_KVM); > >+ DO_TEST("vmcoreinfo", QEMU_CAPS_DEVICE_VMCOREINFO); > > > > DO_TEST("user-aliases", QEMU_CAPS_KVM, QEMU_CAPS_DEVICE_CIRRUS_VGA, > > QEMU_CAPS_OBJECT_MEMORY_FILE, QEMU_CAPS_PIIX_DISABLE_S3, > >diff --git a/tests/qemuxml2xmloutdata/qemuxml2xmlout-vmcoreinfo.xml > >b/tests/qemuxml2xmloutdata/qemuxml2xmlout-vmcoreinfo.xml > >new file mode 100644 > >index 000000000..a3922d630 > >--- /dev/null > >+++ b/tests/qemuxml2xmloutdata/qemuxml2xmlout-vmcoreinfo.xml > >@@ -0,0 +1,38 @@ > >+<domain type='qemu'> > >+ <name>QEMUGuest1</name> > >+ <uuid>c7a5fdbd-edaf-9455-926a-d65c16db1809</uuid> > >+ <memory unit='KiB'>219100</memory> > >+ <currentMemory unit='KiB'>219100</currentMemory> > >+ <vcpu placement='static'>1</vcpu> > >+ <os> > >+ <type arch='i686' machine='pc'>hvm</type> > >+ <boot dev='hd'/> > >+ </os> > >+ <features> > >+ <vmcoreinfo/> > >+ </features> > >+ <clock offset='utc'/> > >+ <on_poweroff>destroy</on_poweroff> > >+ <on_reboot>restart</on_reboot> > >+ <on_crash>destroy</on_crash> > >+ <devices> > >+ <emulator>/usr/bin/qemu-system-i686</emulator> > >+ <disk type='block' device='disk'> > >+ <source dev='/dev/HostVG/QEMUGuest1'/> > >+ <target dev='hda' bus='ide'/> > >+ <address type='drive' controller='0' bus='0' target='0' unit='0'/> > >+ </disk> > >+ <controller type='ide' index='0'> > >+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' > >function='0x1'/> > >+ </controller> > >+ <controller type='usb' index='0'> > >+ <address type='pci' domain='0x0000' bus='0x00' slot='0x01' > >function='0x2'/> > >+ </controller> > >+ <controller type='pci' index='0' model='pci-root'/> > >+ <input type='mouse' bus='ps2'/> > >+ <input type='keyboard' bus='ps2'/> > >+ <memballoon model='virtio'> > >+ <address type='pci' domain='0x0000' bus='0x00' slot='0x03' > >function='0x0'/> > >+ </memballoon> > >+ </devices> > >+</domain> > >diff --git a/tests/qemuxml2xmltest.c b/tests/qemuxml2xmltest.c > >index 5a282e5ff..9a7d460e5 100644 > >--- a/tests/qemuxml2xmltest.c > >+++ b/tests/qemuxml2xmltest.c > >@@ -1260,6 +1260,7 @@ mymain(void) > > DO_TEST("cpu-check-default-none2", NONE); > > DO_TEST("cpu-check-default-partial", NONE); > > DO_TEST("cpu-check-default-partial2", NONE); > >+ DO_TEST("vmcoreinfo", NONE); > > > > DO_TEST("smartcard-host", NONE); > > DO_TEST("smartcard-host-certificates", NONE); > >-- > >2.15.0.rc0.40.gaefcc5f6f > > > >-- > >libvir-list mailing list > >libvir-list@xxxxxxxxxx > >https://www.redhat.com/mailman/listinfo/libvir-list > -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list