[libvirt] [PATCH] qemu: Default hwclock source for sPAPR to RTC
Cole Robinson
crobinso at redhat.com
Thu Jul 13 12:19:18 UTC 2017
On 07/13/2017 04:36 AM, Kothapally Madhu Pavan wrote:
> QEMU fails to launch a sPAPR guest with clock sources other that RTC.
> Internally qemu only uses RTC timer for hwclock. This patch reports
> the right error message instead of qemu erroring out when any other
> timer other than RTC is used.
>
How does it fail exactly? Is it a qemu error message or a guest OS failure?
If it's from qemu, and the error message is reasonably clear what hardware/xml
config option is at fauly, then these checks don't add much functional
benefit, just more code to maintain.
A general point, these types of checks should be considered for
qemuDomainDefValidate which adds the benefit of rejecting the config at XML
define time.
Thanks,
Cole
> Signed-off-by: Kothapally Madhu Pavan <kmp at linux.vnet.ibm.com>
> ---
> src/qemu/qemu_command.c | 28 +++++++++++++++++++++++++++-
> 1 file changed, 27 insertions(+), 1 deletion(-)
>
> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
> index c53ab97..31561ce 100644
> --- a/src/qemu/qemu_command.c
> +++ b/src/qemu/qemu_command.c
> @@ -6440,6 +6440,15 @@ qemuBuildClockCommandLine(virCommandPtr cmd,
> break;
>
> case VIR_DOMAIN_TIMER_NAME_PIT:
> + /* Only RTC timer is supported as hwclock for sPAPR machines */
> + if (ARCH_IS_PPC64(def->os.arch)) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + _("unsupported clock timer '%s' for '%s' architecture"),
> + virDomainTimerNameTypeToString(def->clock.timers[i]->name),
> + virArchToString(def->os.arch));
> + return -1;
> + }
> +
> switch (def->clock.timers[i]->tickpolicy) {
> case -1:
> case VIR_DOMAIN_TIMER_TICKPOLICY_DELAY:
> @@ -6483,13 +6492,21 @@ qemuBuildClockCommandLine(virCommandPtr cmd,
> break;
>
> case VIR_DOMAIN_TIMER_NAME_HPET:
> + /* Only RTC timer is supported as hwclock for sPAPR machines */
> + if (ARCH_IS_PPC64(def->os.arch)) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + _("unsupported clock timer '%s' for '%s' architecture"),
> + virDomainTimerNameTypeToString(def->clock.timers[i]->name),
> + virArchToString(def->os.arch));
> + return -1;
> + }
> +
> /* the only meaningful attribute for hpet is "present". If
> * present is -1, that means it wasn't specified, and
> * should be left at the default for the
> * hypervisor. "default" when -no-hpet exists is "yes",
> * and when -no-hpet doesn't exist is "no". "confusing"?
> * "yes"! */
> -
> if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_NO_HPET)) {
> if (def->clock.timers[i]->present == 0)
> virCommandAddArg(cmd, "-no-hpet");
> @@ -7047,6 +7064,15 @@ qemuBuildCpuCommandLine(virCommandPtr cmd,
> for (i = 0; i < def->clock.ntimers; i++) {
> virDomainTimerDefPtr timer = def->clock.timers[i];
>
> + /* Only RTC timer is supported as hwclock for sPAPR machines */
> + if (ARCH_IS_PPC64(def->os.arch) && timer->name != VIR_DOMAIN_TIMER_NAME_RTC) {
> + virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
> + _("unsupported clock timer '%s' for '%s' architecture"),
> + virDomainTimerNameTypeToString(def->clock.timers[i]->name),
> + virArchToString(def->os.arch));
> + return -1;
> + }
> +
> if (timer->name == VIR_DOMAIN_TIMER_NAME_KVMCLOCK &&
> timer->present != -1) {
> virBufferAsprintf(&buf, "%s,%ckvmclock",
>
More information about the libvir-list
mailing list