From nobody Wed Jun 24 21:41:01 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 as permitted sender) client-ip=38.145.34.151; 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 38.145.34.151 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=1781420312; cv=none; d=zohomail.com; s=zohoarc; b=d3YRAtDQpZdyykCOlFP2qP65IgYT+elsv0VDzVJSQoUYiuY0Iv9uz2V3qxYOv+MasPpkBEBYUj5v1nV6vHS/o9jLSjdcDm4zRxw9bqqdDDnxxEYWW0ZF8Ccj4CsBtf2fnul59gpAsZsu3P++RhPF3OVi5lsmOr88s9YBMxyXklA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1781420312; 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=qU07olbZvkAGYTi3547VZAaU9TCs91mUjtvggP0mOek=; b=UFfxVNacw1ppXVZhT4sglaGuEI1TNuaPJKZts1DoOi2oq/ylLxWIZZQDCCVEL3YFjnO8TVyHVKDY7ts0SjcKSMPe7EjRRuH3ZndBNqmm53LytdpLuKkwgpgbCJj/EILYhkw3086UAXXHw6OZ+nQGO70dcqTkdG4V16bNwoAOa/M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 38.145.34.151 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 [38.145.34.151]) by mx.zohomail.com with SMTPS id 1781420312286492.28051610610544; Sat, 13 Jun 2026 23:58:32 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 2319341BF8; Sun, 14 Jun 2026 02:58:30 -0400 (EDT) Received: from [172.19.199.4] (unknown [10.16.107.18]) by lists.libvirt.org (Postfix) with ESMTP id A768A41CA1; Sun, 14 Jun 2026 02:57:28 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 0E70A4187A; Sun, 14 Jun 2026 02:57:16 -0400 (EDT) Received: from mail-ed1-x535.google.com (mail-ed1-x535.google.com [IPv6:2a00:1450:4864:20::535]) (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 E681B4183A for ; Sun, 14 Jun 2026 02:57:15 -0400 (EDT) Received: by mail-ed1-x535.google.com with SMTP id 4fb4d7f45d1cf-68c76fb8009so3133494a12.0 for ; Sat, 13 Jun 2026 23:57:15 -0700 (PDT) Received: from tulp.my.domain (2001-1c02-1a15-3000-ee82-4536-a8f2-9e22.cable.dynamic.v6.ziggo.nl. [2001:1c02:1a15:3000:ee82:4536:a8f2:9e22]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-6937948fc99sm2000316a12.23.2026.06.13.23.57.13 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 13 Jun 2026 23:57:13 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-2.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_NONE, SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781420234; x=1782025034; 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=qU07olbZvkAGYTi3547VZAaU9TCs91mUjtvggP0mOek=; b=cuSbtSzIEhCNsEKcFaJtJgY4Lnnif4K4xqcNmRc1YUvUc6AjGSgNAu1gfycBv+JEEg mCxM1glrpkZLrGFDs+xVCH4U0es2gBSIALmZzjWw9rPzee4DY7XeJpL8vOWUvcsKRtaB GGVuY+kQqAHAsMgDK30jPVoS4DjXQ9g9SmjfO0LZup+d6j0Zk8jcKRNmCxGKmUJcQS5b 1vbNaWV2VsrAzDk0CecayUQ88xXAYN6cqS0B2IDl19lUgM4FQZ9RbcZdaGruEPpfnFlE 74VkFA1Lj/8qDxp1Rmq8AX7tms3wofz1PB98WOm+VK34LkDmf5Bj/lnkWbVq3HKmkGnj /GZQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781420234; x=1782025034; 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=qU07olbZvkAGYTi3547VZAaU9TCs91mUjtvggP0mOek=; b=eQ1oUDiJk2a93/ERg2XLRa3vb39v7g4oON9spY3wtchrX4GcHg6cGby2wK+ybSm5PJ MC896B/23aXV7yzCQ20NLOviE75rSENomth1PdHfCng7gJRg6B1hekZ4NvN0OGzyN/Cq PtJTJukhzicAE2EmLaWL9bRQrQFMeA9ho+QqnGhSgCkP4qJ+ijhzJmxWP2AT2WUsgV6L LDWRyiKoagkfyVuhNk3kCxp1V8PdcdEEQ3vifGS/e47taiz+dbkylLw8ZYEHNN1zEXWp GCx4XJ53n3padPKiP1cEbt0tR3FHe6KsWC7Wpyoktl9Bwnx2ubKovLvH6IF9Wg2MUEcu De6g== X-Gm-Message-State: AOJu0Yxt7H6iDpyHRn+e8xIP0+6JdJD7lE5UmjhlWrUNrqTvu2pIyVH5 j6Xj+L0FpNDx/hn3sMMdZ+BuDPiWdNbEtcaCDfl9GhNsOvEaCdg9RNtPz1rAouIV X-Gm-Gg: Acq92OEq+35m00HP3HagjjKJAPg8MpP13YkvyrUHtzorDOynMCO59CfPVhlyzfWlNUU WoUC5ZfYUg3Gg63jdfCA2d10tlK47ohPle80/99DAFDbuMVWxW1KPkRbnwEYxmUc84TxyVNAP/l FdtGBk2XPd4Zl5HQMgvmimQiGc5TxAoeCJ6hjrkDhn0lRMXER7hR/tA6DvgSQUgfoWpQZMbrhYm M5iYTe2m6LLUWmWza9Jgx9aDnYb5LwL4MxNGbMlGL8aa4GwnFJTQcPXjIxsy5LmUyHUdb7aOKlQ oCiRcmULcP+NMrWmlC+qsbmuGG6o+Vsd7A8H9Dv0jQAf/Zks1rZv0nDPG783/RuwdP46IbbvEPr O0ALxDmw4Z0zG4OQs+53gfVKabCbhMr42qhkq/m8RnuSvHMXcVgN7QyLbgT3+i2KS/kyRxphlDv x5JqEF4yIEt5YQ4l7p2It7jvcQI726VKAw0RTzIEh90zigZrvATTcGgZuM0FjhHJCd3MgP26psF mpBAxnSPHq2Sl9WiSOcZq8XCuA/78VREmob4A== X-Received: by 2002:a05:6402:34c5:b0:683:5589:4317 with SMTP id 4fb4d7f45d1cf-693787ee5bfmr4788239a12.11.1781420234146; Sat, 13 Jun 2026 23:57:14 -0700 (PDT) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH] bhyve: implement reboot using agent Date: Sun, 14 Jun 2026 08:56:17 +0200 Message-ID: <20260614065619.4354-1-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.52.0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 2TJ3HRHJWHIK4HFZO3FTNYOLSBDT4SYN X-Message-ID-Hash: 2TJ3HRHJWHIK4HFZO3FTNYOLSBDT4SYN 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: 1781420314472158500 Content-Type: text/plain; charset="utf-8" Implement domain reboot using the guest agent. Implementation is very similar to the domain shutdown added earlier. Also, change the VIR_DOMAIN_REBOOT_ACPI_POWER_BTN flag to VIR_DOMAIN_REBOOT_SIGNAL. Even though bhyve emulates the ACPI button, it's triggered by sending a signal to the bhyve process, so VIR_DOMAIN_REBOOT_SIGNAL looks like a more accurate description of communication between libvirt and bhyve. Signed-off-by: Roman Bogorodskiy --- src/bhyve/bhyve_driver.c | 38 +++++++++++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/src/bhyve/bhyve_driver.c b/src/bhyve/bhyve_driver.c index 4b28c698e7..45e8aad5b5 100644 --- a/src/bhyve/bhyve_driver.c +++ b/src/bhyve/bhyve_driver.c @@ -1085,6 +1085,12 @@ bhyveDomainShutdownFlagsAgent(virDomainObj *vm, return ret; } =20 +static int +bhyveDomainRebootAgent(virDomainObj *vm, bool isReboot, bool reportError) +{ + return bhyveDomainShutdownFlagsAgent(vm, isReboot, reportError); +} + static int bhyveDomainShutdownFlags(virDomainPtr dom, unsigned int flags) { @@ -1160,10 +1166,15 @@ bhyveDomainReboot(virDomainPtr dom, unsigned int fl= ags) { virConnectPtr conn =3D dom->conn; virDomainObj *vm; - bool isReboot =3D true; + bhyveDomainObjPrivate *priv; int ret =3D -1; + bool isReboot =3D true; + bool useAgent =3D false; + bool agentRequested, signalRequested; + bool agentForced; =20 - virCheckFlags(VIR_DOMAIN_REBOOT_ACPI_POWER_BTN, -1); + virCheckFlags(VIR_DOMAIN_REBOOT_SIGNAL | + VIR_DOMAIN_REBOOT_GUEST_AGENT, -1); =20 if (!(vm =3D bhyveDomObjFromDomain(dom))) goto cleanup; @@ -1174,13 +1185,34 @@ bhyveDomainReboot(virDomainPtr dom, unsigned int fl= ags) VIR_INFO("Domain on_reboot setting overridden, shutting down"); } =20 + priv =3D vm->privateData; + agentRequested =3D flags & VIR_DOMAIN_REBOOT_GUEST_AGENT; + signalRequested =3D flags & VIR_DOMAIN_REBOOT_SIGNAL; + + /* Prefer agent unless we were requested to not to. */ + if (agentRequested || !flags) + useAgent =3D true; + if (virDomainRebootEnsureACL(conn, vm->def, flags) < 0) goto cleanup; =20 if (virDomainObjCheckActive(vm) < 0) goto cleanup; =20 - ret =3D bhyveDomainShutdownSignal(vm, isReboot); + agentForced =3D agentRequested && !signalRequested; + if (useAgent) { + ret =3D bhyveDomainRebootAgent(vm, isReboot, agentForced); + if (((ret < 0) || (priv->agent !=3D NULL)) && agentForced) + goto cleanup; + } + + /* If we are not enforced to use just an agent, try signal + * reboot as well in case agent did not succeed. + */ + if (!useAgent || (((ret < 0) || + (priv->agent !=3D NULL)) && (signalRequested || !flags))) { + ret =3D bhyveDomainShutdownSignal(vm, isReboot); + } =20 cleanup: virDomainObjEndAPI(&vm); --=20 2.52.0