[libvirt] [PATCH v2] qemu: Limit rtc-reset-reinjection requirement to x86 only.
Martin Kletzander
mkletzan at redhat.com
Wed May 27 14:55:09 UTC 2015
On Tue, May 26, 2015 at 06:13:40PM +0200, Andrea Bolognani wrote:
>The QMP command, like the interrupt reinjection logic it's connected
>to, is only implemented in QEMU when TARGET_I386 is defined, so
>checking for its availability on any other architecture is pointless.
>
>On the other hand, when we're on x86, we shouldn still make sure that
>rtc-reset-reinjection is available and refuse to set the time
>otherwise.
>
>Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1211938
>---
> src/qemu/qemu_driver.c | 22 +++++++++++++++-------
> 1 file changed, 15 insertions(+), 7 deletions(-)
>
ACK, will push in a while.
>diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
>index aa0acde..db72bad 100644
>--- a/src/qemu/qemu_driver.c
>+++ b/src/qemu/qemu_driver.c
>@@ -18945,7 +18945,12 @@ qemuDomainSetTime(virDomainPtr dom,
> goto endjob;
> }
>
>- if (!virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_RTC_RESET_REINJECTION)) {
>+ /* On x86, the rtc-reset-reinjection QMP command must be called after
>+ * setting the time to avoid trouble down the line. If the command is
>+ * not available, don't set the time at all and report an error */
>+ 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"));
>@@ -18968,13 +18973,16 @@ qemuDomainSetTime(virDomainPtr dom,
> goto endjob;
> }
>
>- qemuDomainObjEnterMonitor(driver, vm);
>- rv = qemuMonitorRTCResetReinjection(priv->mon);
>- if (qemuDomainObjExitMonitor(driver, vm) < 0)
>- goto endjob;
>+ /* Don't try to call rtc-reset-reinjection if it's not available */
>+ if (virQEMUCapsGet(priv->qemuCaps, QEMU_CAPS_RTC_RESET_REINJECTION)) {
>+ qemuDomainObjEnterMonitor(driver, vm);
>+ rv = qemuMonitorRTCResetReinjection(priv->mon);
>+ if (qemuDomainObjExitMonitor(driver, vm) < 0)
>+ goto endjob;
>
>- if (rv < 0)
>- goto endjob;
>+ if (rv < 0)
>+ goto endjob;
>+ }
>
> ret = 0;
>
>--
>2.1.0
>
>--
>libvir-list mailing list
>libvir-list at redhat.com
>https://www.redhat.com/mailman/listinfo/libvir-list
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20150527/44ad6bb4/attachment-0001.sig>
More information about the libvir-list
mailing list