[libvirt] Question about QEMU + hugepages + NUMA memory + migration
by Sam Bobroff
Hi libvirt people,
I've been looking at a (probable) bug and I'm not sure how to progress. The
situation is a bit complicated and involves both QEMU and libvirt (and I think
it may have been looked at already) so I would really appreciate some advice on
how to approach it. I'm using a pretty recent master version of libvirt from
git and I'm testing on a ppc64le host with a similar guest but this doesn't
seem to be arch-specific.
If I create a QEMU guest (e.g. via virt-install) that requests both hugepage
backing on the host and NUMA memory placement on the host, the NUMA placement
seems to be ignored. If I do:
# echo 0 > /proc/sys/vm/nr_hugepages
# echo 512 > /sys/devices/system/node/node0/hugepages/hugepages-16384kB/nr_hugepages
# virt-install --name tmp --memory=4096 --graphics none --memorybacking hugepages=yes --disk none --import --wait 0 --numatune=8
... then hugepages are allocated on node 0 and the machine starts successfully,
which seems like a bug.
I believe it should fail to start due to insufficient memory, and in fact that
is what happens if cgroup support isn't detected in the host: there seems to be
a fall-back path in libvirt (probably using mbind()) that works as I would
expect.
Note: the relevant part of the guest XML seems to be this:
»·······<memoryBacking>
»·······»·······<hugepages/>
»·······</memoryBacking>
»·······<numatune>
»·······»·······<memory mode='strict' nodeset='8'/>
»·······</numatune>
It seems fairly clear what is happening: although QEMU is capable of allocating
hugepages on specific NUMA nodes (using "memory-backend-file") libvirt is not
passing those options to QEMU in this situation.
I investigated this line of reasoning and if I hack libvirt to pass those
options to QEMU it does indeed fix the problem... but it renders the machine
state migration-incompatible with unfixed versions. This seems to have been why
this hasn't been fixed already :-(
So what can we do?
I assume it's not acceptible to just break migration with a bugfix, and I can
only think of two ways to fix migration:
(a) Add a new flag to the XML, and for guests without the flag, maintain the
old buggy behaviour (and therefore migration compatability).
(b) Hack QEMU so that migration can succeed between un-fixed and fixed
versions. (And possibly also in the reverse direction?)
I don't like (a) because it's visible in the XML, and would have to be carried
forever (or at least a long time?).
I don't really like (b) either because it's tricky, and even if it could be
made to work reliably, it would add mess and risk to the migration code. I'm
not sure how the QEMU community would feel about it either. However, I did hack
up some code and it worked at least in some simple cases.
Can anyone see a better approach? Is anyone already working on this?
Thanks,
Sam.
8 years, 1 month
[libvirt] [PATCH 0/9] Couple of vhost-user fixes and cleanups
by Michal Privoznik
While working on this, I've discovered a qemu crasher [1], so
there are not tested properly. If you have pointers how to test
vhost-user without need to install openvswitch, I'm all ears.
1: http://lists.nongnu.org/archive/html/qemu-devel/2016-08/msg02933.html
Michal Privoznik (9):
qemuDomainAttachNetDevice: Explicitly list allowed types for hotplug
qemuDomain{Attach,Remove}NetDevice: Prefer qemuDomainSupportsNetdev
qemuBuildChrChardevStr: Introduce @nowait argument
qemuBuildVhostuserCommandLine: Reuse qemuBuildChrChardevStr
qemuBuildHostNetStr: Realign
qemuBuildHostNetStr: Explicitly enumerate net types
qemuBuildVhostuserCommandLine: Unify -netdev creation
qemuBuildHostNetStr: Support VIR_DOMAIN_NET_TYPE_VHOSTUSER
qemu_hotplug: Support interface type of vhost-user hotplug
src/qemu/qemu_command.c | 169 ++++++++++++---------
src/qemu/qemu_hotplug.c | 83 ++++++++--
.../qemuxml2argv-net-vhostuser-multiq.args | 6 +-
.../qemuxml2argv-net-vhostuser.args | 4 +-
4 files changed, 176 insertions(+), 86 deletions(-)
--
2.8.4
8 years, 2 months
[libvirt] [PATCH v2] qemu: enable user-defined cache bypassing while invoking
by fuweiwei
in the previous version, I mentioned the scenario of long-term pause while
writing external memory checkpoints:
v1: https://www.redhat.com/archives/libvir-list/2016-August/msg01194.html
Daniel suggested not to hardcode the flag, but wire this upto the API. When
the user invokes the snapshot they can request the
VIR_DOMAIN_SAVE_BYPASS_CACHE flag explicitly. So in this version I
introduce the --bypass-cache option in libvirt snapshot API. When invoking
an external VM snapshots, we may use the command like this:
virsh snapshot-create-as VM snap --memspec /path/to/memsnap --live
--bypass-cache
The VM snapshot can be done with inapparent VM suspend now. Without
"--bypass-cache" flag, one may experience long-term VM suspend (so that the
implication of "--live" option is not significant), provided that the VM
has a large amount of dirty pages to save.
Signed-off-by: fuweiwei <fuweiwei2(a)huawei.com>
---
include/libvirt/libvirt-domain-snapshot.h | 3 +++
src/qemu/qemu_driver.c | 20 ++++++++++++++++++--
tools/virsh-snapshot.c | 12 ++++++++++++
3 files changed, 33 insertions(+), 2 deletions(-)
diff --git a/include/libvirt/libvirt-domain-snapshot.h b/include/libvirt/libvirt-domain-snapshot.h
index 0f73f24..aeff665 100644
--- a/include/libvirt/libvirt-domain-snapshot.h
+++ b/include/libvirt/libvirt-domain-snapshot.h
@@ -70,6 +70,9 @@ typedef enum {
VIR_DOMAIN_SNAPSHOT_CREATE_LIVE = (1 << 8), /* create the snapshot
while the guest is
running */
+ VIR_DOMAIN_SNAPSHOT_CREATE_BYPASS_CACHE = (1 << 9), i/* Bypass cache
+ while writing external
+ checkpoint files. */
} virDomainSnapshotCreateFlags;
/* Take a snapshot of the current VM state */
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 2089359..d5f441f 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -14036,6 +14036,7 @@ qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn,
bool pmsuspended = false;
virQEMUDriverConfigPtr cfg = NULL;
int compressed = QEMU_SAVE_FORMAT_RAW;
+ unsigned int save_memory_flag = 0;
/* If quiesce was requested, then issue a freeze command, and a
* counterpart thaw command when it is actually sent to agent.
@@ -14116,8 +14117,12 @@ qemuDomainSnapshotCreateActiveExternal(virConnectPtr conn,
if (!(xml = qemuDomainDefFormatLive(driver, vm->def, true, true)))
goto cleanup;
+ if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_BYPASS_CACHE)
+ save_memory_flag |= VIR_DOMAIN_SAVE_BYPASS_CACHE;
+
if ((ret = qemuDomainSaveMemory(driver, vm, snap->def->file,
- xml, compressed, resume, 0,
+ xml, compressed, resume,
+ save_memory_flag,
QEMU_ASYNC_JOB_SNAPSHOT)) < 0)
goto cleanup;
@@ -14224,7 +14229,8 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain,
VIR_DOMAIN_SNAPSHOT_CREATE_REUSE_EXT |
VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE |
VIR_DOMAIN_SNAPSHOT_CREATE_ATOMIC |
- VIR_DOMAIN_SNAPSHOT_CREATE_LIVE, NULL);
+ VIR_DOMAIN_SNAPSHOT_CREATE_LIVE |
+ VIR_DOMAIN_SNAPSHOT_CREATE_BYPASS_CACHE, NULL);
VIR_REQUIRE_FLAG_RET(VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE,
VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY,
@@ -14297,6 +14303,16 @@ qemuDomainSnapshotCreateXML(virDomainPtr domain,
goto cleanup;
}
+ /* the option of bypass cache is only supported for external checkpoints */
+ if (flags & VIR_DOMAIN_SNAPSHOT_CREATE_BYPASS_CACHE &&
+ (def->memory != VIR_DOMAIN_SNAPSHOT_LOCATION_EXTERNAL ||
+ redefine)) {
+ virReportError(VIR_ERR_OPERATION_UNSUPPORTED, "%s",
+ _("only external memory snapshots support "
+ "cache bypass."));
+ goto cleanup;
+ }
+
/* allow snapshots only in certain states */
switch ((virDomainState) vm->state.state) {
/* valid states */
diff --git a/tools/virsh-snapshot.c b/tools/virsh-snapshot.c
index f879e7a..0627baf 100644
--- a/tools/virsh-snapshot.c
+++ b/tools/virsh-snapshot.c
@@ -160,6 +160,10 @@ static const vshCmdOptDef opts_snapshot_create[] = {
.type = VSH_OT_BOOL,
.help = N_("require atomic operation")
},
+ {.name = "bypass-cache",
+ .type = VSH_OT_BOOL,
+ .help = N_("bypass system cache while writing external checkpoints")
+ },
VIRSH_COMMON_OPT_LIVE(N_("take a live snapshot")),
{.name = NULL}
};
@@ -191,6 +195,8 @@ cmdSnapshotCreate(vshControl *ctl, const vshCmd *cmd)
flags |= VIR_DOMAIN_SNAPSHOT_CREATE_ATOMIC;
if (vshCommandOptBool(cmd, "live"))
flags |= VIR_DOMAIN_SNAPSHOT_CREATE_LIVE;
+ if (vshCommandOptBool(cmd, "bypass-cache"))
+ flags |= VIR_DOMAIN_SNAPSHOT_CREATE_BYPASS_CACHE;
if (!(dom = virshCommandOptDomain(ctl, cmd, NULL)))
goto cleanup;
@@ -358,6 +364,10 @@ static const vshCmdOptDef opts_snapshot_create_as[] = {
.type = VSH_OT_BOOL,
.help = N_("require atomic operation")
},
+ {.name = "bypass-cache",
+ .type = VSH_OT_BOOL,
+ .help = N_("bypass system cache while writing external checkpoints")
+ },
VIRSH_COMMON_OPT_LIVE(N_("take a live snapshot")),
{.name = "memspec",
.type = VSH_OT_STRING,
@@ -404,6 +414,8 @@ cmdSnapshotCreateAs(vshControl *ctl, const vshCmd *cmd)
flags |= VIR_DOMAIN_SNAPSHOT_CREATE_ATOMIC;
if (vshCommandOptBool(cmd, "live"))
flags |= VIR_DOMAIN_SNAPSHOT_CREATE_LIVE;
+ if (vshCommandOptBool(cmd, "bypass-cache"))
+ flags |= VIR_DOMAIN_SNAPSHOT_CREATE_BYPASS_CACHE;
if (!(dom = virshCommandOptDomain(ctl, cmd, NULL)))
return false;
--
1.9.5.msysgit.1
8 years, 2 months
[libvirt] [PATCH] qemu: fix libvirtd crash in migration after vm shutdown
by weifuqiang
[PATCH] qemu: fix libvirtd crash in migration after vm shutdown
If we shutdown a guest, then migrate it without the arg XML, libvirtd will get crashed.
The reason is that:
1 during shutdown callback, qemuProcessStop() , it points vm->def to vm->newDef
2 during migration, it frees persistentDef, which points to vm->newDef when the arg XML is NULL.
However, because vm->newDef is now vm->def, what we IN FACT freed is vm->def.
3 it will refer to vm->def after step2, thus invalid read/write causes libvirtd crash
We needn't to free persistentDef if persist_xml is NULL, because no extra def was alloced if persistent_xml is NULL.
---
src/qemu/qemu_migration.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/qemu/qemu_migration.c b/src/qemu/qemu_migration.c
index 6a683f7..3636c93 100644
--- a/src/qemu/qemu_migration.c
+++ b/src/qemu/qemu_migration.c
@@ -4915,7 +4915,7 @@ qemuMigrationRun(virQEMUDriverPtr driver,
VIR_WARN("Unable to encode migration cookie");
}
- if (persistDef != vm->newDef)
+ if (persist_xml && persistDef)
virDomainDefFree(persistDef);
qemuMigrationCookieFree(mig);
--
1.9.5.msysgit.1
8 years, 2 months
[libvirt] [PATCHv2] qemu: agent: Fix QEMU guest agent is not available due to an error
by Xiubo Li
These days, we experienced one qemu guest agent is not available
error. Then the guest agent couldn't be used forever before rebooting
the libvirtd daemon or reboot the qemu-guest-agent in the VM(you can
also reboot the VM) to clear the priv->agentError.
This is one bug for a long time in many verisons of libvirtd:
https://bugzilla.redhat.com/show_bug.cgi?id=1090551
And there is one python script to reproduce this bug from the bugzilla:
https://github.com/aspirer/study/blob/master/qemu-guest-agent/test2.py
Just set the timeout to 0 at Line26, you can reproduce it very quickly:
rsp = libvirt_qemu.qemuAgentCommand(dom, cmd, 1, 0) // 1 -> 0
The reason why this could happen is that:
In case we received something like {"return": {}} for example, it is
likely that somebody:
1) Started GA thread which sent one "guest-ping" command with seconds
equals to VIR_DOMAIN_QEMU_AGENT_COMMAND_NOWAIT(0) makes this function
return immediately without waiting, but after updating the events, it
will sleep in virCondWait() or virCondWaitUntil().
2) While in AgentIO thread the "guest-ping" command is sent successfully,
with updating the events it will wait for reply.
3) Then the GA thread is woken up and the mon->msg is set to NULL and exit.
4) At last the AgentIO thread receives the reply of "guest-ping" command
with the mon->msg == NULL.
This case could be adapt to all the GA commands, including guest-sync, etc.
This patch will check if this is the case and don't report an error but
return silently.
Signed-off-by: Xiubo Li <lixiubo(a)cmss.chinamobile.com>
Signed-off-by: Zhuoyu Zhang <zhangzhuoyu(a)cmss.chinamobile.com>
Signed-off-by: Wei Tang <tangwei(a)cmss.chinamobile.com>
Signed-off-by: Yaowei Bai <baiyaowei(a)cmss.chinamobile.com>
Signed-off-by: Qide Chen <chenqide(a)cmss.chinamobile.com>
---
Changes in V2:
- check value type instead of object type.
src/qemu/qemu_agent.c | 37 ++++++++++++++++++++++++++++---------
src/util/virjson.h | 7 +++++++
2 files changed, 35 insertions(+), 9 deletions(-)
diff --git a/src/qemu/qemu_agent.c b/src/qemu/qemu_agent.c
index eeede6b..f5408cc 100644
--- a/src/qemu/qemu_agent.c
+++ b/src/qemu/qemu_agent.c
@@ -308,7 +308,6 @@ qemuAgentIOProcessLine(qemuAgentPtr mon,
{
virJSONValuePtr obj = NULL;
int ret = -1;
- unsigned long long id;
VIR_DEBUG("Line [%s]", line);
@@ -333,16 +332,36 @@ qemuAgentIOProcessLine(qemuAgentPtr mon,
obj = NULL;
ret = 0;
} else {
- /* If we've received something like:
- * {"return": 1234}
- * it is likely that somebody started GA
- * which is now processing our previous
- * guest-sync commands. Check if this is
- * the case and don't report an error but
+ virJSONValuePtr val;
+
+ /* In case we received something like:
+ * {"return": {}} for example,
+ * it is likely that somebody:
+ *
+ * 1) Started GA thread which sent one "guest-ping" command
+ * with seconds equals to VIR_DOMAIN_QEMU_AGENT_COMMAND_NOWAIT(0)
+ * makes this function return immediately without waiting, but
+ * after updating the events, it will sleep in virCondWait() or
+ * virCondWaitUntil().
+ *
+ * 2) While in AgentIO thread the "guest-ping" command is sent
+ * successfully, with updating the events it will wait for reply.
+ *
+ * 3) Then the GA thread is woken up and the mon->msg is set
+ * to NULL and exit.
+ *
+ * 4) At last the AgentIO thread receives the reply of "guest-ping"
+ * command with the mon->msg == NULL.
+ *
+ * This case could be adapt to all the GA commands, including
+ * guest-sync, etc.
+ *
+ * Check if this is the case and don't report an error but
* return silently.
*/
- if (virJSONValueObjectGetNumberUlong(obj, "return", &id) == 0) {
- VIR_DEBUG("Ignoring delayed reply to guest-sync: %llu", id);
+ val = virJSONValueObjectGet(obj, "return");
+ if (val && virJSONValueTypeIsValid(val)) {
+ VIR_DEBUG("Ignoring delayed command reply");
ret = 0;
goto cleanup;
}
diff --git a/src/util/virjson.h b/src/util/virjson.h
index 66ed48a..cb1d973 100644
--- a/src/util/virjson.h
+++ b/src/util/virjson.h
@@ -80,6 +80,13 @@ struct _virJSONValue {
} data;
};
+static inline bool
+virJSONValueTypeIsValid(virJSONValuePtr value)
+{
+ return ((value->type >= VIR_JSON_TYPE_OBJECT) &&
+ (value->type <= VIR_JSON_TYPE_BOOLEAN));
+}
+
void virJSONValueFree(virJSONValuePtr value);
int virJSONValueObjectCreate(virJSONValuePtr *obj, ...)
--
1.8.3.1
8 years, 2 months
[libvirt] [PATCH 0/2] bhyve: add e1000 nic support
by Roman Bogorodskiy
Fabian Freyer (1):
bhyve: Separate out checks from virBhyveProbeCaps
Roman Bogorodskiy (1):
bhyve: add e1000 nic support
src/bhyve/bhyve_capabilities.c | 58 ++++++++++++++++++----
src/bhyve/bhyve_capabilities.h | 1 +
src/bhyve/bhyve_command.c | 32 ++++++++++--
.../bhyvexml2argvdata/bhyvexml2argv-net-e1000.args | 9 ++++
.../bhyvexml2argv-net-e1000.ldargs | 3 ++
.../bhyvexml2argvdata/bhyvexml2argv-net-e1000.xml | 22 ++++++++
tests/bhyvexml2argvtest.c | 7 ++-
7 files changed, 118 insertions(+), 14 deletions(-)
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-net-e1000.args
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-net-e1000.ldargs
create mode 100644 tests/bhyvexml2argvdata/bhyvexml2argv-net-e1000.xml
--
2.9.2
8 years, 2 months
[libvirt] [PATCH v4 0/5] Remove caching of address sets
by Tomasz Flendrich
Link to the previous version:
https://www.redhat.com/archives/libvir-list/2016-August/msg00721.html
Changes in v4:
* instead of failing, qemuDomainValidateDevicePCISlotsChipsets now simply
displays a warning when a new address is being assigned during pci address
set recalculation
Tomasz Flendrich (5):
Move validating chipset PCI slots to qemuDomainPCIAddressSetCreate
Warn when assigning new pci addresses during recalculation
Reduce number of parameters to qemuDomainPCIAddressSetCreate
qemu_hotplug: generate pci address set on demand
qemu: remove pciaddrs caching
src/qemu/qemu_domain.c | 1 -
src/qemu/qemu_domain.h | 1 -
src/qemu/qemu_domain_address.c | 215 +++++++++++++++++++++++------------------
src/qemu/qemu_domain_address.h | 6 ++
src/qemu/qemu_hotplug.c | 50 ++++++++--
5 files changed, 168 insertions(+), 105 deletions(-)
--
1.9.1
8 years, 2 months
[libvirt] [PATCH 0/2] Rework qemuhotplugtest
by Tomasz Flendrich
This series requires another one:
https://www.redhat.com/archives/libvir-list/2016-July/msg01205.html
Tomasz Flendrich (2):
qemuhotplugtest: handle xml files more precisely
qemuhotplugtest: change indentation
tests/qemuhotplugtest.c | 254 +++++++++++----------
.../qemuhotplug-ccw-virtio-1-reverse.xml | 7 -
...ach.xml => qemuhotplug-qemu-agent-nosource.xml} | 1 -
.../qemuhotplug-qemu-agent.xml | 1 +
.../qemuhotplug-base+qemu-agent-detach.xml | 58 -----
.../qemuhotplug-base+qemu-agent.xml | 58 -----
...plug-base-ccw-live+ccw-virtio+ccw-virtio-2.xml} | 0
... => qemuhotplug-base-ccw-live+ccw-virtio-2.xml} | 0
...ive-with-2-ccw-virtio+ccw-virtio-1-explicit.xml | 73 ------
...live-with-2-ccw-virtio+ccw-virtio-1-reverse.xml | 73 ------
...-live-with-ccw-virtio+ccw-virtio-2-explicit.xml | 73 ------
.../qemuhotplug-base-ccw-live-with-ccw-virtio.xml | 63 -----
....xml => qemuhotplug-base-config+qemu-agent.xml} | 0
.../qemuhotplug-base-live+qemu-agent-detach.xml | 58 -----
...-base-with-scsi-controller-live+disk-scsi-2.xml | 51 -----
15 files changed, 140 insertions(+), 630 deletions(-)
delete mode 100644 tests/qemuhotplugtestdevices/qemuhotplug-ccw-virtio-1-reverse.xml
rename tests/qemuhotplugtestdevices/{qemuhotplug-qemu-agent-detach.xml => qemuhotplug-qemu-agent-nosource.xml} (66%)
delete mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-base+qemu-agent-detach.xml
delete mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-base+qemu-agent.xml
rename tests/qemuhotplugtestdomains/{qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2.xml => qemuhotplug-base-ccw-live+ccw-virtio+ccw-virtio-2.xml} (100%)
rename tests/qemuhotplugtestdomains/{qemuhotplug-base-ccw-live-with-2-ccw-virtio.xml => qemuhotplug-base-ccw-live+ccw-virtio-2.xml} (100%)
delete mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio+ccw-virtio-1-explicit.xml
delete mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-2-ccw-virtio+ccw-virtio-1-reverse.xml
delete mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio+ccw-virtio-2-explicit.xml
delete mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-base-ccw-live-with-ccw-virtio.xml
rename tests/qemuhotplugtestdomains/{qemuhotplug-base-config+qemu-agent+config.xml => qemuhotplug-base-config+qemu-agent.xml} (100%)
delete mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-base-live+qemu-agent-detach.xml
delete mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-base-with-scsi-controller-live+disk-scsi-2.xml
--
2.7.4 (Apple Git-66)
8 years, 2 months
[libvirt] [PATCH v3 0/6] Test persistent device attachment
by Tomasz Flendrich
Changes in v3:
* fewer patches, because part of v2 was ACK'd
* two old commits, 08/10 and 09/10, are now one commit
* qemuDomainUpdateDeviceFlags is now also split, creating a new function
qemuDomainUpdateDeviceLiveAndConfig(). This function is now used in
qemuhotplugtest.c.
* qemuDomainAttachDeviceLiveAndConfig, qemuDomainDetachDeviceLiveAndConfig
and qemuDomainUpdateDeviceLiveAndConfig are now in a new file:
qemu_driverpriv.h
* variable "target" is renamed to "impact" and its type is changed
* testQemuHotplugCheckResult() now takes "impact" as a parameter to determine
whether to test the ->def or ->newDef
* def->id is no longer set when handling a persistent domain
* split DO_TEST_ATTACH (and other macros) to DO_TEST_ATTACH_LIVE and
DO_TEST_ATTACH_CONFIG instead of taking a parameter
* fixed indentation
* "<source mode='bind'/>" is removed from one xml
* a three year old testcase for updating a disk device was modified
a little bit to make it finally execute and test something
Link to v2: https://www.redhat.com/archives/libvir-list/2016-July/msg00595.html
Tomasz Flendrich (6):
Split qemuDomainUpdateDeviceFlags in two
Make qemu attach/detach functions public
Make qemuhotplugtest work with persistent domains
qemuhotplug: Use a more generic function to update devices
qemuhotplugtest: add testcase to update a disk device
qemuhotplugtest: add a persistent attachment testcase
src/qemu/qemu_driver.c | 117 +++---
src/qemu/qemu_driverpriv.h | 47 +++
tests/qemuhotplugtest.c | 433 ++++++++++++---------
.../qemuhotplug-disk-cdrom-nochange.xml | 2 +-
.../qemuhotplug-qemu-agent.xml | 1 -
.../qemuhotplug-base-config+qemu-agent+config.xml | 44 +++
.../qemuhotplug-base-config.xml | 40 ++
.../qemuhotplug-disk-cdrom.xml | 2 +-
8 files changed, 454 insertions(+), 232 deletions(-)
create mode 100644 src/qemu/qemu_driverpriv.h
create mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-base-config+qemu-agent+config.xml
create mode 100644 tests/qemuhotplugtestdomains/qemuhotplug-base-config.xml
--
1.9.1
8 years, 2 months
[libvirt] [PATCHv5 00/13] qemu: allow disabling certain virtio revisions
by Ján Tomko
https://bugzilla.redhat.com/show_bug.cgi?id=1227354
v1: https://www.redhat.com/archives/libvir-list/2016-July/msg01235.html
v2: https://www.redhat.com/archives/libvir-list/2016-August/msg00412.html
* probe for the qemu capability
* add the attribute to virtio1-only devices such as virtio-gpu
and virtio-input devices
* allow multiple revisions to be specified
v3:
* touch up documentation
* rename the capability from "virtio-revision" to "virtio-disable-legacy"
* move the formatting in qemuBuildNicDevStr after the address
and only do it for virtio
* get rid of novelty enum names
v4:
* only probe the capability for PCI devices
v5:
* instead of a separate element, use one attribute under the driver
element
Ján Tomko (13):
Use a separate buffer for <input> subelements
Use a separate buffer for <disk><driver>
Use a separate buffer for <controller><driver>
Use a separate buffer for <filesystem><driver>
Add compatibility attribute to memballoon
Add compatibility attribute to disks
Add compatibility attribute to controllers
Add compatibility attribute to filesystems
Add compatibility attribute to interfaces
Add compatibility attribute to rng devices
Add compatibility attribute to video
Add compatibility attribute to input devices
qemu: format options for enforcing virtio revisions
docs/formatdomain.html.in | 60 +++++-
docs/schemas/domaincommon.rng | 42 ++++
src/conf/domain_conf.c | 220 +++++++++++++++------
src/conf/domain_conf.h | 17 ++
src/qemu/qemu_command.c | 70 +++++++
.../qemuxml2argv-virtio-revision.args | 62 ++++++
.../qemuxml2argv-virtio-revision.xml | 109 ++++++++++
tests/qemuxml2argvtest.c | 11 ++
.../qemuxml2xmlout-virtio-revision.xml | 108 ++++++++++
tests/qemuxml2xmltest.c | 2 +
10 files changed, 641 insertions(+), 60 deletions(-)
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-virtio-revision.args
create mode 100644 tests/qemuxml2argvdata/qemuxml2argv-virtio-revision.xml
create mode 100644 tests/qemuxml2xmloutdata/qemuxml2xmlout-virtio-revision.xml
--
2.7.3
8 years, 2 months