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?

Reply via email to