Fix regressions in chardev handling
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
parent
f57ce74947
commit
0676a07265
@ -0,0 +1,94 @@
|
|||||||
|
From 4c76266baca407ae4981a180aed45193e50a8ade Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||||
|
Date: Thu, 5 Jul 2018 11:59:22 +0100
|
||||||
|
Subject: [PATCH 1/4] qemu: remove chardevStdioLogd param from vhostuser code
|
||||||
|
path
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
The vhostuser network backend is only supported with the UNIX domain
|
||||||
|
socket chardev backend, so passing around chardevStdioLogd is not
|
||||||
|
required.
|
||||||
|
|
||||||
|
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_command.c | 20 +++++++-------------
|
||||||
|
1 file changed, 7 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||||
|
index 04c5c28438..9351b9fddb 100644
|
||||||
|
--- a/src/qemu/qemu_command.c
|
||||||
|
+++ b/src/qemu/qemu_command.c
|
||||||
|
@@ -8195,8 +8195,7 @@ qemuBuildVhostuserCommandLine(virQEMUDriverPtr driver,
|
||||||
|
virDomainDefPtr def,
|
||||||
|
virDomainNetDefPtr net,
|
||||||
|
virQEMUCapsPtr qemuCaps,
|
||||||
|
- unsigned int bootindex,
|
||||||
|
- bool chardevStdioLogd)
|
||||||
|
+ unsigned int bootindex)
|
||||||
|
{
|
||||||
|
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
||||||
|
char *chardev = NULL;
|
||||||
|
@@ -8217,7 +8216,7 @@ qemuBuildVhostuserCommandLine(virQEMUDriverPtr driver,
|
||||||
|
cmd, cfg, def,
|
||||||
|
net->data.vhostuser,
|
||||||
|
net->info.alias, qemuCaps, false,
|
||||||
|
- chardevStdioLogd)))
|
||||||
|
+ false)))
|
||||||
|
goto cleanup;
|
||||||
|
break;
|
||||||
|
|
||||||
|
@@ -8291,8 +8290,7 @@ qemuBuildInterfaceCommandLine(virQEMUDriverPtr driver,
|
||||||
|
virNetDevVPortProfileOp vmop,
|
||||||
|
bool standalone,
|
||||||
|
size_t *nnicindexes,
|
||||||
|
- int **nicindexes,
|
||||||
|
- bool chardevStdioLogd)
|
||||||
|
+ int **nicindexes)
|
||||||
|
{
|
||||||
|
int ret = -1;
|
||||||
|
char *nic = NULL, *host = NULL;
|
||||||
|
@@ -8415,8 +8413,7 @@ qemuBuildInterfaceCommandLine(virQEMUDriverPtr driver,
|
||||||
|
|
||||||
|
case VIR_DOMAIN_NET_TYPE_VHOSTUSER:
|
||||||
|
ret = qemuBuildVhostuserCommandLine(driver, logManager, secManager, cmd, def,
|
||||||
|
- net, qemuCaps, bootindex,
|
||||||
|
- chardevStdioLogd);
|
||||||
|
+ net, qemuCaps, bootindex);
|
||||||
|
goto cleanup;
|
||||||
|
break;
|
||||||
|
|
||||||
|
@@ -8600,8 +8597,7 @@ qemuBuildNetCommandLine(virQEMUDriverPtr driver,
|
||||||
|
bool standalone,
|
||||||
|
size_t *nnicindexes,
|
||||||
|
int **nicindexes,
|
||||||
|
- unsigned int *bootHostdevNet,
|
||||||
|
- bool chardevStdioLogd)
|
||||||
|
+ unsigned int *bootHostdevNet)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
int last_good_net = -1;
|
||||||
|
@@ -8628,8 +8624,7 @@ qemuBuildNetCommandLine(virQEMUDriverPtr driver,
|
||||||
|
if (qemuBuildInterfaceCommandLine(driver, logManager, secManager, cmd, def, net,
|
||||||
|
qemuCaps, bootNet, vmop,
|
||||||
|
standalone, nnicindexes,
|
||||||
|
- nicindexes,
|
||||||
|
- chardevStdioLogd) < 0)
|
||||||
|
+ nicindexes) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
last_good_net = i;
|
||||||
|
@@ -10290,8 +10285,7 @@ qemuBuildCommandLine(virQEMUDriverPtr driver,
|
||||||
|
|
||||||
|
if (qemuBuildNetCommandLine(driver, logManager, secManager, cmd, def,
|
||||||
|
qemuCaps, vmop, standalone,
|
||||||
|
- nnicindexes, nicindexes, &bootHostdevNet,
|
||||||
|
- chardevStdioLogd) < 0)
|
||||||
|
+ nnicindexes, nicindexes, &bootHostdevNet) < 0)
|
||||||
|
goto error;
|
||||||
|
|
||||||
|
if (qemuBuildSmartcardCommandLine(logManager, secManager, cmd, cfg, def, qemuCaps,
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
308
0002-qemu-consolidate-parameters-of-qemuBuildChrChardevSt.patch
Normal file
308
0002-qemu-consolidate-parameters-of-qemuBuildChrChardevSt.patch
Normal file
@ -0,0 +1,308 @@
|
|||||||
|
From 0140d4c59b7fb26432b520bb7e85bd6834f560b0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||||
|
Date: Wed, 4 Jul 2018 14:20:40 +0100
|
||||||
|
Subject: [PATCH 2/4] qemu: consolidate parameters of qemuBuildChrChardevStr
|
||||||
|
into flags
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
There are two boolean parameters passed to qemuBuildChrChardevStr,
|
||||||
|
and soon there will be a third. It will be clearer to understand
|
||||||
|
from callers' POV if we use named flags instead.
|
||||||
|
|
||||||
|
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_command.c | 94 ++++++++++++++++++++++++++---------------
|
||||||
|
1 file changed, 61 insertions(+), 33 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||||
|
index 9351b9fddb..63c7ac0f82 100644
|
||||||
|
--- a/src/qemu/qemu_command.c
|
||||||
|
+++ b/src/qemu/qemu_command.c
|
||||||
|
@@ -4935,6 +4935,12 @@ qemuOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev)
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
+
|
||||||
|
+enum {
|
||||||
|
+ QEMU_BUILD_CHARDEV_TCP_NOWAIT = (1 << 0),
|
||||||
|
+ QEMU_BUILD_CHARDEV_FILE_LOGD = (1 << 1),
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
/* This function outputs a -chardev command line option which describes only the
|
||||||
|
* host side of the character device */
|
||||||
|
static char *
|
||||||
|
@@ -4946,8 +4952,7 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
|
||||||
|
const virDomainChrSourceDef *dev,
|
||||||
|
const char *alias,
|
||||||
|
virQEMUCapsPtr qemuCaps,
|
||||||
|
- bool nowait,
|
||||||
|
- bool chardevStdioLogd)
|
||||||
|
+ unsigned int flags)
|
||||||
|
{
|
||||||
|
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||||
|
bool telnet;
|
||||||
|
@@ -4986,7 +4991,8 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
|
||||||
|
_("append not supported in this QEMU binary"));
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
- if (qemuBuildChrChardevFileStr(chardevStdioLogd ? logManager : NULL,
|
||||||
|
+ if (qemuBuildChrChardevFileStr(flags & QEMU_BUILD_CHARDEV_FILE_LOGD ?
|
||||||
|
+ logManager : NULL,
|
||||||
|
cmd, def, &buf,
|
||||||
|
"path", dev->data.file.path,
|
||||||
|
"append", dev->data.file.append) < 0)
|
||||||
|
@@ -5032,8 +5038,11 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
|
||||||
|
dev->data.tcp.service,
|
||||||
|
telnet ? ",telnet" : "");
|
||||||
|
|
||||||
|
- if (dev->data.tcp.listen)
|
||||||
|
- virBufferAdd(&buf, nowait ? ",server,nowait" : ",server", -1);
|
||||||
|
+ if (dev->data.tcp.listen) {
|
||||||
|
+ virBufferAddLit(&buf, ",server");
|
||||||
|
+ if (flags & QEMU_BUILD_CHARDEV_TCP_NOWAIT)
|
||||||
|
+ virBufferAddLit(&buf, ",nowait");
|
||||||
|
+ }
|
||||||
|
|
||||||
|
qemuBuildChrChardevReconnectStr(&buf, &dev->data.tcp.reconnect);
|
||||||
|
|
||||||
|
@@ -5091,8 +5100,11 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
|
||||||
|
virBufferAsprintf(&buf, "socket,id=%s,path=", charAlias);
|
||||||
|
virQEMUBuildBufferEscapeComma(&buf, dev->data.nix.path);
|
||||||
|
}
|
||||||
|
- if (dev->data.nix.listen)
|
||||||
|
- virBufferAdd(&buf, nowait ? ",server,nowait" : ",server", -1);
|
||||||
|
+ if (dev->data.nix.listen) {
|
||||||
|
+ virBufferAddLit(&buf, ",server");
|
||||||
|
+ if (flags & QEMU_BUILD_CHARDEV_TCP_NOWAIT)
|
||||||
|
+ virBufferAddLit(&buf, ",nowait");
|
||||||
|
+ }
|
||||||
|
|
||||||
|
qemuBuildChrChardevReconnectStr(&buf, &dev->data.nix.reconnect);
|
||||||
|
break;
|
||||||
|
@@ -5426,6 +5438,9 @@ qemuBuildMonitorCommandLine(virLogManagerPtr logManager,
|
||||||
|
qemuDomainObjPrivatePtr priv)
|
||||||
|
{
|
||||||
|
char *chrdev;
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ if (priv->chardevStdioLogd)
|
||||||
|
+ cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
|
||||||
|
if (!priv->monConfig)
|
||||||
|
return 0;
|
||||||
|
@@ -5433,8 +5448,7 @@ qemuBuildMonitorCommandLine(virLogManagerPtr logManager,
|
||||||
|
if (!(chrdev = qemuBuildChrChardevStr(logManager, secManager,
|
||||||
|
cmd, cfg, def,
|
||||||
|
priv->monConfig, "monitor",
|
||||||
|
- priv->qemuCaps, true,
|
||||||
|
- priv->chardevStdioLogd)))
|
||||||
|
+ priv->qemuCaps, cdevflags)))
|
||||||
|
return -1;
|
||||||
|
virCommandAddArg(cmd, "-chardev");
|
||||||
|
virCommandAddArg(cmd, chrdev);
|
||||||
|
@@ -5559,6 +5573,9 @@ qemuBuildRNGBackendChrdevStr(virLogManagerPtr logManager,
|
||||||
|
char **chr,
|
||||||
|
bool chardevStdioLogd)
|
||||||
|
{
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ if (chardevStdioLogd)
|
||||||
|
+ cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
*chr = NULL;
|
||||||
|
|
||||||
|
switch ((virDomainRNGBackend) rng->backend) {
|
||||||
|
@@ -5571,8 +5588,8 @@ qemuBuildRNGBackendChrdevStr(virLogManagerPtr logManager,
|
||||||
|
if (!(*chr = qemuBuildChrChardevStr(logManager, secManager,
|
||||||
|
cmd, cfg, def,
|
||||||
|
rng->source.chardev,
|
||||||
|
- rng->info.alias, qemuCaps, true,
|
||||||
|
- chardevStdioLogd)))
|
||||||
|
+ rng->info.alias, qemuCaps,
|
||||||
|
+ cdevflags)))
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -8215,8 +8232,7 @@ qemuBuildVhostuserCommandLine(virQEMUDriverPtr driver,
|
||||||
|
if (!(chardev = qemuBuildChrChardevStr(logManager, secManager,
|
||||||
|
cmd, cfg, def,
|
||||||
|
net->data.vhostuser,
|
||||||
|
- net->info.alias, qemuCaps, false,
|
||||||
|
- false)))
|
||||||
|
+ net->info.alias, qemuCaps, 0)))
|
||||||
|
goto cleanup;
|
||||||
|
break;
|
||||||
|
|
||||||
|
@@ -8696,6 +8712,9 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager,
|
||||||
|
virBuffer opt = VIR_BUFFER_INITIALIZER;
|
||||||
|
const char *database;
|
||||||
|
const char *contAlias = NULL;
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ if (chardevStdioLogd)
|
||||||
|
+ cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
|
||||||
|
if (!def->nsmartcards)
|
||||||
|
return 0;
|
||||||
|
@@ -8761,8 +8780,7 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager,
|
||||||
|
cmd, cfg, def,
|
||||||
|
smartcard->data.passthru,
|
||||||
|
smartcard->info.alias,
|
||||||
|
- qemuCaps, true,
|
||||||
|
- chardevStdioLogd))) {
|
||||||
|
+ qemuCaps, cdevflags))) {
|
||||||
|
virBufferFreeAndReset(&opt);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
@@ -8930,6 +8948,9 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager,
|
||||||
|
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||||
|
char *devstr = NULL;
|
||||||
|
int rc;
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ if (chardevStdioLogd)
|
||||||
|
+ cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
|
||||||
|
if (shmem->size) {
|
||||||
|
/*
|
||||||
|
@@ -8993,8 +9014,8 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager,
|
||||||
|
devstr = qemuBuildChrChardevStr(logManager, secManager,
|
||||||
|
cmd, cfg, def,
|
||||||
|
&shmem->server.chr,
|
||||||
|
- shmem->info.alias, qemuCaps, true,
|
||||||
|
- chardevStdioLogd);
|
||||||
|
+ shmem->info.alias, qemuCaps,
|
||||||
|
+ cdevflags);
|
||||||
|
if (!devstr)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
@@ -9087,6 +9108,9 @@ qemuBuildSerialCommandLine(virLogManagerPtr logManager,
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
bool havespice = false;
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ if (chardevStdioLogd)
|
||||||
|
+ cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
|
||||||
|
if (def->nserials) {
|
||||||
|
for (i = 0; i < def->ngraphics && !havespice; i++) {
|
||||||
|
@@ -9106,8 +9130,7 @@ qemuBuildSerialCommandLine(virLogManagerPtr logManager,
|
||||||
|
cmd, cfg, def,
|
||||||
|
serial->source,
|
||||||
|
serial->info.alias,
|
||||||
|
- qemuCaps, true,
|
||||||
|
- chardevStdioLogd)))
|
||||||
|
+ qemuCaps, cdevflags)))
|
||||||
|
return -1;
|
||||||
|
virCommandAddArg(cmd, "-chardev");
|
||||||
|
virCommandAddArg(cmd, devstr);
|
||||||
|
@@ -9148,6 +9171,9 @@ qemuBuildParallelsCommandLine(virLogManagerPtr logManager,
|
||||||
|
bool chardevStdioLogd)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ if (chardevStdioLogd)
|
||||||
|
+ cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
|
||||||
|
for (i = 0; i < def->nparallels; i++) {
|
||||||
|
virDomainChrDefPtr parallel = def->parallels[i];
|
||||||
|
@@ -9157,8 +9183,7 @@ qemuBuildParallelsCommandLine(virLogManagerPtr logManager,
|
||||||
|
cmd, cfg, def,
|
||||||
|
parallel->source,
|
||||||
|
parallel->info.alias,
|
||||||
|
- qemuCaps, true,
|
||||||
|
- chardevStdioLogd)))
|
||||||
|
+ qemuCaps, cdevflags)))
|
||||||
|
return -1;
|
||||||
|
virCommandAddArg(cmd, "-chardev");
|
||||||
|
virCommandAddArg(cmd, devstr);
|
||||||
|
@@ -9183,6 +9208,9 @@ qemuBuildChannelsCommandLine(virLogManagerPtr logManager,
|
||||||
|
bool chardevStdioLogd)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ if (chardevStdioLogd)
|
||||||
|
+ cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
|
||||||
|
for (i = 0; i < def->nchannels; i++) {
|
||||||
|
virDomainChrDefPtr channel = def->channels[i];
|
||||||
|
@@ -9194,8 +9222,7 @@ qemuBuildChannelsCommandLine(virLogManagerPtr logManager,
|
||||||
|
cmd, cfg, def,
|
||||||
|
channel->source,
|
||||||
|
channel->info.alias,
|
||||||
|
- qemuCaps, true,
|
||||||
|
- chardevStdioLogd)))
|
||||||
|
+ qemuCaps, cdevflags)))
|
||||||
|
return -1;
|
||||||
|
virCommandAddArg(cmd, "-chardev");
|
||||||
|
virCommandAddArg(cmd, devstr);
|
||||||
|
@@ -9212,8 +9239,7 @@ qemuBuildChannelsCommandLine(virLogManagerPtr logManager,
|
||||||
|
cmd, cfg, def,
|
||||||
|
channel->source,
|
||||||
|
channel->info.alias,
|
||||||
|
- qemuCaps, true,
|
||||||
|
- chardevStdioLogd)))
|
||||||
|
+ qemuCaps, cdevflags)))
|
||||||
|
return -1;
|
||||||
|
virCommandAddArg(cmd, "-chardev");
|
||||||
|
virCommandAddArg(cmd, devstr);
|
||||||
|
@@ -9239,6 +9265,9 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager,
|
||||||
|
bool chardevStdioLogd)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ if (chardevStdioLogd)
|
||||||
|
+ cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
|
||||||
|
/* Explicit console devices */
|
||||||
|
for (i = 0; i < def->nconsoles; i++) {
|
||||||
|
@@ -9257,8 +9286,7 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager,
|
||||||
|
cmd, cfg, def,
|
||||||
|
console->source,
|
||||||
|
console->info.alias,
|
||||||
|
- qemuCaps, true,
|
||||||
|
- chardevStdioLogd)))
|
||||||
|
+ qemuCaps, cdevflags)))
|
||||||
|
return -1;
|
||||||
|
virCommandAddArg(cmd, "-chardev");
|
||||||
|
virCommandAddArg(cmd, devstr);
|
||||||
|
@@ -9279,8 +9307,7 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager,
|
||||||
|
cmd, cfg, def,
|
||||||
|
console->source,
|
||||||
|
console->info.alias,
|
||||||
|
- qemuCaps, true,
|
||||||
|
- chardevStdioLogd)))
|
||||||
|
+ qemuCaps, cdevflags)))
|
||||||
|
return -1;
|
||||||
|
virCommandAddArg(cmd, "-chardev");
|
||||||
|
virCommandAddArg(cmd, devstr);
|
||||||
|
@@ -9295,8 +9322,7 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager,
|
||||||
|
cmd, cfg, def,
|
||||||
|
console->source,
|
||||||
|
console->info.alias,
|
||||||
|
- qemuCaps, true,
|
||||||
|
- chardevStdioLogd)))
|
||||||
|
+ qemuCaps, cdevflags)))
|
||||||
|
return -1;
|
||||||
|
virCommandAddArg(cmd, "-chardev");
|
||||||
|
virCommandAddArg(cmd, devstr);
|
||||||
|
@@ -9419,6 +9445,9 @@ qemuBuildRedirdevCommandLine(virLogManagerPtr logManager,
|
||||||
|
bool chardevStdioLogd)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ if (chardevStdioLogd)
|
||||||
|
+ cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
|
||||||
|
for (i = 0; i < def->nredirdevs; i++) {
|
||||||
|
virDomainRedirdevDefPtr redirdev = def->redirdevs[i];
|
||||||
|
@@ -9428,8 +9457,7 @@ qemuBuildRedirdevCommandLine(virLogManagerPtr logManager,
|
||||||
|
cmd, cfg, def,
|
||||||
|
redirdev->source,
|
||||||
|
redirdev->info.alias,
|
||||||
|
- qemuCaps, true,
|
||||||
|
- chardevStdioLogd))) {
|
||||||
|
+ qemuCaps, cdevflags))) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
166
0003-qemu-don-t-use-chardev-FD-passing-for-vhostuser-back.patch
Normal file
166
0003-qemu-don-t-use-chardev-FD-passing-for-vhostuser-back.patch
Normal file
@ -0,0 +1,166 @@
|
|||||||
|
From ed5aa85f371aebb0103e712f9a103d011ab9ae43 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||||
|
Date: Wed, 4 Jul 2018 14:28:14 +0100
|
||||||
|
Subject: [PATCH 3/4] qemu: don't use chardev FD passing for vhostuser backend
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
QEMU chardevs have a bug which makes the vhostuser backend complain
|
||||||
|
about lack of support for FD passing when validating the chardev.
|
||||||
|
While this is ultimately QEMU's responsibility to fix, libvirt needs to
|
||||||
|
avoid tickling the bug.
|
||||||
|
|
||||||
|
Simply disabling chardev FD passing just for vhostuser's chardev is
|
||||||
|
the most prudent approach, avoiding need for a QEMU version number
|
||||||
|
check.
|
||||||
|
|
||||||
|
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_command.c | 31 +++++++++++++++--------
|
||||||
|
tests/qemuxml2argvdata/net-vhostuser.args | 3 +--
|
||||||
|
tests/qemuxml2argvtest.c | 2 +-
|
||||||
|
3 files changed, 23 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||||
|
index 63c7ac0f82..82d8030a33 100644
|
||||||
|
--- a/src/qemu/qemu_command.c
|
||||||
|
+++ b/src/qemu/qemu_command.c
|
||||||
|
@@ -4939,6 +4939,7 @@ qemuOpenChrChardevUNIXSocket(const virDomainChrSourceDef *dev)
|
||||||
|
enum {
|
||||||
|
QEMU_BUILD_CHARDEV_TCP_NOWAIT = (1 << 0),
|
||||||
|
QEMU_BUILD_CHARDEV_FILE_LOGD = (1 << 1),
|
||||||
|
+ QEMU_BUILD_CHARDEV_UNIX_FD_PASS = (1 << 2),
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This function outputs a -chardev command line option which describes only the
|
||||||
|
@@ -5082,7 +5083,8 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_CHR_TYPE_UNIX:
|
||||||
|
- if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS)) {
|
||||||
|
+ if ((flags & QEMU_BUILD_CHARDEV_UNIX_FD_PASS) &&
|
||||||
|
+ virQEMUCapsGet(qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS)) {
|
||||||
|
if (qemuSecuritySetSocketLabel(secManager, (virDomainDefPtr)def) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
int fd = qemuOpenChrChardevUNIXSocket(dev);
|
||||||
|
@@ -5438,7 +5440,8 @@ qemuBuildMonitorCommandLine(virLogManagerPtr logManager,
|
||||||
|
qemuDomainObjPrivatePtr priv)
|
||||||
|
{
|
||||||
|
char *chrdev;
|
||||||
|
- unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||||
|
+ QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||||
|
if (priv->chardevStdioLogd)
|
||||||
|
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
|
||||||
|
@@ -5573,7 +5576,8 @@ qemuBuildRNGBackendChrdevStr(virLogManagerPtr logManager,
|
||||||
|
char **chr,
|
||||||
|
bool chardevStdioLogd)
|
||||||
|
{
|
||||||
|
- unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||||
|
+ QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||||
|
if (chardevStdioLogd)
|
||||||
|
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
*chr = NULL;
|
||||||
|
@@ -8712,7 +8716,8 @@ qemuBuildSmartcardCommandLine(virLogManagerPtr logManager,
|
||||||
|
virBuffer opt = VIR_BUFFER_INITIALIZER;
|
||||||
|
const char *database;
|
||||||
|
const char *contAlias = NULL;
|
||||||
|
- unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||||
|
+ QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||||
|
if (chardevStdioLogd)
|
||||||
|
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
|
||||||
|
@@ -8948,7 +8953,8 @@ qemuBuildShmemCommandLine(virLogManagerPtr logManager,
|
||||||
|
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||||
|
char *devstr = NULL;
|
||||||
|
int rc;
|
||||||
|
- unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||||
|
+ QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||||
|
if (chardevStdioLogd)
|
||||||
|
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
|
||||||
|
@@ -9108,7 +9114,8 @@ qemuBuildSerialCommandLine(virLogManagerPtr logManager,
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
bool havespice = false;
|
||||||
|
- unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||||
|
+ QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||||
|
if (chardevStdioLogd)
|
||||||
|
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
|
||||||
|
@@ -9171,7 +9178,8 @@ qemuBuildParallelsCommandLine(virLogManagerPtr logManager,
|
||||||
|
bool chardevStdioLogd)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
- unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||||
|
+ QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||||
|
if (chardevStdioLogd)
|
||||||
|
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
|
||||||
|
@@ -9208,7 +9216,8 @@ qemuBuildChannelsCommandLine(virLogManagerPtr logManager,
|
||||||
|
bool chardevStdioLogd)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
- unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||||
|
+ QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||||
|
if (chardevStdioLogd)
|
||||||
|
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
|
||||||
|
@@ -9265,7 +9274,8 @@ qemuBuildConsoleCommandLine(virLogManagerPtr logManager,
|
||||||
|
bool chardevStdioLogd)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
- unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||||
|
+ QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||||
|
if (chardevStdioLogd)
|
||||||
|
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
|
||||||
|
@@ -9445,7 +9455,8 @@ qemuBuildRedirdevCommandLine(virLogManagerPtr logManager,
|
||||||
|
bool chardevStdioLogd)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
- unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT;
|
||||||
|
+ unsigned int cdevflags = QEMU_BUILD_CHARDEV_TCP_NOWAIT |
|
||||||
|
+ QEMU_BUILD_CHARDEV_UNIX_FD_PASS;
|
||||||
|
if (chardevStdioLogd)
|
||||||
|
cdevflags |= QEMU_BUILD_CHARDEV_FILE_LOGD;
|
||||||
|
|
||||||
|
diff --git a/tests/qemuxml2argvdata/net-vhostuser.args b/tests/qemuxml2argvdata/net-vhostuser.args
|
||||||
|
index fc4557a1f2..513fc535ab 100644
|
||||||
|
--- a/tests/qemuxml2argvdata/net-vhostuser.args
|
||||||
|
+++ b/tests/qemuxml2argvdata/net-vhostuser.args
|
||||||
|
@@ -14,8 +14,7 @@ QEMU_AUDIO_DRV=none \
|
||||||
|
-display none \
|
||||||
|
-no-user-config \
|
||||||
|
-nodefaults \
|
||||||
|
--chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
|
||||||
|
-server,nowait \
|
||||||
|
+-chardev socket,id=charmonitor,fd=1729,server,nowait \
|
||||||
|
-mon chardev=charmonitor,id=monitor,mode=control \
|
||||||
|
-rtc base=utc \
|
||||||
|
-no-shutdown \
|
||||||
|
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
|
||||||
|
index d6911f9344..2d52f352b0 100644
|
||||||
|
--- a/tests/qemuxml2argvtest.c
|
||||||
|
+++ b/tests/qemuxml2argvtest.c
|
||||||
|
@@ -1266,7 +1266,7 @@ mymain(void)
|
||||||
|
DO_TEST("misc-no-reboot", NONE);
|
||||||
|
DO_TEST("misc-uuid", NONE);
|
||||||
|
DO_TEST_PARSE_ERROR("vhost_queues-invalid", NONE);
|
||||||
|
- DO_TEST("net-vhostuser", NONE);
|
||||||
|
+ DO_TEST("net-vhostuser", QEMU_CAPS_CHARDEV_FD_PASS);
|
||||||
|
DO_TEST("net-vhostuser-multiq",
|
||||||
|
QEMU_CAPS_VHOSTUSER_MULTIQUEUE);
|
||||||
|
DO_TEST_FAILURE("net-vhostuser-multiq", NONE);
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
123
0004-qemu-fix-UNIX-socket-chardevs-operating-in-client-mo.patch
Normal file
123
0004-qemu-fix-UNIX-socket-chardevs-operating-in-client-mo.patch
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
From 1dd55b2fcddecf22a046b1df069b55fdfe17af76 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= <berrange@redhat.com>
|
||||||
|
Date: Fri, 6 Jul 2018 11:00:11 +0100
|
||||||
|
Subject: [PATCH 4/4] qemu: fix UNIX socket chardevs operating in client mode
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
When support was adding for passing a pre-opened listener socket to UNIX
|
||||||
|
chardevs, it accidentally passed the listener socket for client mode
|
||||||
|
chardevs too with predictable amounts of fail resulting.
|
||||||
|
|
||||||
|
Expand the unit test coverage to validate that we are only doing FD
|
||||||
|
passing when operating in server mode.
|
||||||
|
|
||||||
|
Reported-by: Richard W.M. Jones <rjones@redhat.com>
|
||||||
|
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
|
||||||
|
---
|
||||||
|
src/qemu/qemu_command.c | 3 +-
|
||||||
|
.../qemuxml2argvdata/serial-unix-chardev.args | 2 ++
|
||||||
|
.../serial-unix-chardev.x86_64-latest.args | 36 +++++++++++++++++++
|
||||||
|
.../qemuxml2argvdata/serial-unix-chardev.xml | 4 +++
|
||||||
|
tests/qemuxml2argvtest.c | 1 +
|
||||||
|
5 files changed, 45 insertions(+), 1 deletion(-)
|
||||||
|
create mode 100644 tests/qemuxml2argvdata/serial-unix-chardev.x86_64-latest.args
|
||||||
|
|
||||||
|
diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c
|
||||||
|
index 82d8030a33..32eb59b6ab 100644
|
||||||
|
--- a/src/qemu/qemu_command.c
|
||||||
|
+++ b/src/qemu/qemu_command.c
|
||||||
|
@@ -5083,7 +5083,8 @@ qemuBuildChrChardevStr(virLogManagerPtr logManager,
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VIR_DOMAIN_CHR_TYPE_UNIX:
|
||||||
|
- if ((flags & QEMU_BUILD_CHARDEV_UNIX_FD_PASS) &&
|
||||||
|
+ if (dev->data.nix.listen &&
|
||||||
|
+ (flags & QEMU_BUILD_CHARDEV_UNIX_FD_PASS) &&
|
||||||
|
virQEMUCapsGet(qemuCaps, QEMU_CAPS_CHARDEV_FD_PASS)) {
|
||||||
|
if (qemuSecuritySetSocketLabel(secManager, (virDomainDefPtr)def) < 0)
|
||||||
|
goto cleanup;
|
||||||
|
diff --git a/tests/qemuxml2argvdata/serial-unix-chardev.args b/tests/qemuxml2argvdata/serial-unix-chardev.args
|
||||||
|
index 584f4a1dd1..873d3263c6 100644
|
||||||
|
--- a/tests/qemuxml2argvdata/serial-unix-chardev.args
|
||||||
|
+++ b/tests/qemuxml2argvdata/serial-unix-chardev.args
|
||||||
|
@@ -26,4 +26,6 @@ server,nowait \
|
||||||
|
-device ide-drive,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0 \
|
||||||
|
-chardev socket,id=charserial0,path=/tmp/serial.sock \
|
||||||
|
-device isa-serial,chardev=charserial0,id=serial0 \
|
||||||
|
+-chardev socket,id=charserial1,path=/tmp/serial-server.sock,server,nowait \
|
||||||
|
+-device isa-serial,chardev=charserial1,id=serial1 \
|
||||||
|
-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x3
|
||||||
|
diff --git a/tests/qemuxml2argvdata/serial-unix-chardev.x86_64-latest.args b/tests/qemuxml2argvdata/serial-unix-chardev.x86_64-latest.args
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..ce7a7f80d7
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/tests/qemuxml2argvdata/serial-unix-chardev.x86_64-latest.args
|
||||||
|
@@ -0,0 +1,36 @@
|
||||||
|
+LC_ALL=C \
|
||||||
|
+PATH=/bin \
|
||||||
|
+HOME=/home/test \
|
||||||
|
+USER=test \
|
||||||
|
+LOGNAME=test \
|
||||||
|
+QEMU_AUDIO_DRV=none \
|
||||||
|
+/usr/bin/qemu-system-i686 \
|
||||||
|
+-name guest=QEMUGuest1,debug-threads=on \
|
||||||
|
+-S \
|
||||||
|
+-object secret,id=masterKey0,format=raw,\
|
||||||
|
+file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||||
|
+-machine pc,accel=tcg,usb=off,dump-guest-core=off \
|
||||||
|
+-m 214 \
|
||||||
|
+-realtime mlock=off \
|
||||||
|
+-smp 1,sockets=1,cores=1,threads=1 \
|
||||||
|
+-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||||
|
+-display none \
|
||||||
|
+-no-user-config \
|
||||||
|
+-nodefaults \
|
||||||
|
+-chardev socket,id=charmonitor,fd=1729,server,nowait \
|
||||||
|
+-mon chardev=charmonitor,id=monitor,mode=control \
|
||||||
|
+-rtc base=utc \
|
||||||
|
+-no-shutdown \
|
||||||
|
+-no-acpi \
|
||||||
|
+-boot strict=on \
|
||||||
|
+-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||||
|
+-drive file=/dev/HostVG/QEMUGuest1,format=raw,if=none,id=drive-ide0-0-0 \
|
||||||
|
+-device ide-hd,bus=ide.0,unit=0,drive=drive-ide0-0-0,id=ide0-0-0,bootindex=1 \
|
||||||
|
+-chardev socket,id=charserial0,path=/tmp/serial.sock \
|
||||||
|
+-device isa-serial,chardev=charserial0,id=serial0 \
|
||||||
|
+-chardev socket,id=charserial1,fd=1729,server,nowait \
|
||||||
|
+-device isa-serial,chardev=charserial1,id=serial1 \
|
||||||
|
+-device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x2 \
|
||||||
|
+-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
|
||||||
|
+resourcecontrol=deny \
|
||||||
|
+-msg timestamp=on
|
||||||
|
diff --git a/tests/qemuxml2argvdata/serial-unix-chardev.xml b/tests/qemuxml2argvdata/serial-unix-chardev.xml
|
||||||
|
index 04f83779ce..af513d6445 100644
|
||||||
|
--- a/tests/qemuxml2argvdata/serial-unix-chardev.xml
|
||||||
|
+++ b/tests/qemuxml2argvdata/serial-unix-chardev.xml
|
||||||
|
@@ -25,6 +25,10 @@
|
||||||
|
<source mode='connect' path='/tmp/serial.sock'/>
|
||||||
|
<target port='0'/>
|
||||||
|
</serial>
|
||||||
|
+ <serial type='unix'>
|
||||||
|
+ <source mode='bind' path='/tmp/serial-server.sock'/>
|
||||||
|
+ <target port='1'/>
|
||||||
|
+ </serial>
|
||||||
|
<console type='unix'>
|
||||||
|
<source mode='connect' path='/tmp/serial.sock'/>
|
||||||
|
<target port='0'/>
|
||||||
|
diff --git a/tests/qemuxml2argvtest.c b/tests/qemuxml2argvtest.c
|
||||||
|
index 2d52f352b0..3be5af03aa 100644
|
||||||
|
--- a/tests/qemuxml2argvtest.c
|
||||||
|
+++ b/tests/qemuxml2argvtest.c
|
||||||
|
@@ -1335,6 +1335,7 @@ mymain(void)
|
||||||
|
QEMU_CAPS_CHARDEV_FILE_APPEND);
|
||||||
|
DO_TEST("serial-unix-chardev",
|
||||||
|
QEMU_CAPS_DEVICE_ISA_SERIAL);
|
||||||
|
+ DO_TEST_CAPS_LATEST("serial-unix-chardev");
|
||||||
|
DO_TEST("serial-tcp-chardev",
|
||||||
|
QEMU_CAPS_DEVICE_ISA_SERIAL);
|
||||||
|
DO_TEST("serial-udp-chardev",
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -252,7 +252,7 @@
|
|||||||
Summary: Library providing a simple virtualization API
|
Summary: Library providing a simple virtualization API
|
||||||
Name: libvirt
|
Name: libvirt
|
||||||
Version: 4.5.0
|
Version: 4.5.0
|
||||||
Release: 1%{?dist}%{?extra_release}
|
Release: 2%{?dist}%{?extra_release}
|
||||||
License: LGPLv2+
|
License: LGPLv2+
|
||||||
URL: https://libvirt.org/
|
URL: https://libvirt.org/
|
||||||
|
|
||||||
@ -260,6 +260,10 @@ URL: https://libvirt.org/
|
|||||||
%define mainturl stable_updates/
|
%define mainturl stable_updates/
|
||||||
%endif
|
%endif
|
||||||
Source: https://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.xz
|
Source: https://libvirt.org/sources/%{?mainturl}libvirt-%{version}.tar.xz
|
||||||
|
Patch1: 0001-qemu-remove-chardevStdioLogd-param-from-vhostuser-co.patch
|
||||||
|
Patch2: 0002-qemu-consolidate-parameters-of-qemuBuildChrChardevSt.patch
|
||||||
|
Patch3: 0003-qemu-don-t-use-chardev-FD-passing-for-vhostuser-back.patch
|
||||||
|
Patch4: 0004-qemu-fix-UNIX-socket-chardevs-operating-in-client-mo.patch
|
||||||
|
|
||||||
Requires: libvirt-daemon = %{version}-%{release}
|
Requires: libvirt-daemon = %{version}-%{release}
|
||||||
Requires: libvirt-daemon-config-network = %{version}-%{release}
|
Requires: libvirt-daemon-config-network = %{version}-%{release}
|
||||||
@ -2129,6 +2133,9 @@ exit 0
|
|||||||
|
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Fri Jul 6 2018 Daniel P. Berrangé <berrange@redhat.com> - 4.5.0-2
|
||||||
|
- Fix regressions with chardev handling
|
||||||
|
|
||||||
* Tue Jul 3 2018 Daniel P. Berrangé <berrange@redhat.com> - 4.5.0-1
|
* Tue Jul 3 2018 Daniel P. Berrangé <berrange@redhat.com> - 4.5.0-1
|
||||||
- Update to 4.5.0 release
|
- Update to 4.5.0 release
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user