[libvirt] [PATCH v2 0/2] uml: only build on Linux
by Roman Bogorodskiy
Changes since v1:
- Add forgotten with_libvirtd check and unite it with the
with_linux check
- Minor code formatting fixes in m4/virt-driver-uml.m4
Roman Bogorodskiy (2):
configure: split out UML driver checks
uml: only build on Linux
configure.ac | 28 ++------------------------
m4/virt-driver-uml.m4 | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 57 insertions(+), 26 deletions(-)
create mode 100644 m4/virt-driver-uml.m4
--
2.7.4
8 years, 6 months
[libvirt] [PATCH] conf: don't redefine virDomainCapsDeviceHostdev
by Roman Bogorodskiy
Commit 5ed235c6 added unnecessary redifinition of
virDomainCapsDeviceHostdev in conf/domain_capabilities.h. This breaks
build with clang 3.4:
In file included from conf/domain_capabilities.c:25:
conf/domain_capabilities.h:88:44: error: redefinition of typedef
'virDomainCapsDeviceHostdev' is a C11 feature
[-Werror,-Wtypedef-redefinition]
typedef struct _virDomainCapsDeviceHostdev virDomainCapsDeviceHostdev;
^
conf/domain_capabilities.h:86:44: note: previous definition is here
typedef struct _virDomainCapsDeviceHostdev virDomainCapsDeviceHostdev;
So drop one of those.
Pushed under the build breaker fix rule.
---
src/conf/domain_capabilities.h | 2 --
1 file changed, 2 deletions(-)
diff --git a/src/conf/domain_capabilities.h b/src/conf/domain_capabilities.h
index d0ca009..492a9cf 100644
--- a/src/conf/domain_capabilities.h
+++ b/src/conf/domain_capabilities.h
@@ -84,8 +84,6 @@ struct _virDomainCapsDeviceVideo {
};
typedef struct _virDomainCapsDeviceHostdev virDomainCapsDeviceHostdev;
-
-typedef struct _virDomainCapsDeviceHostdev virDomainCapsDeviceHostdev;
typedef virDomainCapsDeviceHostdev *virDomainCapsDeviceHostdevPtr;
struct _virDomainCapsDeviceHostdev {
bool supported;
--
2.7.4
8 years, 6 months
[libvirt] [PATCHv2] virsh: blkdeviotune: accept human readable values for bytes
by Nishith Shah
Use vshCommandOptScaledInt instead of vshCommandOptULongLong so that
values with suffixes can be passed when bytes are being passed along.
Values for the iops parameters still need to be given in the absolute
form as they are not bytes but numbers. Please refer to the bug link
https://bugzilla.redhat.com/show_bug.cgi?id=885380 which can be closed.
Signed-off-by: Nishith Shah <nishithshah.2211(a)gmail.com>
---
tools/virsh-domain.c | 24 ++++++++++++------------
tools/virsh.pod | 18 ++++++++++++------
2 files changed, 24 insertions(+), 18 deletions(-)
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
index 0a6caae..336a65f 100644
--- a/tools/virsh-domain.c
+++ b/tools/virsh-domain.c
@@ -1164,7 +1164,7 @@ static const vshCmdOptDef opts_blkdeviotune[] = {
},
{.name = "total-bytes-sec",
.type = VSH_OT_INT,
- .help = N_("total throughput limit in bytes per second")
+ .help = N_("total throughput limit, as scaled integer (default bytes)")
},
{.name = "read_bytes_sec",
.type = VSH_OT_ALIAS,
@@ -1172,7 +1172,7 @@ static const vshCmdOptDef opts_blkdeviotune[] = {
},
{.name = "read-bytes-sec",
.type = VSH_OT_INT,
- .help = N_("read throughput limit in bytes per second")
+ .help = N_("read throughput limit, as scaled integer (default bytes)")
},
{.name = "write_bytes_sec",
.type = VSH_OT_ALIAS,
@@ -1180,7 +1180,7 @@ static const vshCmdOptDef opts_blkdeviotune[] = {
},
{.name = "write-bytes-sec",
.type = VSH_OT_INT,
- .help = N_("write throughput limit in bytes per second")
+ .help = N_("write throughput limit, as scaled integer (default bytes)")
},
{.name = "total_iops_sec",
.type = VSH_OT_ALIAS,
@@ -1212,7 +1212,7 @@ static const vshCmdOptDef opts_blkdeviotune[] = {
},
{.name = "total-bytes-sec-max",
.type = VSH_OT_INT,
- .help = N_("total max in bytes")
+ .help = N_("total max, as scaled integer (default bytes)")
},
{.name = "read_bytes_sec_max",
.type = VSH_OT_ALIAS,
@@ -1220,7 +1220,7 @@ static const vshCmdOptDef opts_blkdeviotune[] = {
},
{.name = "read-bytes-sec-max",
.type = VSH_OT_INT,
- .help = N_("read max in bytes")
+ .help = N_("read max, as scaled integer (default bytes)")
},
{.name = "write_bytes_sec_max",
.type = VSH_OT_ALIAS,
@@ -1228,7 +1228,7 @@ static const vshCmdOptDef opts_blkdeviotune[] = {
},
{.name = "write-bytes-sec-max",
.type = VSH_OT_INT,
- .help = N_("write max in bytes")
+ .help = N_("write max, as scaled integer (default bytes)")
},
{.name = "total_iops_sec_max",
.type = VSH_OT_ALIAS,
@@ -1299,7 +1299,7 @@ cmdBlkdeviotune(vshControl *ctl, const vshCmd *cmd)
if (vshCommandOptStringReq(ctl, cmd, "device", &disk) < 0)
goto cleanup;
- if ((rv = vshCommandOptULongLong(ctl, cmd, "total-bytes-sec", &value)) < 0) {
+ if ((rv = vshCommandOptScaledInt(ctl, cmd, "total-bytes-sec", &value, 1, ULLONG_MAX)) < 0) {
goto interror;
} else if (rv > 0) {
if (virTypedParamsAddULLong(¶ms, &nparams, &maxparams,
@@ -1308,7 +1308,7 @@ cmdBlkdeviotune(vshControl *ctl, const vshCmd *cmd)
goto save_error;
}
- if ((rv = vshCommandOptULongLong(ctl, cmd, "read-bytes-sec", &value)) < 0) {
+ if ((rv = vshCommandOptScaledInt(ctl, cmd, "read-bytes-sec", &value, 1, ULLONG_MAX)) < 0) {
goto interror;
} else if (rv > 0) {
if (virTypedParamsAddULLong(¶ms, &nparams, &maxparams,
@@ -1317,7 +1317,7 @@ cmdBlkdeviotune(vshControl *ctl, const vshCmd *cmd)
goto save_error;
}
- if ((rv = vshCommandOptULongLong(ctl, cmd, "write-bytes-sec", &value)) < 0) {
+ if ((rv = vshCommandOptScaledInt(ctl, cmd, "write-bytes-sec", &value, 1, ULLONG_MAX)) < 0) {
goto interror;
} else if (rv > 0) {
if (virTypedParamsAddULLong(¶ms, &nparams, &maxparams,
@@ -1326,7 +1326,7 @@ cmdBlkdeviotune(vshControl *ctl, const vshCmd *cmd)
goto save_error;
}
- if ((rv = vshCommandOptULongLong(ctl, cmd, "total-bytes-sec-max", &value)) < 0) {
+ if ((rv = vshCommandOptScaledInt(ctl, cmd, "total-bytes-sec-max", &value, 1, ULLONG_MAX)) < 0) {
goto interror;
} else if (rv > 0) {
if (virTypedParamsAddULLong(¶ms, &nparams, &maxparams,
@@ -1335,7 +1335,7 @@ cmdBlkdeviotune(vshControl *ctl, const vshCmd *cmd)
goto save_error;
}
- if ((rv = vshCommandOptULongLong(ctl, cmd, "read-bytes-sec-max", &value)) < 0) {
+ if ((rv = vshCommandOptScaledInt(ctl, cmd, "read-bytes-sec-max", &value, 1, ULLONG_MAX)) < 0) {
goto interror;
} else if (rv > 0) {
if (virTypedParamsAddULLong(¶ms, &nparams, &maxparams,
@@ -1344,7 +1344,7 @@ cmdBlkdeviotune(vshControl *ctl, const vshCmd *cmd)
goto save_error;
}
- if ((rv = vshCommandOptULongLong(ctl, cmd, "write-bytes-sec-max", &value)) < 0) {
+ if ((rv = vshCommandOptScaledInt(ctl, cmd, "write-bytes-sec-max", &value, 1, ULLONG_MAX)) < 0) {
goto interror;
} else if (rv > 0) {
if (virTypedParamsAddULLong(¶ms, &nparams, &maxparams,
diff --git a/tools/virsh.pod b/tools/virsh.pod
index 2a95df7..6844823 100644
--- a/tools/virsh.pod
+++ b/tools/virsh.pod
@@ -1097,15 +1097,21 @@ I<domain> (see also B<domblklist> for listing these names).
If no limit is specified, it will query current I/O limits setting.
Otherwise, alter the limits with these flags:
-I<--total-bytes-sec> specifies total throughput limit in bytes per second.
-I<--read-bytes-sec> specifies read throughput limit in bytes per second.
-I<--write-bytes-sec> specifies write throughput limit in bytes per second.
+I<--total-bytes-sec> specifies total throughput limit as a scaled integer, the
+default being bytes per second if no suffix is specified.
+I<--read-bytes-sec> specifies read throughput limit as a scaled integer, the
+default being bytes per second if no suffix is specified.
+I<--write-bytes-sec> specifies write throughput limit as a scaled integer, the
+default being bytes per second if no suffix is specified.
I<--total-iops-sec> specifies total I/O operations limit per second.
I<--read-iops-sec> specifies read I/O operations limit per second.
I<--write-iops-sec> specifies write I/O operations limit per second.
-I<--total-bytes-sec-max> specifies maximum total throughput limit in bytes per second.
-I<--read-bytes-sec-max> specifies maximum read throughput limit in bytes per second.
-I<--write-bytes-sec-max> specifies maximum write throughput limit in bytes per second.
+I<--total-bytes-sec-max> specifies maximum total throughput limit as a scaled
+integer, the default being bytes per second if no suffix is specified
+I<--read-bytes-sec-max> specifies maximum read throughput limit as a scaled
+integer, the default being bytes per second if no suffix is specified.
+I<--write-bytes-sec-max> specifies maximum write throughput limit as a scaled
+integer, the default being bytes per second if no suffix is specified.
I<--total-iops-sec-max> specifies maximum total I/O operations limit per second.
I<--read-iops-sec-max> specifies maximum read I/O operations limit per second.
I<--write-iops-sec-max> specifies maximum write I/O operations limit per second.
--
2.1.4
8 years, 6 months
[libvirt] [PATCH] qemu: add default pci-root device to mips*/malta guests
by Aurelien Jarno
The MIPS Malta board has a root PCI controller. It is not sent during
migration, so it needs to be added by default.
Signed-off-by: Aurelien Jarno <aurelien(a)aurel32.net>
---
src/qemu/qemu_domain.c | 15 ++++++++++++++-
src/qemu/qemu_domain.h | 1 +
2 files changed, 15 insertions(+), 1 deletion(-)
diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c
index 173f82c..75b0545 100644
--- a/src/qemu/qemu_domain.c
+++ b/src/qemu/qemu_domain.c
@@ -1763,6 +1763,14 @@ qemuDomainDefAddDefaultDevices(virDomainDefPtr def,
addPCIeRoot = virQEMUCapsGet(qemuCaps, QEMU_CAPS_OBJECT_GPEX);
break;
+ case VIR_ARCH_MIPS:
+ case VIR_ARCH_MIPSEL:
+ case VIR_ARCH_MIPS64:
+ case VIR_ARCH_MIPS64EL:
+ if (qemuDomainMachineIsMalta(def))
+ addPCIRoot = true;
+ break;
+
case VIR_ARCH_PPC64:
case VIR_ARCH_PPC64LE:
addPCIRoot = true;
@@ -4654,6 +4662,11 @@ qemuDomainMachineIsVirt(const virDomainDef *def)
STRPREFIX(def->os.machine, "virt-");
}
+bool
+qemuDomainMachineIsMalta(const virDomainDef *def)
+{
+ return STRPREFIX(def->os.machine, "malta");
+}
static bool
qemuCheckMemoryDimmConflict(const virDomainDef *def,
@@ -4830,7 +4843,7 @@ bool
qemuDomainMachineHasBuiltinIDE(const virDomainDef *def)
{
return qemuDomainMachineIsI440FX(def) ||
- STREQ(def->os.machine, "malta") ||
+ qemuDomainMachineIsMalta(def) ||
STREQ(def->os.machine, "sun4u") ||
STREQ(def->os.machine, "g3beige");
}
diff --git a/src/qemu/qemu_domain.h b/src/qemu/qemu_domain.h
index 95f821c..adba5fa 100644
--- a/src/qemu/qemu_domain.h
+++ b/src/qemu/qemu_domain.h
@@ -585,6 +585,7 @@ bool qemuDomainMachineIsI440FX(const virDomainDef *def);
bool qemuDomainMachineNeedsFDC(const virDomainDef *def);
bool qemuDomainMachineIsS390CCW(const virDomainDef *def);
bool qemuDomainMachineIsVirt(const virDomainDef *def);
+bool qemuDomainMachineIsMalta(const virDomainDef *def);
bool qemuDomainMachineHasBuiltinIDE(const virDomainDef *def);
int qemuDomainUpdateCurrentMemorySize(virQEMUDriverPtr driver,
--
2.8.1
8 years, 6 months
[libvirt] Introducing myself (GSoC 2016 student)
by Katerina Koukiou
Hi,
my name is Katerina Koukiou and I got selected as a GSoC student this year
to work on libvirt. My project is to add libvirt support for migration of
lxc containers using a tool called CRIU.
For the time, I am in my final year of undergraduate studies in Electrical and
Computer Engineering, at NTUA university, Greece.
Looking forward to share some patches here!
Katerina
8 years, 6 months
[libvirt] [PATCH 00/27] Introduce sparse streams
by Michal Privoznik
So, after couple of sleepless nights and headaches I'm proud to
announce that finally got this working.
What?
Our regular streams that are can be used to transfer disk images
for domains are unaware of any sparseness. Therefore they have
two limitations:
a) transferring big but sparse image can take ages as all the
holes (interpreted by kernel as '\0') have to go through our
event loop.
b) resulting volume is not sparse even if the source was.
How?
I went by verified approach that linux kernel has. One way to
look at our streams is just like read() and write() with a
different names: virStreamRecv() and virStreamSend(). They even
have the same prototype (if 'int fd' is substituted with
'virStreamPtr'). Now, holes in files are created and detected via
third API: lseek(). Therefore I'm introducing new virStreamSkip()
API that mimics the missing primitive. Now, because our streams
do not necessarily have to work over files (they are for generic
data transfer), I had to let users register a callback that is
called whenever the other side calls virStreamSkip().
So now that we have all three primitives, we can focus on making
life easier for our users. Nobody is actually using bare
virStreamSend() and virStreamRecv() rather than our wrappers:
virStreamSendAll() and virStreamRecvAll(). With my approach
described above just virStreamSendAll() needs to be adjusted so
that it's 'sparse file' aware. The virStreamRecvAll() will only
get the data to write (just like it is now) with skip callback
called automatically whenever needed. In order for
virStreamSendAll() to skip holes I'm introducing yet another
callback: virStreamInDataFunc(). This callback will help us to
create a map of a file: before each virStreamSend() it checks
whether we are in a data section or a hole and calls
virStreamSend() or virStreamSkip() respectively.
Do not worry - it will all become clear once you see the code.
Now question is - how will users enable this feature? I mean, we
have take into account that we might be talking to an older
daemon that does not know how to skip a hole. Or vice versa -
older client.
The solution I came up with is to introduce flags to APIs where
sparse streams make sense. I guess it makes sense for volume
upload and download, but almost certainly makes no sense for
virDomainOpenConsole().
Code?
>From users POV they just need to pass correct argument to
'vol-upload' or 'vol-download' virsh commands. One layer down, on
programming level they need to merely:
st = virStreamNew(conn, 0);
virStreamRegisterSkip(st, skipFunc, &fd);
virStorageVolDownload(st, ...);
virStreamRecvAll(st, sinkFunc, &fd);
where:
int skipFunc(virStreamPtr st,
unsigned long long offset, void *opaque)
{
int *fd = opaque;
return lseek(*fd, offset, SEEK_CUR) == (off_t) -1 ? -1 : 0;
}
And for uploading it's slightly more verbose - see patch 24.
Limitations?
While testing this on my machine with XFS, I've noticed that the
resulting map of a transferred file is not exactly the same as
the source's. Checksums are the same though. After digging deeper
I found this commit in the kernel:
http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id...
Thing is, as we transfer the file, we are practically just
seeking at EOF and thus creating holes. But if the hole size is
small enough, XFS will use some speculative file allocation
algorithm and eventually fully allocate the blocks even if we
intended to create a hole. This does not occur when punching a
hole into a file though. Well, I guess XFS devels have some
reasons to do that.
This behaviour has not been observed on EXT4.
Notes?
Oh, patches 01-03 have been ACKed already, but are not pushed yet
because of the freeze. But since this feature build on the top of
them, I'm sending them too.
Also the whole patch set is accessible at my github:
https://github.com/zippy2/libvirt/tree/sparse_streams4
Michal Privoznik (27):
Revert "rpc: Fix slow volume download (virsh vol-download)"
virnetclientstream: Process stream messages later
virStream{Recv,Send}All: Increase client buffer
Introduce virStreamSkip
Introduce virStreamRegisterSkip and virStreamSkipCallback
Introduce virStreamInData and virStreamRegisterInData
virNetClientStreamNew: Track origin stream
Track if stream is seekable
RPC: Introduce virNetStreamSkip
Introduce VIR_NET_STREAM_SKIP message type
Teach wireshark plugin about VIR_NET_STREAM_SKIP
daemon: Implement VIR_NET_STREAM_SKIP handling
daemon: Introduce virNetServerProgramSendStreamSkip
virnetclientstream: Introduce virNetClientStreamSendSkip
virnetclientstream: Introduce virNetClientStreamHandleSkip
remote_driver: Implement virStreamSkip
daemonStreamHandleRead: Wire up seekable stream
virNetClientStream: Wire up VIR_NET_STREAM_SKIP
virStreamSendAll: Wire up sparse streams
fdstream: Implement seek
gendispatch: Introduce @sparseflag for our calls
Introduce virStorageVol{Download,Upload}Flags
virsh: Implement sparse stream to vol-download
virsh: Implement sparse stream to vol-upload
fdstream: Suppress use of IO helper for sparse streams
daemon: Don't call virStreamInData so often
storage: Enable sparse streams for virStorageVol{Download,Upload}
daemon/remote.c | 2 +-
daemon/stream.c | 134 +++++++++++++--
daemon/stream.h | 3 +-
include/libvirt/libvirt-storage.h | 9 +
include/libvirt/libvirt-stream.h | 47 ++++++
src/datatypes.h | 8 +
src/driver-stream.h | 5 +
src/fdstream.c | 156 +++++++++++++++---
src/fdstream.h | 3 +-
src/libvirt-storage.c | 4 +-
src/libvirt-stream.c | 238 ++++++++++++++++++++++++++-
src/libvirt_internal.h | 7 +
src/libvirt_private.syms | 2 +
src/libvirt_public.syms | 7 +
src/libvirt_remote.syms | 2 +
src/remote/remote_driver.c | 41 ++++-
src/remote/remote_protocol.x | 2 +
src/rpc/gendispatch.pl | 21 ++-
src/rpc/virnetclient.c | 1 +
src/rpc/virnetclientstream.c | 308 ++++++++++++++++++++++++-----------
src/rpc/virnetclientstream.h | 10 +-
src/rpc/virnetprotocol.x | 16 +-
src/rpc/virnetserverprogram.c | 33 ++++
src/rpc/virnetserverprogram.h | 7 +
src/storage/storage_backend.c | 12 +-
src/storage/storage_driver.c | 4 +-
src/virnetprotocol-structs | 4 +
tools/virsh-volume.c | 40 ++++-
tools/virsh.c | 79 +++++++++
tools/virsh.h | 12 ++
tools/virsh.pod | 6 +-
tools/wireshark/src/packet-libvirt.c | 40 +++++
tools/wireshark/src/packet-libvirt.h | 2 +
33 files changed, 1104 insertions(+), 161 deletions(-)
--
2.8.1
8 years, 6 months
[libvirt] [PATCH] util: polkit: Fix polkit agent startup
by Peter Krempa
Commit 0b36b0e9 broke polkit agent startup when attempting to fix a
coverity warning. Refactor it properly so that we don't need the 'cmd'
intermediate variable.
---
src/util/virpolkit.c | 26 ++++++++++++--------------
1 file changed, 12 insertions(+), 14 deletions(-)
diff --git a/src/util/virpolkit.c b/src/util/virpolkit.c
index 2038744..e7e46b8 100644
--- a/src/util/virpolkit.c
+++ b/src/util/virpolkit.c
@@ -167,7 +167,6 @@ virPolkitAgentPtr
virPolkitAgentCreate(void)
{
virPolkitAgentPtr agent = NULL;
- virCommandPtr cmd = virCommandNewArgList(PKTTYAGENT, "--process", NULL);
int pipe_fd[2] = {-1, -1};
struct pollfd pollfd;
int outfd = STDOUT_FILENO;
@@ -181,18 +180,18 @@ virPolkitAgentCreate(void)
if (VIR_ALLOC(agent) < 0)
goto error;
- agent->cmd = cmd;
- cmd = NULL;
-
- virCommandAddArgFormat(cmd, "%lld", (long long int) getpid());
- virCommandAddArg(cmd, "--notify-fd");
- virCommandAddArgFormat(cmd, "%d", pipe_fd[1]);
- virCommandAddArg(cmd, "--fallback");
- virCommandSetInputFD(cmd, STDIN_FILENO);
- virCommandSetOutputFD(cmd, &outfd);
- virCommandSetErrorFD(cmd, &errfd);
- virCommandPassFD(cmd, pipe_fd[1], VIR_COMMAND_PASS_FD_CLOSE_PARENT);
- if (virCommandRunAsync(cmd, NULL) < 0)
+
+ agent->cmd = virCommandNewArgList(PKTTYAGENT, "--process", NULL);
+
+ virCommandAddArgFormat(agent->cmd, "%lld", (long long int) getpid());
+ virCommandAddArg(agent->cmd, "--notify-fd");
+ virCommandAddArgFormat(agent->cmd, "%d", pipe_fd[1]);
+ virCommandAddArg(agent->cmd, "--fallback");
+ virCommandSetInputFD(agent->cmd, STDIN_FILENO);
+ virCommandSetOutputFD(agent->cmd, &outfd);
+ virCommandSetErrorFD(agent->cmd, &errfd);
+ virCommandPassFD(agent->cmd, pipe_fd[1], VIR_COMMAND_PASS_FD_CLOSE_PARENT);
+ if (virCommandRunAsync(agent->cmd, NULL) < 0)
goto error;
pollfd.fd = pipe_fd[0];
@@ -207,7 +206,6 @@ virPolkitAgentCreate(void)
VIR_FORCE_CLOSE(pipe_fd[0]);
VIR_FORCE_CLOSE(pipe_fd[1]);
virPolkitAgentDestroy(agent);
- virCommandFree(cmd);
return NULL;
}
--
2.8.2
8 years, 6 months
[libvirt] [PATCH v2 0/8] Add support for fetching statistics of completed jobs
by Jiri Denemark
Using virDomainGetJobStats, we can monitor running jobs but sometimes it
may be useful to get statistics about a job that already finished, for
example, to get the final amount of data transferred during migration or
to get an idea about total downtime. This is what the following patches
are about.
Version 2:
- changed according to John's review (see individual patches for
details)
Jiri Denemark (8):
Refactor job statistics
qemu: Avoid incrementing jobs_queued if virTimeMillisNow fails
Add support for fetching statistics of completed jobs
qemu: Silence coverity on optional migration stats
virsh: Add support for completed job stats
qemu: Transfer migration statistics to destination
qemu: Recompute downtime and total time when migration completes
qemu: Transfer recomputed stats back to source
include/libvirt/libvirt.h.in | 11 ++
src/libvirt.c | 11 +-
src/qemu/qemu_domain.c | 189 ++++++++++++++++++++++++++-
src/qemu/qemu_domain.h | 32 ++++-
src/qemu/qemu_driver.c | 130 ++++--------------
src/qemu/qemu_migration.c | 304 ++++++++++++++++++++++++++++++++++++-------
src/qemu/qemu_monitor_json.c | 10 +-
src/qemu/qemu_process.c | 9 +-
tools/virsh-domain.c | 27 +++-
tools/virsh.pod | 10 +-
10 files changed, 557 insertions(+), 176 deletions(-)
--
2.1.0
8 years, 6 months
[libvirt] [PATCH 0/4] qemu_monitor_json: Refactor even more
by Michal Privoznik
All these patches will be squashed into one, but I've split them
into multiple because of easier review.
Michal Privoznik (4):
qemu_monitor_json: Follow refactor
qemu_monitor_json: Follow refactor
qemu_monitor_json: Follow refactor
qemu_monitor_json: Follow refactor
src/qemu/qemu_monitor_json.c | 673 ++++++++++++++++++++++---------------------
1 file changed, 349 insertions(+), 324 deletions(-)
--
2.8.1
8 years, 6 months