On Mon, May 25, 2015 at 05:26:01PM +0200, Peter Krempa wrote:
On Mon, May 25, 2015 at 16:59:08 +0200, Andrea Bolognani wrote:
> The command is only defined in QEMU for TARGET_I386, so issuing it on
> any other architecture can't possibly work.
>
> Resolves:
https://bugzilla.redhat.com/show_bug.cgi?id=1211938
> ---
> src/qemu/qemu_driver.c | 20 +++++++++++++-------
> 1 file changed, 13 insertions(+), 7 deletions(-)
>
> diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
> index aa0acde..743ca6e 100644
> --- a/src/qemu/qemu_driver.c
> +++ b/src/qemu/qemu_driver.c
> @@ -18945,7 +18945,10 @@ qemuDomainSetTime(virDomainPtr dom,
> goto endjob;
> }
>
> - if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_RTC_RESET_REINJECTION)) {
> + /* The rtc-reset-reinjection QMP command is only available on x86 */
Since we properly track support for this command via the capabilities
and qemu does not expose it:
> + if (ARCH_IS_X86(vm->def->os.arch) &&
> + !virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_RTC_RESET_REINJECTION))
> + {
> virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
> _("cannot set time: qemu doesn't support "
> "rtc-reset-reinjection command"));
I'd simply remove this error message since it is semantically wrong once
PPC does not require to reset the RTC reinjection.
> @@ -18968,13 +18971,16 @@ qemuDomainSetTime(virDomainPtr dom,
> goto endjob;
> }
>
> - qemuDomainObjEnterMonitor(driver, vm);
> - rv = qemuMonitorRTCResetReinjection(priv->mon);
> - if (qemuDomainObjExitMonitor(driver, vm) < 0)
> - goto endjob;
> + /* The rtc-reset-reinjection QMP command is only available on x86 */
> + if (ARCH_IS_X86(vm->def->os.arch)) {
> + qemuDomainObjEnterMonitor(driver, vm);
> + rv = qemuMonitorRTCResetReinjection(priv->mon);
And just conditionally call this when the
QEMU_CAPS_RTC_RESET_REINJECTION is present and not in an architecture
specific way.
By this you get rid of the arch specific hackery.
But on x86 we don't even want to call the SetTime command when we
cannot reset the rtc reinjection. On ppc there is no reinjection
being done, hence nothing to reset.
> + if (qemuDomainObjExitMonitor(driver, vm) < 0)
> + goto endjob;
>
> - if (rv < 0)
> - goto endjob;
> + if (rv < 0)
> + goto endjob;
> + }
>
> ret = 0;
>
Peter
--
libvir-list mailing list
libvir-list(a)redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list