SHA256
1
0
forked from pool/libvirt

Accepting request 484775 from home:jfehlig:branches:Virtualization

- Update to libvirt 3.2.0
  - Many incremental improvements and bug fixes, see
    http://libvirt.org/news.html
  - Dropped patches:
    67dcb797-virTimeBackOffWait-sleepcap.patch,
    85af0b80-qemu-adaptive-montimeout.patch,
    d68cb4f55-extract-the-request-sending-code-from-virNetlin.patch,
    754515b7d-add-virNetlinkDumpCommand.patch,
    3ee35d7d6-more-uses-of-SYSCTL_PATH.patch,
    5dd607059-add-virNetDevGetName.patch,
    00d28a78b-check-accept_ra-before-enabling-ipv6-forward.patch
- Add Conflicts=xendomains.service to libvirtd service
  suse-libvirtd-service.patch
  bsc#1015348

OBS-URL: https://build.opensuse.org/request/show/484775
OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=595
This commit is contained in:
James Fehlig 2017-04-03 04:57:47 +00:00 committed by Git OBS Bridge
parent f9c1123f5a
commit f39448844a
38 changed files with 236 additions and 1090 deletions

View File

@ -1,260 +0,0 @@
From 00d28a78b5d1f6eaf79f06ac59e31c568af9da37 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= <cbosdonnat@suse.com>
Date: Fri, 3 Mar 2017 14:14:51 +0100
Subject: [PATCH 5/5] network: check accept_ra before enabling ipv6 forwarding
When enabling IPv6 on all interfaces, we may get the host Router
Advertisement routes discarded. To avoid this, the user needs to set
accept_ra to 2 for the interfaces with such routes.
See https://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt
on this topic.
To avoid user mistakenly losing routes on their hosts, check
accept_ra values before enabling IPv6 forwarding. If a RA route is
detected, but neither the corresponding device nor global accept_ra
is set to 2, the network will fail to start.
---
src/libvirt_private.syms | 1 +
src/network/bridge_driver.c | 16 +++--
src/util/virnetdevip.c | 158 ++++++++++++++++++++++++++++++++++++++++++++
src/util/virnetdevip.h | 1 +
4 files changed, 171 insertions(+), 5 deletions(-)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 3b2cb83c4..57acfdbb1 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2067,6 +2067,7 @@ virNetDevBridgeSetVlanFiltering;
virNetDevIPAddrAdd;
virNetDevIPAddrDel;
virNetDevIPAddrGet;
+virNetDevIPCheckIPv6Forwarding;
virNetDevIPInfoAddToDev;
virNetDevIPInfoClear;
virNetDevIPRouteAdd;
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 4d1a44516..a753cd78b 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -61,6 +61,7 @@
#include "virlog.h"
#include "virdnsmasq.h"
#include "configmake.h"
+#include "virnetlink.h"
#include "virnetdev.h"
#include "virnetdevip.h"
#include "virnetdevbridge.h"
@@ -2389,11 +2390,16 @@ networkStartNetworkVirtual(virNetworkDriverStatePtr driver,
}
/* If forward.type != NONE, turn on global IP forwarding */
- if (network->def->forward.type != VIR_NETWORK_FORWARD_NONE &&
- networkEnableIPForwarding(v4present, v6present) < 0) {
- virReportSystemError(errno, "%s",
- _("failed to enable IP forwarding"));
- goto err3;
+ if (network->def->forward.type != VIR_NETWORK_FORWARD_NONE) {
+ if (!virNetDevIPCheckIPv6Forwarding())
+ goto err3; /* Precise error message already provided */
+
+
+ if (networkEnableIPForwarding(v4present, v6present) < 0) {
+ virReportSystemError(errno, "%s",
+ _("failed to enable IP forwarding"));
+ goto err3;
+ }
}
diff --git a/src/util/virnetdevip.c b/src/util/virnetdevip.c
index 42fbba1eb..a4d382427 100644
--- a/src/util/virnetdevip.c
+++ b/src/util/virnetdevip.c
@@ -508,6 +508,158 @@ virNetDevIPWaitDadFinish(virSocketAddrPtr *addrs, size_t count)
return ret;
}
+static int
+virNetDevIPGetAcceptRA(const char *ifname)
+{
+ char *path = NULL;
+ char *buf = NULL;
+ char *suffix;
+ int accept_ra = -1;
+
+ if (virAsprintf(&path, "/proc/sys/net/ipv6/conf/%s/accept_ra",
+ ifname ? ifname : "all") < 0)
+ goto cleanup;
+
+ if ((virFileReadAll(path, 512, &buf) < 0) ||
+ (virStrToLong_i(buf, &suffix, 10, &accept_ra) < 0))
+ goto cleanup;
+
+ cleanup:
+ VIR_FREE(path);
+ VIR_FREE(buf);
+
+ return accept_ra;
+}
+
+struct virNetDevIPCheckIPv6ForwardingData {
+ bool hasRARoutes;
+
+ /* Devices with conflicting accept_ra */
+ char **devices;
+ size_t ndevices;
+};
+
+static int
+virNetDevIPCheckIPv6ForwardingCallback(const struct nlmsghdr *resp,
+ void *opaque)
+{
+ struct rtmsg *rtmsg = NLMSG_DATA(resp);
+ int accept_ra = -1;
+ struct rtattr *rta;
+ char *ifname = NULL;
+ struct virNetDevIPCheckIPv6ForwardingData *data = opaque;
+ int ret = 0;
+ int len = RTM_PAYLOAD(resp);
+ int oif = -1;
+
+ /* Ignore messages other than route ones */
+ if (resp->nlmsg_type != RTM_NEWROUTE)
+ return ret;
+
+ /* Extract a few attributes */
+ for (rta = RTM_RTA(rtmsg); RTA_OK(rta, len); rta = RTA_NEXT(rta, len)) {
+ switch (rta->rta_type) {
+ case RTA_OIF:
+ oif = *(int *)RTA_DATA(rta);
+
+ if (!(ifname = virNetDevGetName(oif)))
+ goto error;
+ break;
+ }
+ }
+
+ /* No need to do anything else for non RA routes */
+ if (rtmsg->rtm_protocol != RTPROT_RA)
+ goto cleanup;
+
+ data->hasRARoutes = true;
+
+ /* Check the accept_ra value for the interface */
+ accept_ra = virNetDevIPGetAcceptRA(ifname);
+ VIR_DEBUG("Checking route for device %s, accept_ra: %d", ifname, accept_ra);
+
+ if (accept_ra != 2 && VIR_APPEND_ELEMENT(data->devices, data->ndevices, ifname) < 0)
+ goto error;
+
+ cleanup:
+ VIR_FREE(ifname);
+ return ret;
+
+ error:
+ ret = -1;
+ goto cleanup;
+}
+
+bool
+virNetDevIPCheckIPv6Forwarding(void)
+{
+ struct nl_msg *nlmsg = NULL;
+ bool valid = false;
+ struct rtgenmsg genmsg;
+ size_t i;
+ struct virNetDevIPCheckIPv6ForwardingData data = {
+ .hasRARoutes = false,
+ .devices = NULL,
+ .ndevices = 0
+ };
+
+
+ /* Prepare the request message */
+ if (!(nlmsg = nlmsg_alloc_simple(RTM_GETROUTE,
+ NLM_F_REQUEST | NLM_F_DUMP))) {
+ virReportOOMError();
+ goto cleanup;
+ }
+
+ memset(&genmsg, 0, sizeof(genmsg));
+ genmsg.rtgen_family = AF_INET6;
+
+ if (nlmsg_append(nlmsg, &genmsg, sizeof(genmsg), NLMSG_ALIGNTO) < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("allocated netlink buffer is too small"));
+ goto cleanup;
+ }
+
+ /* Send the request and loop over the responses */
+ if (virNetlinkDumpCommand(nlmsg, virNetDevIPCheckIPv6ForwardingCallback,
+ 0, 0, NETLINK_ROUTE, 0, &data) < 0) {
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+ _("Failed to loop over IPv6 routes"));
+ goto cleanup;
+ }
+
+ valid = !data.hasRARoutes || data.ndevices == 0;
+
+ /* Check the global accept_ra if at least one isn't set on a
+ per-device basis */
+ if (!valid && data.hasRARoutes) {
+ int accept_ra = virNetDevIPGetAcceptRA(NULL);
+ valid = accept_ra == 2;
+ VIR_DEBUG("Checked global accept_ra: %d", accept_ra);
+ }
+
+ if (!valid) {
+ virBuffer buf = VIR_BUFFER_INITIALIZER;
+ for (i = 0; i < data.ndevices; i++) {
+ virBufferAdd(&buf, data.devices[i], -1);
+ if (i < data.ndevices - 1)
+ virBufferAddLit(&buf, ", ");
+ }
+
+ virReportError(VIR_ERR_INTERNAL_ERROR,
+ _("Check the host setup: enabling IPv6 forwarding with "
+ "RA routes without accept_ra set to 2 is likely to cause "
+ "routes loss. Interfaces to look at: %s"),
+ virBufferCurrentContent(&buf));
+ virBufferFreeAndReset(&buf);
+ }
+
+ cleanup:
+ nlmsg_free(nlmsg);
+ for (i = 0; i < data.ndevices; i++)
+ VIR_FREE(data.devices[i]);
+ return valid;
+}
#else /* defined(__linux__) && defined(HAVE_LIBNL) */
@@ -655,6 +807,12 @@ virNetDevIPWaitDadFinish(virSocketAddrPtr *addrs ATTRIBUTE_UNUSED,
return -1;
}
+bool
+virNetDevIPCheckIPv6Forwarding(void)
+{
+ VIR_WARN("built without libnl: unable to check if IPv6 forwarding can be safely enabled");
+ return true;
+}
#endif /* defined(__linux__) && defined(HAVE_LIBNL) */
diff --git a/src/util/virnetdevip.h b/src/util/virnetdevip.h
index b7abdf94d..cc466ca25 100644
--- a/src/util/virnetdevip.h
+++ b/src/util/virnetdevip.h
@@ -83,6 +83,7 @@ int virNetDevIPAddrGet(const char *ifname, virSocketAddrPtr addr)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
int virNetDevIPWaitDadFinish(virSocketAddrPtr *addrs, size_t count)
ATTRIBUTE_NONNULL(1);
+bool virNetDevIPCheckIPv6Forwarding(void);
/* virNetDevIPRoute object */
void virNetDevIPRouteFree(virNetDevIPRoutePtr def);
--
2.12.0

