From nobody Mon Feb 2 05:57:10 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1768584176; cv=none; d=zohomail.com; s=zohoarc; b=W9cw4Ins4Qj1FAm8h8qlg10sv8qmZoNrRoEkx8nOQXcAeIpZjasTazPgCAX4sDiEc+gfzqx1coleiD/a4Krn0pcUJOvgGQdUcKV98Tafupks/yRXXjxiEno2iJ9mTojMJfCh8up5ELm24vrlZ85dtji2WJeoxslnmL7zv6bjWrQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1768584176; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Subject:Subject:To:To:Message-Id:Reply-To; bh=ptb2DXerL2KAhgdA2hIW+mCXjozYBXgdZKxK7iEiRlE=; b=ZZD2b0oem4j7UTkwa1LZ0SGrUFs6SVje5r+byiFchmtTbuA7eKLnFzChs+TlXm6eEZn9KuaEHHpX7AwBGQf7+ltpWO6IirBARGKohAdLzQj6CNyfQgIeEKxjxiZDM5r59jO7LWBED8PE+r5uPxwjO+ecPTwgebD1SNTtcaSMgEg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 176858417662425.25641318482303; Fri, 16 Jan 2026 09:22:56 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id B67CD41B63; Fri, 16 Jan 2026 12:22:55 -0500 (EST) Received: from [172.19.199.3] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 9686441BCF; Fri, 16 Jan 2026 12:22:07 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id 7D177417D3; Fri, 16 Jan 2026 12:22:03 -0500 (EST) Received: from mail-ej1-f46.google.com (mail-ej1-f46.google.com [209.85.218.46]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id AA2D13FD39 for ; Fri, 16 Jan 2026 12:22:02 -0500 (EST) Received: by mail-ej1-f46.google.com with SMTP id a640c23a62f3a-b8765b7f4c0so382218566b.0 for ; Fri, 16 Jan 2026 09:22:02 -0800 (PST) Received: from tulp.my.domain (2001-1c02-1a15-3000-c218-03ff-feb5-6cc4.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:c218:3ff:feb5:6cc4]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b879e2c1be7sm204704866b.67.2026.01.16.09.21.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 16 Jan 2026 09:22:00 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.7 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1768584121; x=1769188921; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=ptb2DXerL2KAhgdA2hIW+mCXjozYBXgdZKxK7iEiRlE=; b=DTbVbZBV9jt6Rf0jfKPfs60RMrv2CN3BYUhChUoSizY2sKjeB5Qw3MZg4Zu1o2sCQ2 SXCtRL6XLSdwPqykpzZiKbbAQOXNNTrmOtJwFkZaWvbEJ5dFgmjrZvDAR+wtVjPV4T5j xY4+JpSLiZZ0tcEwuSPCh1hstbSKGDCb4eLRTUD0Ib7nldjsdRNb0YYFe/OtXBTYMspy YKmDW7/PZ1TM5u2R5mLHmuWjfiqUpboWCmHcANy5iNGXvhfn0EoR6PiIscJU9q404B4f E+BPt2A/Rola8hQamC7wTSZqOAQjh/8zwWylyQd4puTQaqVa3tESPWe6loiTD8jCOVNo 7Sug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1768584121; x=1769188921; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=ptb2DXerL2KAhgdA2hIW+mCXjozYBXgdZKxK7iEiRlE=; b=WpbNYA2TOoeyATHFcAb/IS6uA8MqxNz6s8WCNgzM6cV/ayEpPOLEyBaJiMqSfDcrlg rRCWKnoxhU4esilFAi0pUiTbvu+cSvmtdZjNQH4zggLb1lub36ZmlPfgYSTfGkNk7jpL 5EIIYYcKQw+vhlrV4r3JuZEDAB0fIv5usoIN1YxKN8CKl6naRCHTGGDBynEOKqlPmWyO yoRN0IHu5N1+WG24Om2tvV77ZI6c7EGw1hg4JB9YZrNJFZ62/uJWdP/2NO30nOJL5xLl ssKvPpUqjRSigxp1/brUWKUEXsWG99NI20EiJxtKzx5JTkYVQDUeU4cF8cP60RlYuT3L F0Gg== X-Gm-Message-State: AOJu0YxSUk0NhU0m7c+0GLBXAIMi8HtrdAX3e6wS74MPwk8I8wY+uokJ ymaZLFsI7sGgWgH9CYYF8mnIEVYPLhLcSvV/Rg/XZ1p4R+ZGHurfUuFETFM0rvxF X-Gm-Gg: AY/fxX6rnl8QUBUQUOK/z6bkAnCC4rIwWy3Zbp6wQFDXtGLPPWjOkZ5M5c32w4XjN9+ 9Ad920AvxWb55YqX4liHz3jIZ3Qvftph5OI43cuKjGvBSRrtD/GjUZqAX0IWv7ocjlTrn1u+48k KOrrwh5LrGnmJ2mEeWCT86ZKaJ/aoQtaNwM0RxeJSANPd9U3K+zg1B9thZjZpbTQSzjF1uzWnrU Ot+BqSAFtiU8IV6LfZ/+Y42yoIMUyQjCTNpYNjnpNwDPViR0nYnQNlfLebaRI+cpDQuotWOmQY2 B23rIBqH3sCZ+oPfegifvb/cw2weibO+dlY9Kabty1H+k6rUjtHrQ9fcvtk1/1/0Y7zvJe93zJ8 Vqq8lb7GmZr7ToXbgcE9qnv8dBCzD4Hig01b8rkhZPhhhM8ZjvrsMhiO4EacsnHgw/GlSElrR8R YnW6+LTJqHPMSgY3Ud6dpsIU6ixgkmWU7qkWRUi0u77J/Hv0ijpeaMTqQBv9IUfPup9MEP3VEOE zilt6p8g1UiNK/ZDp0+nq/A X-Received: by 2002:a17:906:730c:b0:b87:72f0:3baf with SMTP id a640c23a62f3a-b8792e18ec7mr337809566b.22.1768584120804; Fri, 16 Jan 2026 09:22:00 -0800 (PST) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH] bhyve: workaround for the lack of UTC clock on ARM64 Date: Fri, 16 Jan 2026 18:21:54 +0100 Message-ID: <20260116172154.96410-1-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.52.0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 25B7FVUNQDBHOTFTAWP356ZFV33G56DF X-Message-ID-Hash: 25B7FVUNQDBHOTFTAWP356ZFV33G56DF X-MailFrom: bogorodskiy@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: Roman Bogorodskiy X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1768584178506158500 Content-Type: text/plain; charset="utf-8" Currently, bhyve does not support UTC clock offset on ARM64. However, when is not specified in the domain XML, UTC offset is used by default. That results in an incorrect configuration for the bhyve ARM64 guests by default. Workaround is to extend bhyveDomainDefPostParse() to fall back to the LOCALTIME clock offset when UTC clock offset is not supported by bhyve. Signed-off-by: Roman Bogorodskiy Reviewed-by: Michal Privoznik --- src/bhyve/bhyve_domain.c | 6 ++++++ tests/bhyvexml2argvdata/aarch64/bhyvexml2argv-base.args | 1 - .../bhyvexml2argvdata/aarch64/bhyvexml2argv-bootloader.args | 1 - tests/bhyvexml2argvdata/aarch64/bhyvexml2argv-console.args | 1 - tests/bhyvexml2argvtest.c | 2 ++ tests/bhyvexml2xmloutdata/aarch64/bhyvexml2xmlout-base.xml | 2 +- .../aarch64/bhyvexml2xmlout-bootloader.xml | 2 +- .../bhyvexml2xmloutdata/aarch64/bhyvexml2xmlout-console.xml | 2 +- tests/bhyvexml2xmltest.c | 4 +++- 9 files changed, 14 insertions(+), 7 deletions(-) diff --git a/src/bhyve/bhyve_domain.c b/src/bhyve/bhyve_domain.c index 0c33a67ca6..df0a008ecd 100644 --- a/src/bhyve/bhyve_domain.c +++ b/src/bhyve/bhyve_domain.c @@ -106,6 +106,12 @@ bhyveDomainDefPostParse(virDomainDef *def, VIR_DOMAIN_CONTROLLER_MODEL_ISA_DEF= AULT); } =20 + /* When not specified in the domain XML, clock.offset defaults to UTC = which is + * not supported by bhyve on ARM64. So force it to LOCALTIME. */ + if ((def->clock.offset =3D=3D VIR_DOMAIN_CLOCK_OFFSET_UTC) && + !(bhyveDriverGetBhyveCaps(driver) & BHYVE_CAP_RTC_UTC)) + def->clock.offset =3D VIR_DOMAIN_CLOCK_OFFSET_LOCALTIME; + return 0; } =20 diff --git a/tests/bhyvexml2argvdata/aarch64/bhyvexml2argv-base.args b/test= s/bhyvexml2argvdata/aarch64/bhyvexml2argv-base.args index 51eef94fd0..aef3ebd017 100644 --- a/tests/bhyvexml2argvdata/aarch64/bhyvexml2argv-base.args +++ b/tests/bhyvexml2argvdata/aarch64/bhyvexml2argv-base.args @@ -1,7 +1,6 @@ bhyve \ -c 1 \ -m 214 \ --u \ -s 0:0,hostbridge \ -s 3:0,virtio-net,faketapdev,mac=3D52:54:00:b9:94:02 \ -s 2:0,virtio-blk,/tmp/freebsd.img \ diff --git a/tests/bhyvexml2argvdata/aarch64/bhyvexml2argv-bootloader.args = b/tests/bhyvexml2argvdata/aarch64/bhyvexml2argv-bootloader.args index a07e70d7d4..1079beee52 100644 --- a/tests/bhyvexml2argvdata/aarch64/bhyvexml2argv-bootloader.args +++ b/tests/bhyvexml2argvdata/aarch64/bhyvexml2argv-bootloader.args @@ -1,7 +1,6 @@ bhyve \ -c 1 \ -m 214 \ --u \ -s 0:0,hostbridge \ -o bootrom=3D/usr/local/share/u-boot/u-boot-bhyve-arm64/u-boot.bin \ -s 3:0,virtio-net,faketapdev,mac=3D52:54:00:b9:94:02 \ diff --git a/tests/bhyvexml2argvdata/aarch64/bhyvexml2argv-console.args b/t= ests/bhyvexml2argvdata/aarch64/bhyvexml2argv-console.args index ae0e6bc1b3..4a031afb71 100644 --- a/tests/bhyvexml2argvdata/aarch64/bhyvexml2argv-console.args +++ b/tests/bhyvexml2argvdata/aarch64/bhyvexml2argv-console.args @@ -1,7 +1,6 @@ bhyve \ -c 1 \ -m 214 \ --u \ -s 0:0,hostbridge \ -s 3:0,virtio-net,faketapdev,mac=3D52:54:00:b9:94:02 \ -s 2:0,virtio-blk,/tmp/freebsd.img \ diff --git a/tests/bhyvexml2argvtest.c b/tests/bhyvexml2argvtest.c index 47b2726b14..c7c18c3690 100644 --- a/tests/bhyvexml2argvtest.c +++ b/tests/bhyvexml2argvtest.c @@ -333,6 +333,8 @@ mymain(void) /* arm64 tests */ virTestSetHostArch(VIR_ARCH_AARCH64); driver.caps =3D virBhyveCapsBuild(); + /* bhyve does not support UTC clock on ARM */ + driver.bhyvecaps ^=3D BHYVE_CAP_RTC_UTC; =20 DO_TEST("base"); DO_TEST("console"); diff --git a/tests/bhyvexml2xmloutdata/aarch64/bhyvexml2xmlout-base.xml b/t= ests/bhyvexml2xmloutdata/aarch64/bhyvexml2xmlout-base.xml index 573e42bfa9..ee72370047 100644 --- a/tests/bhyvexml2xmloutdata/aarch64/bhyvexml2xmlout-base.xml +++ b/tests/bhyvexml2xmloutdata/aarch64/bhyvexml2xmlout-base.xml @@ -8,7 +8,7 @@ hvm - + destroy restart destroy diff --git a/tests/bhyvexml2xmloutdata/aarch64/bhyvexml2xmlout-bootloader.x= ml b/tests/bhyvexml2xmloutdata/aarch64/bhyvexml2xmlout-bootloader.xml index 67047040bb..8c7ca5826e 100644 --- a/tests/bhyvexml2xmloutdata/aarch64/bhyvexml2xmlout-bootloader.xml +++ b/tests/bhyvexml2xmloutdata/aarch64/bhyvexml2xmlout-bootloader.xml @@ -9,7 +9,7 @@ /usr/local/share/u-boot/u-boot-b= hyve-arm64/u-boot.bin - + destroy restart destroy diff --git a/tests/bhyvexml2xmloutdata/aarch64/bhyvexml2xmlout-console.xml = b/tests/bhyvexml2xmloutdata/aarch64/bhyvexml2xmlout-console.xml index 2bea620cbe..d43ce8fd6f 100644 --- a/tests/bhyvexml2xmloutdata/aarch64/bhyvexml2xmlout-console.xml +++ b/tests/bhyvexml2xmloutdata/aarch64/bhyvexml2xmlout-console.xml @@ -8,7 +8,7 @@ hvm - + destroy restart destroy diff --git a/tests/bhyvexml2xmltest.c b/tests/bhyvexml2xmltest.c index 1d01436511..5df1f2b6ba 100644 --- a/tests/bhyvexml2xmltest.c +++ b/tests/bhyvexml2xmltest.c @@ -77,7 +77,7 @@ mymain(void) # define DO_TEST_FAILURE(name) \ DO_TEST_FULL(name, FLAG_EXPECT_FAILURE) =20 - driver.bhyvecaps =3D BHYVE_CAP_AHCI32SLOT; + driver.bhyvecaps =3D BHYVE_CAP_AHCI32SLOT | BHYVE_CAP_RTC_UTC; =20 DO_TEST_DIFFERENT("acpiapic"); DO_TEST_DIFFERENT("base"); @@ -146,6 +146,8 @@ mymain(void) =20 virTestSetHostArch(VIR_ARCH_AARCH64); driver.caps =3D virBhyveCapsBuild(); + /* bhyve does not support UTC clock on ARM */ + driver.bhyvecaps ^=3D BHYVE_CAP_RTC_UTC; =20 DO_TEST_DIFFERENT("base"); DO_TEST_DIFFERENT("console"); --=20 2.52.0