From nobody Fri Dec 12 14:08:55 2025 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; 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=1761675996; cv=none; d=zohomail.com; s=zohoarc; b=BMl9+inijyuI0tQqjGSa+mA5XWcui1yLmLfO5k94zgLyVsd7OKooBC4iXnL07lMuoZVbtELHF6P67tnk2NqEQ+7VLn8FEHGCGbLQRWNob3irbRzNBYeVPE0hRiwJMAyDbQQpFNGphDu6nIggDgGLA6G4UCdwYKmOG43h261srgg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761675996; 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=ZPy7CR+3/dyTl65TU1ROGc4kQBAmYNTRxO2+zXYhfjo=; b=ZxZc2SXyvr9m295PVcS4xe+UQe5kIyLS3Vt25wR8VudJUguO/lfWib7EqFTHgJCEaPs9GajWgXRTa2YuWNAl6PoS07j1xTCLnWQe2C9fz61bCYBEP+TJNRQU3f0NaIEPDqgqqUEJj5ic8u16Smdd2wq7lYf5yD7z2JiNVieAxIw= 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 1761675996813543.2730630492251; Tue, 28 Oct 2025 11:26:36 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id C52483F357; Tue, 28 Oct 2025 14:26:33 -0400 (EDT) Received: from [172.19.199.29] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 9F48841962; Tue, 28 Oct 2025 14:25:58 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 72FC6418E7; Tue, 28 Oct 2025 14:24:16 -0400 (EDT) Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) (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 590A64189E for ; Tue, 28 Oct 2025 14:24:14 -0400 (EDT) Received: by mail-ed1-f54.google.com with SMTP id 4fb4d7f45d1cf-63c45c11be7so10310752a12.3 for ; Tue, 28 Oct 2025 11:24:14 -0700 (PDT) Received: from tulp.my.domain (84-25-144-101.cable.dynamic.v4.ziggo.nl. [84.25.144.101]) by smtp.gmail.com with ESMTPSA id 4fb4d7f45d1cf-63e7ef95e81sm9672890a12.21.2025.10.28.11.24.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Oct 2025 11:24:11 -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=-5.3 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_MED, 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=1761675853; x=1762280653; 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=ZPy7CR+3/dyTl65TU1ROGc4kQBAmYNTRxO2+zXYhfjo=; b=ayhR4O3kkBttbtMYaF4hGywJShiava1KVbE1flcyZBY+3tMFXRcGrdrxSngjUbH/3w cg4iMleQOoM5eZ2SXUgFB8xbtLt8/BlfVsdFU8ZeS5fu8Lplqi4GHQgCNAR6zqDJ42ru 2tKUSCl1NCz7ziebD6sBSnlbovHEvvzVshJDSxYgHFs1Kp1FgJpyKTIiKLBQ/kjMnBNa Pteyx9vS0OHG3FrlxNeyk5G7JQADmfAbnqkmO6u2Fonucd4l8zVPu6TkIhKvtCDuzfiv oTclWt6CCFDivlGUDYR8S5r1gB0fwp7HyORb/aHh1JykHK7LxWUPyvdyvS+oAJSXyurY Nujw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761675853; x=1762280653; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=ZPy7CR+3/dyTl65TU1ROGc4kQBAmYNTRxO2+zXYhfjo=; b=qz9UYmd7f7XTBg1y60etHKgNhN0jGkLKPyLG5467Hiy3S5aGkJ4H2jh7AwP/8iEgGw dYVP+XcOaIOdAuAIgplArd7TxoKPdTcXrTTk+DEDTi186q+gXqQxwbjA9Jlb8ZUDMh1b qYEhoFjblUFQUmZJ0lMyrEivzwe6k3WU0/R9W3FPXsY1RRGcqeVBemzgwAdfH4X4VioE 5JVNqt4fNAWJZyMc4f2OT2SgujqlwOzDkIa9CMbazw7TRGaLM+3S/0Y8H5ynNjgc3sWv 8MEu3JYNhS4mXt7Kzs4cIvbISWDaWUo3CDBLFIdBT/njYE/LHbRms/AkynajGp+md+u4 OZUA== X-Gm-Message-State: AOJu0YyDMEzVh7Uh0AeQncNYHoRaWPvbBFAtls/FeJpdWgPMpJ3qQBJV bjwSUZw+kQMg5AmGlUk323ik3kVrBMHzR9/AV0E5ePUhDdoQS4KqXtNyyopYXwyWYYEgYg== X-Gm-Gg: ASbGncu7eEAkYyBOsR1GpB/zfq5IBsnNm4fb3Lb2qI/ne6Po9vLCIyvOYOMsXFfCcny BbD1AB1kaLkes+IVwCpRmiCgFry2uNwcrLbPoWubrjREnqsRz1TCI+tHc+EhuJAIh45wXJn8set ZKoHU1YYRMqM9m9mYHIvOTCirijN0mgv2ToGncoCeFI7F13kUyAP6EfNiOu50irh4YxffkfTKlp IhZ3gVMnM6g+zo7gLwj1y87IMJWMwBwRvV6vAgo619IDepN3DDq9yPJsBO7R1I3ko2Jw0F2KctR GLnQ7OnQBBy9Qj77sIwcs6qFS2NmI/TEmwppJwjLjjFkPYi8o/i3H+QwM8BaUbfBayTCZcx3ZFm Hd0tvBta0/2CBN0DGsmB6AOHQSlXD+DZsG2gBBQ/zSSONzGletvGDOHhHb4pW3+NWcJLbx1gLfm sCYkbwtxCDLmf01diKkNdkq+r9w1V0ASV1H6WdkJNKRAsbSw== X-Google-Smtp-Source: AGHT+IFHq/NHoT7IGF+5GCTZayS5DR/16ApNrAMiJYDW/yvqLskYpEe+vLk/p1QqVAHeZ6z9m2xp6Q== X-Received: by 2002:a05:6402:1d4d:b0:634:9121:7a2d with SMTP id 4fb4d7f45d1cf-64044272518mr2470a12.26.1761675852512; Tue, 28 Oct 2025 11:24:12 -0700 (PDT) From: Roman Bogorodskiy To: devel@lists.libvirt.org Subject: [PATCH] bhyve: process: improve domain startup error handling Date: Tue, 28 Oct 2025 19:22:04 +0100 Message-ID: <20251028182204.81586-1-bogorodskiy@gmail.com> X-Mailer: git-send-email 2.51.0 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: YAYNKJB6NTF6FG5VJM57QOR62GZZEKRQ X-Message-ID-Hash: YAYNKJB6NTF6FG5VJM57QOR62GZZEKRQ 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: 1761675997176158500 Content-Type: text/plain; charset="utf-8" After executing the bhyve binary, it might happen that it fails very early due to configuration issues (missing/inaccessible files, incorrect custom args), bugs, etc. In this case it'll look like the domain has started normally, but quickly turned off. Improve that by waiting for the domain's vmm entity to appear in /dev/vmm. Signed-off-by: Roman Bogorodskiy Reviewed-by: Michal Privoznik --- Ideally, I'd also like to display the errors that the bhyve binary logs in this case. But as I'm doing: virCommandSetErrorFD(cmd, &logfd); I'm not sure if I should read that again from logfd, or are there more optimal ways to do that? src/bhyve/bhyve_process.c | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/bhyve/bhyve_process.c b/src/bhyve/bhyve_process.c index 4fb7e642e1..591c2d1ded 100644 --- a/src/bhyve/bhyve_process.c +++ b/src/bhyve/bhyve_process.c @@ -143,7 +143,12 @@ virBhyveProcessStartImpl(struct _bhyveConn *driver, g_autoptr(virCommand) cmd =3D NULL; g_autoptr(virCommand) load_cmd =3D NULL; bhyveDomainObjPrivate *priv =3D vm->privateData; + g_auto(virBuffer) domain_vmm_path_buf =3D VIR_BUFFER_INITIALIZER; + g_autofree char *domain_vmm_path =3D NULL; int ret =3D -1, rc; + size_t i =3D 0; + int timeout =3D 3; + bool vmm_appeared =3D false; =20 logfile =3D g_strdup_printf("%s/%s.log", BHYVE_LOG_DIR, vm->def->name); if ((logfd =3D open(logfile, O_WRONLY | O_APPEND | O_CREAT, @@ -228,6 +233,25 @@ virBhyveProcessStartImpl(struct _bhyveConn *driver, goto cleanup; } =20 + virBufferAsprintf(&domain_vmm_path_buf, "/dev/vmm/%s", vm->def->name); + domain_vmm_path =3D virBufferContentAndReset(&domain_vmm_path_buf); + + do { + if (virFileExists(domain_vmm_path)) { + vmm_appeared =3D true; + break; + } + + g_usleep(500000); + } while (!vmm_appeared && ++i < timeout); + + if (!vmm_appeared) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Domain %1$s didn't show up in /dev/vmm"), + vm->def->name); + goto cleanup; + } + vm->def->id =3D vm->pid; virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, reason); priv->mon =3D bhyveMonitorOpen(vm, driver); --=20 2.51.0