On 01/09/2015 10:51 AM, Daniel P. Berrange wrote:
On Fri, Jan 09, 2015 at 10:02:07AM +0100, Pavel Hrdina wrote:
> QEMU internally updates the size of video memory if the domain XML had
> provided too low memory size or there are some dependencies for a QXL
> devices 'vgamem' and 'ram' size. We need to know about the changes
and
> store them into the status XML to not break migration or managedsave
> through different libvirt versions.
>
> Signed-off-by: Pavel Hrdina <phrdina(a)redhat.com>
> ---
> src/qemu/qemu_monitor.c | 38 ++++++++++++++++++++++++
> src/qemu/qemu_monitor.h | 4 +++
> src/qemu/qemu_monitor_json.c | 69 ++++++++++++++++++++++++++++++++++++++++++
> src/qemu/qemu_monitor_json.h | 3 ++
> src/qemu/qemu_process.c | 71 ++++++++++++++++++++++++++++++++++++++++++++
> 5 files changed, 185 insertions(+)
>
> diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
> index 55f07f3..45bb62f 100644
> --- a/src/qemu/qemu_monitor.c
> +++ b/src/qemu/qemu_monitor.c
> @@ -1154,6 +1154,44 @@ qemuMonitorFindBalloonObjectPath(qemuMonitorPtr mon,
> return ret;
> }
>
> +
> +/**
> + * To update video memory size in status XML we need to load correct values from
> + * QEMU. This is supported only with JSON monitor.
> + *
> + * Returns 0 on success, -1 on failure and sets proper error message.
> + */
> +int
> +qemuMonitorUpdateVideoMemorySize(qemuMonitorPtr mon,
> + virDomainVideoDefPtr video,
> + const char *videoName)
> +{
> + int ret = -1;
> + char *path = NULL;
> +
> + if (mon->json) {
> + if (qemuMonitorFindObjectPath(mon, "/", videoName, &path) <
0) {
> + virReportError(VIR_ERR_INTERNAL_ERROR,
> + _("Failed to find QOM Object path for device
'%s'"),
> + videoName);
> + return -1;
> + }
> + if (qemuMonitorJSONUpdateVideoMemorySize(mon, video, path) < 0)
> + goto cleanup;
> + } else {
> + virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
> + _("JSON monitor is required"));
> + return -1;
> + }
This fatal error is going to break all guest startup with non-json
monitor IIUC.
Regards,
Daniel
Yes I know that. Should we return 0 and still reporting that error or
should we just skip it at all if we cannot use mon-json?
Pavel