Commit 49d2e648e8087d154d8bf8b91f27c8e05e79d5a6
removed the QemuOptDesc elements from the
desc field of the qemu_machine_opts array defined
in vl.c. Since applying that patch to qemu
on my system, I can not start a guest from libvirt when certain
machine options are configured
for the guest domain. For example, if I configure the following
for my guest domain:
<memoryBacking>
...
<nosharepages>
...
</memoryBacking>
I get the following libvirt error when I try to start the guest:
error: unsupported configuration: disable shared memory is not
available with this QEMU binary
The nosharepages element generates the -machine
option mem-merge=off on the QEMU command line. The error is
thrown by libvirt because the QMP query-command-line-options
command does not return mem-merge in the machine
options parameter list. In fact, if I issue the query-command-line-options
command via virsh as follows:
virsh qemu-monitor-command guest_c2aa '{ "execute":
"query-command-line-options", "arguments": { "option":
"machine" } }'
No machine option parameters are returned:
{"return":[{"parameters":[],"option":"machine"}],"id":"libvirt-11"}
I took a look at the qmp_query_command_line_options function
in util/qemu-config.c. The function derives the
option parameters to return with the the query response from the QemuOptDesc elements contained in the
desc field of the qemu_machine_opts
array defined in vl.c. It appears that removing the
QemuOptDesc elements broke the qmp_query_command_line_options
function. If I restore the QemuOptDesc
elements removed by commit 49d2e648e8087d154d8bf8b91f27c8e05e79d5a6,
I can start the guest with
nosharepages configured.
It would appear that a bug was introduced with commit 49d2e648e8087d154d8bf8b91f27c8e05e79d5a6,
what say you?