Its use is limited to certain guest types, and it only supports
a subset of all possible tick policies.
Signed-off-by: Andrea Bolognani <abologna@redhat.com>
---
src/qemu/qemu_domain.c | 33 +++++++++++++++++++++++++++++++++
1 file changed, 33 insertions(+)
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 68348464a8..8036886508 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -5430,6 +5430,39 @@ qemuDomainDefValidateClockTimers(const virDomainDef *def,
break;
case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
+ if (def->virtType != VIR_DOMAIN_VIRT_KVM ||
+ !qemuDomainIsARMVirt(def)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Configuring the '%s' timer is not supported "
+ "for virtType=%s arch=%s machine=%s guests"),
+ virDomainTimerNameTypeToString(timer->name),
+ virDomainVirtTypeToString(def->virtType),
+ virArchToString(def->os.arch),
+ def->os.machine);
+ return -1;
+ }
+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_KVM_NO_ADJVTIME)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("Configuring the '%s' timer is not supported "
+ "with this QEMU binary"),
+ virDomainTimerNameTypeToString(timer->name));
+ return -1;
+ }
+
+ switch (timer->tickpolicy) {
+ case -1:
+ case VIR_DOMAIN_TIMER_TICKPOLICY_DELAY:
+ case VIR_DOMAIN_TIMER_TICKPOLICY_DISCARD:
+ break;
+ case VIR_DOMAIN_TIMER_TICKPOLICY_CATCHUP:
+ case VIR_DOMAIN_TIMER_TICKPOLICY_MERGE:
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("The '%s' timer does not support "
+ "tickpolicy '%s'"),
+ virDomainTimerNameTypeToString(timer->name),
+ virDomainTimerTickpolicyTypeToString(timer->tickpolicy));
+ return -1;
+ }
break;
}
}
--
2.24.1
On Fri, Feb 07, 2020 at 03:27:04PM +0100, Andrea Bolognani wrote:
>Its use is limited to certain guest types, and it only supports
>a subset of all possible tick policies.
>
>Signed-off-by: Andrea Bolognani <abologna@redhat.com>
>---
> src/qemu/qemu_domain.c | 33 +++++++++++++++++++++++++++++++++
> 1 file changed, 33 insertions(+)
>
>diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
>index 68348464a8..8036886508 100644
>--- a/src/qemu/qemu_domain.c
>+++ b/src/qemu/qemu_domain.c
>@@ -5430,6 +5430,39 @@ qemuDomainDefValidateClockTimers(const virDomainDef *def,
> break;
>
> case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
Missing check for present == 0.
>+ if (def->virtType != VIR_DOMAIN_VIRT_KVM ||
>+ !qemuDomainIsARMVirt(def)) {
>+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>+ _("Configuring the '%s' timer is not supported "
>+ "for virtType=%s arch=%s machine=%s guests"),
>+ virDomainTimerNameTypeToString(timer->name),
>+ virDomainVirtTypeToString(def->virtType),
>+ virArchToString(def->os.arch),
>+ def->os.machine);
>+ return -1;
>+ }
>+ if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_KVM_NO_ADJVTIME)) {
>+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>+ _("Configuring the '%s' timer is not supported "
>+ "with this QEMU binary"),
>+ virDomainTimerNameTypeToString(timer->name));
>+ return -1;
>+ }
>+
>+ switch (timer->tickpolicy) {
>+ case -1:
>+ case VIR_DOMAIN_TIMER_TICKPOLICY_DELAY:
>+ case VIR_DOMAIN_TIMER_TICKPOLICY_DISCARD:
>+ break;
>+ case VIR_DOMAIN_TIMER_TICKPOLICY_CATCHUP:
>+ case VIR_DOMAIN_TIMER_TICKPOLICY_MERGE:
>+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>+ _("The '%s' timer does not support "
>+ "tickpolicy '%s'"),
Please join the last two lines.
>+ virDomainTimerNameTypeToString(timer->name),
>+ virDomainTimerTickpolicyTypeToString(timer->tickpolicy));
>+ return -1;
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Jano
On Thu, 2020-02-13 at 14:28 +0100, Ján Tomko wrote:
> On Fri, Feb 07, 2020 at 03:27:04PM +0100, Andrea Bolognani wrote:
> > +++ b/src/qemu/qemu_domain.c
> > @@ -5430,6 +5430,39 @@ qemuDomainDefValidateClockTimers(const virDomainDef *def,
> > break;
> >
> > case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
>
> Missing check for present == 0.
Good catch! Assuming Drew confirms the timer can't be disabled, then
we should definitely error out for present='no'.
Do you want me to respin, or can I just squash in the diff below?
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 29ec203413..143ddc508e 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -5441,6 +5441,12 @@ qemuDomainDefValidateClockTimers(const virDomainDef *def,
def->os.machine);
return -1;
}
+ if (timer->present == 0) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ _("The '%s' timer can't be disabled"),
+ virDomainTimerNameTypeToString(timer->name));
+ return -1;
+ }
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_KVM_NO_ADJVTIME)) {
virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
_("Configuring the '%s' timer is not supported "
--
Andrea Bolognani / Red Hat / Virtualization
On Thu, Feb 13, 2020 at 05:45:14PM +0100, Andrea Bolognani wrote:
>On Thu, 2020-02-13 at 14:28 +0100, Ján Tomko wrote:
>> On Fri, Feb 07, 2020 at 03:27:04PM +0100, Andrea Bolognani wrote:
>> > +++ b/src/qemu/qemu_domain.c
>> > @@ -5430,6 +5430,39 @@ qemuDomainDefValidateClockTimers(const virDomainDef *def,
>> > break;
>> >
>> > case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
>>
>> Missing check for present == 0.
>
>Good catch! Assuming Drew confirms the timer can't be disabled, then
>we should definitely error out for present='no'.
>
>Do you want me to respin, or can I just squash in the diff below?
>
>
>diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
>index 29ec203413..143ddc508e 100644
>--- a/src/qemu/qemu_domain.c
>+++ b/src/qemu/qemu_domain.c
>@@ -5441,6 +5441,12 @@ qemuDomainDefValidateClockTimers(const virDomainDef *def,
> def->os.machine);
> return -1;
> }
>+ if (timer->present == 0) {
>+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
>+ _("The '%s' timer can't be disabled"),
>+ virDomainTimerNameTypeToString(timer->name));
>+ return -1;
>+ }
> if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_KVM_NO_ADJVTIME)) {
> virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> _("Configuring the '%s' timer is not supported "
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Jano
On Fri, Feb 07, 2020 at 03:27:04PM +0100, Andrea Bolognani wrote:
> Its use is limited to certain guest types, and it only supports
> a subset of all possible tick policies.
>
> Signed-off-by: Andrea Bolognani <abologna@redhat.com>
> ---
> src/qemu/qemu_domain.c | 33 +++++++++++++++++++++++++++++++++
> 1 file changed, 33 insertions(+)
>
> diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
> index 68348464a8..8036886508 100644
> --- a/src/qemu/qemu_domain.c
> +++ b/src/qemu/qemu_domain.c
> @@ -5430,6 +5430,39 @@ qemuDomainDefValidateClockTimers(const virDomainDef *def,
> break;
>
> case VIR_DOMAIN_TIMER_NAME_ARMVTIMER:
> + if (def->virtType != VIR_DOMAIN_VIRT_KVM ||
> + !qemuDomainIsARMVirt(def)) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + _("Configuring the '%s' timer is not supported "
> + "for virtType=%s arch=%s machine=%s guests"),
> + virDomainTimerNameTypeToString(timer->name),
> + virDomainVirtTypeToString(def->virtType),
> + virArchToString(def->os.arch),
> + def->os.machine);
> + return -1;
> + }
> + if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_CPU_KVM_NO_ADJVTIME)) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + _("Configuring the '%s' timer is not supported "
> + "with this QEMU binary"),
> + virDomainTimerNameTypeToString(timer->name));
> + return -1;
> + }
> +
> + switch (timer->tickpolicy) {
> + case -1:
> + case VIR_DOMAIN_TIMER_TICKPOLICY_DELAY:
> + case VIR_DOMAIN_TIMER_TICKPOLICY_DISCARD:
> + break;
> + case VIR_DOMAIN_TIMER_TICKPOLICY_CATCHUP:
> + case VIR_DOMAIN_TIMER_TICKPOLICY_MERGE:
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + _("The '%s' timer does not support "
> + "tickpolicy '%s'"),
> + virDomainTimerNameTypeToString(timer->name),
> + virDomainTimerTickpolicyTypeToString(timer->tickpolicy));
> + return -1;
> + }
> break;
> }
> }
> --
> 2.24.1
>
Reviewed-by: Masayoshi Mizuma <m.mizuma@jp.fujitsu.com>
© 2016 - 2026 Red Hat, Inc.