[libvirt] Reg: Libvirt multiple sessions
by Varun Bhatnagar
Hi,
I am working on a requirement where in I need to implement "multiple
session management" and "multiple workspaces". I trying to implement it
using libvirt.
So is it possible to do these two things using libvirt. Does libvirt
support "multiple session management" and "multiple workspaces"?
If yes, how can I achieve that, I din't find anything on internet
regarding this.
Can you please help me out with this one.
Thanks & Regards,
Varun Bhatnagar
=====-----=====-----=====
Notice: The information contained in this e-mail
message and/or attachments to it may contain
confidential or privileged information. If you are
not the intended recipient, any dissemination, use,
review, distribution, printing or copying of the
information contained in this e-mail message
and/or attachments to it are strictly prohibited. If
you have received this communication in error,
please notify us by reply e-mail or telephone and
immediately and permanently delete the message
and any attachments. Thank you
12 years
[libvirt] [PATCH] qemu: Simplify the codes
by Osier Yang
"disk" is initialized to "dev->data.disk" in the beginning of the
function.
---
src/qemu/qemu_driver.c | 5 ++---
1 files changed, 2 insertions(+), 3 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 2c36935..a7ef4a2 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -6154,9 +6154,8 @@ qemuDomainDetachDeviceDiskLive(virQEMUDriverPtr driver,
case VIR_DOMAIN_DISK_DEVICE_LUN:
if (disk->bus == VIR_DOMAIN_DISK_BUS_VIRTIO)
ret = qemuDomainDetachPciDiskDevice(driver, vm, dev);
- else if (disk->bus == VIR_DOMAIN_DISK_BUS_SCSI)
- ret = qemuDomainDetachDiskDevice(driver, vm, dev);
- else if (dev->data.disk->bus == VIR_DOMAIN_DISK_BUS_USB)
+ else if (disk->bus == VIR_DOMAIN_DISK_BUS_SCSI ||
+ disk->bus == VIR_DOMAIN_DISK_BUS_USB)
ret = qemuDomainDetachDiskDevice(driver, vm, dev);
else
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
--
1.7.7.6
12 years
[libvirt] [PATCH] storage: Remove the redundant white lines
by Osier Yang
Pushed under trivial rule.
---
src/storage/storage_backend.c | 2 --
1 files changed, 0 insertions(+), 2 deletions(-)
diff --git a/src/storage/storage_backend.c b/src/storage/storage_backend.c
index 41a19a1..83c4755 100644
--- a/src/storage/storage_backend.c
+++ b/src/storage/storage_backend.c
@@ -337,7 +337,6 @@ createRawFile(int fd, virStorageVolDefPtr vol,
if (remain) {
if (track_allocation_progress) {
-
while (remain) {
/* Allocate in chunks of 512MiB: big-enough chunk
* size and takes approx. 9s on ext3. A progress
@@ -363,7 +362,6 @@ createRawFile(int fd, virStorageVolDefPtr vol,
goto cleanup;
}
}
-
}
if (fsync(fd) < 0) {
--
1.7.7.6
12 years
[libvirt] ivshmem server
by Andrew Jones
This mail is meant to get a discussion started. Please keep me on cc
for the discussion, as I'm not subscribed to libvir-list.
ivshmem is an implementation of an inter-VM communication channel.
Support for this has been in qemu since v0.14.0 and libvirt patches
have been recently posted[1]. What's still missing is the ivshmem
server. The ivshmem server is needed when one would like to use
interrupts with ivshmem. The server manages a set of eventfds
to send/recv those interrupts. There is currently only one
implementation of this server that I'm aware of, which is available
from this git repo [2] in the ivshmem-server directory. My suggestion
for libvirt is that this code be integrated into libvirt, rather
than managed by libvirt, for the following reasons
1. libvirt should keep track of the socket path in order to build
ivshmem's command line anyway.
2. the current ivshmem server code is ~300 lines, so it shouldn't be
a large integration effort.
3. keeping ivhsmem server separate increases the package management
that distributions need to do. afaik, it isn't currently packaged
for any distribution.
One concern I have with the git repo [2] is that I don't see any
license for ivshmem-server. I've cc'ed Cam for his input.
Drew
[1] http://www.redhat.com/archives/libvir-list/2012-November/msg00731.html
[2] git://gitorious.org/nahanni/guest-code.git
12 years
[libvirt] [PATCH] qemu: improve error for failed JSON commands
by Eric Blake
Only one error in qemu_monitor was already using the relatively
new OPERATION_UNSUPPORTED error, even though it is a better fit
for all of the messages related to options that are unsupported
due to the version of qemu in use rather than due to a user's
XML or .conf file choice. Suggested by Osier Yang.
* src/qemu/qemu_monitor.c (qemuMonitorSendFileHandle)
(qemuMonitorAddHostNetwork, qemuMonitorRemoveHostNetwork)
(qemuMonitorAttachDrive, qemuMonitorDiskSnapshot)
(qemuMonitorDriveMirror, qemuMonitorTransaction)
(qemuMonitorBlockCommit, qemuMonitorDrivePivot)
(qemuMonitorBlockJob, qemuMonitorSystemWakeup)
(qemuMonitorGetVersion, qemuMonitorGetMachines)
(qemuMonitorGetCPUDefinitions, qemuMonitorGetCommands)
(qemuMonitorGetEvents, qemuMonitorGetKVMState)
(qemuMonitorGetObjectTypes, qemuMonitorGetObjectProps)
(qemuMonitorGetTargetArch): Use better error category.
---
src/qemu/qemu_monitor.c | 40 ++++++++++++++++++++--------------------
1 files changed, 20 insertions(+), 20 deletions(-)
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index 066e420..5ad6c15 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -2316,7 +2316,7 @@ int qemuMonitorSendFileHandle(qemuMonitorPtr mon,
}
if (!mon->hasSendFD) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED,
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED,
_("qemu is not using a unix socket monitor, "
"cannot send fd %s"), fdname);
return -1;
@@ -2387,7 +2387,7 @@ int qemuMonitorAddHostNetwork(qemuMonitorPtr mon,
}
if (mon->json)
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("JSON monitor should be using AddNetdev"));
else
ret = qemuMonitorTextAddHostNetwork(mon, netstr);
@@ -2419,7 +2419,7 @@ int qemuMonitorRemoveHostNetwork(qemuMonitorPtr mon,
}
if (mon->json)
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("JSON monitor should be using RemoveNetdev"));
else
ret = qemuMonitorTextRemoveHostNetwork(mon, vlan, netname);
@@ -2550,7 +2550,7 @@ int qemuMonitorAttachDrive(qemuMonitorPtr mon,
}
if (mon->json)
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("JSON monitor should be using AddDrive"));
else
ret = qemuMonitorTextAttachDrive(mon, drivestr, controllerAddr, driveAddr);
@@ -2773,7 +2773,7 @@ qemuMonitorDiskSnapshot(qemuMonitorPtr mon, virJSONValuePtr actions,
ret = qemuMonitorJSONDiskSnapshot(mon, actions, device, file, format,
reuse);
else
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("disk snapshot requires JSON monitor"));
return ret;
}
@@ -2806,7 +2806,7 @@ qemuMonitorDriveMirror(qemuMonitorPtr mon,
ret = qemuMonitorJSONDriveMirror(mon, device, file, format, speed,
flags);
else
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("drive-mirror requires JSON monitor"));
return ret;
}
@@ -2822,7 +2822,7 @@ qemuMonitorTransaction(qemuMonitorPtr mon, virJSONValuePtr actions)
if (mon->json)
ret = qemuMonitorJSONTransaction(mon, actions);
else
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("transaction requires JSON monitor"));
return ret;
}
@@ -2852,7 +2852,7 @@ qemuMonitorBlockCommit(qemuMonitorPtr mon, const char *device,
if (mon->json)
ret = qemuMonitorJSONBlockCommit(mon, device, top, base, speed);
else
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("block-commit requires JSON monitor"));
return ret;
}
@@ -2871,7 +2871,7 @@ qemuMonitorDrivePivot(qemuMonitorPtr mon, const char *device,
if (mon->json)
ret = qemuMonitorJSONDrivePivot(mon, device, file, format);
else
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("drive pivot requires JSON monitor"));
return ret;
}
@@ -2973,7 +2973,7 @@ int qemuMonitorBlockJob(qemuMonitorPtr mon,
ret = qemuMonitorJSONBlockJob(mon, device, base, speed, info, mode,
modern);
else
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("block jobs require JSON monitor"));
return ret;
}
@@ -3105,7 +3105,7 @@ int qemuMonitorSystemWakeup(qemuMonitorPtr mon)
}
if (!mon->json) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("JSON monitor is required"));
return -1;
}
@@ -3129,7 +3129,7 @@ int qemuMonitorGetVersion(qemuMonitorPtr mon,
}
if (!mon->json) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("JSON monitor is required"));
return -1;
}
@@ -3150,7 +3150,7 @@ int qemuMonitorGetMachines(qemuMonitorPtr mon,
}
if (!mon->json) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("JSON monitor is required"));
return -1;
}
@@ -3180,7 +3180,7 @@ int qemuMonitorGetCPUDefinitions(qemuMonitorPtr mon,
}
if (!mon->json) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("JSON monitor is required"));
return -1;
}
@@ -3202,7 +3202,7 @@ int qemuMonitorGetCommands(qemuMonitorPtr mon,
}
if (!mon->json) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("JSON monitor is required"));
return -1;
}
@@ -3224,7 +3224,7 @@ int qemuMonitorGetEvents(qemuMonitorPtr mon,
}
if (!mon->json) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("JSON monitor is required"));
return -1;
}
@@ -3247,7 +3247,7 @@ int qemuMonitorGetKVMState(qemuMonitorPtr mon,
}
if (!mon->json) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("JSON monitor is required"));
return -1;
}
@@ -3269,7 +3269,7 @@ int qemuMonitorGetObjectTypes(qemuMonitorPtr mon,
}
if (!mon->json) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("JSON monitor is required"));
return -1;
}
@@ -3292,7 +3292,7 @@ int qemuMonitorGetObjectProps(qemuMonitorPtr mon,
}
if (!mon->json) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("JSON monitor is required"));
return -1;
}
@@ -3313,7 +3313,7 @@ char *qemuMonitorGetTargetArch(qemuMonitorPtr mon)
}
if (!mon->json) {
- virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
_("JSON monitor is required"));
return NULL;
}
--
1.7.1
12 years
[libvirt] [PATCH] rpc: fix build failure with older dbus
by Eric Blake
RHEL 6.3 uses dbus-devel-1.2.24, which lacked support for the
DBUS_TYPE_UNIX_FD define (contrast with Fedora 18 using 1.6.8).
But since it is an older dbus, it also lacks support for shutdown
inhibitions as provided by newer systemd.
Compilation failure introduced in commit 31330926.
* src/rpc/virnetserver.c (virNetServerAddShutdownInhibition):
Compile out if dbus is too old.
---
Pushing under the build-breaker rule.
src/rpc/virnetserver.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c
index ae1dfa2..6a5a53a 100644
--- a/src/rpc/virnetserver.c
+++ b/src/rpc/virnetserver.c
@@ -720,7 +720,7 @@ void virNetServerAutoShutdown(virNetServerPtr srv,
}
-#ifdef HAVE_DBUS
+#if defined(HAVE_DBUS) && defined(DBUS_TYPE_UNIX_FD)
static void virNetServerGotInhibitReply(DBusPendingCall *pending,
void *opaque)
{
@@ -809,7 +809,7 @@ void virNetServerAddShutdownInhibition(virNetServerPtr srv)
VIR_DEBUG("srv=%p inhibitions=%zu", srv, srv->autoShutdownInhibitions);
-#ifdef HAVE_DBUS
+#if defined(HAVE_DBUS) && defined(DBUS_TYPE_UNIX_FD)
if (srv->autoShutdownInhibitions == 1)
virNetServerCallInhibit(srv,
"shutdown",
--
1.7.1
12 years
[libvirt] [PATCH] qemu: nicer error message if live disk snapshot unsupported
by Eric Blake
Without this patch, attempts to create a disk snapshot when qemu
is too old results in a cryptic message:
virsh # snapshot-create 23 --disk-only
error: operation failed: Failed to take snapshot: unknown command: 'snapshot_blkdev'
Now it reports:
virsh # snapshot-create 23 --disk-only
error: unsupported configuration: live disk snapshot not supported with this QEMU binary
All versions of qemu that support live disk snapshot also support
QMP (basically upstream qemu 1.1 and later, and backport to RHEL 6.2).
* src/qemu/qemu_capabilities.h (QEMU_CAPS_DISK_SNAPSHOT): New
capability.
* src/qemu/qemu_capabilities.c (qemuCaps): Track it.
(qemuCapsProbeQMPCommands): Set it.
* src/qemu/qemu_driver.c (qemuDomainSnapshotCreateDiskActive): Use
it.
* src/qemu/qemu_monitor.c (qemuMonitorDiskSnapshot): Simplify.
* src/qemu/qemu_monitor_json.c (qemuMonitorJSONDiskSnapshot):
Likewise.
* src/qemu/qemu_monitor_text.h (qemuMonitorTextDiskSnapshot):
Delete.
* src/qemu/qemu_monitor_text.c (qemuMonitorTextDiskSnapshot):
Likewise.
---
src/qemu/qemu_capabilities.c | 3 +++
src/qemu/qemu_capabilities.h | 1 +
src/qemu/qemu_driver.c | 5 +++++
src/qemu/qemu_monitor.c | 13 ++++---------
src/qemu/qemu_monitor_json.c | 6 ------
src/qemu/qemu_monitor_text.c | 37 -------------------------------------
src/qemu/qemu_monitor_text.h | 4 ----
7 files changed, 13 insertions(+), 56 deletions(-)
diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c
index 6e34cdf..668935e 100644
--- a/src/qemu/qemu_capabilities.c
+++ b/src/qemu/qemu_capabilities.c
@@ -193,6 +193,7 @@ VIR_ENUM_IMPL(qemuCaps, QEMU_CAPS_LAST,
"drive-mirror", /* 115 */
"usb-redir.bootindex",
"usb-host.bootindex",
+ "blockdev-snapshot-sync",
);
struct _qemuCaps {
@@ -1948,6 +1949,8 @@ qemuCapsProbeQMPCommands(qemuCapsPtr caps,
qemuCapsSet(caps, QEMU_CAPS_VNC);
else if (STREQ(name, "drive-mirror"))
qemuCapsSet(caps, QEMU_CAPS_DRIVE_MIRROR);
+ else if (STREQ(name, "blockdev-snapshot-sync"))
+ qemuCapsSet(caps, QEMU_CAPS_DISK_SNAPSHOT);
VIR_FREE(name);
}
VIR_FREE(commands);
diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h
index f420c43..3da8672 100644
--- a/src/qemu/qemu_capabilities.h
+++ b/src/qemu/qemu_capabilities.h
@@ -155,6 +155,7 @@ enum qemuCapsFlags {
QEMU_CAPS_DRIVE_MIRROR = 115, /* drive-mirror monitor command */
QEMU_CAPS_USB_REDIR_BOOTINDEX = 116, /* usb-redir.bootindex */
QEMU_CAPS_USB_HOST_BOOTINDEX = 117, /* usb-host.bootindex */
+ QEMU_CAPS_DISK_SNAPSHOT = 118, /* blockdev-snapshot-sync command */
QEMU_CAPS_LAST, /* this must always be the last item */
};
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 8e838cd..fbacd8b 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -11230,6 +11230,11 @@ qemuDomainSnapshotCreateDiskActive(virQEMUDriverPtr driver,
virReportOOMError();
goto cleanup;
}
+ } else if (!qemuCapsGet(priv->caps, QEMU_CAPS_DISK_SNAPSHOT)) {
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("live disk snapshot not supported with this "
+ "QEMU binary"));
+ goto cleanup;
}
/* No way to roll back if first disk succeeds but later disks
diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c
index f85bb76..543f714 100644
--- a/src/qemu/qemu_monitor.c
+++ b/src/qemu/qemu_monitor.c
@@ -2769,17 +2769,12 @@ qemuMonitorDiskSnapshot(qemuMonitorPtr mon, virJSONValuePtr actions,
return -1;
}
- if (mon->json) {
+ if (mon->json)
ret = qemuMonitorJSONDiskSnapshot(mon, actions, device, file, format,
reuse);
- } else {
- if (actions || STRNEQ(format, "qcow2") || reuse) {
- virReportError(VIR_ERR_INVALID_ARG, "%s",
- _("text monitor lacks several snapshot features"));
- return -1;
- }
- ret = qemuMonitorTextDiskSnapshot(mon, device, file);
- }
+ else
+ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
+ _("disk snapshot requires JSON monitor"));
return ret;
}
diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c
index 9b6702a..0cd66b6 100644
--- a/src/qemu/qemu_monitor_json.c
+++ b/src/qemu/qemu_monitor_json.c
@@ -2986,12 +2986,6 @@ qemuMonitorJSONDiskSnapshot(qemuMonitorPtr mon, virJSONValuePtr actions,
if ((ret = qemuMonitorJSONCommand(mon, cmd, &reply)) < 0)
goto cleanup;
- if (qemuMonitorJSONHasError(reply, "CommandNotFound")) {
- VIR_DEBUG("blockdev-snapshot-sync command not found, trying HMP");
- ret = qemuMonitorTextDiskSnapshot(mon, device, file);
- goto cleanup;
- }
-
ret = qemuMonitorJSONCheckError(cmd, reply);
}
diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c
index 43e5449..fa10600 100644
--- a/src/qemu/qemu_monitor_text.c
+++ b/src/qemu/qemu_monitor_text.c
@@ -2958,43 +2958,6 @@ cleanup:
return ret;
}
-int
-qemuMonitorTextDiskSnapshot(qemuMonitorPtr mon, const char *device,
- const char *file)
-{
- char *cmd = NULL;
- char *reply = NULL;
- int ret = -1;
- char *safename;
-
- if (!(safename = qemuMonitorEscapeArg(file)) ||
- virAsprintf(&cmd, "snapshot_blkdev %s \"%s\"", device, safename) < 0) {
- virReportOOMError();
- goto cleanup;
- }
-
- if (qemuMonitorHMPCommand(mon, cmd, &reply))
- goto cleanup;
-
- if (strstr(reply, "error while creating qcow2") != NULL ||
- strstr(reply, "unknown command:") != NULL) {
- virReportError(VIR_ERR_OPERATION_FAILED,
- _("Failed to take snapshot: %s"), reply);
- goto cleanup;
- }
-
- /* XXX Should we scrape 'info block' output for
- * 'device:... file=name backing_file=oldname' to make sure the
- * command succeeded? */
-
- ret = 0;
-
-cleanup:
- VIR_FREE(safename);
- VIR_FREE(cmd);
- VIR_FREE(reply);
- return ret;
-}
int qemuMonitorTextArbitraryCommand(qemuMonitorPtr mon, const char *cmd,
char **reply)
diff --git a/src/qemu/qemu_monitor_text.h b/src/qemu/qemu_monitor_text.h
index 079fbdc..97abad6 100644
--- a/src/qemu/qemu_monitor_text.h
+++ b/src/qemu/qemu_monitor_text.h
@@ -217,10 +217,6 @@ int qemuMonitorTextCreateSnapshot(qemuMonitorPtr mon, const char *name);
int qemuMonitorTextLoadSnapshot(qemuMonitorPtr mon, const char *name);
int qemuMonitorTextDeleteSnapshot(qemuMonitorPtr mon, const char *name);
-int qemuMonitorTextDiskSnapshot(qemuMonitorPtr mon,
- const char *device,
- const char *file);
-
int qemuMonitorTextArbitraryCommand(qemuMonitorPtr mon, const char *cmd,
char **reply);
--
1.7.1
12 years
[libvirt] [PATCH] Fix memory leak introduced by commit 501bfad1
by Jim Fehlig
501bfad1 missed freeing priv->saveDir when opening the Xen unified
driver failed.
---
src/xen/xen_driver.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/xen/xen_driver.c b/src/xen/xen_driver.c
index 3786176..d2de141 100644
--- a/src/xen/xen_driver.c
+++ b/src/xen/xen_driver.c
@@ -432,6 +432,7 @@ clean:
if (priv->opened[i])
drivers[i]->xenClose(conn);
virMutexDestroy(&priv->lock);
+ VIR_FREE(priv->saveDir);
VIR_FREE(priv);
conn->privateData = NULL;
return ret;
--
1.7.10.4
12 years
[libvirt] [PATCH 0/2] CPU Probing Revisited
by Viktor Mihajlovski
I have not yet given up on the CPU probing. Since the orginal patch
was not well received w.r.t error checking I have effectively undone
the cpu model checking part.
Next, I have enabled the QMP query-cpu-definitions command in
a minimalistic fashion, return host as the only supported CPU model.
The patch works in so far that I can see the result flowing back to
libvirt. Unfortunately libvirt seems to choke on what it gets,
but I will follow up on this seperately, probably just another
libvirt QMP hickup...
Viktor Mihajlovski (2):
S390: Undo the cpu model checking.
S390: Enable the QMP query-cpu-definitions command
hw/s390-virtio.c | 5 -----
target-s390x/cpu.c | 15 +++++++++++++++
2 files changed, 15 insertions(+), 5 deletions(-)
12 years