From nobody Sun Dec 22 03:28:28 2024 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=fail; 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=fail(p=none dis=none) header.from=linux.microsoft.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1733132924297707.8482999445699; Mon, 2 Dec 2024 01:48:44 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 4165314B8; Mon, 2 Dec 2024 04:48:43 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 852721A7C; Mon, 2 Dec 2024 04:46:23 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 6232C17F0; Mon, 2 Dec 2024 04:46:11 -0500 (EST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lists.libvirt.org (Postfix) with ESMTP id 8BC1017F0 for ; Mon, 2 Dec 2024 04:46:05 -0500 (EST) Received: from paekkaladevi-dev-u22.gi4irqh5pfqublruu4yyku2wof.phxx.internal.cloudapp.net (unknown [20.125.125.171]) by linux.microsoft.com (Postfix) with ESMTPSA id DC47E2053059; Mon, 2 Dec 2024 01:46:03 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com DC47E2053059 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1733132764; bh=YbGqwrUoLcxgnkZuntuhyAzNqlDpOFavqasZ+I383uA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kEC4oO01QHvo0h87Fpd5u7NcyvnflXdZvcEsE/QPKnKv0vsQhcxZuhevLLAmHKv/a ZOFtJZdIdBwxD/QvnbX3PwLcqE+MntLcZiTCEJjWmD8d6PfN6pu3PCRb3VY0QX+TCC Tv1ib3WfEJmD+k7Aaya9OKkz3KhsxGCnuToJ3rMo= From: Purna Pavan Chandra Aekkaladevi To: devel@lists.libvirt.org Subject: [PATCH v4 1/5] ch: pass --event-monitor option to cloud-hypervisor Date: Mon, 2 Dec 2024 09:45:58 +0000 Message-Id: <20241202094602.288683-2-paekkaladevi@linux.microsoft.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241202094602.288683-1-paekkaladevi@linux.microsoft.com> References: <20241202094602.288683-1-paekkaladevi@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: S5HTBCPKGKVPYPPPKJXHHIPENVBFTBKY X-Message-ID-Hash: S5HTBCPKGKVPYPPPKJXHHIPENVBFTBKY X-MailFrom: paekkaladevi@linux.microsoft.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: prasad.krishnan@microsoft.com, prapal@linux.microsoft.com, liuwe@microsoft.com, jnadimpalli@microsoft.com, paekkaladevi@microsoft.com, Purna Pavan Chandra Aekkaladevi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) X-ZM-MESSAGEID: 1733132925555116600 Content-Type: text/plain; charset="utf-8" The `--event-monitor` option in cloud-hypervisor outputs events to a specified file. This file can then be used to monitor VM lifecycle, other vmm events and trigger appropriate actions. Signed-off-by: Purna Pavan Chandra Aekkaladevi Co-authored-by: Vineeth Pillai --- src/ch/ch_monitor.c | 20 ++++++++++++++++---- src/ch/ch_monitor.h | 2 ++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/src/ch/ch_monitor.c b/src/ch/ch_monitor.c index 690aea37c8..59117d72b6 100644 --- a/src/ch/ch_monitor.c +++ b/src/ch/ch_monitor.c @@ -540,7 +540,6 @@ virCHMonitorNew(virDomainObj *vm, virCHDriverConfig *cf= g) { g_autoptr(virCHMonitor) mon =3D NULL; g_autoptr(virCommand) cmd =3D NULL; - const char *socketdir =3D cfg->stateDir; int socket_fd =3D 0; =20 if (virCHMonitorInitialize() < 0) @@ -556,11 +555,13 @@ virCHMonitorNew(virDomainObj *vm, virCHDriverConfig *= cfg) } =20 /* prepare to launch Cloud-Hypervisor socket */ - mon->socketpath =3D g_strdup_printf("%s/%s-socket", socketdir, vm->def= ->name); - if (g_mkdir_with_parents(socketdir, 0777) < 0) { + mon->socketpath =3D g_strdup_printf("%s/%s-socket", cfg->stateDir, vm-= >def->name); + mon->eventmonitorpath =3D g_strdup_printf("%s/%s-event-monitor", + cfg->stateDir, vm->def->name); + if (g_mkdir_with_parents(cfg->stateDir, 0777) < 0) { virReportSystemError(errno, _("Cannot create socket directory '%1$s'"), - socketdir); + cfg->stateDir); return NULL; } =20 @@ -585,6 +586,9 @@ virCHMonitorNew(virDomainObj *vm, virCHDriverConfig *cf= g) virCommandAddArgFormat(cmd, "fd=3D%d", socket_fd); virCommandPassFD(cmd, socket_fd, VIR_COMMAND_PASS_FD_CLOSE_PARENT); =20 + virCommandAddArg(cmd, "--event-monitor"); + virCommandAddArgFormat(cmd, "path=3D%s", mon->eventmonitorpath); + /* launch Cloud-Hypervisor socket */ if (virCommandRunAsync(cmd, &mon->pid) < 0) return NULL; @@ -630,6 +634,14 @@ void virCHMonitorClose(virCHMonitor *mon) g_clear_pointer(&mon->socketpath, g_free); } =20 + if (mon->eventmonitorpath) { + if (virFileRemove(mon->eventmonitorpath, -1, -1) < 0) { + VIR_WARN("Unable to remove CH event monitor file '%s'", + mon->eventmonitorpath); + } + g_clear_pointer(&mon->eventmonitorpath, g_free); + } + virObjectUnref(mon); } =20 diff --git a/src/ch/ch_monitor.h b/src/ch/ch_monitor.h index 9ec58e5b20..7f72626c2b 100644 --- a/src/ch/ch_monitor.h +++ b/src/ch/ch_monitor.h @@ -95,6 +95,8 @@ struct _virCHMonitor { =20 char *socketpath; =20 + char *eventmonitorpath; + pid_t pid; =20 virDomainObj *vm; --=20 2.34.1 From nobody Sun Dec 22 03:28:28 2024 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=fail; 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=fail(p=none dis=none) header.from=linux.microsoft.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1733132831337721.844484527364; Mon, 2 Dec 2024 01:47:11 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id F03C31A07; Mon, 2 Dec 2024 04:47:09 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id DF11B1906; Mon, 2 Dec 2024 04:46:13 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id BE7C01810; Mon, 2 Dec 2024 04:46:09 -0500 (EST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lists.libvirt.org (Postfix) with ESMTP id 778BC17ED for ; Mon, 2 Dec 2024 04:46:05 -0500 (EST) Received: from paekkaladevi-dev-u22.gi4irqh5pfqublruu4yyku2wof.phxx.internal.cloudapp.net (unknown [20.125.125.171]) by linux.microsoft.com (Postfix) with ESMTPSA id 58B322053073; Mon, 2 Dec 2024 01:46:04 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 58B322053073 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1733132764; bh=/nKAtjdW2ukqx4Dfh7dBmOEDFJ06RuZmvirsxLHbtNo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=pG3jjzOdFj6fgskjiaZ6C/RvqYv8jnYBfbTIQKX+/wB+k0+7IMAa6xE0Nss6akFdP aNic64OAFe4gQ8Svr0Vs45VhCI94OC3CDCrOCZtf19Zc62eMHE906qlLd2iANjh28M QZGktGmI+8KqUVi1MIUTNrjEBNNZuGdv7FIjTQS4= From: Purna Pavan Chandra Aekkaladevi To: devel@lists.libvirt.org Subject: [PATCH v4 2/5] ch: start a new thread for handling ch events Date: Mon, 2 Dec 2024 09:45:59 +0000 Message-Id: <20241202094602.288683-3-paekkaladevi@linux.microsoft.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241202094602.288683-1-paekkaladevi@linux.microsoft.com> References: <20241202094602.288683-1-paekkaladevi@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: ZEC66YFJL6ANIU2UGTFNTGNPQ56SDT2K X-Message-ID-Hash: ZEC66YFJL6ANIU2UGTFNTGNPQ56SDT2K X-MailFrom: paekkaladevi@linux.microsoft.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: prasad.krishnan@microsoft.com, prapal@linux.microsoft.com, liuwe@microsoft.com, jnadimpalli@microsoft.com, paekkaladevi@microsoft.com, Purna Pavan Chandra Aekkaladevi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) X-ZM-MESSAGEID: 1733132833274116600 Content-Type: text/plain; charset="utf-8" Use a FIFO(named pipe) for --event-monitor option in CH. Introduce a new thread, `virCHEventHandlerLoop`, to continuously monitor and handle events from cloud-hypervisor. Signed-off-by: Purna Pavan Chandra Aekkaladevi Co-authored-by: Vineeth Pillai --- po/POTFILES | 1 + src/ch/ch_events.c | 111 ++++++++++++++++++++++++++++++++++++++++++++ src/ch/ch_events.h | 26 +++++++++++ src/ch/ch_monitor.c | 32 +++++++++++-- src/ch/ch_monitor.h | 3 ++ src/ch/meson.build | 2 + 6 files changed, 172 insertions(+), 3 deletions(-) create mode 100644 src/ch/ch_events.c create mode 100644 src/ch/ch_events.h diff --git a/po/POTFILES b/po/POTFILES index 3514aa3dca..3b07459021 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -21,6 +21,7 @@ src/bhyve/bhyve_process.c src/ch/ch_conf.c src/ch/ch_domain.c src/ch/ch_driver.c +src/ch/ch_events.c src/ch/ch_hostdev.c src/ch/ch_interface.c src/ch/ch_monitor.c diff --git a/src/ch/ch_events.c b/src/ch/ch_events.c new file mode 100644 index 0000000000..247f99cef0 --- /dev/null +++ b/src/ch/ch_events.c @@ -0,0 +1,111 @@ +/* + * Copyright Microsoft Corp. 2024 + * + * ch_events.c: Handle Cloud-Hypervisor events + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#include + +#include + +#include "ch_domain.h" +#include "ch_events.h" +#include "ch_process.h" +#include "virfile.h" +#include "virlog.h" + +VIR_LOG_INIT("ch.ch_events"); + +static int virCHEventStopProcess(virDomainObj *vm, + virDomainShutoffReason reason) +{ + virCHDriver *driver =3D ((virCHDomainObjPrivate *)vm->privateData)->d= river; + + virObjectLock(vm); + if (virDomainObjBeginJob(vm, VIR_JOB_MODIFY)) + return -1; + virCHProcessStop(driver, vm, reason); + virDomainObjEndJob(vm); + virObjectUnlock(vm); + + return 0; +} + +static void virCHEventHandlerLoop(void *data) +{ + virCHMonitor *mon =3D data; + virDomainObj *vm =3D NULL; + int event_monitor_fd; + + /* Obtain a vm reference */ + vm =3D virObjectRef(mon->vm); + + VIR_DEBUG("%s: Event handler loop thread starting", vm->def->name); + + while ((event_monitor_fd =3D open(mon->eventmonitorpath, O_RDONLY)) < = 0) { + if (errno =3D=3D EINTR) { + /* 100 milli seconds */ + g_usleep(100000); + continue; + } + /* Any other error should be a BUG(kernel/libc/libvirtd) + * (ENOMEM can happen on exceeding per-user limits) + */ + VIR_ERROR(_("%1$s: Failed to open the event monitor FIFO(%2$s) rea= d end!"), + vm->def->name, mon->eventmonitorpath); + virCHEventStopProcess(vm, VIR_DOMAIN_SHUTOFF_FAILED); + goto end; + } + VIR_DEBUG("%s: Opened the event monitor FIFO(%s)", vm->def->name, mon-= >eventmonitorpath); + + while (g_atomic_int_get(&mon->event_handler_stop) =3D=3D 0) { + VIR_DEBUG("%s: Reading events from event monitor file", vm->def->n= ame); + /* Read and process events here */ + } + + end: + VIR_FORCE_CLOSE(event_monitor_fd); + virObjectUnref(vm); + VIR_DEBUG("%s: Event handler loop thread exiting", vm->def->name); + return; +} + +int virCHStartEventHandler(virCHMonitor *mon) +{ + g_autofree char *name =3D NULL; + name =3D g_strdup_printf("ch-evt-%d", mon->pid); + + virObjectRef(mon); + if (virThreadCreateFull(&mon->event_handler_thread, + false, + virCHEventHandlerLoop, + name, + false, + mon) < 0) { + virObjectUnref(mon); + return -1; + } + virObjectUnref(mon); + + g_atomic_int_set(&mon->event_handler_stop, 0); + return 0; +} + +void virCHStopEventHandler(virCHMonitor *mon) +{ + g_atomic_int_set(&mon->event_handler_stop, 1); +} diff --git a/src/ch/ch_events.h b/src/ch/ch_events.h new file mode 100644 index 0000000000..4c8a48231d --- /dev/null +++ b/src/ch/ch_events.h @@ -0,0 +1,26 @@ +/* + * Copyright Microsoft Corp. 2024 + * + * ch_events.h: header file for handling Cloud-Hypervisor events + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library. If not, see + * . + */ + +#pragma once + +#include "ch_monitor.h" + +int virCHStartEventHandler(virCHMonitor *mon); +void virCHStopEventHandler(virCHMonitor *mon); diff --git a/src/ch/ch_monitor.c b/src/ch/ch_monitor.c index 59117d72b6..f00a892a09 100644 --- a/src/ch/ch_monitor.c +++ b/src/ch/ch_monitor.c @@ -26,6 +26,7 @@ =20 #include "datatypes.h" #include "ch_conf.h" +#include "ch_events.h" #include "ch_interface.h" #include "ch_monitor.h" #include "domain_interface.h" @@ -572,6 +573,27 @@ virCHMonitorNew(virDomainObj *vm, virCHDriverConfig *c= fg) return NULL; } =20 + /* Event monitor file to listen for VM state changes */ + mon->eventmonitorpath =3D g_strdup_printf("%s/%s-event-monitor-fifo", + cfg->stateDir, vm->def->name); + if (virFileExists(mon->eventmonitorpath)) { + VIR_WARN("Monitor file (%s) already exists, trying to delete!", + mon->eventmonitorpath); + if (virFileRemove(mon->eventmonitorpath, -1, -1) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("Failed to remove the file: %1$s"), + mon->eventmonitorpath); + return NULL; + } + } + + if (mkfifo(mon->eventmonitorpath, S_IWUSR | S_IRUSR) < 0 && + errno !=3D EEXIST) { + virReportSystemError(errno, "%s", + _("Cannot create monitor FIFO")); + return NULL; + } + cmd =3D virCommandNew(vm->def->emulator); virCommandSetUmask(cmd, 0x002); socket_fd =3D chMonitorCreateSocket(mon->socketpath); @@ -593,12 +615,15 @@ virCHMonitorNew(virDomainObj *vm, virCHDriverConfig *= cfg) if (virCommandRunAsync(cmd, &mon->pid) < 0) return NULL; =20 - /* get a curl handle */ - mon->handle =3D curl_easy_init(); - /* now has its own reference */ mon->vm =3D virObjectRef(vm); =20 + if (virCHStartEventHandler(mon) < 0) + return NULL; + + /* get a curl handle */ + mon->handle =3D curl_easy_init(); + return g_steal_pointer(&mon); } =20 @@ -634,6 +659,7 @@ void virCHMonitorClose(virCHMonitor *mon) g_clear_pointer(&mon->socketpath, g_free); } =20 + virCHStopEventHandler(mon); if (mon->eventmonitorpath) { if (virFileRemove(mon->eventmonitorpath, -1, -1) < 0) { VIR_WARN("Unable to remove CH event monitor file '%s'", diff --git a/src/ch/ch_monitor.h b/src/ch/ch_monitor.h index 7f72626c2b..6d154652fa 100644 --- a/src/ch/ch_monitor.h +++ b/src/ch/ch_monitor.h @@ -97,6 +97,9 @@ struct _virCHMonitor { =20 char *eventmonitorpath; =20 + virThread event_handler_thread; + int event_handler_stop; + pid_t pid; =20 virDomainObj *vm; diff --git a/src/ch/meson.build b/src/ch/meson.build index ca1291c158..0b4a5aeb49 100644 --- a/src/ch/meson.build +++ b/src/ch/meson.build @@ -7,6 +7,8 @@ ch_driver_sources =3D [ 'ch_domain.h', 'ch_driver.c', 'ch_driver.h', + 'ch_events.c', + 'ch_events.h', 'ch_interface.c', 'ch_interface.h', 'ch_monitor.c', --=20 2.34.1 From nobody Sun Dec 22 03:28:28 2024 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=fail; 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=fail(p=none dis=none) header.from=linux.microsoft.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1733132906118415.36265751477924; Mon, 2 Dec 2024 01:48:26 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id F06E51600; Mon, 2 Dec 2024 04:48:24 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id B3DBF1826; Mon, 2 Dec 2024 04:46:21 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 6167B1364; Mon, 2 Dec 2024 04:46:11 -0500 (EST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lists.libvirt.org (Postfix) with ESMTP id 350E61806 for ; Mon, 2 Dec 2024 04:46:06 -0500 (EST) Received: from paekkaladevi-dev-u22.gi4irqh5pfqublruu4yyku2wof.phxx.internal.cloudapp.net (unknown [20.125.125.171]) by linux.microsoft.com (Postfix) with ESMTPSA id C949E2064AE8; Mon, 2 Dec 2024 01:46:04 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com C949E2064AE8 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1733132765; bh=bnYEUrxuvkxELh1lOta9SeQ0s7J44A936L1depdtD0g=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=W+SsoXzWTJjqPCwDQXck2GABMWdCaa2h9XjfPa454L2Ahmx00/3jhPsCKpZKdoUby 0m4f5WatpSNXjYPe/xRm3PgKypvNiFj1c6KLsyWMuhbP1JiZ1mqt7HzyZT/EPKhW+X WD/hoUMBFWs4Bq0G9+XNg/XIlZi+c2dEJKokHhQs= From: Purna Pavan Chandra Aekkaladevi To: devel@lists.libvirt.org Subject: [PATCH v4 3/5] ch: events: Read and parse cloud-hypervisor events Date: Mon, 2 Dec 2024 09:46:00 +0000 Message-Id: <20241202094602.288683-4-paekkaladevi@linux.microsoft.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241202094602.288683-1-paekkaladevi@linux.microsoft.com> References: <20241202094602.288683-1-paekkaladevi@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: I3RGRTVSHNFQJFOIXBRTUHYEOLDNDSQE X-Message-ID-Hash: I3RGRTVSHNFQJFOIXBRTUHYEOLDNDSQE X-MailFrom: paekkaladevi@linux.microsoft.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: prasad.krishnan@microsoft.com, prapal@linux.microsoft.com, liuwe@microsoft.com, jnadimpalli@microsoft.com, paekkaladevi@microsoft.com, Purna Pavan Chandra Aekkaladevi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) X-ZM-MESSAGEID: 1733132907549116600 Content-Type: text/plain; charset="utf-8" Implement `chReadProcessEvents` and `chProcessEvents` to read events from event monitor FIFO file and parse them accordingly. Signed-off-by: Purna Pavan Chandra Aekkaladevi Co-authored-by: Vineeth Pillai --- src/ch/ch_events.c | 137 +++++++++++++++++++++++++++++++++++++++++++- src/ch/ch_events.h | 2 + src/ch/ch_monitor.h | 6 ++ 3 files changed, 144 insertions(+), 1 deletion(-) diff --git a/src/ch/ch_events.c b/src/ch/ch_events.c index 247f99cef0..a4c2fc4130 100644 --- a/src/ch/ch_events.c +++ b/src/ch/ch_events.c @@ -45,6 +45,137 @@ static int virCHEventStopProcess(virDomainObj *vm, return 0; } =20 +/** + * virCHProcessEvents: + * @mon: the CH monitor object + * + * Parse the events from the event buffer and process them + * Example event: + * { + * "timestamp": { + * "secs": 0, + * "nanos": 29228206 + * }, + * "source": "vm", + * "event": "booted", + * "properties": null + * } + * + * Returns: 0 on success, -1 on failure + */ +static int virCHProcessEvents(virCHMonitor *mon) +{ + virDomainObj *vm =3D mon->vm; + char *buf =3D mon->event_buffer.buffer; + ssize_t sz =3D mon->event_buffer.buf_fill_sz; + virJSONValue *obj =3D NULL; + int blocks =3D 0; + size_t i =3D 0; + char *json_start; + ssize_t start_index =3D -1; + ssize_t end_index =3D -1; + char tmp; + int ret =3D 0; + + while (i < sz) { + if (buf[i] =3D=3D '{') { + blocks++; + if (blocks =3D=3D 1) + start_index =3D i; + } else if (buf[i] =3D=3D '}' && blocks > 0) { + blocks--; + if (blocks =3D=3D 0) { + /* valid json document */ + end_index =3D i; + + /* temporarily null terminate the JSON doc */ + tmp =3D buf[end_index + 1]; + buf[end_index + 1] =3D '\0'; + json_start =3D buf + start_index; + + if ((obj =3D virJSONValueFromString(json_start))) { + /* Process the event string (obj) here */ + virJSONValueFree(obj); + } else { + VIR_WARN("%s: Invalid JSON event doc: %s", + vm->def->name, json_start); + ret =3D -1; + } + + /* replace the original character */ + buf[end_index + 1] =3D tmp; + start_index =3D -1; + } + } + + i++; + } + + if (start_index =3D=3D -1) { + /* We have processed all the JSON docs in the buffer */ + mon->event_buffer.buf_fill_sz =3D 0; + } else if (start_index > 0) { + /* We have an incomplete JSON doc at the end of the buffer + * Move it to the start of the buffer + */ + mon->event_buffer.buf_fill_sz =3D sz - start_index; + memmove(buf, buf+start_index, mon->event_buffer.buf_fill_sz); + } + + return ret; +} + +static void virCHReadProcessEvents(virCHMonitor *mon, + int event_monitor_fd) +{ + /* Event json string must always terminate with null char. + * So, reserve one byte for '\0' at the end. + */ + size_t max_sz =3D CH_EVENT_BUFFER_SZ - 1; + char *buf =3D mon->event_buffer.buffer; + virDomainObj *vm =3D mon->vm; + bool incomplete =3D false; + size_t sz =3D 0; + + memset(buf, 0, max_sz); + do { + ssize_t ret; + + ret =3D read(event_monitor_fd, buf + sz, max_sz - sz); + if (ret =3D=3D 0 || (ret < 0 && errno =3D=3D EINTR)) { + g_usleep(G_USEC_PER_SEC); + continue; + } else if (ret < 0) { + /* We should never reach here. read(2) says possible errors + * are EINTR, EAGAIN, EBADF, EFAULT, EINVAL, EIO, EISDIR + * We handle EINTR gracefully. There is some serious issue + * if we encounter any of the other errors(either in our code + * or in the system). Better to bail out. + */ + VIR_ERROR(_("%1$s: Failed to read ch events!: %2$s"), + vm->def->name, g_strerror(errno)); + virCHEventStopProcess(vm, VIR_DOMAIN_SHUTOFF_FAILED); + virCHStopEventHandler(mon); + return; + } + + sz +=3D ret; + mon->event_buffer.buf_fill_sz =3D sz; + + if (virCHProcessEvents(mon) < 0) + VIR_WARN("%s: Failed to parse and process events", vm->def->na= me); + + if (mon->event_buffer.buf_fill_sz !=3D 0) + incomplete =3D true; + else + incomplete =3D false; + sz =3D mon->event_buffer.buf_fill_sz; + + } while (virDomainObjIsActive(vm) && (sz < max_sz) && incomplete); + + return; +} + static void virCHEventHandlerLoop(void *data) { virCHMonitor *mon =3D data; @@ -56,6 +187,9 @@ static void virCHEventHandlerLoop(void *data) =20 VIR_DEBUG("%s: Event handler loop thread starting", vm->def->name); =20 + mon->event_buffer.buffer =3D g_malloc_n(sizeof(char), CH_EVENT_BUFFER_= SZ); + mon->event_buffer.buf_fill_sz =3D 0; + while ((event_monitor_fd =3D open(mon->eventmonitorpath, O_RDONLY)) < = 0) { if (errno =3D=3D EINTR) { /* 100 milli seconds */ @@ -74,10 +208,11 @@ static void virCHEventHandlerLoop(void *data) =20 while (g_atomic_int_get(&mon->event_handler_stop) =3D=3D 0) { VIR_DEBUG("%s: Reading events from event monitor file", vm->def->n= ame); - /* Read and process events here */ + virCHReadProcessEvents(mon, event_monitor_fd); } =20 end: + g_clear_pointer(&mon->event_buffer.buffer, g_free); VIR_FORCE_CLOSE(event_monitor_fd); virObjectUnref(vm); VIR_DEBUG("%s: Event handler loop thread exiting", vm->def->name); diff --git a/src/ch/ch_events.h b/src/ch/ch_events.h index 4c8a48231d..2e9cdf03bb 100644 --- a/src/ch/ch_events.h +++ b/src/ch/ch_events.h @@ -22,5 +22,7 @@ =20 #include "ch_monitor.h" =20 +#define CH_EVENT_BUFFER_SZ PIPE_BUF + int virCHStartEventHandler(virCHMonitor *mon); void virCHStopEventHandler(virCHMonitor *mon); diff --git a/src/ch/ch_monitor.h b/src/ch/ch_monitor.h index 6d154652fa..a84e348938 100644 --- a/src/ch/ch_monitor.h +++ b/src/ch/ch_monitor.h @@ -99,6 +99,12 @@ struct _virCHMonitor { =20 virThread event_handler_thread; int event_handler_stop; + struct { + /* Buffer to hold the data read from pipe */ + char *buffer; + /* Size of the data read from pipe into buffer */ + size_t buf_fill_sz; + } event_buffer; =20 pid_t pid; =20 --=20 2.34.1 From nobody Sun Dec 22 03:28:28 2024 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=fail; 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=fail(p=none dis=none) header.from=linux.microsoft.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1733132855188818.8683982362393; Mon, 2 Dec 2024 01:47:35 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id 0BABA197B; Mon, 2 Dec 2024 04:47:33 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id B941B1A45; Mon, 2 Dec 2024 04:46:16 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 5F15C17E3; Mon, 2 Dec 2024 04:46:11 -0500 (EST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lists.libvirt.org (Postfix) with ESMTP id 8A88C180A for ; Mon, 2 Dec 2024 04:46:06 -0500 (EST) Received: from paekkaladevi-dev-u22.gi4irqh5pfqublruu4yyku2wof.phxx.internal.cloudapp.net (unknown [20.125.125.171]) by linux.microsoft.com (Postfix) with ESMTPSA id 456C12053051; Mon, 2 Dec 2024 01:46:05 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com 456C12053051 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1733132765; bh=Wd0q6XEsMU8Q69ff3r8ys+WtBzqEo2QWVZGYJCEYErU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ca2wrhe1gOcorsxkqukeNWvl1zuloMP/lytoy2xhVuvBiN5vvKShk1N4cfS3E1VHk vz7j9dVbnWiS7dD/pCeLXyBWhFSw3LdEnoYrxXMl7ZioFtKDg/+5RYTY0jxHU+hieg ulpy6uib2N+ro596/fYaqvyHa43rBKi2y04QNiaU= From: Purna Pavan Chandra Aekkaladevi To: devel@lists.libvirt.org Subject: [PATCH v4 4/5] ch: events: facilitate lifecycle events handling Date: Mon, 2 Dec 2024 09:46:01 +0000 Message-Id: <20241202094602.288683-5-paekkaladevi@linux.microsoft.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241202094602.288683-1-paekkaladevi@linux.microsoft.com> References: <20241202094602.288683-1-paekkaladevi@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: JG7RR46Q6M5JXUQVR4MIT6BMMIRKPLUI X-Message-ID-Hash: JG7RR46Q6M5JXUQVR4MIT6BMMIRKPLUI X-MailFrom: paekkaladevi@linux.microsoft.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: prasad.krishnan@microsoft.com, prapal@linux.microsoft.com, liuwe@microsoft.com, jnadimpalli@microsoft.com, paekkaladevi@microsoft.com, Purna Pavan Chandra Aekkaladevi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) X-ZM-MESSAGEID: 1733132857350116600 Content-Type: text/plain; charset="utf-8" Implement `virCHProcessEvent` that maps event string to corresponding event type and take appropriate actions. As part of this, handle the shutdown event by correctly updating the domain state. this change also facilitates the handling of other VM lifecycle events, such as booting, rebooting, pause, resume, etc. Signed-off-by: Purna Pavan Chandra Aekkaladevi --- src/ch/ch_events.c | 87 +++++++++++++++++++++++++++++++++++++++++++++- src/ch/ch_events.h | 26 ++++++++++++++ 2 files changed, 112 insertions(+), 1 deletion(-) diff --git a/src/ch/ch_events.c b/src/ch/ch_events.c index a4c2fc4130..45605a0826 100644 --- a/src/ch/ch_events.c +++ b/src/ch/ch_events.c @@ -30,6 +30,26 @@ =20 VIR_LOG_INIT("ch.ch_events"); =20 +VIR_ENUM_IMPL(virCHEvent, + VIR_CH_EVENT_LAST, + "vmm:starting", + "vmm:shutdown", + "vm:booting", + "vm:booted", + "vm:rebooting", + "vm:rebooted", + "vm:shutdown", + "vm:deleted", + "vm:pausing", + "vm:paused", + "vm:resuming", + "vm:resumed", + "vm:snapshotting", + "vm:snapshotted", + "vm:restoring", + "vm:restored", +); + static int virCHEventStopProcess(virDomainObj *vm, virDomainShutoffReason reason) { @@ -45,6 +65,67 @@ static int virCHEventStopProcess(virDomainObj *vm, return 0; } =20 +static int virCHProcessEvent(virCHMonitor *mon, + virJSONValue *eventJSON) +{ + const char *event; + const char *source; + virCHEvent ev; + g_autofree char *timestamp =3D NULL; + g_autofree char *full_event =3D NULL; + virDomainObj *vm =3D mon->vm; + int ret =3D 0; + + if (virJSONValueObjectHasKey(eventJSON, "source") =3D=3D 0) { + VIR_WARN("%s: Invalid JSON from monitor, no source key", vm->def->= name); + return -1; + } + if (virJSONValueObjectHasKey(eventJSON, "event") =3D=3D 0) { + VIR_WARN("%s: Invalid JSON from monitor, no event key", vm->def->n= ame); + return -1; + } + source =3D virJSONValueObjectGetString(eventJSON, "source"); + event =3D virJSONValueObjectGetString(eventJSON, "event"); + full_event =3D g_strdup_printf("%s:%s", source, event); + ev =3D virCHEventTypeFromString(full_event); + VIR_DEBUG("%s: Source: %s, Event: %s, ev: %d", vm->def->name, source, = event, ev); + + switch (ev) { + case VIR_CH_EVENT_VMM_STARTING: + case VIR_CH_EVENT_VM_BOOTING: + case VIR_CH_EVENT_VM_BOOTED: + case VIR_CH_EVENT_VM_REBOOTING: + case VIR_CH_EVENT_VM_REBOOTED: + case VIR_CH_EVENT_VM_PAUSING: + case VIR_CH_EVENT_VM_PAUSED: + case VIR_CH_EVENT_VM_RESUMING: + case VIR_CH_EVENT_VM_RESUMED: + case VIR_CH_EVENT_VM_SNAPSHOTTING: + case VIR_CH_EVENT_VM_SNAPSHOTTED: + case VIR_CH_EVENT_VM_RESTORING: + case VIR_CH_EVENT_VM_RESTORED: + case VIR_CH_EVENT_VM_DELETED: + break; + case VIR_CH_EVENT_VMM_SHUTDOWN: + if (virCHEventStopProcess(vm, VIR_DOMAIN_SHUTOFF_SHUTDOWN)) { + VIR_WARN("Failed to mark the VM(%s) as SHUTDOWN!", + vm->def->name); + ret =3D -1; + } + break; + case VIR_CH_EVENT_VM_SHUTDOWN: + virObjectLock(vm); + virDomainObjSetState(vm, VIR_DOMAIN_SHUTOFF, VIR_DOMAIN_SHUTOF= F_SHUTDOWN); + virObjectUnlock(vm); + break; + case VIR_CH_EVENT_LAST: + default: + VIR_WARN("%s: Unknown event: %s", vm->def->name, full_event); + } + + return ret; +} + /** * virCHProcessEvents: * @mon: the CH monitor object @@ -94,7 +175,11 @@ static int virCHProcessEvents(virCHMonitor *mon) json_start =3D buf + start_index; =20 if ((obj =3D virJSONValueFromString(json_start))) { - /* Process the event string (obj) here */ + if (virCHProcessEvent(mon, obj) < 0) { + VIR_WARN("%s: Failed to process JSON event doc: %s= ", + vm->def->name, json_start); + ret =3D -1; + } virJSONValueFree(obj); } else { VIR_WARN("%s: Invalid JSON event doc: %s", diff --git a/src/ch/ch_events.h b/src/ch/ch_events.h index 2e9cdf03bb..3b360628f7 100644 --- a/src/ch/ch_events.h +++ b/src/ch/ch_events.h @@ -24,5 +24,31 @@ =20 #define CH_EVENT_BUFFER_SZ PIPE_BUF =20 +typedef enum { + /* source: vmm */ + VIR_CH_EVENT_VMM_STARTING =3D 0, + VIR_CH_EVENT_VMM_SHUTDOWN, + + /* source: vm */ + VIR_CH_EVENT_VM_BOOTING, + VIR_CH_EVENT_VM_BOOTED, + VIR_CH_EVENT_VM_REBOOTING, + VIR_CH_EVENT_VM_REBOOTED, + VIR_CH_EVENT_VM_SHUTDOWN, + VIR_CH_EVENT_VM_DELETED, + VIR_CH_EVENT_VM_PAUSING, + VIR_CH_EVENT_VM_PAUSED, + VIR_CH_EVENT_VM_RESUMING, + VIR_CH_EVENT_VM_RESUMED, + VIR_CH_EVENT_VM_SNAPSHOTTING, + VIR_CH_EVENT_VM_SNAPSHOTTED, + VIR_CH_EVENT_VM_RESTORING, + VIR_CH_EVENT_VM_RESTORED, + + VIR_CH_EVENT_LAST +} virCHEvent; + +VIR_ENUM_DECL(virCHEvent); + int virCHStartEventHandler(virCHMonitor *mon); void virCHStopEventHandler(virCHMonitor *mon); --=20 2.34.1 From nobody Sun Dec 22 03:28:28 2024 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=fail; 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=fail(p=none dis=none) header.from=linux.microsoft.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1733132873067380.8047098207725; Mon, 2 Dec 2024 01:47:53 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 996) id E573615B8; Mon, 2 Dec 2024 04:47:51 -0500 (EST) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 7E5F31A4B; Mon, 2 Dec 2024 04:46:18 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 996) id 6092617DD; Mon, 2 Dec 2024 04:46:11 -0500 (EST) Received: from linux.microsoft.com (linux.microsoft.com [13.77.154.182]) by lists.libvirt.org (Postfix) with ESMTP id A69C9180C for ; Mon, 2 Dec 2024 04:46:06 -0500 (EST) Received: from paekkaladevi-dev-u22.gi4irqh5pfqublruu4yyku2wof.phxx.internal.cloudapp.net (unknown [20.125.125.171]) by linux.microsoft.com (Postfix) with ESMTPSA id B54EF2053073; Mon, 2 Dec 2024 01:46:05 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, RCVD_IN_VALIDITY_RPBL_BLOCKED,RCVD_IN_VALIDITY_SAFE_BLOCKED, SPF_HELO_PASS autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Filter: OpenDKIM Filter v2.11.0 linux.microsoft.com B54EF2053073 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.microsoft.com; s=default; t=1733132766; bh=M7bnJHG46mxcturP/rt6vKsgdeRiy/cE4gJ/KcStHqg=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=d7kP+VnpTZuzEaZC72vVWad/wKNUzhvLnEt5N2AlRg7jGvx+a0a0nf7MGNWRHrKws +fN2N60OM1jYLqQKyI2LfUDrp/37RKVR7+FjDtLvH2LDl1ccch9ywHf/Y6rA7VNfhg c/lIeMU8hdfyBIaZPTmGPWAE353RyS0HhihkNu6A= From: Purna Pavan Chandra Aekkaladevi To: devel@lists.libvirt.org Subject: [PATCH v4 5/5] NEWS: Mention event handling support in ch driver Date: Mon, 2 Dec 2024 09:46:02 +0000 Message-Id: <20241202094602.288683-6-paekkaladevi@linux.microsoft.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20241202094602.288683-1-paekkaladevi@linux.microsoft.com> References: <20241202094602.288683-1-paekkaladevi@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: W6QJ7HIGF6RLOTUFQCDQ6AVTIXRB3GEU X-Message-ID-Hash: W6QJ7HIGF6RLOTUFQCDQ6AVTIXRB3GEU X-MailFrom: paekkaladevi@linux.microsoft.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: prasad.krishnan@microsoft.com, prapal@linux.microsoft.com, liuwe@microsoft.com, jnadimpalli@microsoft.com, paekkaladevi@microsoft.com, Purna Pavan Chandra Aekkaladevi X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Computed bodyhash is different from the expected one) X-ZM-MESSAGEID: 1733132873219116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Purna Pavan Chandra Signed-off-by: Purna Pavan Chandra Aekkaladevi --- NEWS.rst | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/NEWS.rst b/NEWS.rst index 65e21c4299..1a7dfd4e00 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -52,6 +52,13 @@ v10.10.0 (unreleased) restrict a TPM's provided set of crypto algorithms and commands. Users= can now select profile by using ```` in their TPM XML definition. =20 + * ch: Support handling events from cloud-hypervisor + + The ch driver now supports handling events from the cloud-hypervisor. + Events include VM lifecyle operations such as shutdown, pause, resume, + etc. Libvirt will now read these events and take actions such as + updating domain state, etc. + * **Improvements** =20 * qemu: Support UEFI NVRAM images on block storage --=20 2.34.1