- Update to libvirt 1.0.6
- Move VirtualBox driver into libvirtd - Support for static routes on a virtual bridge - Various improvement for hostdev SCSI support - Switch to VIR_STRDUP and VIR_STRNDUP - Various cleanups and improvement in Xen and LXC drivers - Many incremental improvements and bug fixes, see http://libvirt.org/news.html - Drop upstream patches: f493d83f-cgroup-swap-control.patch, 486a86eb-cgroups-docs.patch, 0ced83dc-cgroup-escape-dot.patch, bbe97ae9-no-cgroups.patch, c2cf5f1c-no-cgroups-fix.patch, 95c6cc34-selinux.patch OBS-URL: https://build.opensuse.org/package/show/Virtualization/libvirt?expand=0&rev=268
This commit is contained in:
parent
9decd8f3cc
commit
4514dc2f52
@ -1,24 +0,0 @@
|
||||
commit 0ced83dcfbb19af1201202e1af0a7073c338aabd
|
||||
Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
Date: Fri May 3 20:56:50 2013 +0100
|
||||
|
||||
Escaping leading '.' in cgroup names
|
||||
|
||||
Escaping a leading '.' with '_' in the cgroup names
|
||||
|
||||
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
Index: libvirt-1.0.5.1/src/util/vircgroup.c
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/util/vircgroup.c
|
||||
+++ libvirt-1.0.5.1/src/util/vircgroup.c
|
||||
@@ -1106,7 +1106,8 @@ static int virCgroupPartitionNeedsEscapi
|
||||
if (STRPREFIX(path, "cgroup."))
|
||||
return 1;
|
||||
|
||||
- if (path[0] == '_')
|
||||
+ if (path[0] == '_' ||
|
||||
+ path[0] == '.')
|
||||
return 1;
|
||||
|
||||
if (!(fp = fopen("/proc/cgroups", "r")))
|
@ -1,317 +0,0 @@
|
||||
commit 486a86eb184c008c5957fb68c63f163289f3344b
|
||||
Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
Date: Fri May 3 16:58:26 2013 +0100
|
||||
|
||||
Add docs about cgroups layout and usage
|
||||
|
||||
Describe the new cgroups layout, how to customize placement
|
||||
of guests and what virsh commands are used to access the
|
||||
parameters.
|
||||
|
||||
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
Index: libvirt-1.0.5.1/docs/cgroups.html.in
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ libvirt-1.0.5.1/docs/cgroups.html.in
|
||||
@@ -0,0 +1,285 @@
|
||||
+<?xml version="1.0" encoding="UTF-8"?>
|
||||
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||
+<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
+ <body>
|
||||
+ <h1>Control Groups Resource Management</h1>
|
||||
+
|
||||
+ <ul id="toc"></ul>
|
||||
+
|
||||
+ <p>
|
||||
+ The QEMU and LXC drivers make use of the Linux "Control Groups" facility
|
||||
+ for applying resource management to their virtual machines and containers.
|
||||
+ </p>
|
||||
+
|
||||
+ <h2><a name="requiredControllers">Required controllers</a></h2>
|
||||
+
|
||||
+ <p>
|
||||
+ The control groups filesystem supports multiple "controllers". By default
|
||||
+ the init system (such as systemd) should mount all controllers compiled
|
||||
+ into the kernel at <code>/sys/fs/cgroup/$CONTROLLER-NAME</code>. Libvirt
|
||||
+ will never attempt to mount any controllers itself, merely detect where
|
||||
+ they are mounted.
|
||||
+ </p>
|
||||
+
|
||||
+ <p>
|
||||
+ The QEMU driver is capable of using the <code>cpuset</code>,
|
||||
+ <code>cpu</code>, <code>memory</code>, <code>blkio</code> and
|
||||
+ <code>devices</code> controllers. None of them are compulsory.
|
||||
+ If any controller is not mounted, the resource management APIs
|
||||
+ which use it will cease to operate. It is possible to explicitly
|
||||
+ turn off use of a controller, even when mounted, via the
|
||||
+ <code>/etc/libvirt/qemu.conf</code> configuration file.
|
||||
+ </p>
|
||||
+
|
||||
+ <p>
|
||||
+ The LXC driver is capable of using the <code>cpuset</code>,
|
||||
+ <code>cpu</code>, <code>cpuset</code>, <code>freezer</code>,
|
||||
+ <code>memory</code>, <code>blkio</code> and <code>devices</code>
|
||||
+ controllers. The <code>cpuset</code>, <code>devices</code>
|
||||
+ and <code>memory</code> controllers are compulsory. Without
|
||||
+ them mounted, no containers can be started. If any of the
|
||||
+ other controllers are not mounted, the resource management APIs
|
||||
+ which use them will cease to operate.
|
||||
+ </p>
|
||||
+
|
||||
+ <h2><a name="currentLayout">Current cgroups layout</a></h2>
|
||||
+
|
||||
+ <p>
|
||||
+ As of libvirt 1.0.5 or later, the cgroups layout created by libvirt has been
|
||||
+ simplified, in order to facilitate the setup of resource control policies by
|
||||
+ administrators / management applications. The layout is based on the concepts of
|
||||
+ "partitions" and "consumers". Each virtual machine or container is a consumer,
|
||||
+ and has a corresponding cgroup named <code>$VMNAME.libvirt-{qemu,lxc}</code>.
|
||||
+ Each consumer is associated with exactly one partition, which also have a
|
||||
+ corresponding cgroup usually named <code>$PARTNAME.partition</code>. The
|
||||
+ exceptions to this naming rule are the three top level default partitions,
|
||||
+ named <code>/system</code> (for system services), <code>/user</code> (for
|
||||
+ user login sessions) and <code>/machine</code> (for virtual machines and
|
||||
+ containers). By default every consumer will of course be associated with
|
||||
+ the <code>/machine</code> partition. This leads to a hierarchy that looks
|
||||
+ like
|
||||
+ </p>
|
||||
+
|
||||
+ <pre>
|
||||
+$ROOT
|
||||
+ |
|
||||
+ +- system
|
||||
+ | |
|
||||
+ | +- libvirtd.service
|
||||
+ |
|
||||
+ +- machine
|
||||
+ |
|
||||
+ +- vm1.libvirt-qemu
|
||||
+ | |
|
||||
+ | +- emulator
|
||||
+ | +- vcpu0
|
||||
+ | +- vcpu1
|
||||
+ |
|
||||
+ +- vm2.libvirt-qemu
|
||||
+ | |
|
||||
+ | +- emulator
|
||||
+ | +- vcpu0
|
||||
+ | +- vcpu1
|
||||
+ |
|
||||
+ +- vm3.libvirt-qemu
|
||||
+ | |
|
||||
+ | +- emulator
|
||||
+ | +- vcpu0
|
||||
+ | +- vcpu1
|
||||
+ |
|
||||
+ +- container1.libvirt-lxc
|
||||
+ |
|
||||
+ +- container2.libvirt-lxc
|
||||
+ |
|
||||
+ +- container3.libvirt-lxc
|
||||
+ </pre>
|
||||
+
|
||||
+ <p>
|
||||
+ The default cgroups layout ensures that, when there is contention for
|
||||
+ CPU time, it is shared equally between system services, user sessions
|
||||
+ and virtual machines / containers. This prevents virtual machines from
|
||||
+ locking the administrator out of the host, or impacting execution of
|
||||
+ system services. Conversely, when there is no contention from
|
||||
+ system services / user sessions, it is possible for virtual machines
|
||||
+ to fully utilize the host CPUs.
|
||||
+ </p>
|
||||
+
|
||||
+ <h2><a name="customPartiton">Using custom partitions</a></h2>
|
||||
+
|
||||
+ <p>
|
||||
+ If there is a need to apply resource constraints to groups of
|
||||
+ virtual machines or containers, then the single default
|
||||
+ partition <code>/machine</code> may not be sufficiently
|
||||
+ flexible. The administrator may wish to sub-divide the
|
||||
+ default partition, for example into "testing" and "production"
|
||||
+ partitions, and then assign each guest to a specific
|
||||
+ sub-partition. This is achieved via a small element addition
|
||||
+ to the guest domain XML config, just below the main <code>domain</code>
|
||||
+ element
|
||||
+ </p>
|
||||
+
|
||||
+ <pre>
|
||||
+ ...
|
||||
+ <resource>
|
||||
+ <partition>/machine/production</partition>
|
||||
+ </resource>
|
||||
+ ...
|
||||
+ </pre>
|
||||
+
|
||||
+ <p>
|
||||
+ Libvirt will not auto-create the cgroups directory to back
|
||||
+ this partition. In the future, libvirt / virsh will provide
|
||||
+ APIs / commands to create custom partitions, but currently
|
||||
+ this is left as an exercise for the administrator. For
|
||||
+ example, given the XML config above, the admin would need
|
||||
+ to create a cgroup named '/machine/production.partition'
|
||||
+ </p>
|
||||
+
|
||||
+ <pre>
|
||||
+# cd /sys/fs/cgroup
|
||||
+# for i in blkio cpu,cpuacct cpuset devices freezer memory net_cls perf_event
|
||||
+ do
|
||||
+ mkdir $i/machine/production.partition
|
||||
+ done
|
||||
+# for i in cpuset.cpus cpuset.mems
|
||||
+ do
|
||||
+ cat cpuset/machine/$i > cpuset/machine/production.partition/$i
|
||||
+ done
|
||||
+</pre>
|
||||
+
|
||||
+ <p>
|
||||
+ <strong>Note:</strong> the cgroups directory created as a ".partition"
|
||||
+ suffix, but the XML config does not require this suffix.
|
||||
+ </p>
|
||||
+
|
||||
+ <p>
|
||||
+ <strong>Note:</strong> the ability to place guests in custom
|
||||
+ partitions is only available with libvirt >= 1.0.5, using
|
||||
+ the new cgroup layout. The legacy cgroups layout described
|
||||
+ later did not support customization per guest.
|
||||
+ </p>
|
||||
+
|
||||
+ <h2><a name="resourceAPIs">Resource management APIs/commands</a></h2>
|
||||
+
|
||||
+ <p>
|
||||
+ Since libvirt aims to provide an API which is portable across
|
||||
+ hypervisors, the concept of cgroups is not exposed directly
|
||||
+ in the API or XML configuration. It is considered to be an
|
||||
+ internal implementation detail. Instead libvirt provides a
|
||||
+ set of APIs for applying resource controls, which are then
|
||||
+ mapped to corresponding cgroup tunables
|
||||
+ </p>
|
||||
+
|
||||
+ <h3>Scheduler tuning</h3>
|
||||
+
|
||||
+ <p>
|
||||
+ Parameters from the "cpu" controller are exposed via the
|
||||
+ <code>schedinfo</code> command in virsh.
|
||||
+ </p>
|
||||
+
|
||||
+ <pre>
|
||||
+# virsh schedinfo demo
|
||||
+Scheduler : posix
|
||||
+cpu_shares : 1024
|
||||
+vcpu_period : 100000
|
||||
+vcpu_quota : -1
|
||||
+emulator_period: 100000
|
||||
+emulator_quota : -1</pre>
|
||||
+
|
||||
+
|
||||
+ <h3>Block I/O tuning</h3>
|
||||
+
|
||||
+ <p>
|
||||
+ Parameters from the "blkio" controller are exposed via the
|
||||
+ <code>bkliotune</code> command in virsh.
|
||||
+ </p>
|
||||
+
|
||||
+
|
||||
+ <pre>
|
||||
+# virsh blkiotune demo
|
||||
+weight : 500
|
||||
+device_weight : </pre>
|
||||
+
|
||||
+ <h3>Memory tuning</h3>
|
||||
+
|
||||
+ <p>
|
||||
+ Parameters from the "memory" controller are exposed via the
|
||||
+ <code>memtune</code> command in virsh.
|
||||
+ </p>
|
||||
+
|
||||
+ <pre>
|
||||
+# virsh memtune demo
|
||||
+hard_limit : 580192
|
||||
+soft_limit : unlimited
|
||||
+swap_hard_limit: unlimited
|
||||
+ </pre>
|
||||
+
|
||||
+ <h3>Network tuning</h3>
|
||||
+
|
||||
+ <p>
|
||||
+ The <code>net_cls</code> is not currently used. Instead traffic
|
||||
+ filter policies are set directly against individual virtual
|
||||
+ network interfaces.
|
||||
+ </p>
|
||||
+
|
||||
+ <h2><a name="legacyLayout">Legacy cgroups layout</a></h2>
|
||||
+
|
||||
+ <p>
|
||||
+ Prior to libvirt 1.0.5, the cgroups layout created by libvirt was different
|
||||
+ from that described above, and did not allow for administrator customization.
|
||||
+ Libvirt used a fixed, 3-level hierarchy <code>libvirt/{qemu,lxc}/$VMNAME</code>
|
||||
+ which was rooted at the point in the hierarchy where libvirtd itself was
|
||||
+ located. So if libvirtd was placed at <code>/system/libvirtd.service</code>
|
||||
+ by systemd, the groups for each virtual machine / container would be located
|
||||
+ at <code>/system/libvirtd.service/libvirt/{qemu,lxc}/$VMNAME</code>. In addition
|
||||
+ to this, the QEMU drivers further child groups for each vCPU thread and the
|
||||
+ emulator thread(s). This leads to a hierarchy that looked like
|
||||
+ </p>
|
||||
+
|
||||
+
|
||||
+ <pre>
|
||||
+$ROOT
|
||||
+ |
|
||||
+ +- system
|
||||
+ |
|
||||
+ +- libvirtd.service
|
||||
+ |
|
||||
+ +- libvirt
|
||||
+ |
|
||||
+ +- qemu
|
||||
+ | |
|
||||
+ | +- vm1
|
||||
+ | | |
|
||||
+ | | +- emulator
|
||||
+ | | +- vcpu0
|
||||
+ | | +- vcpu1
|
||||
+ | |
|
||||
+ | +- vm2
|
||||
+ | | |
|
||||
+ | | +- emulator
|
||||
+ | | +- vcpu0
|
||||
+ | | +- vcpu1
|
||||
+ | |
|
||||
+ | +- vm3
|
||||
+ | |
|
||||
+ | +- emulator
|
||||
+ | +- vcpu0
|
||||
+ | +- vcpu1
|
||||
+ |
|
||||
+ +- lxc
|
||||
+ |
|
||||
+ +- container1
|
||||
+ |
|
||||
+ +- container2
|
||||
+ |
|
||||
+ +- container3
|
||||
+ </pre>
|
||||
+
|
||||
+ <p>
|
||||
+ Although current releases are much improved, historically the use of deep
|
||||
+ hierarchies has had a significant negative impact on the kernel scalability.
|
||||
+ The legacy libvirt cgroups layout highlighted these problems, to the detriment
|
||||
+ of the performance of virtual machines and containers.
|
||||
+ </p>
|
||||
+ </body>
|
||||
+</html>
|
||||
Index: libvirt-1.0.5.1/docs/sitemap.html.in
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/docs/sitemap.html.in
|
||||
+++ libvirt-1.0.5.1/docs/sitemap.html.in
|
||||
@@ -87,6 +87,10 @@
|
||||
<span>Ensuring exclusive guest access to disks</span>
|
||||
</li>
|
||||
<li>
|
||||
+ <a href="cgroups.html">CGroups</a>
|
||||
+ <span>Control groups integration</span>
|
||||
+ </li>
|
||||
+ <li>
|
||||
<a href="hooks.html">Hooks</a>
|
||||
<span>Hooks for system specific management</span>
|
||||
</li>
|
@ -1,29 +0,0 @@
|
||||
commit 95c6cc344bec8405636d2a59fc0c34e0581001ab
|
||||
Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
Date: Wed May 15 16:26:59 2013 +0100
|
||||
|
||||
Don't mount selinux fs in LXC if selinux is disabled
|
||||
|
||||
Before trying to mount the selinux filesystem in a container
|
||||
use is_selinux_enabled() to check if the machine actually
|
||||
has selinux support (eg not booted with selinux=0)
|
||||
|
||||
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
Index: libvirt-1.0.5.1/src/lxc/lxc_container.c
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/lxc/lxc_container.c
|
||||
+++ libvirt-1.0.5.1/src/lxc/lxc_container.c
|
||||
@@ -701,6 +701,12 @@ static int lxcContainerMountBasicFS(bool
|
||||
(access(srcpath, R_OK) < 0))
|
||||
continue;
|
||||
|
||||
+#if WITH_SELINUX
|
||||
+ if (STREQ(mnts[i].src, SELINUX_MOUNT) &&
|
||||
+ !is_selinux_enabled())
|
||||
+ continue;
|
||||
+#endif
|
||||
+
|
||||
if (virFileMakePath(mnts[i].dst) < 0) {
|
||||
virReportSystemError(errno,
|
||||
_("Failed to mkdir %s"),
|
@ -1,102 +0,0 @@
|
||||
commit bbe97ae968eba60b71e0066d49f9fc909966d9d6
|
||||
Author: Jim Fehlig <jfehlig@suse.com>
|
||||
Date: Fri May 10 12:05:00 2013 -0600
|
||||
|
||||
Fix starting domains when kernel has no cgroups support
|
||||
|
||||
Found that I was unable to start existing domains after updating
|
||||
to a kernel with no cgroups support
|
||||
|
||||
# zgrep CGROUP /proc/config.gz
|
||||
# CONFIG_CGROUPS is not set
|
||||
# virsh start test
|
||||
error: Failed to start domain test
|
||||
error: Unable to initialize /machine cgroup: Cannot allocate memory
|
||||
|
||||
virCgroupPartitionNeedsEscaping() correctly returns errno (ENOENT) when
|
||||
attempting to open /proc/cgroups on such a system, but it was being
|
||||
dropped in virCgroupSetPartitionSuffix().
|
||||
|
||||
Change virCgroupSetPartitionSuffix() to propagate errors returned by
|
||||
its callees. Also check for ENOENT in qemuInitCgroup() when determining
|
||||
if cgroups support is available.
|
||||
|
||||
Index: libvirt-1.0.5.1/src/qemu/qemu_cgroup.c
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/qemu/qemu_cgroup.c
|
||||
+++ libvirt-1.0.5.1/src/qemu/qemu_cgroup.c
|
||||
@@ -415,7 +415,8 @@ int qemuInitCgroup(virQEMUDriverPtr driv
|
||||
if (rc != 0) {
|
||||
if (rc == -ENXIO ||
|
||||
rc == -EPERM ||
|
||||
- rc == -EACCES) { /* No cgroups mounts == success */
|
||||
+ rc == -EACCES ||
|
||||
+ rc == -ENOENT) { /* No cgroups mounts == success */
|
||||
VIR_DEBUG("No cgroups present/configured/accessible, ignoring error");
|
||||
goto done;
|
||||
}
|
||||
Index: libvirt-1.0.5.1/src/util/vircgroup.c
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/util/vircgroup.c
|
||||
+++ libvirt-1.0.5.1/src/util/vircgroup.c
|
||||
@@ -1168,14 +1168,14 @@ static int virCgroupPartitionEscape(char
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static char *virCgroupSetPartitionSuffix(const char *path)
|
||||
+static int virCgroupSetPartitionSuffix(const char *path, char **res)
|
||||
{
|
||||
char **tokens = virStringSplit(path, "/", 0);
|
||||
size_t i;
|
||||
- char *ret = NULL;
|
||||
+ int ret = -1;
|
||||
|
||||
if (!tokens)
|
||||
- return NULL;
|
||||
+ return ret;
|
||||
|
||||
for (i = 0 ; tokens[i] != NULL ; i++) {
|
||||
/* Whitelist the 3 top level fixed dirs
|
||||
@@ -1194,20 +1194,27 @@ static char *virCgroupSetPartitionSuffix
|
||||
!strchr(tokens[i], '.')) {
|
||||
if (VIR_REALLOC_N(tokens[i],
|
||||
strlen(tokens[i]) + strlen(".partition") + 1) < 0) {
|
||||
+ ret = -ENOMEM;
|
||||
virReportOOMError();
|
||||
goto cleanup;
|
||||
}
|
||||
strcat(tokens[i], ".partition");
|
||||
}
|
||||
|
||||
- if (virCgroupPartitionEscape(&(tokens[i])) < 0) {
|
||||
- virReportOOMError();
|
||||
+ ret = virCgroupPartitionEscape(&(tokens[i]));
|
||||
+ if (ret < 0) {
|
||||
+ if (ret == -ENOMEM)
|
||||
+ virReportOOMError();
|
||||
goto cleanup;
|
||||
}
|
||||
}
|
||||
|
||||
- if (!(ret = virStringJoin((const char **)tokens, "/")))
|
||||
+ if (!(*res = virStringJoin((const char **)tokens, "/"))) {
|
||||
+ ret = -ENOMEM;
|
||||
goto cleanup;
|
||||
+ }
|
||||
+
|
||||
+ ret = 0;
|
||||
|
||||
cleanup:
|
||||
virStringFreeList(tokens);
|
||||
@@ -1242,9 +1249,9 @@ int virCgroupNewPartition(const char *pa
|
||||
|
||||
/* XXX convert all cgroups APIs to use error report
|
||||
* APIs instead of returning errno */
|
||||
- if (!(newpath = virCgroupSetPartitionSuffix(path))) {
|
||||
+ rc = virCgroupSetPartitionSuffix(path, &newpath);
|
||||
+ if (rc < 0) {
|
||||
virResetLastError();
|
||||
- rc = -ENOMEM;
|
||||
goto cleanup;
|
||||
}
|
||||
|
@ -1,49 +0,0 @@
|
||||
commit c2cf5f1c2abc81d607abe34bf5dc4c615a9b8b4d
|
||||
Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
Date: Thu May 16 18:47:07 2013 +0100
|
||||
|
||||
Fix failure to detect missing cgroup partitions
|
||||
|
||||
Change bbe97ae968eba60b71e0066d49f9fc909966d9d6 caused the
|
||||
QEMU driver to ignore ENOENT errors from cgroups, in order
|
||||
to cope with missing /proc/cgroups. This is not good though
|
||||
because many other things can cause ENOENT and should not
|
||||
be ignored. The callers expect to see ENXIO when cgroups
|
||||
are not present, so adjust the code to report that errno
|
||||
when /proc/cgroups is missing
|
||||
|
||||
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
Index: libvirt-1.0.5.1/src/qemu/qemu_cgroup.c
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/qemu/qemu_cgroup.c
|
||||
+++ libvirt-1.0.5.1/src/qemu/qemu_cgroup.c
|
||||
@@ -415,8 +415,7 @@ int qemuInitCgroup(virQEMUDriverPtr driv
|
||||
if (rc != 0) {
|
||||
if (rc == -ENXIO ||
|
||||
rc == -EPERM ||
|
||||
- rc == -EACCES ||
|
||||
- rc == -ENOENT) { /* No cgroups mounts == success */
|
||||
+ rc == -EACCES) { /* No cgroups mounts == success */
|
||||
VIR_DEBUG("No cgroups present/configured/accessible, ignoring error");
|
||||
goto done;
|
||||
}
|
||||
Index: libvirt-1.0.5.1/src/util/vircgroup.c
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/util/vircgroup.c
|
||||
+++ libvirt-1.0.5.1/src/util/vircgroup.c
|
||||
@@ -1110,8 +1110,13 @@ static int virCgroupPartitionNeedsEscapi
|
||||
path[0] == '.')
|
||||
return 1;
|
||||
|
||||
- if (!(fp = fopen("/proc/cgroups", "r")))
|
||||
+ if (!(fp = fopen("/proc/cgroups", "r"))) {
|
||||
+ /* The API contract is that we return ENXIO
|
||||
+ * if cgroups are not available on a host */
|
||||
+ if (errno == ENOENT)
|
||||
+ errno = ENXIO;
|
||||
return -errno;
|
||||
+ }
|
||||
|
||||
/*
|
||||
* Data looks like this:
|
12
clone.patch
12
clone.patch
@ -2,7 +2,7 @@ Index: src/lxc/lxc_container.c
|
||||
===================================================================
|
||||
--- src/lxc/lxc_container.c.orig
|
||||
+++ src/lxc/lxc_container.c
|
||||
@@ -138,6 +138,7 @@ int lxcContainerHasReboot(void)
|
||||
@@ -142,6 +142,7 @@ int lxcContainerHasReboot(void)
|
||||
int cmd, v;
|
||||
int status;
|
||||
char *tmp;
|
||||
@ -10,7 +10,7 @@ Index: src/lxc/lxc_container.c
|
||||
|
||||
if (virFileReadAll("/proc/sys/kernel/ctrl-alt-del", 10, &buf) < 0)
|
||||
return -1;
|
||||
@@ -154,14 +155,21 @@ int lxcContainerHasReboot(void)
|
||||
@@ -158,14 +159,21 @@ int lxcContainerHasReboot(void)
|
||||
VIR_FREE(buf);
|
||||
cmd = v ? LINUX_REBOOT_CMD_CAD_ON : LINUX_REBOOT_CMD_CAD_OFF;
|
||||
|
||||
@ -34,7 +34,7 @@ Index: src/lxc/lxc_container.c
|
||||
VIR_FREE(stack);
|
||||
if (cpid < 0) {
|
||||
virReportSystemError(errno, "%s",
|
||||
@@ -2122,6 +2130,9 @@ int lxcContainerStart(virDomainDefPtr de
|
||||
@@ -2108,6 +2116,9 @@ int lxcContainerStart(virDomainDefPtr de
|
||||
ttyPaths, nttyPaths, handshakefd};
|
||||
|
||||
/* allocate a stack for the container */
|
||||
@ -44,7 +44,7 @@ Index: src/lxc/lxc_container.c
|
||||
if (VIR_ALLOC_N(stack, stacksize) < 0) {
|
||||
virReportOOMError();
|
||||
return -1;
|
||||
@@ -2140,7 +2151,11 @@ int lxcContainerStart(virDomainDefPtr de
|
||||
@@ -2126,7 +2137,11 @@ int lxcContainerStart(virDomainDefPtr de
|
||||
cflags |= CLONE_NEWNET;
|
||||
}
|
||||
|
||||
@ -56,7 +56,7 @@ Index: src/lxc/lxc_container.c
|
||||
VIR_FREE(stack);
|
||||
VIR_DEBUG("clone() completed, new container PID is %d", pid);
|
||||
|
||||
@@ -2166,6 +2181,7 @@ int lxcContainerAvailable(int features)
|
||||
@@ -2152,6 +2167,7 @@ int lxcContainerAvailable(int features)
|
||||
int cpid;
|
||||
char *childStack;
|
||||
char *stack;
|
||||
@ -64,7 +64,7 @@ Index: src/lxc/lxc_container.c
|
||||
|
||||
if (features & LXC_CONTAINER_FEATURE_USER)
|
||||
flags |= CLONE_NEWUSER;
|
||||
@@ -2173,14 +2189,21 @@ int lxcContainerAvailable(int features)
|
||||
@@ -2159,14 +2175,21 @@ int lxcContainerAvailable(int features)
|
||||
if (features & LXC_CONTAINER_FEATURE_NET)
|
||||
flags |= CLONE_NEWNET;
|
||||
|
||||
|
@ -1,34 +0,0 @@
|
||||
commit f493d83fbd3257453e63f2f32ee90a216fd531c1
|
||||
Author: Daniel P. Berrange <berrange@redhat.com>
|
||||
Date: Thu May 9 13:53:39 2013 +0100
|
||||
|
||||
Cope with missing swap cgroup controls
|
||||
|
||||
It is possible to build a kernel without swap cgroup controls
|
||||
present. This causes a fatal error when querying memory
|
||||
parameters. Treat missing swap controls as meaning "unlimited".
|
||||
The fatal error remains if the user tries to actually change
|
||||
the limit.
|
||||
|
||||
Signed-off-by: Daniel P. Berrange <berrange@redhat.com>
|
||||
|
||||
Index: libvirt-1.0.5.1/src/qemu/qemu_driver.c
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/qemu/qemu_driver.c
|
||||
+++ libvirt-1.0.5.1/src/qemu/qemu_driver.c
|
||||
@@ -7352,9 +7352,12 @@ qemuDomainGetMemoryParameters(virDomainP
|
||||
case 2: /* fill swap hard limit here */
|
||||
rc = virCgroupGetMemSwapHardLimit(priv->cgroup, &val);
|
||||
if (rc != 0) {
|
||||
- virReportSystemError(-rc, "%s",
|
||||
- _("unable to get swap hard limit"));
|
||||
- goto cleanup;
|
||||
+ if (rc != -ENOENT) {
|
||||
+ virReportSystemError(-rc, "%s",
|
||||
+ _("unable to get swap hard limit"));
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+ val = VIR_DOMAIN_MEMORY_PARAM_UNLIMITED;
|
||||
}
|
||||
if (virTypedParameterAssign(param,
|
||||
VIR_DOMAIN_MEMORY_SWAP_HARD_LIMIT,
|
@ -8,11 +8,11 @@ uses the 'device_configure' RPC.
|
||||
This patch changes the xend driver to always call 'device_configure' for
|
||||
PCI devices to be consistent with the usage in the xen tools.
|
||||
|
||||
Index: libvirt-1.0.5.1/src/xen/xend_internal.c
|
||||
Index: libvirt-1.0.6/src/xen/xend_internal.c
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/xen/xend_internal.c
|
||||
+++ libvirt-1.0.5.1/src/xen/xend_internal.c
|
||||
@@ -2473,6 +2473,7 @@ xenDaemonAttachDeviceFlags(virDomainPtr
|
||||
--- libvirt-1.0.6.orig/src/xen/xend_internal.c
|
||||
+++ libvirt-1.0.6/src/xen/xend_internal.c
|
||||
@@ -2220,6 +2220,7 @@ xenDaemonAttachDeviceFlags(virConnectPtr
|
||||
virBuffer buf = VIR_BUFFER_INITIALIZER;
|
||||
char class[8], ref[80];
|
||||
char *target = NULL;
|
||||
@ -20,23 +20,23 @@ Index: libvirt-1.0.5.1/src/xen/xend_internal.c
|
||||
|
||||
virCheckFlags(VIR_DOMAIN_AFFECT_LIVE | VIR_DOMAIN_AFFECT_CONFIG, -1);
|
||||
|
||||
@@ -2585,8 +2586,18 @@ xenDaemonAttachDeviceFlags(virDomainPtr
|
||||
@@ -2320,8 +2321,18 @@ xenDaemonAttachDeviceFlags(virConnectPtr
|
||||
}
|
||||
|
||||
sexpr = virBufferContentAndReset(&buf);
|
||||
+ new_dev = virDomainXMLDevID(domain, def, dev, class, ref, sizeof(ref));
|
||||
+ new_dev = virDomainXMLDevID(conn, minidef, dev, class, ref, sizeof(ref));
|
||||
|
||||
- if (virDomainXMLDevID(domain, def, dev, class, ref, sizeof(ref))) {
|
||||
- if (virDomainXMLDevID(conn, minidef, dev, class, ref, sizeof(ref))) {
|
||||
+ /* always call 'device_configure' for pci device */
|
||||
+ if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV &&
|
||||
+ dev->data.hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
|
||||
+ dev->data.hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI) {
|
||||
+ ret = xend_op(domain->conn, domain->name, "op", "device_configure",
|
||||
+ ret = xend_op(conn, def->name, "op", "device_configure",
|
||||
+ "config", sexpr, "dev", ref, NULL);
|
||||
+ goto cleanup;
|
||||
+ }
|
||||
+
|
||||
+ if (new_dev) {
|
||||
/* device doesn't exist, define it */
|
||||
ret = xend_op(domain->conn, domain->name, "op", "device_create",
|
||||
ret = xend_op(conn, def->name, "op", "device_create",
|
||||
"config", sexpr, NULL);
|
||||
|
@ -1,10 +1,10 @@
|
||||
Index: libvirt-1.0.5.1/examples/apparmor/Makefile.am
|
||||
Index: libvirt-1.0.6/examples/apparmor/Makefile.am
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/examples/apparmor/Makefile.am
|
||||
+++ libvirt-1.0.5.1/examples/apparmor/Makefile.am
|
||||
@@ -1,8 +1,45 @@
|
||||
## Copyright (C) 2005-2011 Red Hat, Inc.
|
||||
## See COPYING.LIB for the License of this software
|
||||
--- libvirt-1.0.6.orig/examples/apparmor/Makefile.am
|
||||
+++ libvirt-1.0.6/examples/apparmor/Makefile.am
|
||||
@@ -14,8 +14,45 @@
|
||||
## License along with this library. If not, see
|
||||
## <http://www.gnu.org/licenses/>.
|
||||
|
||||
-EXTRA_DIST= \
|
||||
- TEMPLATE \
|
||||
@ -53,10 +53,10 @@ Index: libvirt-1.0.5.1/examples/apparmor/Makefile.am
|
||||
+ rm -f $(DESTDIR)$(sysconfdir)/apparmor.d/libvirt/TEMPLATE
|
||||
+
|
||||
+endif
|
||||
Index: libvirt-1.0.5.1/examples/apparmor/usr.lib.libvirt.virt-aa-helper.in
|
||||
Index: libvirt-1.0.6/examples/apparmor/usr.lib.libvirt.virt-aa-helper.in
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ libvirt-1.0.5.1/examples/apparmor/usr.lib.libvirt.virt-aa-helper.in
|
||||
+++ libvirt-1.0.6/examples/apparmor/usr.lib.libvirt.virt-aa-helper.in
|
||||
@@ -0,0 +1,40 @@
|
||||
+# Last Modified: Fri Aug 19 11:21:48 2011
|
||||
+#include <tunables/global>
|
||||
@ -98,9 +98,9 @@ Index: libvirt-1.0.5.1/examples/apparmor/usr.lib.libvirt.virt-aa-helper.in
|
||||
+ /var/lib/kvm/images/ r,
|
||||
+ /var/lib/kvm/images/** r,
|
||||
+}
|
||||
Index: libvirt-1.0.5.1/examples/apparmor/usr.lib.libvirt.virt-aa-helper
|
||||
Index: libvirt-1.0.6/examples/apparmor/usr.lib.libvirt.virt-aa-helper
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/examples/apparmor/usr.lib.libvirt.virt-aa-helper
|
||||
--- libvirt-1.0.6.orig/examples/apparmor/usr.lib.libvirt.virt-aa-helper
|
||||
+++ /dev/null
|
||||
@@ -1,38 +0,0 @@
|
||||
-# Last Modified: Mon Apr 5 15:10:27 2010
|
||||
@ -141,9 +141,9 @@ Index: libvirt-1.0.5.1/examples/apparmor/usr.lib.libvirt.virt-aa-helper
|
||||
- /var/lib/libvirt/images/ r,
|
||||
- /var/lib/libvirt/images/** r,
|
||||
-}
|
||||
Index: libvirt-1.0.5.1/examples/apparmor/usr.sbin.libvirtd
|
||||
Index: libvirt-1.0.6/examples/apparmor/usr.sbin.libvirtd
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/examples/apparmor/usr.sbin.libvirtd
|
||||
--- libvirt-1.0.6.orig/examples/apparmor/usr.sbin.libvirtd
|
||||
+++ /dev/null
|
||||
@@ -1,52 +0,0 @@
|
||||
-# Last Modified: Mon Apr 5 15:03:58 2010
|
||||
@ -198,10 +198,10 @@ Index: libvirt-1.0.5.1/examples/apparmor/usr.sbin.libvirtd
|
||||
- change_profile -> @{LIBVIRT}-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*,
|
||||
-
|
||||
-}
|
||||
Index: libvirt-1.0.5.1/examples/apparmor/usr.sbin.libvirtd.in
|
||||
Index: libvirt-1.0.6/examples/apparmor/usr.sbin.libvirtd.in
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ libvirt-1.0.5.1/examples/apparmor/usr.sbin.libvirtd.in
|
||||
+++ libvirt-1.0.6/examples/apparmor/usr.sbin.libvirtd.in
|
||||
@@ -0,0 +1,58 @@
|
||||
+# Last Modified: Fri Aug 19 11:20:36 2011
|
||||
+#include <tunables/global>
|
||||
@ -261,9 +261,9 @@ Index: libvirt-1.0.5.1/examples/apparmor/usr.sbin.libvirtd.in
|
||||
+ change_profile -> @{LIBVIRT}-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*-[0-9a-f]*,
|
||||
+
|
||||
+}
|
||||
Index: libvirt-1.0.5.1/examples/apparmor/libvirt-qemu
|
||||
Index: libvirt-1.0.6/examples/apparmor/libvirt-qemu
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/examples/apparmor/libvirt-qemu
|
||||
--- libvirt-1.0.6.orig/examples/apparmor/libvirt-qemu
|
||||
+++ /dev/null
|
||||
@@ -1,129 +0,0 @@
|
||||
-# Last Modified: Fri Mar 9 14:43:22 2012
|
||||
@ -395,10 +395,10 @@ Index: libvirt-1.0.5.1/examples/apparmor/libvirt-qemu
|
||||
-
|
||||
- /usr/libexec/qemu-bridge-helper rmix,
|
||||
- }
|
||||
Index: libvirt-1.0.5.1/examples/apparmor/libvirt-qemu.in
|
||||
Index: libvirt-1.0.6/examples/apparmor/libvirt-qemu.in
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ libvirt-1.0.5.1/examples/apparmor/libvirt-qemu.in
|
||||
+++ libvirt-1.0.6/examples/apparmor/libvirt-qemu.in
|
||||
@@ -0,0 +1,132 @@
|
||||
+# Last Modified: Fri Mar 9 14:43:22 2012
|
||||
+
|
||||
|
@ -1,3 +0,0 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:e3e635e965c91bc84e23aed1db0279a7b3d80055ff0146327e9b271680ddf0af
|
||||
size 17142845
|
3
libvirt-1.0.6.tar.bz2
Normal file
3
libvirt-1.0.6.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
||||
version https://git-lfs.github.com/spec/v1
|
||||
oid sha256:254926d680dde3aa41e69eacc8dd72d346fa9d15dde66fa5a5883b0fac5f5475
|
||||
size 17229166
|
@ -1,9 +1,9 @@
|
||||
Adjust libvirt-guests init files to conform to SUSE standards
|
||||
|
||||
Index: libvirt-1.0.5.1/tools/libvirt-guests.init.in
|
||||
Index: libvirt-1.0.6/tools/libvirt-guests.init.in
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/tools/libvirt-guests.init.in
|
||||
+++ libvirt-1.0.5.1/tools/libvirt-guests.init.in
|
||||
--- libvirt-1.0.6.orig/tools/libvirt-guests.init.in
|
||||
+++ libvirt-1.0.6/tools/libvirt-guests.init.in
|
||||
@@ -3,15 +3,15 @@
|
||||
# the following is the LSB init header
|
||||
#
|
||||
@ -28,12 +28,13 @@ Index: libvirt-1.0.5.1/tools/libvirt-guests.init.in
|
||||
### END INIT INFO
|
||||
|
||||
# the following is chkconfig init header
|
||||
Index: libvirt-1.0.5.1/tools/libvirt-guests.sh.in
|
||||
Index: libvirt-1.0.6/tools/libvirt-guests.sh.in
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/tools/libvirt-guests.sh.in
|
||||
+++ libvirt-1.0.5.1/tools/libvirt-guests.sh.in
|
||||
@@ -1,13 +1,12 @@
|
||||
#!/bin/sh
|
||||
--- libvirt-1.0.6.orig/tools/libvirt-guests.sh.in
|
||||
+++ libvirt-1.0.6/tools/libvirt-guests.sh.in
|
||||
@@ -16,14 +16,13 @@
|
||||
# License along with this library. If not, see
|
||||
# <http://www.gnu.org/licenses/>.
|
||||
|
||||
+. /etc/rc.status
|
||||
+rc_reset
|
||||
@ -49,7 +50,7 @@ Index: libvirt-1.0.5.1/tools/libvirt-guests.sh.in
|
||||
# Source gettext library.
|
||||
# Make sure this file is recognized as having translations: _("dummy")
|
||||
. "@bindir@"/gettext.sh
|
||||
@@ -26,9 +25,11 @@ test -f "$sysconfdir"/sysconfig/libvirt-
|
||||
@@ -42,9 +41,11 @@ test -f "$sysconfdir"/sysconfig/libvirt-
|
||||
. "$sysconfdir"/sysconfig/libvirt-guests
|
||||
|
||||
LISTFILE="$localstatedir"/lib/libvirt/libvirt-guests
|
||||
@ -64,7 +65,7 @@ Index: libvirt-1.0.5.1/tools/libvirt-guests.sh.in
|
||||
|
||||
# retval COMMAND ARGUMENTS...
|
||||
# run command with arguments and convert non-zero return value to 1 and set
|
||||
@@ -36,7 +37,7 @@ RETVAL=0
|
||||
@@ -52,7 +53,7 @@ RETVAL=0
|
||||
retval() {
|
||||
"$@"
|
||||
if [ $? -ne 0 ]; then
|
||||
@ -73,7 +74,7 @@ Index: libvirt-1.0.5.1/tools/libvirt-guests.sh.in
|
||||
return 1
|
||||
else
|
||||
return 0
|
||||
@@ -65,6 +66,25 @@ run_virsh_c() {
|
||||
@@ -81,6 +82,25 @@ run_virsh_c() {
|
||||
( export LC_ALL=C; run_virsh "$@" )
|
||||
}
|
||||
|
||||
@ -99,7 +100,7 @@ Index: libvirt-1.0.5.1/tools/libvirt-guests.sh.in
|
||||
# test_connect URI
|
||||
# check if URI is reachable
|
||||
test_connect()
|
||||
@@ -91,7 +111,7 @@ list_guests() {
|
||||
@@ -107,7 +127,7 @@ list_guests() {
|
||||
|
||||
list=$(run_virsh_c "$uri" list --uuid $persistent)
|
||||
if [ $? -ne 0 ]; then
|
||||
@ -108,7 +109,7 @@ Index: libvirt-1.0.5.1/tools/libvirt-guests.sh.in
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -117,7 +137,7 @@ guest_is_on() {
|
||||
@@ -133,7 +153,7 @@ guest_is_on() {
|
||||
guest_running=false
|
||||
id=$(run_virsh "$uri" domid "$uuid")
|
||||
if [ $? -ne 0 ]; then
|
||||
@ -117,7 +118,7 @@ Index: libvirt-1.0.5.1/tools/libvirt-guests.sh.in
|
||||
return 1
|
||||
fi
|
||||
|
||||
@@ -165,6 +185,12 @@ start() {
|
||||
@@ -181,6 +201,12 @@ start() {
|
||||
|
||||
test_connect "$uri" || continue
|
||||
|
||||
@ -130,7 +131,7 @@ Index: libvirt-1.0.5.1/tools/libvirt-guests.sh.in
|
||||
eval_gettext "Resuming guests on \$uri URI..."; echo
|
||||
for guest in $list; do
|
||||
name=$(guest_name "$uri" "$guest")
|
||||
@@ -378,7 +404,7 @@ shutdown_guests_parallel()
|
||||
@@ -394,7 +420,7 @@ shutdown_guests_parallel()
|
||||
timeout=$(($timeout - 1))
|
||||
if [ $timeout -le 0 ]; then
|
||||
eval_gettext "Timeout expired while shutting down domains"; echo
|
||||
@ -139,7 +140,7 @@ Index: libvirt-1.0.5.1/tools/libvirt-guests.sh.in
|
||||
return
|
||||
fi
|
||||
else
|
||||
@@ -406,7 +432,7 @@ stop() {
|
||||
@@ -422,7 +448,7 @@ stop() {
|
||||
if [ $SHUTDOWN_TIMEOUT -lt 0 ]; then
|
||||
gettext "SHUTDOWN_TIMEOUT must be equal or greater than 0"
|
||||
echo
|
||||
@ -148,7 +149,7 @@ Index: libvirt-1.0.5.1/tools/libvirt-guests.sh.in
|
||||
return
|
||||
fi
|
||||
fi
|
||||
@@ -454,14 +480,14 @@ stop() {
|
||||
@@ -470,14 +496,14 @@ stop() {
|
||||
if [ $? -ne 0 ]; then
|
||||
eval_gettext "Failed to list persistent guests on \$uri"
|
||||
echo
|
||||
@ -165,7 +166,7 @@ Index: libvirt-1.0.5.1/tools/libvirt-guests.sh.in
|
||||
set +f
|
||||
return
|
||||
fi
|
||||
@@ -520,14 +546,13 @@ gueststatus() {
|
||||
@@ -536,14 +562,13 @@ gueststatus() {
|
||||
rh_status() {
|
||||
if [ -f "$LISTFILE" ]; then
|
||||
gettext "stopped, with saved guests"; echo
|
||||
@ -182,16 +183,16 @@ Index: libvirt-1.0.5.1/tools/libvirt-guests.sh.in
|
||||
fi
|
||||
fi
|
||||
}
|
||||
@@ -572,4 +597,4 @@ case "$1" in
|
||||
@@ -588,4 +613,4 @@ case "$1" in
|
||||
usage
|
||||
;;
|
||||
esac
|
||||
-exit $RETVAL
|
||||
+rc_exit
|
||||
Index: libvirt-1.0.5.1/tools/libvirt-guests.sysconf
|
||||
Index: libvirt-1.0.6/tools/libvirt-guests.sysconf
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/tools/libvirt-guests.sysconf
|
||||
+++ libvirt-1.0.5.1/tools/libvirt-guests.sysconf
|
||||
--- libvirt-1.0.6.orig/tools/libvirt-guests.sysconf
|
||||
+++ libvirt-1.0.6/tools/libvirt-guests.sysconf
|
||||
@@ -1,19 +1,29 @@
|
||||
+## Path: System/Virtualization/libvirt-guests
|
||||
+
|
||||
|
@ -1,8 +1,8 @@
|
||||
Index: libvirt-1.0.5.1/configure.ac
|
||||
Index: libvirt-1.0.6/configure.ac
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/configure.ac
|
||||
+++ libvirt-1.0.5.1/configure.ac
|
||||
@@ -159,6 +159,7 @@ LIBVIRT_CHECK_DBUS
|
||||
--- libvirt-1.0.6.orig/configure.ac
|
||||
+++ libvirt-1.0.6/configure.ac
|
||||
@@ -172,6 +172,7 @@ LIBVIRT_CHECK_DBUS
|
||||
LIBVIRT_CHECK_FUSE
|
||||
LIBVIRT_CHECK_HAL
|
||||
LIBVIRT_CHECK_NETCF
|
||||
@ -10,7 +10,7 @@ Index: libvirt-1.0.5.1/configure.ac
|
||||
LIBVIRT_CHECK_NUMACTL
|
||||
LIBVIRT_CHECK_OPENWSMAN
|
||||
LIBVIRT_CHECK_PCIACCESS
|
||||
@@ -2205,11 +2206,12 @@ if test "$with_libvirtd" = "no" ; then
|
||||
@@ -2227,11 +2228,12 @@ if test "$with_libvirtd" = "no" ; then
|
||||
with_interface=no
|
||||
fi
|
||||
|
||||
@ -26,7 +26,7 @@ Index: libvirt-1.0.5.1/configure.ac
|
||||
esac
|
||||
|
||||
if test "$with_interface" = "yes" ; then
|
||||
@@ -2488,6 +2490,7 @@ LIBVIRT_RESULT_DBUS
|
||||
@@ -2510,6 +2512,7 @@ LIBVIRT_RESULT_DBUS
|
||||
LIBVIRT_RESULT_FUSE
|
||||
LIBVIRT_RESULT_HAL
|
||||
LIBVIRT_RESULT_NETCF
|
||||
@ -34,11 +34,11 @@ Index: libvirt-1.0.5.1/configure.ac
|
||||
LIBVIRT_RESULT_NUMACTL
|
||||
LIBVIRT_RESULT_OPENWSMAN
|
||||
LIBVIRT_RESULT_PCIACCESS
|
||||
Index: libvirt-1.0.5.1/src/Makefile.am
|
||||
Index: libvirt-1.0.6/src/Makefile.am
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/Makefile.am
|
||||
+++ libvirt-1.0.5.1/src/Makefile.am
|
||||
@@ -715,6 +715,10 @@ if WITH_NETCF
|
||||
--- libvirt-1.0.6.orig/src/Makefile.am
|
||||
+++ libvirt-1.0.6/src/Makefile.am
|
||||
@@ -716,6 +716,10 @@ if WITH_NETCF
|
||||
INTERFACE_DRIVER_SOURCES += \
|
||||
interface/interface_backend_netcf.c
|
||||
endif
|
||||
@ -49,7 +49,7 @@ Index: libvirt-1.0.5.1/src/Makefile.am
|
||||
if WITH_UDEV
|
||||
INTERFACE_DRIVER_SOURCES += \
|
||||
interface/interface_backend_udev.c
|
||||
@@ -1200,11 +1204,16 @@ if WITH_NETCF
|
||||
@@ -1215,11 +1219,16 @@ if WITH_NETCF
|
||||
libvirt_driver_interface_la_CFLAGS += $(NETCF_CFLAGS)
|
||||
libvirt_driver_interface_la_LIBADD += $(NETCF_LIBS)
|
||||
else
|
||||
@ -66,11 +66,11 @@ Index: libvirt-1.0.5.1/src/Makefile.am
|
||||
if WITH_DRIVER_MODULES
|
||||
libvirt_driver_interface_la_LIBADD += ../gnulib/lib/libgnu.la
|
||||
libvirt_driver_interface_la_LDFLAGS += -module -avoid-version
|
||||
Index: libvirt-1.0.5.1/tools/virsh.c
|
||||
Index: libvirt-1.0.6/tools/virsh.c
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/tools/virsh.c
|
||||
+++ libvirt-1.0.5.1/tools/virsh.c
|
||||
@@ -2888,6 +2888,8 @@ vshShowVersion(vshControl *ctl ATTRIBUTE
|
||||
--- libvirt-1.0.6.orig/tools/virsh.c
|
||||
+++ libvirt-1.0.6/tools/virsh.c
|
||||
@@ -2886,6 +2886,8 @@ vshShowVersion(vshControl *ctl ATTRIBUTE
|
||||
vshPrint(ctl, " Interface");
|
||||
# if defined(WITH_NETCF)
|
||||
vshPrint(ctl, " netcf");
|
||||
@ -79,10 +79,10 @@ Index: libvirt-1.0.5.1/tools/virsh.c
|
||||
# elif defined(WITH_UDEV)
|
||||
vshPrint(ctl, " udev");
|
||||
# endif
|
||||
Index: libvirt-1.0.5.1/src/interface/interface_backend_netcf.c
|
||||
Index: libvirt-1.0.6/src/interface/interface_backend_netcf.c
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/interface/interface_backend_netcf.c
|
||||
+++ libvirt-1.0.5.1/src/interface/interface_backend_netcf.c
|
||||
--- libvirt-1.0.6.orig/src/interface/interface_backend_netcf.c
|
||||
+++ libvirt-1.0.6/src/interface/interface_backend_netcf.c
|
||||
@@ -23,7 +23,12 @@
|
||||
|
||||
#include <config.h>
|
||||
@ -146,10 +146,10 @@ Index: libvirt-1.0.5.1/src/interface/interface_backend_netcf.c
|
||||
/* open netcf */
|
||||
if (ncf_init(&driverState->netcf, NULL) != 0)
|
||||
{
|
||||
Index: libvirt-1.0.5.1/src/interface/interface_driver.c
|
||||
Index: libvirt-1.0.6/src/interface/interface_driver.c
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/interface/interface_driver.c
|
||||
+++ libvirt-1.0.5.1/src/interface/interface_driver.c
|
||||
--- libvirt-1.0.6.orig/src/interface/interface_driver.c
|
||||
+++ libvirt-1.0.6/src/interface/interface_driver.c
|
||||
@@ -28,8 +28,15 @@ interfaceRegister(void) {
|
||||
if (netcfIfaceRegister() == 0)
|
||||
return 0;
|
||||
@ -167,10 +167,10 @@ Index: libvirt-1.0.5.1/src/interface/interface_driver.c
|
||||
if (udevIfaceRegister() == 0)
|
||||
return 0;
|
||||
#endif /* WITH_UDEV */
|
||||
Index: libvirt-1.0.5.1/m4/virt-netcontrol.m4
|
||||
Index: libvirt-1.0.6/m4/virt-netcontrol.m4
|
||||
===================================================================
|
||||
--- /dev/null
|
||||
+++ libvirt-1.0.5.1/m4/virt-netcontrol.m4
|
||||
+++ libvirt-1.0.6/m4/virt-netcontrol.m4
|
||||
@@ -0,0 +1,35 @@
|
||||
+dnl The libnetcontrol library
|
||||
+dnl
|
||||
|
@ -1,3 +1,19 @@
|
||||
-------------------------------------------------------------------
|
||||
Tue Jun 4 16:44:30 MDT 2013 - jfehlig@suse.com
|
||||
|
||||
- Update to libvirt 1.0.6
|
||||
- Move VirtualBox driver into libvirtd
|
||||
- Support for static routes on a virtual bridge
|
||||
- Various improvement for hostdev SCSI support
|
||||
- Switch to VIR_STRDUP and VIR_STRNDUP
|
||||
- Various cleanups and improvement in Xen and LXC drivers
|
||||
- Many incremental improvements and bug fixes, see
|
||||
http://libvirt.org/news.html
|
||||
- Drop upstream patches: f493d83f-cgroup-swap-control.patch,
|
||||
486a86eb-cgroups-docs.patch, 0ced83dc-cgroup-escape-dot.patch,
|
||||
bbe97ae9-no-cgroups.patch, c2cf5f1c-no-cgroups-fix.patch,
|
||||
95c6cc34-selinux.patch
|
||||
|
||||
-------------------------------------------------------------------
|
||||
Tue May 21 08:32:02 MDT 2013 - jfehlig@suse.com
|
||||
|
||||
|
19
libvirt.spec
19
libvirt.spec
@ -106,6 +106,11 @@
|
||||
%define with_libxl 0
|
||||
%endif
|
||||
|
||||
# vbox is available only on i386 x86_64
|
||||
%ifnarch %{ix86} x86_64
|
||||
%define with_vbox 0
|
||||
%endif
|
||||
|
||||
# numactl only on x86_64 and ia64
|
||||
%ifnarch x86_64 ia64
|
||||
%define with_numactl 0
|
||||
@ -343,7 +348,7 @@ BuildRequires: libblkid-devel >= 2.17
|
||||
|
||||
Name: libvirt
|
||||
Url: http://libvirt.org/
|
||||
Version: 1.0.5.1
|
||||
Version: 1.0.6
|
||||
Release: 0
|
||||
Summary: A C toolkit to interact with the virtualization capabilities of Linux
|
||||
License: LGPL-2.1+
|
||||
@ -423,12 +428,6 @@ Source1: libvirtd.init
|
||||
Source2: libvirtd-relocation-server.fw
|
||||
Source99: baselibs.conf
|
||||
# Upstream patches
|
||||
Patch0: f493d83f-cgroup-swap-control.patch
|
||||
Patch1: 486a86eb-cgroups-docs.patch
|
||||
Patch2: 0ced83dc-cgroup-escape-dot.patch
|
||||
Patch3: bbe97ae9-no-cgroups.patch
|
||||
Patch4: c2cf5f1c-no-cgroups-fix.patch
|
||||
Patch5: 95c6cc34-selinux.patch
|
||||
# Need to go upstream
|
||||
Patch100: xen-name-for-devid.patch
|
||||
Patch101: clone.patch
|
||||
@ -569,12 +568,6 @@ Authors:
|
||||
|
||||
%prep
|
||||
%setup -q
|
||||
%patch0 -p1
|
||||
%patch1 -p1
|
||||
%patch2 -p1
|
||||
%patch3 -p1
|
||||
%patch4 -p1
|
||||
%patch5 -p1
|
||||
%patch100 -p1
|
||||
%patch101
|
||||
%patch102 -p1
|
||||
|
@ -1,7 +1,7 @@
|
||||
Index: libvirt-1.0.5.1/daemon/libvirtd.conf
|
||||
Index: libvirt-1.0.6/daemon/libvirtd.conf
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/daemon/libvirtd.conf
|
||||
+++ libvirt-1.0.5.1/daemon/libvirtd.conf
|
||||
--- libvirt-1.0.6.orig/daemon/libvirtd.conf
|
||||
+++ libvirt-1.0.6/daemon/libvirtd.conf
|
||||
@@ -18,8 +18,8 @@
|
||||
# It is necessary to setup a CA and issue server certificates before
|
||||
# using this capability.
|
||||
@ -13,11 +13,11 @@ Index: libvirt-1.0.5.1/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-1.0.5.1/daemon/libvirtd-config.c
|
||||
Index: libvirt-1.0.6/daemon/libvirtd-config.c
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/daemon/libvirtd-config.c
|
||||
+++ libvirt-1.0.5.1/daemon/libvirtd-config.c
|
||||
@@ -233,7 +233,7 @@ daemonConfigNew(bool privileged ATTRIBUT
|
||||
--- libvirt-1.0.6.orig/daemon/libvirtd-config.c
|
||||
+++ libvirt-1.0.6/daemon/libvirtd-config.c
|
||||
@@ -225,7 +225,7 @@ daemonConfigNew(bool privileged ATTRIBUT
|
||||
return NULL;
|
||||
}
|
||||
|
||||
@ -25,4 +25,4 @@ Index: libvirt-1.0.5.1/daemon/libvirtd-config.c
|
||||
+ data->listen_tls = 0;
|
||||
data->listen_tcp = 0;
|
||||
|
||||
if (!(data->tls_port = strdup(LIBVIRTD_TLS_PORT)))
|
||||
if (VIR_STRDUP(data->tls_port, LIBVIRTD_TLS_PORT) < 0 ||
|
||||
|
@ -1,9 +1,9 @@
|
||||
Adjust libvirtd sysconfig file to conform to SUSE standards
|
||||
|
||||
Index: libvirt-1.0.5.1/daemon/libvirtd.sysconf
|
||||
Index: libvirt-1.0.6/daemon/libvirtd.sysconf
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/daemon/libvirtd.sysconf
|
||||
+++ libvirt-1.0.5.1/daemon/libvirtd.sysconf
|
||||
--- libvirt-1.0.6.orig/daemon/libvirtd.sysconf
|
||||
+++ libvirt-1.0.6/daemon/libvirtd.sysconf
|
||||
@@ -1,16 +1,25 @@
|
||||
+## Path: System/Virtualization/libvirt
|
||||
+
|
||||
|
@ -7,11 +7,11 @@ drivers as loadable modules instead of built-in to the
|
||||
daemon. Then the qemu driver would only be loaded when needed,
|
||||
which would never be the case on a xen-only configuration.
|
||||
|
||||
Index: libvirt-1.0.5.1/src/qemu/qemu_conf.c
|
||||
Index: libvirt-1.0.6/src/qemu/qemu_conf.c
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/qemu/qemu_conf.c
|
||||
+++ libvirt-1.0.5.1/src/qemu/qemu_conf.c
|
||||
@@ -435,15 +435,15 @@ int virQEMUDriverConfigLoadFile(virQEMUD
|
||||
--- libvirt-1.0.6.orig/src/qemu/qemu_conf.c
|
||||
+++ libvirt-1.0.6/src/qemu/qemu_conf.c
|
||||
@@ -465,15 +465,15 @@ int virQEMUDriverConfigLoadFile(virQEMUD
|
||||
|
||||
p = virConfGetValue(conf, "user");
|
||||
CHECK_TYPE("user", VIR_CONF_STRING);
|
||||
|
@ -8,11 +8,11 @@ Subject: [PATCH] support managed pci devices in xen driver
|
||||
src/xenxs/xen_xm.c | 28 +++++++++++++++++++++++++++-
|
||||
2 files changed, 35 insertions(+), 15 deletions(-)
|
||||
|
||||
Index: libvirt-1.0.5.1/src/xenxs/xen_sxpr.c
|
||||
Index: libvirt-1.0.6/src/xenxs/xen_sxpr.c
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/xenxs/xen_sxpr.c
|
||||
+++ libvirt-1.0.5.1/src/xenxs/xen_sxpr.c
|
||||
@@ -1035,6 +1035,7 @@ xenParseSxprPCI(virDomainDefPtr def,
|
||||
--- libvirt-1.0.6.orig/src/xenxs/xen_sxpr.c
|
||||
+++ libvirt-1.0.6/src/xenxs/xen_sxpr.c
|
||||
@@ -1006,6 +1006,7 @@ xenParseSxprPCI(virDomainDefPtr def,
|
||||
int busID;
|
||||
int slotID;
|
||||
int funcID;
|
||||
@ -20,7 +20,7 @@ Index: libvirt-1.0.5.1/src/xenxs/xen_sxpr.c
|
||||
|
||||
node = cur->u.s.car;
|
||||
if (!sexpr_lookup(node, "dev"))
|
||||
@@ -1082,11 +1083,13 @@ xenParseSxprPCI(virDomainDefPtr def,
|
||||
@@ -1053,11 +1054,13 @@ xenParseSxprPCI(virDomainDefPtr def,
|
||||
goto error;
|
||||
}
|
||||
|
||||
@ -35,7 +35,7 @@ Index: libvirt-1.0.5.1/src/xenxs/xen_sxpr.c
|
||||
dev->source.subsys.type = VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI;
|
||||
dev->source.subsys.u.pci.addr.domain = domainID;
|
||||
dev->source.subsys.u.pci.addr.bus = busID;
|
||||
@@ -2042,11 +2045,15 @@ static void
|
||||
@@ -2013,11 +2016,15 @@ static void
|
||||
xenFormatSxprPCI(virDomainHostdevDefPtr def,
|
||||
virBufferPtr buf)
|
||||
{
|
||||
@ -52,7 +52,7 @@ Index: libvirt-1.0.5.1/src/xenxs/xen_sxpr.c
|
||||
}
|
||||
|
||||
|
||||
@@ -2065,12 +2072,6 @@ xenFormatSxprOnePCI(virDomainHostdevDefP
|
||||
@@ -2036,12 +2043,6 @@ xenFormatSxprOnePCI(virDomainHostdevDefP
|
||||
virBufferPtr buf,
|
||||
int detach)
|
||||
{
|
||||
@ -65,8 +65,8 @@ Index: libvirt-1.0.5.1/src/xenxs/xen_sxpr.c
|
||||
virBufferAddLit(buf, "(pci ");
|
||||
xenFormatSxprPCI(def, buf);
|
||||
if (detach)
|
||||
@@ -2125,12 +2126,6 @@ xenFormatSxprAllPCI(virDomainDefPtr def,
|
||||
for (i = 0 ; i < def->nhostdevs ; i++) {
|
||||
@@ -2096,12 +2097,6 @@ xenFormatSxprAllPCI(virDomainDefPtr def,
|
||||
for (i = 0; i < def->nhostdevs; i++) {
|
||||
if (def->hostdevs[i]->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
|
||||
def->hostdevs[i]->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI) {
|
||||
- if (def->hostdevs[i]->managed) {
|
||||
@ -78,11 +78,11 @@ Index: libvirt-1.0.5.1/src/xenxs/xen_sxpr.c
|
||||
xenFormatSxprPCI(def->hostdevs[i], buf);
|
||||
}
|
||||
}
|
||||
Index: libvirt-1.0.5.1/src/xenxs/xen_xm.c
|
||||
Index: libvirt-1.0.6/src/xenxs/xen_xm.c
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/xenxs/xen_xm.c
|
||||
+++ libvirt-1.0.5.1/src/xenxs/xen_xm.c
|
||||
@@ -815,6 +815,8 @@ xenParseXM(virConfPtr conf, int xendConf
|
||||
--- libvirt-1.0.6.orig/src/xenxs/xen_xm.c
|
||||
+++ libvirt-1.0.6/src/xenxs/xen_xm.c
|
||||
@@ -806,6 +806,8 @@ xenParseXM(virConfPtr conf, int xendConf
|
||||
int busID;
|
||||
int slotID;
|
||||
int funcID;
|
||||
@ -91,7 +91,7 @@ Index: libvirt-1.0.5.1/src/xenxs/xen_xm.c
|
||||
|
||||
domain[0] = bus[0] = slot[0] = func[0] = '\0';
|
||||
|
||||
@@ -824,6 +826,11 @@ xenParseXM(virConfPtr conf, int xendConf
|
||||
@@ -815,6 +817,11 @@ xenParseXM(virConfPtr conf, int xendConf
|
||||
/* pci=['0000:00:1b.0','0000:00:13.0'] */
|
||||
if (!(key = list->str))
|
||||
goto skippci;
|
||||
@ -103,7 +103,7 @@ Index: libvirt-1.0.5.1/src/xenxs/xen_xm.c
|
||||
if (!(nextkey = strchr(key, ':')))
|
||||
goto skippci;
|
||||
|
||||
@@ -872,10 +879,30 @@ xenParseXM(virConfPtr conf, int xendConf
|
||||
@@ -863,10 +870,30 @@ xenParseXM(virConfPtr conf, int xendConf
|
||||
if (virStrToLong_i(func, NULL, 16, &funcID) < 0)
|
||||
goto skippci;
|
||||
|
||||
|
@ -1,8 +1,8 @@
|
||||
Index: libvirt-1.0.5.1/src/qemu/qemu.conf
|
||||
Index: libvirt-1.0.6/src/qemu/qemu.conf
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/qemu/qemu.conf
|
||||
+++ libvirt-1.0.5.1/src/qemu/qemu.conf
|
||||
@@ -169,7 +169,16 @@
|
||||
--- libvirt-1.0.6.orig/src/qemu/qemu.conf
|
||||
+++ libvirt-1.0.6/src/qemu/qemu.conf
|
||||
@@ -175,7 +175,16 @@
|
||||
# a special value; security_driver can be set to that value in
|
||||
# isolation, but it cannot appear in a list of drivers.
|
||||
#
|
||||
@ -19,7 +19,7 @@ Index: libvirt-1.0.5.1/src/qemu/qemu.conf
|
||||
|
||||
# If set to non-zero, then the default security labeling
|
||||
# will make guests confined. If set to zero, then guests
|
||||
@@ -365,6 +374,15 @@
|
||||
@@ -371,6 +380,15 @@
|
||||
#allow_disk_format_probing = 1
|
||||
|
||||
|
||||
|
@ -1,9 +1,9 @@
|
||||
Adjust virtlockd init files to conform to SUSE standards
|
||||
|
||||
Index: libvirt-1.0.5.1/src/locking/virtlockd.sysconf
|
||||
Index: libvirt-1.0.6/src/locking/virtlockd.sysconf
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/locking/virtlockd.sysconf
|
||||
+++ libvirt-1.0.5.1/src/locking/virtlockd.sysconf
|
||||
--- libvirt-1.0.6.orig/src/locking/virtlockd.sysconf
|
||||
+++ libvirt-1.0.6/src/locking/virtlockd.sysconf
|
||||
@@ -1,3 +1,7 @@
|
||||
+## Path: System/Virtualization/virtlockd
|
||||
+
|
||||
@ -12,10 +12,10 @@ Index: libvirt-1.0.5.1/src/locking/virtlockd.sysconf
|
||||
#
|
||||
# Pass extra arguments to virtlockd
|
||||
#VIRTLOCKD_ARGS=
|
||||
Index: libvirt-1.0.5.1/src/locking/virtlockd.init.in
|
||||
Index: libvirt-1.0.6/src/locking/virtlockd.init.in
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/locking/virtlockd.init.in
|
||||
+++ libvirt-1.0.5.1/src/locking/virtlockd.init.in
|
||||
--- libvirt-1.0.6.orig/src/locking/virtlockd.init.in
|
||||
+++ libvirt-1.0.6/src/locking/virtlockd.init.in
|
||||
@@ -4,11 +4,13 @@
|
||||
# http://www.linux-foundation.org/spec//booksets/LSB-Core-generic/LSB-Core-generic.html#INITSCRCOMCONV
|
||||
#
|
||||
|
@ -14,78 +14,32 @@
|
||||
is inactive. We obviously can't search xenstore when the domain is
|
||||
inactive.
|
||||
|
||||
Index: libvirt-1.0.5.1/src/xen/xend_internal.c
|
||||
Index: libvirt-1.0.6/src/xen/xend_internal.c
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/xen/xend_internal.c
|
||||
+++ libvirt-1.0.5.1/src/xen/xend_internal.c
|
||||
@@ -60,8 +60,8 @@
|
||||
--- libvirt-1.0.6.orig/src/xen/xend_internal.c
|
||||
+++ libvirt-1.0.6/src/xen/xend_internal.c
|
||||
@@ -70,7 +70,7 @@
|
||||
#define XEND_RCV_BUF_MAX_LEN (256 * 1024)
|
||||
|
||||
static int
|
||||
-virDomainXMLDevID(virDomainPtr domain, virDomainDeviceDefPtr dev, char *class,
|
||||
- char *ref, int ref_len);
|
||||
+virDomainXMLDevID(virDomainPtr domain, virDomainDefPtr domDef,
|
||||
+ virDomainDeviceDefPtr dev, char *class, char *ref, int ref_len);
|
||||
-virDomainXMLDevID(virConnectPtr conn, virDomainDefPtr domain,
|
||||
+virDomainXMLDevID(virConnectPtr conn ATTRIBUTE_UNUSED, virDomainDefPtr domain,
|
||||
virDomainDeviceDefPtr dev, char *class,
|
||||
char *ref, int ref_len);
|
||||
|
||||
/**
|
||||
* do_connect:
|
||||
@@ -2586,7 +2586,7 @@ xenDaemonAttachDeviceFlags(virDomainPtr
|
||||
|
||||
sexpr = virBufferContentAndReset(&buf);
|
||||
|
||||
- if (virDomainXMLDevID(domain, dev, class, ref, sizeof(ref))) {
|
||||
+ if (virDomainXMLDevID(domain, def, dev, class, ref, sizeof(ref))) {
|
||||
/* device doesn't exist, define it */
|
||||
ret = xend_op(domain->conn, domain->name, "op", "device_create",
|
||||
"config", sexpr, NULL);
|
||||
@@ -2701,7 +2701,7 @@ xenDaemonUpdateDeviceFlags(virDomainPtr
|
||||
|
||||
sexpr = virBufferContentAndReset(&buf);
|
||||
|
||||
- if (virDomainXMLDevID(domain, dev, class, ref, sizeof(ref))) {
|
||||
+ if (virDomainXMLDevID(domain, def, dev, class, ref, sizeof(ref))) {
|
||||
virReportError(VIR_ERR_OPERATION_INVALID, "%s",
|
||||
_("requested device does not exist"));
|
||||
goto cleanup;
|
||||
@@ -2790,7 +2790,7 @@ xenDaemonDetachDeviceFlags(virDomainPtr
|
||||
VIR_DOMAIN_XML_INACTIVE)))
|
||||
goto cleanup;
|
||||
|
||||
- if (virDomainXMLDevID(domain, dev, class, ref, sizeof(ref)))
|
||||
+ if (virDomainXMLDevID(domain, def, dev, class, ref, sizeof(ref)))
|
||||
goto cleanup;
|
||||
|
||||
if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV) {
|
||||
@@ -3682,31 +3682,32 @@ struct xenUnifiedDriver xenDaemonDriver
|
||||
/**
|
||||
* virDomainXMLDevID:
|
||||
* @domain: pointer to domain object
|
||||
+ * @domDef: pointer to domain definition object
|
||||
* @dev: pointer to device config object
|
||||
* @class: Xen device class "vbd" or "vif" (OUT)
|
||||
* @ref: Xen device reference (OUT)
|
||||
+ * @ref_len: Length of character buffer proviced by the ref parameter
|
||||
*
|
||||
* Set class according to XML root, and:
|
||||
* - if disk, copy in ref the target name from description
|
||||
- * - if network, get MAC address from description, scan XenStore and
|
||||
- * copy in ref the corresponding vif number.
|
||||
- * - if pci, get BDF from description, scan XenStore and
|
||||
- * copy in ref the corresponding dev number.
|
||||
+ * - if network, copy in ref the target MAC address from description
|
||||
+ * - if pci, copy in ref the target BDF from description
|
||||
*
|
||||
@@ -3332,18 +3332,18 @@ xenDaemonDomainBlockPeek(virConnectPtr c
|
||||
* Returns 0 in case of success, -1 in case of failure.
|
||||
*/
|
||||
static int
|
||||
virDomainXMLDevID(virDomainPtr domain,
|
||||
+ virDomainDefPtr domDef,
|
||||
-virDomainXMLDevID(virConnectPtr conn,
|
||||
+virDomainXMLDevID(virConnectPtr conn ATTRIBUTE_UNUSED,
|
||||
virDomainDefPtr def,
|
||||
virDomainDeviceDefPtr dev,
|
||||
char *class,
|
||||
char *ref,
|
||||
int ref_len)
|
||||
{
|
||||
- xenUnifiedPrivatePtr priv = domain->conn->privateData;
|
||||
- xenUnifiedPrivatePtr priv = conn->privateData;
|
||||
- char *xref;
|
||||
- char *tmp;
|
||||
+ unsigned int i;
|
||||
@ -96,14 +50,14 @@ Index: libvirt-1.0.5.1/src/xen/xend_internal.c
|
||||
if (dev->data.disk->driverName &&
|
||||
STREQ(dev->data.disk->driverName, "tap"))
|
||||
strcpy(class, "tap");
|
||||
@@ -3716,19 +3717,17 @@ virDomainXMLDevID(virDomainPtr domain,
|
||||
@@ -3353,19 +3353,17 @@ virDomainXMLDevID(virConnectPtr conn,
|
||||
else
|
||||
strcpy(class, "vbd");
|
||||
|
||||
- if (dev->data.disk->dst == NULL)
|
||||
- return -1;
|
||||
- xenUnifiedLock(priv);
|
||||
- xref = xenStoreDomainGetDiskID(domain->conn, domain->id,
|
||||
- xref = xenStoreDomainGetDiskID(conn, def->id,
|
||||
- dev->data.disk->dst);
|
||||
- xenUnifiedUnlock(priv);
|
||||
- if (xref == NULL)
|
||||
@ -114,8 +68,8 @@ Index: libvirt-1.0.5.1/src/xen/xend_internal.c
|
||||
- if (tmp == NULL)
|
||||
- return -1;
|
||||
+ /* For disks, the device name can be used directly. */
|
||||
+ for (i = 0; i < domDef->ndisks; i++) {
|
||||
+ virDomainDiskDefPtr disk = domDef->disks[i];
|
||||
+ for (i = 0; i < def->ndisks; i++) {
|
||||
+ virDomainDiskDefPtr disk = def->disks[i];
|
||||
+ if (STREQ(dev->data.disk->dst, disk->dst)) {
|
||||
+ if (virStrcpy(ref, disk->dst, ref_len) == NULL)
|
||||
+ return -1;
|
||||
@ -126,13 +80,13 @@ Index: libvirt-1.0.5.1/src/xen/xend_internal.c
|
||||
+ return -1;
|
||||
} else if (dev->type == VIR_DOMAIN_DEVICE_NET) {
|
||||
char mac[VIR_MAC_STRING_BUFLEN];
|
||||
virDomainNetDefPtr def = dev->data.net;
|
||||
@@ -3736,16 +3735,22 @@ virDomainXMLDevID(virDomainPtr domain,
|
||||
virDomainNetDefPtr netdef = dev->data.net;
|
||||
@@ -3373,16 +3371,22 @@ virDomainXMLDevID(virConnectPtr conn,
|
||||
|
||||
strcpy(class, "vif");
|
||||
|
||||
- xenUnifiedLock(priv);
|
||||
- xref = xenStoreDomainGetNetworkID(domain->conn, domain->id, mac);
|
||||
- xref = xenStoreDomainGetNetworkID(conn, def->id, mac);
|
||||
- xenUnifiedUnlock(priv);
|
||||
- if (xref == NULL)
|
||||
- return -1;
|
||||
@ -142,9 +96,9 @@ Index: libvirt-1.0.5.1/src/xen/xend_internal.c
|
||||
- if (tmp == NULL)
|
||||
- return -1;
|
||||
+ /* For nics, the mac address can be used directly. */
|
||||
+ for (i = 0; i < domDef->nnets; i++) {
|
||||
+ for (i = 0; i < def->nnets; i++) {
|
||||
+ char dst_mac[30];
|
||||
+ virDomainNetDefPtr dst_net = domDef->nets[i];
|
||||
+ virDomainNetDefPtr dst_net = def->nets[i];
|
||||
+ snprintf(dst_mac, sizeof(dst_mac), "%02x:%02x:%02x:%02x:%02x:%02x",
|
||||
+ dst_net->mac.addr[0], dst_net->mac.addr[1],
|
||||
+ dst_net->mac.addr[2], dst_net->mac.addr[3],
|
||||
@ -160,20 +114,20 @@ Index: libvirt-1.0.5.1/src/xen/xend_internal.c
|
||||
} else if (dev->type == VIR_DOMAIN_DEVICE_HOSTDEV &&
|
||||
dev->data.hostdev->mode == VIR_DOMAIN_HOSTDEV_MODE_SUBSYS &&
|
||||
dev->data.hostdev->source.subsys.type == VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI) {
|
||||
@@ -3763,17 +3768,44 @@ virDomainXMLDevID(virDomainPtr domain,
|
||||
@@ -3400,17 +3404,44 @@ virDomainXMLDevID(virConnectPtr conn,
|
||||
|
||||
strcpy(class, "pci");
|
||||
|
||||
- xenUnifiedLock(priv);
|
||||
- xref = xenStoreDomainGetPCIID(domain->conn, domain->id, bdf);
|
||||
- xref = xenStoreDomainGetPCIID(conn, def->id, bdf);
|
||||
- xenUnifiedUnlock(priv);
|
||||
- VIR_FREE(bdf);
|
||||
- if (xref == NULL)
|
||||
- return -1;
|
||||
+ /* For PCI devices, the device BFD can be used directly. */
|
||||
+ for (i = 0 ; i < domDef->nhostdevs ; i++) {
|
||||
+ for (i = 0 ; i < def->nhostdevs ; i++) {
|
||||
+ char *dst_bdf;
|
||||
+ virDomainHostdevDefPtr hostdev = domDef->hostdevs[i];
|
||||
+ virDomainHostdevDefPtr hostdev = def->hostdevs[i];
|
||||
+
|
||||
+ if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS)
|
||||
+ continue;
|
||||
|
@ -1,8 +1,8 @@
|
||||
Index: libvirt-1.0.5.1/src/xenxs/xen_sxpr.c
|
||||
Index: libvirt-1.0.6/src/xenxs/xen_sxpr.c
|
||||
===================================================================
|
||||
--- libvirt-1.0.5.1.orig/src/xenxs/xen_sxpr.c
|
||||
+++ libvirt-1.0.5.1/src/xenxs/xen_sxpr.c
|
||||
@@ -341,7 +341,7 @@ error:
|
||||
--- libvirt-1.0.6.orig/src/xenxs/xen_sxpr.c
|
||||
+++ libvirt-1.0.6/src/xenxs/xen_sxpr.c
|
||||
@@ -328,7 +328,7 @@ error:
|
||||
static int
|
||||
xenParseSxprDisks(virDomainDefPtr def,
|
||||
const struct sexpr *root,
|
||||
@ -11,7 +11,7 @@ Index: libvirt-1.0.5.1/src/xenxs/xen_sxpr.c
|
||||
int xendConfigVersion)
|
||||
{
|
||||
const struct sexpr *cur, *node;
|
||||
@@ -392,7 +392,6 @@ xenParseSxprDisks(virDomainDefPtr def,
|
||||
@@ -379,7 +379,6 @@ xenParseSxprDisks(virDomainDefPtr def,
|
||||
/* There is a case without the uname to the CD-ROM device */
|
||||
offset = strchr(dst, ':');
|
||||
if (!offset ||
|
||||
|
Loading…
Reference in New Issue
Block a user