[libvirt PATCH 00/12] virtio failover / vfio auto-plug-on-migrate
by Laine Stump
https://bugzilla.redhat.com/1693587
'QEMU 4.2.0 and later, combined with a sufficiently recent guest
virtio-net driver, supports setting up a simple network bond device
comprised of one virtio emulated NIC and one hostdev NIC (which must
be an SRIOV VF). The allure of this setup is that the bond will always
favor the hostdev device, providing better performance, until the
guest is migrated - at that time QEMU will automatically unplug the
hostdev NIC and the bond will send all traffic via the virtio NIC
until migration is completed, then QEMU on the destination side will
hotplug a new hostdev NIC and the bond will switch back to using the
hostdev for network traffic. The result is that guests desiring the
extra performance of a hostdev NIC are now migratable without network
downtime (performance is just degraded during migration) and without
requiring a complicated bonding configuration in the guest OS network
config and complicated unplug/replug logic in the management
application on the host - it can instead all be accomplished in
libvirt with the interface <driver> subelement "failover" and
"backupAlias" attributes.
Patches 1-4 are just simple refactoring with no functional change,
5-10 are the new functionality, patch 11 is documentation, and Patch
12 is an RFC for a method to solve a problem that oVirt has when
trying to use this feature - while the virtio guest driver requires
the pair of interfaces to have matching MAC addresses, oVirt requires
every network interface to have a unique MAC. I'm not sure that I like
having this hackishness in libvirt (see the commit log message), but
it does solve oVirt's problem, and also makes direct config with
libvirt XML simpler (since it removes the need to manually specify any
MAC addresses in order to arrive at a working config, which is
something that has always been the case before now). I'll leave it up to the jury to decide whether or not it's acceptable :-)
Laine Stump (12):
conf: refactor hostdev driver subelement format for simpler additions
conf: change virDomainVirtioNet*Format() to return void
conf: rename two static functions
conf: refactor <interface>'s <driver> subelement parse/format
qemu: add capabilities flag for failover feature
conf: add failover attribute to <driver> subelement of <interface>
qemu: add backupAlias attribute to <driver> subelement of hostdev
devices
conf: add backupAlias attribute to <interface> driver subelement
qemu: allow migration with assigned PCI hostdev if backupAlias is set
qemu: add wait-unplug to qemu migration status enum
docs: document virtio failover / QEMU auto-plug of hostdev during
migration
conf/qemu: new <driver> attribute "useBackupMAC"
docs/formatdomain.html.in | 74 +++
docs/news.xml | 27 +
docs/schemas/domaincommon.rng | 15 +
src/conf/domain_conf.c | 559 ++++++++++--------
src/conf/domain_conf.h | 57 +-
src/libxl/libxl_driver.c | 2 +-
src/qemu/qemu_capabilities.c | 2 +
src/qemu/qemu_capabilities.h | 1 +
src/qemu/qemu_command.c | 5 +
src/qemu/qemu_domain.c | 21 +-
src/qemu/qemu_hostdev.c | 5 +-
src/qemu/qemu_hostdev.h | 1 +
src/qemu/qemu_hotplug.c | 2 +-
src/qemu/qemu_migration.c | 49 +-
src/qemu/qemu_monitor.c | 1 +
src/qemu/qemu_monitor.h | 1 +
src/qemu/qemu_monitor_json.c | 1 +
src/util/virhostdev.c | 47 +-
src/util/virhostdev.h | 1 +
.../caps_4.2.0.aarch64.xml | 1 +
.../caps_4.2.0.x86_64.xml | 1 +
.../net-virtio-failover-network.xml | 37 ++
.../qemuxml2argvdata/net-virtio-failover.args | 40 ++
.../qemuxml2argvdata/net-virtio-failover.xml | 50 ++
tests/qemuxml2argvtest.c | 4 +
.../net-virtio-failover-network.xml | 51 ++
.../net-virtio-failover.xml | 66 +++
tests/qemuxml2xmltest.c | 6 +
tests/virhostdevtest.c | 18 +-
29 files changed, 856 insertions(+), 289 deletions(-)
create mode 100644 tests/qemuxml2argvdata/net-virtio-failover-network.xml
create mode 100644 tests/qemuxml2argvdata/net-virtio-failover.args
create mode 100644 tests/qemuxml2argvdata/net-virtio-failover.xml
create mode 100644 tests/qemuxml2xmloutdata/net-virtio-failover-network.xml
create mode 100644 tests/qemuxml2xmloutdata/net-virtio-failover.xml
--
2.24.1
4 years, 8 months
[libvirt PATCH] conf: use correct free function for virDomainVsockDef
by Ján Tomko
Technically, there is no memleak here, since the only
allocations are filled by virDomainDeviceInfoParseXML,
which cleans up after itself.
Signed-off-by: Ján Tomko <jtomko(a)redhat.com>
---
src/conf/domain_conf.c | 2 +-
src/conf/domain_conf.h | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index c3214dc4f3..c7cc830c1d 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -16458,7 +16458,7 @@ virDomainVsockDefParseXML(virDomainXMLOptionPtr xmlopt,
xmlNodePtr cid;
int val;
g_autofree char *tmp = NULL;
- g_autofree virDomainVsockDefPtr vsock = NULL;
+ g_autoptr(virDomainVsockDef) vsock = NULL;
ctxt->node = node;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index c3acb29e6f..2bd80c2fbf 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2891,6 +2891,7 @@ void virDomainFSDefFree(virDomainFSDefPtr def);
void virDomainActualNetDefFree(virDomainActualNetDefPtr def);
virDomainVsockDefPtr virDomainVsockDefNew(virDomainXMLOptionPtr xmlopt);
void virDomainVsockDefFree(virDomainVsockDefPtr vsock);
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainVsockDef, virDomainVsockDefFree);
void virDomainNetDefClear(virDomainNetDefPtr def);
void virDomainNetDefFree(virDomainNetDefPtr def);
void virDomainSmartcardDefFree(virDomainSmartcardDefPtr def);
--
2.21.0
4 years, 8 months
[libvirt] [PATCH] conf: use virDomainDeviceDefFree free dev
by Xu Yandong
In function virDomainDeviceDefParse, we shoud use virDomainDeviceDefFree
free data structure avoid potential memory leak.
Signed-off-by: Xu Yandong <xuyandong2(a)huawei.com>
---
src/conf/domain_conf.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index 848c831330..8fb9480827 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -16504,7 +16504,8 @@ virDomainDeviceDefParse(const char *xmlStr,
return dev;
error:
- VIR_FREE(dev);
+ virDomainDeviceDefFree(dev);
+ dev = NULL;
goto cleanup;
}
--
2.18.1
4 years, 8 months
[libvirt PATCH] conf: use correct free function for virDomainDeviceDef
by Ján Tomko
Simple g_autofree is not enough if we put allocated
data into the device structure.
Define the AUTOPTR_CLEANUP function and use it here.
Signed-off-by: Ján Tomko <jtomko(a)redhat.com>
Reported-by: Xu Yandong <xuyandong2(a)huawei.com>
---
src/conf/domain_conf.c | 2 +-
src/conf/domain_conf.h | 1 +
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c
index c95bd34fb5..c3214dc4f3 100644
--- a/src/conf/domain_conf.c
+++ b/src/conf/domain_conf.c
@@ -16516,7 +16516,7 @@ virDomainDeviceDefParse(const char *xmlStr,
g_autoptr(xmlDoc) xml = NULL;
xmlNodePtr node;
g_autoptr(xmlXPathContext) ctxt = NULL;
- g_autofree virDomainDeviceDefPtr dev = NULL;
+ g_autoptr(virDomainDeviceDef) dev = NULL;
if (!(xml = virXMLParseStringCtxt(xmlStr, _("(device_definition)"), &ctxt)))
return NULL;
diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h
index e144f3aad3..c3acb29e6f 100644
--- a/src/conf/domain_conf.h
+++ b/src/conf/domain_conf.h
@@ -2916,6 +2916,7 @@ void virDomainRedirdevDefFree(virDomainRedirdevDefPtr def);
void virDomainRedirFilterDefFree(virDomainRedirFilterDefPtr def);
void virDomainShmemDefFree(virDomainShmemDefPtr def);
void virDomainDeviceDefFree(virDomainDeviceDefPtr def);
+G_DEFINE_AUTOPTR_CLEANUP_FUNC(virDomainDeviceDef, virDomainDeviceDefFree);
virDomainDeviceDefPtr virDomainDeviceDefCopy(virDomainDeviceDefPtr src,
const virDomainDef *def,
virDomainXMLOptionPtr xmlopt,
--
2.21.0
4 years, 9 months
[PATCH] docs: domaincaps: Mention VIR_DOMAIN_UNDEFINE_CHECKPOINTS_METADATA
by Peter Krempa
The flag for the virDomainUndefine API is supported even if we report
that <backup supported='no'/>. Mention it in the docs.
Signed-off-by: Peter Krempa <pkrempa(a)redhat.com>
---
docs/formatdomaincaps.html.in | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/docs/formatdomaincaps.html.in b/docs/formatdomaincaps.html.in
index aa4dece220..66e758501b 100644
--- a/docs/formatdomaincaps.html.in
+++ b/docs/formatdomaincaps.html.in
@@ -566,7 +566,10 @@
<p>Reports whether the hypervisor supports the backup, checkpoint, and
related features. (<code>virDomainBackupBegin</code>,
- <code>virDomainCheckpointCreateXML</code> etc).
+ <code>virDomainCheckpointCreateXML</code> etc). The presence of the
+ <code>backup</code> element even if <code>supported='no'</code> implies that
+ the <code>VIR_DOMAIN_UNDEFINE_CHECKPOINTS_METADATA</code> flag for
+ <code>virDomainUndefine</code> is supported.
</p>
<h4><a id="elementsSEV">SEV capabilities</a></h4>
--
2.24.1
4 years, 9 months
[PATCH v3 0/3] Couple of apparmor fixes
by Michal Privoznik
v3 of:
https://www.redhat.com/archives/libvir-list/2020-January/msg01321.html
diff to v2:
- Instead of hard coding libexec path, generate it according to
configure arguments
*** BLURB HERE ***
Michal Prívozník (3):
apparmor: Reflect paths from configure in profiles
apparmor: Allow libvirt to spawn virt-aa-helper and libvirt_lxc
docs: Fix virt-aa-helper location
docs/drvqemu.html.in | 3 +-
src/security/Makefile.inc.am | 29 +++++++++++++++----
...lper => usr.lib.libvirt.virt-aa-helper.in} | 10 +++----
...usr.sbin.libvirtd => usr.sbin.libvirtd.in} | 14 +++++----
4 files changed, 39 insertions(+), 17 deletions(-)
rename src/security/apparmor/{usr.lib.libvirt.virt-aa-helper => usr.lib.libvirt.virt-aa-helper.in} (85%)
rename src/security/apparmor/{usr.sbin.libvirtd => usr.sbin.libvirtd.in} (93%)
--
2.24.1
4 years, 9 months
[PATCH] qemu: support Panic Crashloaded event handling
by zhenwei pi
Pvpanic device supports bit 1 as crashloaded event, it means that
guest actually panicked and run kexec to handle error by guest side.
Handle crashloaded as a lifecyle event in libvirt.
Test case:
Guest side:
before testing, we need make sure kdump is enabled,
1, build new pvpanic driver (with commit from upstream
e0b9a42735f2672ca2764cfbea6e55a81098d5ba
191941692a3d1b6a9614502b279be062926b70f5)
2, insmod new kmod
3, enable crash_kexec_post_notifiers,
# echo 1 > /sys/module/kernel/parameters/crash_kexec_post_notifiers
4, trigger kernel panic
# echo 1 > /proc/sys/kernel/sysrq
# echo c > /proc/sysrq-trigger
Host side:
1, build new qemu with pvpanic patches (with commit from upstream
600d7b47e8f5085919fd1d1157f25950ea8dbc11
7dc58deea79a343ac3adc5cadb97215086054c86)
2, build libvirt with this patch
3, handle lifecycle event and trigger guest side panic
# virsh event stretch --event lifecycle
event 'lifecycle' for domain stretch: Crashed Crashloaded
events received: 1
Signed-off-by: zhenwei pi <pizhenwei(a)bytedance.com>
---
examples/c/misc/event-test.c | 3 +++
include/libvirt/libvirt-domain.h | 1 +
src/qemu/qemu_domain.c | 1 +
src/qemu/qemu_domain.h | 1 +
src/qemu/qemu_driver.c | 17 +++++++++++++++++
src/qemu/qemu_monitor.c | 10 ++++++++++
src/qemu/qemu_monitor.h | 7 +++++++
src/qemu/qemu_monitor_json.c | 12 ++++++++++++
src/qemu/qemu_process.c | 30 ++++++++++++++++++++++++++++++
tools/virsh-domain.c | 3 ++-
10 files changed, 84 insertions(+), 1 deletion(-)
diff --git a/examples/c/misc/event-test.c b/examples/c/misc/event-test.c
index 7e48cecc92..52caa8ffa8 100644
--- a/examples/c/misc/event-test.c
+++ b/examples/c/misc/event-test.c
@@ -273,6 +273,9 @@ eventDetailToString(int event,
case VIR_DOMAIN_EVENT_CRASHED_PANICKED:
return "Panicked";
+ case VIR_DOMAIN_EVENT_CRASHED_CRASHLOADED:
+ return "Crashloaded";
+
case VIR_DOMAIN_EVENT_CRASHED_LAST:
break;
}
diff --git a/include/libvirt/libvirt-domain.h b/include/libvirt/libvirt-domain.h
index 5846e93d98..b440818ec2 100644
--- a/include/libvirt/libvirt-domain.h
+++ b/include/libvirt/libvirt-domain.h
@@ -3175,6 +3175,7 @@ typedef enum {
*/
typedef enum {
VIR_DOMAIN_EVENT_CRASHED_PANICKED = 0, /* Guest was panicked */
+ VIR_DOMAIN_EVENT_CRASHED_CRASHLOADED = 1, /* Guest was crashloaded */
# ifdef VIR_ENUM_SENTINELS
VIR_DOMAIN_EVENT_CRASHED_LAST
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index cb691ca048..4933584cf2 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -16348,6 +16348,7 @@ qemuProcessEventFree(struct qemuProcessEvent *event)
case QEMU_PROCESS_EVENT_SERIAL_CHANGED:
case QEMU_PROCESS_EVENT_BLOCK_JOB:
case QEMU_PROCESS_EVENT_MONITOR_EOF:
+ case QEMU_PROCESS_EVENT_GUEST_CRASHLOADED:
VIR_FREE(event->data);
break;
case QEMU_PROCESS_EVENT_JOB_STATUS_CHANGE:
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index c581b3a162..f8fb48f2ff 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -583,6 +583,7 @@ typedef enum {
QEMU_PROCESS_EVENT_MONITOR_EOF,
QEMU_PROCESS_EVENT_PR_DISCONNECT,
QEMU_PROCESS_EVENT_RDMA_GID_STATUS_CHANGED,
+ QEMU_PROCESS_EVENT_GUEST_CRASHLOADED,
QEMU_PROCESS_EVENT_LAST
} qemuProcessEventType;
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 8bb845298b..def6631fed 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -4877,6 +4877,20 @@ processRdmaGidStatusChangedEvent(virDomainObjPtr vm,
}
+static void
+processGuestCrashloadedEvent(virQEMUDriverPtr driver,
+ virDomainObjPtr vm)
+{
+ virObjectEventPtr event = NULL;
+
+ event = virDomainEventLifecycleNewFromObj(vm,
+ VIR_DOMAIN_EVENT_CRASHED,
+ VIR_DOMAIN_EVENT_CRASHED_CRASHLOADED);
+
+ virObjectEventStateQueue(driver->domainEventState, event);
+}
+
+
static void qemuProcessEventHandler(void *data, void *opaque)
{
struct qemuProcessEvent *processEvent = data;
@@ -4923,6 +4937,9 @@ static void qemuProcessEventHandler(void *data, void *opaque)
case QEMU_PROCESS_EVENT_RDMA_GID_STATUS_CHANGED:
processRdmaGidStatusChangedEvent(vm, processEvent->data);
break;
+ case QEMU_PROCESS_EVENT_GUEST_CRASHLOADED:
+ processGuestCrashloadedEvent(driver, vm);
+ break;
case QEMU_PROCESS_EVENT_LAST:
break;
}
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index ceedcd527a..ba70d01d47 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -1591,6 +1591,16 @@ qemuMonitorEmitRdmaGidStatusChanged(qemuMonitorPtr mon,
int
+qemuMonitorEmitGuestCrashloaded(qemuMonitorPtr mon)
+{
+ int ret = -1;
+ VIR_DEBUG("mon=%p", mon);
+ QEMU_MONITOR_CALLBACK(mon, ret, domainGuestCrashloaded, mon->vm);
+ return ret;
+}
+
+
+int
qemuMonitorSetCapabilities(qemuMonitorPtr mon)
{
QEMU_CHECK_MONITOR(mon);
diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h
index cca2cdcb27..89197cfe0d 100644
--- a/src/qemu/qemu_monitor.h
+++ b/src/qemu/qemu_monitor.h
@@ -345,6 +345,10 @@ typedef int (*qemuMonitorDomainRdmaGidStatusChangedCallback)(qemuMonitorPtr mon,
unsigned long long interface_id,
void *opaque);
+typedef int (*qemuMonitorDomainGuestCrashloadedCallback)(qemuMonitorPtr mon,
+ virDomainObjPtr vm,
+ void *opaque);
+
typedef struct _qemuMonitorCallbacks qemuMonitorCallbacks;
typedef qemuMonitorCallbacks *qemuMonitorCallbacksPtr;
struct _qemuMonitorCallbacks {
@@ -380,6 +384,7 @@ struct _qemuMonitorCallbacks {
qemuMonitorDomainDumpCompletedCallback domainDumpCompleted;
qemuMonitorDomainPRManagerStatusChangedCallback domainPRManagerStatusChanged;
qemuMonitorDomainRdmaGidStatusChangedCallback domainRdmaGidStatusChanged;
+ qemuMonitorDomainGuestCrashloadedCallback domainGuestCrashloaded;
};
qemuMonitorPtr qemuMonitorOpen(virDomainObjPtr vm,
@@ -512,6 +517,8 @@ int qemuMonitorEmitRdmaGidStatusChanged(qemuMonitorPtr mon,
unsigned long long subnet_prefix,
unsigned long long interface_id);
+int qemuMonitorEmitGuestCrashloaded(qemuMonitorPtr mon);
+
int qemuMonitorStartCPUs(qemuMonitorPtr mon);
int qemuMonitorStopCPUs(qemuMonitorPtr mon);
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 981d091ba0..385f6c4738 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -99,6 +99,7 @@ static void qemuMonitorJSONHandleBlockJobReady(qemuMonitorPtr mon, virJSONValueP
static void qemuMonitorJSONHandleJobStatusChange(qemuMonitorPtr mon, virJSONValuePtr data);
static void qemuMonitorJSONHandleBalloonChange(qemuMonitorPtr mon, virJSONValuePtr data);
static void qemuMonitorJSONHandlePMSuspendDisk(qemuMonitorPtr mon, virJSONValuePtr data);
+static void qemuMonitorJSONHandleGuestCrashloaded(qemuMonitorPtr mon, virJSONValuePtr data);
static void qemuMonitorJSONHandleGuestPanic(qemuMonitorPtr mon, virJSONValuePtr data);
static void qemuMonitorJSONHandleDeviceDeleted(qemuMonitorPtr mon, virJSONValuePtr data);
static void qemuMonitorJSONHandleNicRxFilterChanged(qemuMonitorPtr mon, virJSONValuePtr data);
@@ -128,6 +129,7 @@ static qemuEventHandler eventHandlers[] = {
{ "DEVICE_DELETED", qemuMonitorJSONHandleDeviceDeleted, },
{ "DEVICE_TRAY_MOVED", qemuMonitorJSONHandleTrayChange, },
{ "DUMP_COMPLETED", qemuMonitorJSONHandleDumpCompleted, },
+ { "GUEST_CRASHLOADED", qemuMonitorJSONHandleGuestCrashloaded, },
{ "GUEST_PANICKED", qemuMonitorJSONHandleGuestPanic, },
{ "JOB_STATUS_CHANGE", qemuMonitorJSONHandleJobStatusChange, },
{ "MIGRATION", qemuMonitorJSONHandleMigrationStatus, },
@@ -1543,6 +1545,16 @@ static void qemuMonitorJSONHandleRdmaGidStatusChanged(qemuMonitorPtr mon,
}
+static void
+qemuMonitorJSONHandleGuestCrashloaded(qemuMonitorPtr mon,
+ virJSONValuePtr data)
+{
+ VIR_DEBUG("qemuMonitorJSONHandleGuestCrashloaded event, mon %p, data %p", mon, data);
+
+ qemuMonitorEmitGuestCrashloaded(mon);
+}
+
+
int
qemuMonitorJSONHumanCommand(qemuMonitorPtr mon,
const char *cmd_str,
diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c
index ddcc763cfd..458db2c09f 100644
--- a/src/qemu/qemu_process.c
+++ b/src/qemu/qemu_process.c
@@ -1848,6 +1848,35 @@ qemuProcessHandleRdmaGidStatusChanged(qemuMonitorPtr mon G_GNUC_UNUSED,
}
+static int
+qemuProcessHandleGuestCrashloaded(qemuMonitorPtr mon G_GNUC_UNUSED,
+ virDomainObjPtr vm,
+ void *opaque)
+{
+ virQEMUDriverPtr driver = opaque;
+ struct qemuProcessEvent *processEvent;
+
+ virObjectLock(vm);
+ if (VIR_ALLOC(processEvent) < 0)
+ goto cleanup;
+
+ processEvent->eventType = QEMU_PROCESS_EVENT_GUEST_CRASHLOADED;
+ processEvent->vm = virObjectRef(vm);
+
+ if (virThreadPoolSendJob(driver->workerPool, 0, processEvent) < 0) {
+ if (!virObjectUnref(vm))
+ vm = NULL;
+ qemuProcessEventFree(processEvent);
+ }
+
+ cleanup:
+ if (vm)
+ virObjectUnlock(vm);
+
+ return 0;
+}
+
+
static qemuMonitorCallbacks monitorCallbacks = {
.eofNotify = qemuProcessHandleMonitorEOF,
.errorNotify = qemuProcessHandleMonitorError,
@@ -1879,6 +1908,7 @@ static qemuMonitorCallbacks monitorCallbacks = {
.domainDumpCompleted = qemuProcessHandleDumpCompleted,
.domainPRManagerStatusChanged = qemuProcessHandlePRManagerStatusChanged,
.domainRdmaGidStatusChanged = qemuProcessHandleRdmaGidStatusChanged,
+ .domainGuestCrashloaded = qemuProcessHandleGuestCrashloaded,
};
static void
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 32b2792694..f20150a258 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -12910,7 +12910,8 @@ VIR_ENUM_IMPL(virshDomainEventPMSuspended,
VIR_ENUM_DECL(virshDomainEventCrashed);
VIR_ENUM_IMPL(virshDomainEventCrashed,
VIR_DOMAIN_EVENT_CRASHED_LAST,
- N_("Panicked"));
+ N_("Panicked"),
+ N_("Crashloaded"));
static const char *
virshDomainEventDetailToString(int event, int detail)
--
2.11.0
4 years, 9 months
[libvirt PATCH 0/4] qemu: tpm: use g_auto
by Ján Tomko
Ján Tomko (4):
qemu: tpm: remove unused pidfile variable
qemu: tpm: use g_autofree
qemu: tpm: use g_autoptr where applicable
qemu: tpm: remove unused labels
src/qemu/qemu_tpm.c | 130 +++++++++++++++-----------------------------
1 file changed, 44 insertions(+), 86 deletions(-)
--
2.19.2
4 years, 9 months
GSOC 2020
by Satyam Saxena
Hello everyone,
I am a GSOC aspirant and looking forward to contribute to Libvirt. I am
interested in *Redfish API Implementation*. I am looking for some
guidelines to start contributing to the organization. How can i get started?
Regards,
Satyam
4 years, 9 months
[PATCH 0/5] Add support for SPAPR vTPM for pSeries VM
by Stefan Berger
QEMU 5.0 will have SPAPR vTPM support. This series of patches
adds support for the XML and command line creation of the
SPAPR vTPM for pSeries VMs along with test cases.
Regards,
Stefan
Stefan Berger (5):
conf: Add support for tpm-spapr to domain XML
qemu: Extend QEMU capabilities with 'tpm-spapr'
qemu: Extend QEMU with tpm-spapr support
tests: Extend ppc64 capabilities data with TPM related XML and
responses
tests: Add test for domain XML with tpm-spapr TPM device model
docs/formatdomain.html.in | 4 +-
docs/schemas/domaincommon.rng | 4 +
src/conf/domain_conf.c | 24 +-
src/conf/domain_conf.h | 1 +
src/qemu/qemu_capabilities.c | 6 +
src/qemu/qemu_capabilities.h | 1 +
src/qemu/qemu_command.c | 15 +-
src/qemu/qemu_domain.c | 8 +-
src/qemu/qemu_domain_address.c | 10 +
tests/domaincapsdata/qemu_5.0.0.ppc64.xml | 115 +
.../caps_5.0.0.ppc64.replies | 24695 ++++++++++++++++
.../qemucapabilitiesdata/caps_5.0.0.ppc64.xml | 1128 +
.../tpm-emulator-spapr.ppc64-latest.args | 45 +
tests/qemuxml2argvdata/tpm-emulator-spapr.xml | 60 +
tests/qemuxml2argvtest.c | 4 +
15 files changed, 26105 insertions(+), 15 deletions(-)
create mode 100644 tests/domaincapsdata/qemu_5.0.0.ppc64.xml
create mode 100644 tests/qemucapabilitiesdata/caps_5.0.0.ppc64.replies
create mode 100644 tests/qemucapabilitiesdata/caps_5.0.0.ppc64.xml
create mode 100644 tests/qemuxml2argvdata/tpm-emulator-spapr.ppc64-latest.args
create mode 100644 tests/qemuxml2argvdata/tpm-emulator-spapr.xml
--
2.17.1
4 years, 9 months