View File

@ -1,46 +0,0 @@
From 3ee35d7d6caf0ffa722d60251eabec43c094fb12 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= <cbosdonnat@suse.com>
Date: Fri, 3 Mar 2017 14:13:49 +0100
Subject: [PATCH 3/5] bridge_driver.c: more uses of SYSCTL_PATH
Replace a few occurences of /proc/sys by the corresponding macro
defined a few lines after: SYSCTL_PATH
---
src/network/bridge_driver.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/src/network/bridge_driver.c b/src/network/bridge_driver.c
index 32c5ab7a7..4d1a44516 100644
--- a/src/network/bridge_driver.c
+++ b/src/network/bridge_driver.c
@@ -85,6 +85,8 @@
*/
#define VIR_NETWORK_DHCP_LEASE_FILE_SIZE_MAX (32 * 1024 * 1024)
+#define SYSCTL_PATH "/proc/sys"
+
VIR_LOG_INIT("network.bridge_driver");
static virNetworkDriverStatePtr network_driver;
@@ -2092,15 +2094,14 @@ networkEnableIPForwarding(bool enableIPv4, bool enableIPv6)
&enabled, sizeof(enabled));
#else
if (enableIPv4)
- ret = virFileWriteStr("/proc/sys/net/ipv4/ip_forward", "1\n", 0);
+ ret = virFileWriteStr(SYSCTL_PATH "/net/ipv4/ip_forward", "1\n", 0);
if (enableIPv6 && ret == 0)
- ret = virFileWriteStr("/proc/sys/net/ipv6/conf/all/forwarding", "1\n", 0);
+ ret = virFileWriteStr(SYSCTL_PATH "/net/ipv6/conf/all/forwarding", "1\n", 0);
+
#endif
return ret;
}
-#define SYSCTL_PATH "/proc/sys"
-
static int
networkSetIPv6Sysctls(virNetworkObjPtr network)
{
--
2.12.0

View File

@ -1,70 +0,0 @@
From 5dd607059d8a98e04024305ae4afbd038aadbdcd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= <cbosdonnat@suse.com>
Date: Wed, 15 Mar 2017 14:46:56 +0100
Subject: [PATCH 4/5] util: add virNetDevGetName() function
Add a function getting the name of a network interface out of its index.
---
src/libvirt_private.syms | 1 +
src/util/virnetdev.c | 19 +++++++++++++++++++
src/util/virnetdev.h | 2 ++
3 files changed, 22 insertions(+)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index f03925bc1..3b2cb83c4 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1995,6 +1995,7 @@ virNetDevGetIndex;
virNetDevGetLinkInfo;
virNetDevGetMAC;
virNetDevGetMTU;
+virNetDevGetName;
virNetDevGetOnline;
virNetDevGetPhysicalFunction;
virNetDevGetPromiscuous;
diff --git a/src/util/virnetdev.c b/src/util/virnetdev.c
index d12324878..91a5274aa 100644
--- a/src/util/virnetdev.c
+++ b/src/util/virnetdev.c
@@ -899,6 +899,25 @@ virNetDevGetRcvAllMulti(const char *ifname,
return virNetDevGetIFFlag(ifname, VIR_IFF_ALLMULTI, receive);
}
+char *virNetDevGetName(int ifindex)
+{
+ char name[IFNAMSIZ];
+ char *ifname = NULL;
+
+ memset(&name, 0, sizeof(name));
+
+ if (!if_indextoname(ifindex, name)) {
+ virReportSystemError(errno,
+ _("Failed to convert interface index %d to a name"),
+ ifindex);
+ goto cleanup;
+ }
+
+ ignore_value(VIR_STRDUP(ifname, name));
+
+ cleanup:
+ return ifname;
+}
/**
* virNetDevGetIndex:
diff --git a/src/util/virnetdev.h b/src/util/virnetdev.h
index 236cf83ef..01e9c5b95 100644
--- a/src/util/virnetdev.h
+++ b/src/util/virnetdev.h
@@ -157,6 +157,8 @@ int virNetDevSetNamespace(const char *ifname, pid_t pidInNs)
int virNetDevSetName(const char *ifname, const char *newifname)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
+char *virNetDevGetName(int ifindex)
+ ATTRIBUTE_NONNULL(1) ATTRIBUTE_RETURN_CHECK;
int virNetDevGetIndex(const char *ifname, int *ifindex)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_RETURN_CHECK;
--
2.12.0

View File

@ -1,66 +0,0 @@
commit 67dcb797ed7f1fbb048aa47006576f424923933b
Author: Michal Privoznik <mprivozn@redhat.com>
Date: Mon Mar 13 11:05:08 2017 +0100
virTimeBackOffWait: Avoid long periods of sleep
While connecting to qemu monitor, the first thing we do is wait
for it to show up. However, we are doing it with some timeout to
avoid indefinite waits (e.g. when qemu doesn't create the monitor
socket at all). After beaa447a29 we are using exponential back
off timeout meaning, after the first connection attempt we wait
1ms, then 2ms, then 4 and so on. This allows us to bring down
wait time for small domains where qemu initializes quickly.
However, on the other end of this scale are some domains with
huge amounts of guest memory. Now imagine that we've gotten up to
wait time of 15 seconds. The next one is going to be 30 seconds,
and the one after that whole minute. Well, okay - with current
code we are not going to wait longer than 30 seconds in total,
but this is going to change in the next commit.
The exponential back off is usable only for first few iterations.
Then it needs to be caped (one second was chosen as the limit)
and switch to constant wait time.
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Index: libvirt-3.1.0/src/util/virtime.c
===================================================================
--- libvirt-3.1.0.orig/src/util/virtime.c
+++ libvirt-3.1.0/src/util/virtime.c
@@ -390,6 +390,9 @@ virTimeBackOffStart(virTimeBackOffVar *v
return 0;
}
+
+#define VIR_TIME_BACKOFF_CAP 1000
+
/**
* virTimeBackOffWait
* @var: Timeout variable (with type virTimeBackOffVar *).
@@ -410,7 +413,9 @@ virTimeBackOffStart(virTimeBackOffVar *v
* The while loop that runs the body of the code repeatedly, with an
* exponential backoff. It first waits for first milliseconds, then
* runs the body, then waits for 2*first ms, then runs the body again.
- * Then 4*first ms, and so on.
+ * Then 4*first ms, and so on, up until wait time would reach
+ * VIR_TIME_BACK_OFF_CAP (whole second). Then it switches to constant
+ * waiting time of VIR_TIME_BACK_OFF_CAP.
*
* When timeout milliseconds is reached, the while loop ends.
*
@@ -429,8 +434,13 @@ virTimeBackOffWait(virTimeBackOffVar *va
if (t > var->limit_t)
return 0; /* ends the while loop */
+ /* Compute next wait time. Cap at VIR_TIME_BACKOFF_CAP
+ * to avoid long useless sleeps. */
next = var->next;
- var->next *= 2;
+ if (var->next < VIR_TIME_BACKOFF_CAP)
+ var->next *= 2;
+ else if (var->next > VIR_TIME_BACKOFF_CAP)
+ var->next = VIR_TIME_BACKOFF_CAP;
/* If sleeping would take us beyond the limit, then shorten the
* sleep. This is so we always run the body just before the final

View File

@ -1,125 +0,0 @@
From 754515b7db6258ab592265b743128353be0cb32b Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= <cbosdonnat@suse.com>
Date: Fri, 3 Mar 2017 12:22:50 +0100
Subject: [PATCH 2/5] util: add virNetlinkDumpCommand()
virNetlinkCommand() processes only one response message, while some
netlink commands, like route dumping, need to process several.
Add virNetlinkDumpCommand() as a virNetlinkCommand() sister.
---
src/libvirt_private.syms | 1 +
src/util/virnetlink.c | 58 ++++++++++++++++++++++++++++++++++++++++++++++++
src/util/virnetlink.h | 9 ++++++++
3 files changed, 68 insertions(+)
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index b46e85f63..f03925bc1 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -2138,6 +2138,7 @@ virNetDevVPortProfileOpTypeToString;
# util/virnetlink.h
virNetlinkCommand;
virNetlinkDelLink;
+virNetlinkDumpCommand;
virNetlinkDumpLink;
virNetlinkEventAddClient;
virNetlinkEventRemoveClient;
diff --git a/src/util/virnetlink.c b/src/util/virnetlink.c
index be00351db..9bc1f0f2b 100644
--- a/src/util/virnetlink.c
+++ b/src/util/virnetlink.c
@@ -335,6 +335,52 @@ int virNetlinkCommand(struct nl_msg *nl_msg,
return ret;
}
+int
+virNetlinkDumpCommand(struct nl_msg *nl_msg,
+ virNetlinkDumpCallback callback,
+ uint32_t src_pid, uint32_t dst_pid,
+ unsigned int protocol, unsigned int groups,
+ void *opaque)
+{
+ int ret = -1;
+ bool end = false;
+ int len = 0;
+ struct nlmsghdr *resp = NULL;
+ struct nlmsghdr *msg = NULL;
+
+ struct sockaddr_nl nladdr = {
+ .nl_family = AF_NETLINK,
+ .nl_pid = dst_pid,
+ .nl_groups = 0,
+ };
+ virNetlinkHandle *nlhandle = NULL;
+
+ if (!(nlhandle = virNetlinkSendRequest(nl_msg, src_pid, nladdr,
+ protocol, groups)))
+ goto cleanup;
+
+ while (!end) {
+ len = nl_recv(nlhandle, &nladdr, (unsigned char **)&resp, NULL);
+
+ for (msg = resp; NLMSG_OK(msg, len); msg = NLMSG_NEXT(msg, len)) {
+ if (msg->nlmsg_type == NLMSG_DONE)
+ end = true;
+
+ if (virNetlinkGetErrorCode(msg, len) < 0)
+ goto cleanup;
+
+ if (callback(msg, opaque) < 0)
+ goto cleanup;
+ }
+ }
+
+ ret = 0;
+
+ cleanup:
+ virNetlinkFree(nlhandle);
+ return ret;
+}
+
/**
* virNetlinkDumpLink:
*
@@ -1061,6 +1107,18 @@ int virNetlinkCommand(struct nl_msg *nl_msg ATTRIBUTE_UNUSED,
return -1;
}
+int
+virNetlinkDumpCommand(struct nl_msg *nl_msg ATTRIBUTE_UNUSED,
+ virNetlinkDumpCallback callback ATTRIBUTE_UNUSED,
+ uint32_t src_pid ATTRIBUTE_UNUSED,
+ uint32_t dst_pid ATTRIBUTE_UNUSED,
+ unsigned int protocol ATTRIBUTE_UNUSED,
+ unsigned int groups ATTRIBUTE_UNUSED,
+ void *opaque ATTRIBUTE_UNUSED)
+{
+ virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _(unsupported));
+ return -1;
+}
int
virNetlinkDumpLink(const char *ifname ATTRIBUTE_UNUSED,
diff --git a/src/util/virnetlink.h b/src/util/virnetlink.h
index 11e817c82..088b01343 100644
--- a/src/util/virnetlink.h
+++ b/src/util/virnetlink.h
@@ -52,6 +52,15 @@ int virNetlinkCommand(struct nl_msg *nl_msg,
uint32_t src_pid, uint32_t dst_pid,
unsigned int protocol, unsigned int groups);
+typedef int (*virNetlinkDumpCallback)(const struct nlmsghdr *resp,
+ void *data);
+
+int virNetlinkDumpCommand(struct nl_msg *nl_msg,
+ virNetlinkDumpCallback callback,
+ uint32_t src_pid, uint32_t dst_pid,
+ unsigned int protocol, unsigned int groups,
+ void *opaque);
+
typedef int (*virNetlinkDelLinkFallback)(const char *ifname);
int virNetlinkDelLink(const char *ifname, virNetlinkDelLinkFallback fallback);
--
2.12.0

View File

@ -1,171 +0,0 @@
commit 85af0b803cd19a03f71bd01ab4e045552410368f
Author: Michal Privoznik <mprivozn@redhat.com>
Date: Sat Mar 11 07:23:42 2017 +0100
qemu: Adaptive timeout for connecting to monitor
There were couple of reports on the list (e.g. [1]) that guests
with huge amounts of RAM are unable to start because libvirt
kills qemu in the initialization phase. The problem is that if
guest is configured to use hugepages kernel has to zero them all
out before handing over to qemu process. For instance, 402GiB
worth of 1GiB pages took around 105 seconds (~3.8GiB/s). Since we
do not want to make the timeout for connecting to monitor
configurable, we have to teach libvirt to count with this
fact. This commit implements "1s per each 1GiB of RAM" approach
as suggested here [2].
1: https://www.redhat.com/archives/libvir-list/2017-March/msg00373.html
2: https://www.redhat.com/archives/libvir-list/2017-March/msg00405.html
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Index: libvirt-3.1.0/src/qemu/qemu_capabilities.c
===================================================================
--- libvirt-3.1.0.orig/src/qemu/qemu_capabilities.c
+++ libvirt-3.1.0/src/qemu/qemu_capabilities.c
@@ -4571,7 +4571,7 @@ virQEMUCapsInitQMPCommandRun(virQEMUCaps
cmd->vm->pid = cmd->pid;
if (!(cmd->mon = qemuMonitorOpen(cmd->vm, &cmd->config, true,
- &callbacks, NULL)))
+ 0, &callbacks, NULL)))
goto ignore;
virObjectLock(cmd->mon);
Index: libvirt-3.1.0/src/qemu/qemu_monitor.c
===================================================================
--- libvirt-3.1.0.orig/src/qemu/qemu_monitor.c
+++ libvirt-3.1.0/src/qemu/qemu_monitor.c
@@ -327,11 +327,13 @@ qemuMonitorDispose(void *obj)
static int
-qemuMonitorOpenUnix(const char *monitor, pid_t cpid)
+qemuMonitorOpenUnix(const char *monitor,
+ pid_t cpid,
+ unsigned long long timeout)
{
struct sockaddr_un addr;
int monfd;
- virTimeBackOffVar timeout;
+ virTimeBackOffVar timebackoff;
int ret = -1;
if ((monfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
@@ -348,9 +350,9 @@ qemuMonitorOpenUnix(const char *monitor,
goto error;
}
- if (virTimeBackOffStart(&timeout, 1, 30*1000 /* ms */) < 0)
+ if (virTimeBackOffStart(&timebackoff, 1, timeout * 1000) < 0)
goto error;
- while (virTimeBackOffWait(&timeout)) {
+ while (virTimeBackOffWait(&timebackoff)) {
ret = connect(monfd, (struct sockaddr *) &addr, sizeof(addr));
if (ret == 0)
@@ -871,10 +873,30 @@ qemuMonitorOpenInternal(virDomainObjPtr
}
+#define QEMU_DEFAULT_MONITOR_WAIT 30
+
+/**
+ * qemuMonitorOpen:
+ * @vm: domain object
+ * @config: monitor configuration
+ * @json: enable JSON on the monitor
+ * @timeout: number of seconds to add to default timeout
+ * @cb: monitor event handles
+ * @opaque: opaque data for @cb
+ *
+ * Opens the monitor for running qemu. It may happen that it
+ * takes some time for qemu to create the monitor socket (e.g.
+ * because kernel is zeroing configured hugepages), therefore we
+ * wait up to default + timeout seconds for the monitor to show
+ * up after which a failure is claimed.
+ *
+ * Returns monitor object, NULL on error.
+ */
qemuMonitorPtr
qemuMonitorOpen(virDomainObjPtr vm,
virDomainChrSourceDefPtr config,
bool json,
+ unsigned long long timeout,
qemuMonitorCallbacksPtr cb,
void *opaque)
{
@@ -882,10 +904,14 @@ qemuMonitorOpen(virDomainObjPtr vm,
bool hasSendFD = false;
qemuMonitorPtr ret;
+ timeout += QEMU_DEFAULT_MONITOR_WAIT;
+
switch (config->type) {
case VIR_DOMAIN_CHR_TYPE_UNIX:
hasSendFD = true;
- if ((fd = qemuMonitorOpenUnix(config->data.nix.path, vm ? vm->pid : 0)) < 0)
+ if ((fd = qemuMonitorOpenUnix(config->data.nix.path,
+ vm ? vm->pid : 0,
+ timeout)) < 0)
return NULL;
break;
Index: libvirt-3.1.0/src/qemu/qemu_monitor.h
===================================================================
--- libvirt-3.1.0.orig/src/qemu/qemu_monitor.h
+++ libvirt-3.1.0/src/qemu/qemu_monitor.h
@@ -246,6 +246,7 @@ char *qemuMonitorUnescapeArg(const char
qemuMonitorPtr qemuMonitorOpen(virDomainObjPtr vm,
virDomainChrSourceDefPtr config,
bool json,
+ unsigned long long timeout,
qemuMonitorCallbacksPtr cb,
void *opaque)
ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(4);
Index: libvirt-3.1.0/src/qemu/qemu_process.c
===================================================================
--- libvirt-3.1.0.orig/src/qemu/qemu_process.c
+++ libvirt-3.1.0/src/qemu/qemu_process.c
@@ -1656,6 +1656,7 @@ qemuConnectMonitor(virQEMUDriverPtr driv
qemuDomainObjPrivatePtr priv = vm->privateData;
int ret = -1;
qemuMonitorPtr mon = NULL;
+ unsigned long long timeout = 0;
if (virSecurityManagerSetDaemonSocketLabel(driver->securityManager,
vm->def) < 0) {
@@ -1664,6 +1665,12 @@ qemuConnectMonitor(virQEMUDriverPtr driv
return -1;
}
+ /* When using hugepages, kernel zeroes them out before
+ * handing them over to qemu. This can be very time
+ * consuming. Therefore, add a second to timeout for each
+ * 1GiB of guest RAM. */
+ timeout = vm->def->mem.total_memory / (1024 * 1024);
+
/* Hold an extra reference because we can't allow 'vm' to be
* deleted until the monitor gets its own reference. */
virObjectRef(vm);
@@ -1674,6 +1681,7 @@ qemuConnectMonitor(virQEMUDriverPtr driv
mon = qemuMonitorOpen(vm,
priv->monConfig,
priv->monJSON,
+ timeout,
&monitorCallbacks,
driver);
Index: libvirt-3.1.0/tests/qemumonitortestutils.c
===================================================================
--- libvirt-3.1.0.orig/tests/qemumonitortestutils.c
+++ libvirt-3.1.0/tests/qemumonitortestutils.c
@@ -1175,6 +1175,7 @@ qemuMonitorTestNew(bool json,
if (!(test->mon = qemuMonitorOpen(test->vm,
&src,
json,
+ 0,
&qemuMonitorTestCallbacks,
driver)))
goto error;

View File

@ -1,7 +1,7 @@
Index: libvirt-3.1.0/examples/apparmor/libvirt-qemu
Index: libvirt-3.2.0/examples/apparmor/libvirt-qemu
===================================================================
--- libvirt-3.1.0.orig/examples/apparmor/libvirt-qemu
+++ libvirt-3.1.0/examples/apparmor/libvirt-qemu
--- libvirt-3.2.0.orig/examples/apparmor/libvirt-qemu
+++ libvirt-3.2.0/examples/apparmor/libvirt-qemu
@@ -146,6 +146,9 @@
# for restore
/{usr/,}bin/bash rmix,

View File

@ -1,7 +1,7 @@
Index: libvirt-3.1.0/examples/apparmor/libvirt-lxc
Index: libvirt-3.2.0/examples/apparmor/libvirt-lxc
===================================================================
--- libvirt-3.1.0.orig/examples/apparmor/libvirt-lxc
+++ libvirt-3.1.0/examples/apparmor/libvirt-lxc
--- libvirt-3.2.0.orig/examples/apparmor/libvirt-lxc
+++ libvirt-3.2.0/examples/apparmor/libvirt-lxc
@@ -2,39 +2,15 @@
#include <abstractions/base>

View File

@ -11,11 +11,11 @@ Signed-off-by: Chunyan Liu <cyliu@suse.com>
src/qemu/qemu_driver.c | 7 +++++++
1 file changed, 7 insertions(+)
Index: libvirt-3.1.0/src/qemu/qemu_driver.c
Index: libvirt-3.2.0/src/qemu/qemu_driver.c
===================================================================
--- libvirt-3.1.0.orig/src/qemu/qemu_driver.c
+++ libvirt-3.1.0/src/qemu/qemu_driver.c
@@ -16523,6 +16523,15 @@ qemuDomainBlockCopyCommon(virDomainObjPt
--- libvirt-3.2.0.orig/src/qemu/qemu_driver.c
+++ libvirt-3.2.0/src/qemu/qemu_driver.c
@@ -16554,6 +16554,15 @@ qemuDomainBlockCopyCommon(virDomainObjPt
_("non-file destination not supported yet"));
goto endjob;
}

View File

@ -1,165 +0,0 @@
From d68cb4f554d16c2af79f64749e18d7d6cd9dd5b9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=A9dric=20Bosdonnat?= <cbosdonnat@suse.com>
Date: Fri, 3 Mar 2017 12:16:32 +0100
Subject: [PATCH 1/5] util: extract the request sending code from
virNetlinkCommand()
Allow to reuse as much as possible from virNetlinkCommand(). This
comment prepares for the introduction of virNetlinkDumpCommand()
only differing by how it handles the responses.
---
src/util/virnetlink.c | 89 +++++++++++++++++++++++++++++++--------------------
1 file changed, 54 insertions(+), 35 deletions(-)
diff --git a/src/util/virnetlink.c b/src/util/virnetlink.c
index a5d10fa8e..be00351db 100644
--- a/src/util/virnetlink.c
+++ b/src/util/virnetlink.c
@@ -209,61 +209,38 @@ virNetlinkCreateSocket(int protocol)
goto cleanup;
}
-
-/**
- * virNetlinkCommand:
- * @nlmsg: pointer to netlink message
- * @respbuf: pointer to pointer where response buffer will be allocated
- * @respbuflen: pointer to integer holding the size of the response buffer
- * on return of the function.
- * @src_pid: the pid of the process to send a message
- * @dst_pid: the pid of the process to talk to, i.e., pid = 0 for kernel
- * @protocol: netlink protocol
- * @groups: the group identifier
- *
- * Send the given message to the netlink layer and receive response.
- * Returns 0 on success, -1 on error. In case of error, no response
- * buffer will be returned.
- */
-int virNetlinkCommand(struct nl_msg *nl_msg,
- struct nlmsghdr **resp, unsigned int *respbuflen,
- uint32_t src_pid, uint32_t dst_pid,
+static virNetlinkHandle *
+virNetlinkSendRequest(struct nl_msg *nl_msg, uint32_t src_pid,
+ struct sockaddr_nl nladdr,
unsigned int protocol, unsigned int groups)
{
- int ret = -1;
- struct sockaddr_nl nladdr = {
- .nl_family = AF_NETLINK,
- .nl_pid = dst_pid,
- .nl_groups = 0,
- };
ssize_t nbytes;
- struct pollfd fds[1];
int fd;
int n;
- struct nlmsghdr *nlmsg = nlmsg_hdr(nl_msg);
virNetlinkHandle *nlhandle = NULL;
- int len = 0;
+ struct pollfd fds[1];
+ struct nlmsghdr *nlmsg = nlmsg_hdr(nl_msg);
if (protocol >= MAX_LINKS) {
virReportSystemError(EINVAL,
_("invalid protocol argument: %d"), protocol);
- goto cleanup;
+ goto error;
}
if (!(nlhandle = virNetlinkCreateSocket(protocol)))
- goto cleanup;
+ goto error;
fd = nl_socket_get_fd(nlhandle);
if (fd < 0) {
virReportSystemError(errno,
"%s", _("cannot get netlink socket fd"));
- goto cleanup;
+ goto error;
}
if (groups && nl_socket_add_membership(nlhandle, groups) < 0) {
virReportSystemError(errno,
"%s", _("cannot add netlink membership"));
- goto cleanup;
+ goto error;
}
nlmsg_set_dst(nl_msg, &nladdr);
@@ -274,10 +251,11 @@ int virNetlinkCommand(struct nl_msg *nl_msg,
if (nbytes < 0) {
virReportSystemError(errno,
"%s", _("cannot send to netlink socket"));
- goto cleanup;
+ goto error;
}
memset(fds, 0, sizeof(fds));
+
fds[0].fd = fd;
fds[0].events = POLLIN;
@@ -289,9 +267,51 @@ int virNetlinkCommand(struct nl_msg *nl_msg,
if (n == 0)
virReportSystemError(ETIMEDOUT, "%s",
_("no valid netlink response was received"));
- goto cleanup;
}
+ return nlhandle;
+
+ error:
+ virNetlinkFree(nlhandle);
+ return NULL;
+}
+
+/**
+ * virNetlinkCommand:
+ * @nlmsg: pointer to netlink message
+ * @respbuf: pointer to pointer where response buffer will be allocated
+ * @respbuflen: pointer to integer holding the size of the response buffer
+ * on return of the function.
+ * @src_pid: the pid of the process to send a message
+ * @dst_pid: the pid of the process to talk to, i.e., pid = 0 for kernel
+ * @protocol: netlink protocol
+ * @groups: the group identifier
+ *
+ * Send the given message to the netlink layer and receive response.
+ * Returns 0 on success, -1 on error. In case of error, no response
+ * buffer will be returned.
+ */
+int virNetlinkCommand(struct nl_msg *nl_msg,
+ struct nlmsghdr **resp, unsigned int *respbuflen,
+ uint32_t src_pid, uint32_t dst_pid,
+ unsigned int protocol, unsigned int groups)
+{
+ int ret = -1;
+ struct sockaddr_nl nladdr = {
+ .nl_family = AF_NETLINK,
+ .nl_pid = dst_pid,
+ .nl_groups = 0,
+ };
+ struct pollfd fds[1];
+ virNetlinkHandle *nlhandle = NULL;
+ int len = 0;
+
+ memset(fds, 0, sizeof(fds));
+
+ if (!(nlhandle = virNetlinkSendRequest(nl_msg, src_pid, nladdr,
+ protocol, groups)))
+ goto cleanup;
+
len = nl_recv(nlhandle, &nladdr, (unsigned char **)resp, NULL);
if (len == 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -315,7 +335,6 @@ int virNetlinkCommand(struct nl_msg *nl_msg,
return ret;
}
-
/**
* virNetlinkDumpLink:
*
--
2.12.0

View File

@ -1,3 +0,0 @@
version https://git-lfs.github.com/spec/v1
oid sha256:7879029a0fcac4e58dbeec66f0bc77771565c4b6667212c8f6251eefb03732a9
size 13906204

View File

@ -1,10 +0,0 @@
-----BEGIN PGP SIGNATURE-----
iQEcBAABAgAGBQJYuUErAAoJEBVYiyZZa+pdWBkIAKVc+m0tbSTxBgszQCarG/f6
cde4qCXZOVTpyIQFAtJajV/yhqM4uMhDOAZOGvxRWWIIGAXfPI5EAcsKGajIgAdX
GWkzMc1a3JMzsXSveSUXboXvnfEilHquVVN+Hm2U9Y2eWy+daGCyl8j9+jyKRmzo
sXzajagqNP/WrQTxoeIKbIaNlNoM/YmnySHNq/jjkWUYFFhK2dTz/qqfLCqrcygD
iOARRi6QLQ2zbRiIOqf/tz2MNEPdgj6o31i2FT+pqLzIOTAhKXBXHD3V6TlSlRdY
kwJWcIm8tjMqJ0UuJNRDvO1jQ9m4sbpLqRdL0HCaYHz5Pa1n04n/hzsCLIuePoY=
=WTde
-----END PGP SIGNATURE-----

3
libvirt-3.2.0.tar.xz Normal file
View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:9481a083b567a07927f239553dd70b5c0d1bff5b9b4ec61be1899981c646209e
size 14057340

10
libvirt-3.2.0.tar.xz.asc Normal file
View File

@ -0,0 +1,10 @@
-----BEGIN PGP SIGNATURE-----
iQEcBAABAgAGBQJY4RMFAAoJEBVYiyZZa+pdScUIAMgcsw1t17IsF5VAjBRzz5bI
a5XzJR5WFoziYHE+7M1N0brnh+h7c1AL3kYCz9+k611ql3QHVQs8lkt7tT8GTLLb
FtiGrGREHUNy9xDGE1D32RhlrlNnruYLrkqBTc71dR3SQM2ePNfPAKVCYtZyWw7z
vxKFRAz2R5uQ6XzW7Qo7OJONh9+3ufpHg/gTDR8gOxcQWnW8xUb440qNyrLXIE3F
6TgAbdbCRarwCOb1aE5omp+0AFcnhnkXVChC9gugxvLaqM51A2Ppl5gmEa5J3gqU
kUw7NlmzBrGldlG1RIlcPWS3lPRMm/lQkuvU1SYyJQVaYRVA25VcabyfnDdDUSY=
=zFsI
-----END PGP SIGNATURE-----

View File

@ -1,9 +1,9 @@
Adjust libvirt-guests init files to conform to SUSE standards
Index: libvirt-3.1.0/tools/libvirt-guests.init.in
Index: libvirt-3.2.0/tools/libvirt-guests.init.in
===================================================================
--- libvirt-3.1.0.orig/tools/libvirt-guests.init.in
+++ libvirt-3.1.0/tools/libvirt-guests.init.in
--- libvirt-3.2.0.orig/tools/libvirt-guests.init.in
+++ libvirt-3.2.0/tools/libvirt-guests.init.in
@@ -4,27 +4,27 @@
# http://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/initscrcomconv.html
#
@ -45,10 +45,10 @@ Index: libvirt-3.1.0/tools/libvirt-guests.init.in
#
exec @libexecdir@/libvirt-guests.sh "$@"
Index: libvirt-3.1.0/tools/libvirt-guests.sh.in
Index: libvirt-3.2.0/tools/libvirt-guests.sh.in
===================================================================
--- libvirt-3.1.0.orig/tools/libvirt-guests.sh.in
+++ libvirt-3.1.0/tools/libvirt-guests.sh.in
--- libvirt-3.2.0.orig/tools/libvirt-guests.sh.in
+++ libvirt-3.2.0/tools/libvirt-guests.sh.in
@@ -16,14 +16,13 @@
# License along with this library. If not, see
# <http://www.gnu.org/licenses/>.
@ -208,10 +208,10 @@ Index: libvirt-3.1.0/tools/libvirt-guests.sh.in
esac
-exit $RETVAL
+rc_exit
Index: libvirt-3.1.0/tools/libvirt-guests.sysconf
Index: libvirt-3.2.0/tools/libvirt-guests.sysconf
===================================================================
--- libvirt-3.1.0.orig/tools/libvirt-guests.sysconf
+++ libvirt-3.1.0/tools/libvirt-guests.sysconf
--- libvirt-3.2.0.orig/tools/libvirt-guests.sysconf
+++ libvirt-3.2.0/tools/libvirt-guests.sysconf
@@ -1,19 +1,29 @@
+## Path: System/Virtualization/libvirt-guests
+

View File

@ -2,10 +2,10 @@ Add POWER8 v2.0 and v2.1 to cpu map XML
From: <ro@suse.de>
Index: libvirt-3.1.0/src/cpu/cpu_map.xml
Index: libvirt-3.2.0/src/cpu/cpu_map.xml
===================================================================
--- libvirt-3.1.0.orig/src/cpu/cpu_map.xml
+++ libvirt-3.1.0/src/cpu/cpu_map.xml
--- libvirt-3.2.0.orig/src/cpu/cpu_map.xml
+++ libvirt-3.2.0/src/cpu/cpu_map.xml
@@ -1569,6 +1569,8 @@
<pvr value='0x004b0000' mask='0xffff0000'/>
<pvr value='0x004c0000' mask='0xffff0000'/>

View File

@ -1,8 +1,8 @@
Index: libvirt-3.1.0/configure.ac
Index: libvirt-3.2.0/configure.ac
===================================================================
--- libvirt-3.1.0.orig/configure.ac
+++ libvirt-3.1.0/configure.ac
@@ -255,6 +255,7 @@ LIBVIRT_ARG_LIBSSH
--- libvirt-3.2.0.orig/configure.ac
+++ libvirt-3.2.0/configure.ac
@@ -256,6 +256,7 @@ LIBVIRT_ARG_LIBSSH
LIBVIRT_ARG_LIBXML
LIBVIRT_ARG_MACVTAP
LIBVIRT_ARG_NETCF
@ -10,7 +10,7 @@ Index: libvirt-3.1.0/configure.ac
LIBVIRT_ARG_NSS
LIBVIRT_ARG_NUMACTL
LIBVIRT_ARG_OPENWSMAN
@@ -295,6 +296,7 @@ LIBVIRT_CHECK_LIBSSH
@@ -296,6 +297,7 @@ LIBVIRT_CHECK_LIBSSH
LIBVIRT_CHECK_LIBXML
LIBVIRT_CHECK_MACVTAP
LIBVIRT_CHECK_NETCF
@ -18,7 +18,7 @@ Index: libvirt-3.1.0/configure.ac
LIBVIRT_CHECK_NUMACTL
LIBVIRT_CHECK_NWFILTER
LIBVIRT_CHECK_OPENWSMAN
@@ -966,6 +968,7 @@ LIBVIRT_RESULT_LIBXL
@@ -968,6 +970,7 @@ LIBVIRT_RESULT_LIBXL
LIBVIRT_RESULT_LIBXML
LIBVIRT_RESULT_MACVTAP
LIBVIRT_RESULT_NETCF
@ -26,11 +26,11 @@ Index: libvirt-3.1.0/configure.ac
LIBVIRT_RESULT_NSS
LIBVIRT_RESULT_NUMACTL
LIBVIRT_RESULT_OPENWSMAN
Index: libvirt-3.1.0/src/Makefile.am
Index: libvirt-3.2.0/src/Makefile.am
===================================================================
--- libvirt-3.1.0.orig/src/Makefile.am
+++ libvirt-3.1.0/src/Makefile.am
@@ -959,6 +959,10 @@ if WITH_NETCF
--- libvirt-3.2.0.orig/src/Makefile.am
+++ libvirt-3.2.0/src/Makefile.am
@@ -969,6 +969,10 @@ if WITH_NETCF
INTERFACE_DRIVER_SOURCES += \
interface/interface_backend_netcf.c
endif WITH_NETCF
@ -41,7 +41,7 @@ Index: libvirt-3.1.0/src/Makefile.am
if WITH_UDEV
INTERFACE_DRIVER_SOURCES += \
interface/interface_backend_udev.c
@@ -1620,6 +1624,10 @@ if WITH_NETCF
@@ -1637,6 +1641,10 @@ if WITH_NETCF
libvirt_driver_interface_la_CFLAGS += $(NETCF_CFLAGS)
libvirt_driver_interface_la_LIBADD += $(NETCF_LIBS)
endif WITH_NETCF
@ -52,10 +52,10 @@ Index: libvirt-3.1.0/src/Makefile.am
if WITH_UDEV
libvirt_driver_interface_la_CFLAGS += $(UDEV_CFLAGS)
libvirt_driver_interface_la_LIBADD += $(UDEV_LIBS)
Index: libvirt-3.1.0/tools/virsh.c
Index: libvirt-3.2.0/tools/virsh.c
===================================================================
--- libvirt-3.1.0.orig/tools/virsh.c
+++ libvirt-3.1.0/tools/virsh.c
--- libvirt-3.2.0.orig/tools/virsh.c
+++ libvirt-3.2.0/tools/virsh.c
@@ -602,6 +602,8 @@ virshShowVersion(vshControl *ctl ATTRIBU
vshPrint(ctl, " Interface");
# if defined(WITH_NETCF)
@ -65,10 +65,10 @@ Index: libvirt-3.1.0/tools/virsh.c
# elif defined(WITH_UDEV)
vshPrint(ctl, " udev");
# endif
Index: libvirt-3.1.0/src/interface/interface_backend_netcf.c
Index: libvirt-3.2.0/src/interface/interface_backend_netcf.c
===================================================================
--- libvirt-3.1.0.orig/src/interface/interface_backend_netcf.c
+++ libvirt-3.1.0/src/interface/interface_backend_netcf.c
--- libvirt-3.2.0.orig/src/interface/interface_backend_netcf.c
+++ libvirt-3.2.0/src/interface/interface_backend_netcf.c
@@ -23,7 +23,12 @@
#include <config.h>
@ -83,7 +83,7 @@ Index: libvirt-3.1.0/src/interface/interface_backend_netcf.c
#include "virerror.h"
#include "datatypes.h"
@@ -65,6 +70,37 @@ VIR_ONCE_GLOBAL_INIT(virNetcfDriverState
@@ -66,6 +71,37 @@ VIR_ONCE_GLOBAL_INIT(virNetcfDriverState
static virNetcfDriverStatePtr driver;
@ -121,7 +121,7 @@ Index: libvirt-3.1.0/src/interface/interface_backend_netcf.c
static void
virNetcfDriverStateDispose(void *obj)
@@ -87,6 +123,10 @@ netcfStateInitialize(bool privileged ATT
@@ -88,6 +124,10 @@ netcfStateInitialize(bool privileged ATT
if (!(driver = virObjectLockableNew(virNetcfDriverStateClass)))
return -1;
@ -132,7 +132,7 @@ Index: libvirt-3.1.0/src/interface/interface_backend_netcf.c
/* open netcf */
if (ncf_init(&driver->netcf, NULL) != 0) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
@@ -1140,6 +1180,19 @@ static virStateDriver interfaceStateDriv
@@ -1141,6 +1181,19 @@ static virStateDriver interfaceStateDriv
int netcfIfaceRegister(void)
{
@ -152,10 +152,10 @@ Index: libvirt-3.1.0/src/interface/interface_backend_netcf.c
if (virSetSharedInterfaceDriver(&interfaceDriver) < 0)
return -1;
if (virRegisterStateDriver(&interfaceStateDriver) < 0)
Index: libvirt-3.1.0/src/interface/interface_driver.c
Index: libvirt-3.2.0/src/interface/interface_driver.c
===================================================================
--- libvirt-3.1.0.orig/src/interface/interface_driver.c
+++ libvirt-3.1.0/src/interface/interface_driver.c
--- libvirt-3.2.0.orig/src/interface/interface_driver.c
+++ libvirt-3.2.0/src/interface/interface_driver.c
@@ -30,8 +30,15 @@ interfaceRegister(void)
if (netcfIfaceRegister() == 0)
return 0;
@ -173,10 +173,10 @@ Index: libvirt-3.1.0/src/interface/interface_driver.c
if (udevIfaceRegister() == 0)
return 0;
#endif /* WITH_UDEV */
Index: libvirt-3.1.0/m4/virt-netcontrol.m4
Index: libvirt-3.2.0/m4/virt-netcontrol.m4
===================================================================
--- /dev/null
+++ libvirt-3.1.0/m4/virt-netcontrol.m4
+++ libvirt-3.2.0/m4/virt-netcontrol.m4
@@ -0,0 +1,39 @@
+dnl The libnetcontrol library
+dnl

View File

@ -1,3 +1,21 @@
-------------------------------------------------------------------
Mon Apr 3 04:40:57 UTC 2017 - jfehlig@suse.com
- Update to libvirt 3.2.0
- Many incremental improvements and bug fixes, see
http://libvirt.org/news.html
- Dropped patches:
67dcb797-virTimeBackOffWait-sleepcap.patch,
85af0b80-qemu-adaptive-montimeout.patch,
d68cb4f55-extract-the-request-sending-code-from-virNetlin.patch,
754515b7d-add-virNetlinkDumpCommand.patch,
3ee35d7d6-more-uses-of-SYSCTL_PATH.patch,
5dd607059-add-virNetDevGetName.patch,
00d28a78b-check-accept_ra-before-enabling-ipv6-forward.patch
- Add Conflicts=xendomains.service to libvirtd service
suse-libvirtd-service.patch
bsc#1015348
-------------------------------------------------------------------
Thu Mar 23 14:42:07 UTC 2017 - jengelh@inai.de

View File

@ -175,7 +175,7 @@
Name: libvirt
Url: http://libvirt.org/
Version: 3.1.0
Version: 3.2.0
Release: 0
Summary: Library providing a simple virtualization API
License: LGPL-2.1+
@ -317,13 +317,6 @@ Source4: libvirtd-relocation-server.fw
Source99: baselibs.conf
Source100: %{name}-rpmlintrc
# Upstream patches
Patch0: 67dcb797-virTimeBackOffWait-sleepcap.patch
Patch1: 85af0b80-qemu-adaptive-montimeout.patch
Patch2: d68cb4f55-extract-the-request-sending-code-from-virNetlin.patch
Patch3: 754515b7d-add-virNetlinkDumpCommand.patch
Patch4: 3ee35d7d6-more-uses-of-SYSCTL_PATH.patch
Patch5: 5dd607059-add-virNetDevGetName.patch
Patch6: 00d28a78b-check-accept_ra-before-enabling-ipv6-forward.patch
# Patches pending upstream review
Patch100: libxl-dom-reset.patch
Patch101: network-don-t-use-dhcp-authoritative-on-static-netwo.patch
@ -351,6 +344,7 @@ Patch211: qemu-apparmor-screenshot.patch
Patch212: libvirt-suse-netcontrol.patch
Patch213: lxc-wait-after-eth-del.patch
Patch214: libxl-qemu-emulator-caps.patch
Patch215: suse-libvirtd-service.patch
# SLES-Only patches
%if %{with_sle_build}
Patch400: virt-create-rootfs.patch
@ -891,13 +885,6 @@ libvirt plugin for NSS for translating domain names into IP addresses.
%prep
%setup -q
%patch0 -p1
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%patch100 -p1
%patch101 -p1
%patch150 -p1
@ -922,6 +909,7 @@ libvirt plugin for NSS for translating domain names into IP addresses.
%patch212 -p1
%patch213 -p1
%patch214 -p1
%patch215 -p1
%if %{with_sle_build}
%patch400 -p1
%endif

View File

@ -1,7 +1,7 @@
Index: libvirt-3.1.0/daemon/libvirtd.conf
Index: libvirt-3.2.0/daemon/libvirtd.conf
===================================================================
--- libvirt-3.1.0.orig/daemon/libvirtd.conf
+++ libvirt-3.1.0/daemon/libvirtd.conf
--- libvirt-3.2.0.orig/daemon/libvirtd.conf
+++ libvirt-3.2.0/daemon/libvirtd.conf
@@ -18,8 +18,8 @@
# It is necessary to setup a CA and issue server certificates before
# using this capability.
@ -13,10 +13,10 @@ Index: libvirt-3.1.0/daemon/libvirtd.conf
# Listen for unencrypted TCP connections on the public TCP/IP port.
# NB, must pass the --listen flag to the libvirtd process for this to
Index: libvirt-3.1.0/daemon/libvirtd-config.c
Index: libvirt-3.2.0/daemon/libvirtd-config.c
===================================================================
--- libvirt-3.1.0.orig/daemon/libvirtd-config.c
+++ libvirt-3.1.0/daemon/libvirtd-config.c
--- libvirt-3.2.0.orig/daemon/libvirtd-config.c
+++ libvirt-3.2.0/daemon/libvirtd-config.c
@@ -110,7 +110,7 @@ daemonConfigNew(bool privileged ATTRIBUT
if (VIR_ALLOC(data) < 0)
return NULL;
@ -26,10 +26,10 @@ Index: libvirt-3.1.0/daemon/libvirtd-config.c
data->listen_tcp = 0;
if (VIR_STRDUP(data->tls_port, LIBVIRTD_TLS_PORT) < 0 ||
Index: libvirt-3.1.0/daemon/test_libvirtd.aug.in
Index: libvirt-3.2.0/daemon/test_libvirtd.aug.in
===================================================================
--- libvirt-3.1.0.orig/daemon/test_libvirtd.aug.in
+++ libvirt-3.1.0/daemon/test_libvirtd.aug.in
--- libvirt-3.2.0.orig/daemon/test_libvirtd.aug.in
+++ libvirt-3.2.0/daemon/test_libvirtd.aug.in
@@ -2,7 +2,7 @@ module Test_libvirtd =
::CONFIG::

View File

@ -1,9 +1,9 @@
Adjust libvirtd sysconfig file to conform to SUSE standards
Index: libvirt-3.1.0/daemon/libvirtd.sysconf
Index: libvirt-3.2.0/daemon/libvirtd.sysconf
===================================================================
--- libvirt-3.1.0.orig/daemon/libvirtd.sysconf
+++ libvirt-3.1.0/daemon/libvirtd.sysconf
--- libvirt-3.2.0.orig/daemon/libvirtd.sysconf
+++ libvirt-3.2.0/daemon/libvirtd.sysconf
@@ -1,16 +1,25 @@
+## Path: System/Virtualization/libvirt
+

View File

@ -8,10 +8,10 @@ Date: Mon Jun 23 15:51:20 2014 -0600
option, but domainReset can be implemented in the libxl driver by
forcibly destroying the domain and starting it again.
Index: libvirt-3.1.0/src/libxl/libxl_driver.c
Index: libvirt-3.2.0/src/libxl/libxl_driver.c
===================================================================
--- libvirt-3.1.0.orig/src/libxl/libxl_driver.c
+++ libvirt-3.1.0/src/libxl/libxl_driver.c
--- libvirt-3.2.0.orig/src/libxl/libxl_driver.c
+++ libvirt-3.2.0/src/libxl/libxl_driver.c
@@ -1389,6 +1389,61 @@ libxlDomainReboot(virDomainPtr dom, unsi
}

View File

@ -8,10 +8,10 @@ as the default <emulator>, instead of the qemu-xen one.
See FATE#320638 for details.
Index: libvirt-3.1.0/src/libxl/libxl_capabilities.c
Index: libvirt-3.2.0/src/libxl/libxl_capabilities.c
===================================================================
--- libvirt-3.1.0.orig/src/libxl/libxl_capabilities.c
+++ libvirt-3.1.0/src/libxl/libxl_capabilities.c
--- libvirt-3.2.0.orig/src/libxl/libxl_capabilities.c
+++ libvirt-3.2.0/src/libxl/libxl_capabilities.c
@@ -38,6 +38,7 @@
#include "libxl_capabilities.h"
#include "cpu/cpu_x86.h"

View File

@ -3,10 +3,10 @@ https://bugzilla.novell.com/show_bug.cgi?id=879425
src/libxl/libxl_conf.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
Index: libvirt-3.1.0/src/libxl/libxl_conf.c
Index: libvirt-3.2.0/src/libxl/libxl_conf.c
===================================================================
--- libvirt-3.1.0.orig/src/libxl/libxl_conf.c
+++ libvirt-3.1.0/src/libxl/libxl_conf.c
--- libvirt-3.2.0.orig/src/libxl/libxl_conf.c
+++ libvirt-3.2.0/src/libxl/libxl_conf.c
@@ -609,6 +609,30 @@ libxlDiskSetDiscard(libxl_device_disk *x
#endif
}

View File

@ -16,11 +16,11 @@ Signed-off-by: Jim Fehlig <jfehlig@suse.com>
tools/virsh.pod | 8 ++++++++
6 files changed, 125 insertions(+), 6 deletions(-)
Index: libvirt-3.1.0/include/libvirt/libvirt-domain.h
Index: libvirt-3.2.0/include/libvirt/libvirt-domain.h
===================================================================
--- libvirt-3.1.0.orig/include/libvirt/libvirt-domain.h
+++ libvirt-3.1.0/include/libvirt/libvirt-domain.h
@@ -1000,6 +1000,31 @@ typedef enum {
--- libvirt-3.2.0.orig/include/libvirt/libvirt-domain.h
+++ libvirt-3.2.0/include/libvirt/libvirt-domain.h
@@ -1008,6 +1008,31 @@ typedef enum {
*/
# define VIR_MIGRATE_PARAM_AUTO_CONVERGE_INCREMENT "auto_converge.increment"
@ -52,10 +52,10 @@ Index: libvirt-3.1.0/include/libvirt/libvirt-domain.h
/* Domain migration. */
virDomainPtr virDomainMigrate (virDomainPtr domain, virConnectPtr dconn,
unsigned long flags, const char *dname,
Index: libvirt-3.1.0/src/libxl/libxl_driver.c
Index: libvirt-3.2.0/src/libxl/libxl_driver.c
===================================================================
--- libvirt-3.1.0.orig/src/libxl/libxl_driver.c
+++ libvirt-3.1.0/src/libxl/libxl_driver.c
--- libvirt-3.2.0.orig/src/libxl/libxl_driver.c
+++ libvirt-3.2.0/src/libxl/libxl_driver.c
@@ -6115,6 +6115,9 @@ libxlDomainMigratePerform3Params(virDoma
const char *dname = NULL;
const char *uri = NULL;
@ -99,10 +99,10 @@ Index: libvirt-3.1.0/src/libxl/libxl_driver.c
goto cleanup;
}
Index: libvirt-3.1.0/src/libxl/libxl_migration.c
Index: libvirt-3.2.0/src/libxl/libxl_migration.c
===================================================================
--- libvirt-3.1.0.orig/src/libxl/libxl_migration.c
+++ libvirt-3.1.0/src/libxl/libxl_migration.c
--- libvirt-3.2.0.orig/src/libxl/libxl_migration.c
+++ libvirt-3.2.0/src/libxl/libxl_migration.c
@@ -359,18 +359,39 @@ libxlMigrateReceive(virNetSocketPtr sock
static int
libxlDoMigrateSend(libxlDriverPrivatePtr driver,
@ -263,10 +263,10 @@ Index: libvirt-3.1.0/src/libxl/libxl_migration.c
virObjectLock(vm);
cleanup:
Index: libvirt-3.1.0/src/libxl/libxl_migration.h
Index: libvirt-3.2.0/src/libxl/libxl_migration.h
===================================================================
--- libvirt-3.1.0.orig/src/libxl/libxl_migration.h
+++ libvirt-3.1.0/src/libxl/libxl_migration.h
--- libvirt-3.2.0.orig/src/libxl/libxl_migration.h
+++ libvirt-3.2.0/src/libxl/libxl_migration.h
@@ -39,6 +39,10 @@
VIR_MIGRATE_PARAM_URI, VIR_TYPED_PARAM_STRING, \
VIR_MIGRATE_PARAM_DEST_NAME, VIR_TYPED_PARAM_STRING, \
@ -311,13 +311,13 @@ Index: libvirt-3.1.0/src/libxl/libxl_migration.h
virDomainPtr
libxlDomainMigrationFinish(virConnectPtr dconn,
Index: libvirt-3.1.0/tools/virsh-domain.c
Index: libvirt-3.2.0/tools/virsh-domain.c
===================================================================
--- libvirt-3.1.0.orig/tools/virsh-domain.c
+++ libvirt-3.1.0/tools/virsh-domain.c
@@ -10222,6 +10222,22 @@ static const vshCmdOptDef opts_migrate[]
.type = VSH_OT_STRING,
.help = N_("filename containing updated persistent XML for the target")
--- libvirt-3.2.0.orig/tools/virsh-domain.c
+++ libvirt-3.2.0/tools/virsh-domain.c
@@ -10284,6 +10284,22 @@ static const vshCmdOptDef opts_migrate[]
.type = VSH_OT_BOOL,
.help = N_("use TLS for migration")
},
+ {.name = "max_iters",
+ .type = VSH_OT_INT,
@ -338,7 +338,7 @@ Index: libvirt-3.1.0/tools/virsh-domain.c
{.name = NULL}
};
@@ -10245,6 +10261,7 @@ doMigrate(void *opaque)
@@ -10307,6 +10323,7 @@ doMigrate(void *opaque)
unsigned long long ullOpt = 0;
int rv;
virConnectPtr dconn = data->dconn;
@ -346,7 +346,7 @@ Index: libvirt-3.1.0/tools/virsh-domain.c
sigemptyset(&sigmask);
sigaddset(&sigmask, SIGINT);
@@ -10364,6 +10381,27 @@ doMigrate(void *opaque)
@@ -10426,6 +10443,27 @@ doMigrate(void *opaque)
goto save_error;
}
@ -374,11 +374,11 @@ Index: libvirt-3.1.0/tools/virsh-domain.c
if (vshCommandOptStringReq(ctl, cmd, "xml", &opt) < 0)
goto out;
if (opt) {
Index: libvirt-3.1.0/tools/virsh.pod
Index: libvirt-3.2.0/tools/virsh.pod
===================================================================
--- libvirt-3.1.0.orig/tools/virsh.pod
+++ libvirt-3.1.0/tools/virsh.pod
@@ -1732,6 +1732,14 @@ compression. I<--comp-mt-threads> and I<
--- libvirt-3.2.0.orig/tools/virsh.pod
+++ libvirt-3.2.0/tools/virsh.pod
@@ -1752,6 +1752,14 @@ compression. I<--comp-mt-threads> and I<
of compress threads on source and the number of decompress threads on target
respectively. I<--comp-xbzrle-cache> sets size of page cache in bytes.

View File

@ -7,10 +7,10 @@ and npiv.
For more details, see bsc#954872 and FATE#319810
Index: libvirt-3.1.0/src/libxl/libxl_conf.c
Index: libvirt-3.2.0/src/libxl/libxl_conf.c
===================================================================
--- libvirt-3.1.0.orig/src/libxl/libxl_conf.c
+++ libvirt-3.1.0/src/libxl/libxl_conf.c
--- libvirt-3.2.0.orig/src/libxl/libxl_conf.c
+++ libvirt-3.2.0/src/libxl/libxl_conf.c
@@ -609,6 +609,25 @@ libxlDiskSetDiscard(libxl_device_disk *x
#endif
}

View File

@ -13,47 +13,71 @@ device with the same name that is being created.
src/lxc/lxc_process.c | 1 +
3 files changed, 4 insertions(+)
Index: libvirt-3.1.0/src/lxc/lxc_controller.c
Index: libvirt-3.2.0/src/lxc/lxc_controller.c
===================================================================
--- libvirt-3.1.0.orig/src/lxc/lxc_controller.c
+++ libvirt-3.1.0/src/lxc/lxc_controller.c
@@ -1997,6 +1997,7 @@ static int virLXCControllerDeleteInterfa
--- libvirt-3.2.0.orig/src/lxc/lxc_controller.c
+++ libvirt-3.2.0/src/lxc/lxc_controller.c
@@ -73,6 +73,7 @@
#include "rpc/virnetdaemon.h"
#include "virstring.h"
#include "virgettext.h"
+#include "virutil.h"
#define VIR_FROM_THIS VIR_FROM_LXC
@@ -1997,6 +1998,7 @@ static int virLXCControllerDeleteInterfa
if (virNetDevVethDelete(ctrl->veths[i]) < 0)
ret = -1;
}
+ virFileWaitForDevices();
+ virWaitForDevices();
return ret;
}
Index: libvirt-3.1.0/src/lxc/lxc_driver.c
Index: libvirt-3.2.0/src/lxc/lxc_driver.c
===================================================================
--- libvirt-3.1.0.orig/src/lxc/lxc_driver.c
+++ libvirt-3.1.0/src/lxc/lxc_driver.c
@@ -4036,6 +4036,7 @@ lxcDomainAttachDeviceNetLive(virConnectP
--- libvirt-3.2.0.orig/src/lxc/lxc_driver.c
+++ libvirt-3.2.0/src/lxc/lxc_driver.c
@@ -76,6 +76,7 @@
#include "virtime.h"
#include "virtypedparam.h"
#include "viruri.h"
+#include "virutil.h"
#include "virstring.h"
#include "viraccessapicheck.h"
#include "viraccessapichecklxc.h"
@@ -4035,6 +4036,7 @@ lxcDomainAttachDeviceNetLive(virConnectP
case VIR_DOMAIN_NET_TYPE_NETWORK:
case VIR_DOMAIN_NET_TYPE_ETHERNET:
ignore_value(virNetDevVethDelete(veth));
+ virFileWaitForDevices();
+ virWaitForDevices();
break;
case VIR_DOMAIN_NET_TYPE_DIRECT:
@@ -4470,6 +4471,7 @@ lxcDomainDetachDeviceNetLive(virDomainOb
@@ -4469,6 +4471,7 @@ lxcDomainDetachDeviceNetLive(virDomainOb
virDomainAuditNet(vm, detach, NULL, "detach", false);
goto cleanup;
}
+ virFileWaitForDevices();
+ virWaitForDevices();
break;
/* It'd be nice to support this, but with macvlan
Index: libvirt-3.1.0/src/lxc/lxc_process.c
Index: libvirt-3.2.0/src/lxc/lxc_process.c
===================================================================
--- libvirt-3.1.0.orig/src/lxc/lxc_process.c
+++ libvirt-3.1.0/src/lxc/lxc_process.c
@@ -221,6 +221,7 @@ static void virLXCProcessCleanup(virLXCD
--- libvirt-3.2.0.orig/src/lxc/lxc_process.c
+++ libvirt-3.2.0/src/lxc/lxc_process.c
@@ -52,6 +52,7 @@
#include "viratomic.h"
#include "virprocess.h"
#include "virsystemd.h"
+#include "virutil.h"
#include "netdev_bandwidth_conf.h"
#define VIR_FROM_THIS VIR_FROM_LXC
@@ -221,6 +222,7 @@ static void virLXCProcessCleanup(virLXCD
}
networkReleaseActualDevice(vm->def, iface);
}
+ virFileWaitForDevices();
+ virWaitForDevices();
virDomainConfVMNWFilterTeardown(vm);

View File

@ -17,11 +17,11 @@ Signed-off-by: Martin Wilck <mwilck@suse.com>
tests/networkxml2confdata/dhcp6host-routed-network.conf | 1 -
2 files changed, 8 insertions(+), 2 deletions(-)
Index: libvirt-3.1.0/src/network/bridge_driver.c
Index: libvirt-3.2.0/src/network/bridge_driver.c
===================================================================
--- libvirt-3.1.0.orig/src/network/bridge_driver.c
+++ libvirt-3.1.0/src/network/bridge_driver.c
@@ -1398,7 +1398,14 @@ networkDnsmasqConfContents(virNetworkObj
--- libvirt-3.2.0.orig/src/network/bridge_driver.c
+++ libvirt-3.2.0/src/network/bridge_driver.c
@@ -1413,7 +1413,14 @@ networkDnsmasqConfContents(virNetworkObj
if (VIR_SOCKET_ADDR_IS_FAMILY(&ipdef->address, AF_INET)) {
if (ipdef->nranges || ipdef->nhosts) {
virBufferAddLit(&configbuf, "dhcp-no-override\n");
@ -37,10 +37,10 @@ Index: libvirt-3.1.0/src/network/bridge_driver.c
}
if (ipdef->tftproot) {
Index: libvirt-3.1.0/tests/networkxml2confdata/dhcp6host-routed-network.conf
Index: libvirt-3.2.0/tests/networkxml2confdata/dhcp6host-routed-network.conf
===================================================================
--- libvirt-3.1.0.orig/tests/networkxml2confdata/dhcp6host-routed-network.conf
+++ libvirt-3.1.0/tests/networkxml2confdata/dhcp6host-routed-network.conf
--- libvirt-3.2.0.orig/tests/networkxml2confdata/dhcp6host-routed-network.conf
+++ libvirt-3.2.0/tests/networkxml2confdata/dhcp6host-routed-network.conf
@@ -10,7 +10,6 @@ bind-dynamic
interface=virbr1
dhcp-range=192.168.122.1,static

View File

@ -2,10 +2,10 @@ Canonicalize hostarch name ppc64le to ppc64
See bnc#894956
Index: libvirt-3.1.0/src/util/virarch.c
Index: libvirt-3.2.0/src/util/virarch.c
===================================================================
--- libvirt-3.1.0.orig/src/util/virarch.c
+++ libvirt-3.1.0/src/util/virarch.c
--- libvirt-3.2.0.orig/src/util/virarch.c
+++ libvirt-3.2.0/src/util/virarch.c
@@ -169,6 +169,8 @@ virArch virArchFromHost(void)
arch = VIR_ARCH_I686;
} else if (STREQ(ut.machine, "amd64")) {

View File

@ -1,7 +1,7 @@
Index: libvirt-3.1.0/examples/apparmor/libvirt-qemu
Index: libvirt-3.2.0/examples/apparmor/libvirt-qemu
===================================================================
--- libvirt-3.1.0.orig/examples/apparmor/libvirt-qemu
+++ libvirt-3.1.0/examples/apparmor/libvirt-qemu
--- libvirt-3.2.0.orig/examples/apparmor/libvirt-qemu
+++ libvirt-3.2.0/examples/apparmor/libvirt-qemu
@@ -154,3 +154,6 @@
/etc/udev/udev.conf r,
/sys/bus/ r,

View File

@ -8,10 +8,10 @@ Subject: [PATCH] support managed pci devices in xen driver
src/xenxs/xen_xm.c | 28 +++++++++++++++++++++++++++-
2 files changed, 35 insertions(+), 15 deletions(-)
Index: libvirt-3.1.0/src/xenconfig/xen_common.c
Index: libvirt-3.2.0/src/xenconfig/xen_common.c
===================================================================
--- libvirt-3.1.0.orig/src/xenconfig/xen_common.c
+++ libvirt-3.1.0/src/xenconfig/xen_common.c
--- libvirt-3.2.0.orig/src/xenconfig/xen_common.c
+++ libvirt-3.2.0/src/xenconfig/xen_common.c
@@ -394,6 +394,8 @@ xenParsePCI(virConfPtr conf, virDomainDe
{
virConfValuePtr list = virConfGetValue(conf, "pci");
@ -66,10 +66,10 @@ Index: libvirt-3.1.0/src/xenconfig/xen_common.c
hostdev->source.subsys.type = VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI;
hostdev->source.subsys.u.pci.addr.domain = domainID;
hostdev->source.subsys.u.pci.addr.bus = busID;
Index: libvirt-3.1.0/src/xenconfig/xen_sxpr.c
Index: libvirt-3.2.0/src/xenconfig/xen_sxpr.c
===================================================================
--- libvirt-3.1.0.orig/src/xenconfig/xen_sxpr.c
+++ libvirt-3.1.0/src/xenconfig/xen_sxpr.c
--- libvirt-3.2.0.orig/src/xenconfig/xen_sxpr.c
+++ libvirt-3.2.0/src/xenconfig/xen_sxpr.c
@@ -1062,6 +1062,7 @@ xenParseSxprPCI(virDomainDefPtr def,
int busID;
int slotID;

View File

@ -0,0 +1,19 @@
Add Conflicts=xendomains.service to libvirtd service
On SUSE distros, we promote libvirt and all the libvirt-based
tools. If a user installs libvirt on their SUSE Xen host, then libvirt
should be king and override xendomains.
bsc#1015348
Index: libvirt-3.2.0/daemon/libvirtd.service.in
===================================================================
--- libvirt-3.2.0.orig/daemon/libvirtd.service.in
+++ libvirt-3.2.0/daemon/libvirtd.service.in
@@ -15,6 +15,7 @@ After=apparmor.service
After=local-fs.target
After=remote-fs.target
After=xencommons.service
+Conflicts=xendomains.service
Documentation=man:libvirtd(8)
Documentation=http://libvirt.org

View File

@ -7,11 +7,11 @@ suse-qemu-conf-secdriver.patch, suse-qemu-conf-lockmgr.patch,
etc.), but for now they are all lumped together in this
single patch.
Index: libvirt-3.1.0/src/qemu/qemu.conf
Index: libvirt-3.2.0/src/qemu/qemu.conf
===================================================================
--- libvirt-3.1.0.orig/src/qemu/qemu.conf
+++ libvirt-3.1.0/src/qemu/qemu.conf
@@ -283,11 +283,20 @@
--- libvirt-3.2.0.orig/src/qemu/qemu.conf
+++ libvirt-3.2.0/src/qemu/qemu.conf
@@ -332,11 +332,20 @@
# isolation, but it cannot appear in a list of drivers.
#
#security_driver = "selinux"
@ -34,7 +34,7 @@ Index: libvirt-3.1.0/src/qemu/qemu.conf
# If set to non-zero, then attempts to create unconfined
# guests will be blocked. Defaults to 0.
@@ -531,11 +540,22 @@
@@ -580,11 +589,22 @@
#allow_disk_format_probing = 1
@ -62,7 +62,7 @@ Index: libvirt-3.1.0/src/qemu/qemu.conf
#
#lock_manager = "lockd"
@@ -626,9 +646,8 @@
@@ -675,9 +695,8 @@
# for x86_64 and i686, but it's AAVMF for aarch64. The libvirt default
# follows this scheme.
#nvram = [

View File

@ -1,7 +1,7 @@
Index: libvirt-3.1.0/daemon/libvirtd.service.in
Index: libvirt-3.2.0/daemon/libvirtd.service.in
===================================================================
--- libvirt-3.1.0.orig/daemon/libvirtd.service.in
+++ libvirt-3.1.0/daemon/libvirtd.service.in
--- libvirt-3.2.0.orig/daemon/libvirtd.service.in
+++ libvirt-3.2.0/daemon/libvirtd.service.in
@@ -14,6 +14,7 @@ After=iscsid.service
After=apparmor.service
After=local-fs.target

View File

@ -1,9 +1,9 @@
Adjust virtlockd init files to conform to SUSE standards
Index: libvirt-3.1.0/src/locking/virtlockd.sysconf
Index: libvirt-3.2.0/src/locking/virtlockd.sysconf
===================================================================
--- libvirt-3.1.0.orig/src/locking/virtlockd.sysconf
+++ libvirt-3.1.0/src/locking/virtlockd.sysconf
--- libvirt-3.2.0.orig/src/locking/virtlockd.sysconf
+++ libvirt-3.2.0/src/locking/virtlockd.sysconf
@@ -1,3 +1,7 @@
+## Path: System/Virtualization/virtlockd
+
@ -12,10 +12,10 @@ Index: libvirt-3.1.0/src/locking/virtlockd.sysconf
#
# Pass extra arguments to virtlockd
#VIRTLOCKD_ARGS=
Index: libvirt-3.1.0/src/locking/virtlockd.init.in
Index: libvirt-3.2.0/src/locking/virtlockd.init.in
===================================================================
--- libvirt-3.1.0.orig/src/locking/virtlockd.init.in
+++ libvirt-3.1.0/src/locking/virtlockd.init.in
--- libvirt-3.2.0.orig/src/locking/virtlockd.init.in
+++ libvirt-3.2.0/src/locking/virtlockd.init.in
@@ -4,59 +4,57 @@
# http://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/initscrcomconv.html
#

View File

@ -1,9 +1,9 @@
Adjust virtlogd init files to conform to SUSE standards
Index: libvirt-3.1.0/src/logging/virtlogd.init.in
Index: libvirt-3.2.0/src/logging/virtlogd.init.in
===================================================================
--- libvirt-3.1.0.orig/src/logging/virtlogd.init.in
+++ libvirt-3.1.0/src/logging/virtlogd.init.in
--- libvirt-3.2.0.orig/src/logging/virtlogd.init.in
+++ libvirt-3.2.0/src/logging/virtlogd.init.in
@@ -4,59 +4,56 @@
# http://refspecs.linuxfoundation.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/initscrcomconv.html
#
@ -126,10 +126,10 @@ Index: libvirt-3.1.0/src/logging/virtlogd.init.in
esac
-exit $RETVAL
+rc_exit
Index: libvirt-3.1.0/src/logging/virtlogd.sysconf
Index: libvirt-3.2.0/src/logging/virtlogd.sysconf
===================================================================
--- libvirt-3.1.0.orig/src/logging/virtlogd.sysconf
+++ libvirt-3.1.0/src/logging/virtlogd.sysconf
--- libvirt-3.2.0.orig/src/logging/virtlogd.sysconf
+++ libvirt-3.2.0/src/logging/virtlogd.sysconf
@@ -1,3 +1,7 @@
+## Path: System/Virtualization/virtlogd
+

View File

@ -1,7 +1,7 @@
Index: libvirt-3.1.0/src/xenconfig/xen_sxpr.c
Index: libvirt-3.2.0/src/xenconfig/xen_sxpr.c
===================================================================
--- libvirt-3.1.0.orig/src/xenconfig/xen_sxpr.c
+++ libvirt-3.1.0/src/xenconfig/xen_sxpr.c
--- libvirt-3.2.0.orig/src/xenconfig/xen_sxpr.c
+++ libvirt-3.2.0/src/xenconfig/xen_sxpr.c
@@ -392,7 +392,7 @@ xenParseSxprVifRate(const char *rate, un
static int
xenParseSxprDisks(virDomainDefPtr def,

View File

@ -6,10 +6,10 @@ and 'file'. This was implicitly done prior to commit 9673418c.
https://bugzilla.suse.com/show_bug.cgi?id=938228
Index: libvirt-3.1.0/src/xenconfig/xen_sxpr.c
Index: libvirt-3.2.0/src/xenconfig/xen_sxpr.c
===================================================================
--- libvirt-3.1.0.orig/src/xenconfig/xen_sxpr.c
+++ libvirt-3.1.0/src/xenconfig/xen_sxpr.c
--- libvirt-3.2.0.orig/src/xenconfig/xen_sxpr.c
+++ libvirt-3.2.0/src/xenconfig/xen_sxpr.c
@@ -506,10 +506,11 @@ xenParseSxprDisks(virDomainDefPtr def,
omnipotent, we can revisit this, perhaps stat()'ing
the src file in question */