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?