4514dc2f52
- 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
91 lines
2.7 KiB
Diff
91 lines
2.7 KiB
Diff
Index: src/lxc/lxc_container.c
|
|
===================================================================
|
|
--- src/lxc/lxc_container.c.orig
|
|
+++ src/lxc/lxc_container.c
|
|
@@ -142,6 +142,7 @@ int lxcContainerHasReboot(void)
|
|
int cmd, v;
|
|
int status;
|
|
char *tmp;
|
|
+ int stacksize = getpagesize() * 4;
|
|
|
|
if (virFileReadAll("/proc/sys/kernel/ctrl-alt-del", 10, &buf) < 0)
|
|
return -1;
|
|
@@ -158,14 +159,21 @@ int lxcContainerHasReboot(void)
|
|
VIR_FREE(buf);
|
|
cmd = v ? LINUX_REBOOT_CMD_CAD_ON : LINUX_REBOOT_CMD_CAD_OFF;
|
|
|
|
- if (VIR_ALLOC_N(stack, getpagesize() * 4) < 0) {
|
|
+#ifdef __ia64__
|
|
+ stacksize *= 2;
|
|
+#endif
|
|
+ if (VIR_ALLOC_N(stack, stacksize) < 0) {
|
|
virReportOOMError();
|
|
return -1;
|
|
}
|
|
|
|
- childStack = stack + (getpagesize() * 4);
|
|
+ childStack = stack + stacksize;
|
|
|
|
+#ifdef __ia64__
|
|
+ cpid = __clone2(lxcContainerRebootChild, stack, stacksize, flags, &cmd);
|
|
+#else
|
|
cpid = clone(lxcContainerRebootChild, childStack, flags, &cmd);
|
|
+#endif
|
|
VIR_FREE(stack);
|
|
if (cpid < 0) {
|
|
virReportSystemError(errno, "%s",
|
|
@@ -2108,6 +2116,9 @@ int lxcContainerStart(virDomainDefPtr de
|
|
ttyPaths, nttyPaths, handshakefd};
|
|
|
|
/* allocate a stack for the container */
|
|
+#ifdef __ia64__
|
|
+ stacksize *= 2;
|
|
+#endif
|
|
if (VIR_ALLOC_N(stack, stacksize) < 0) {
|
|
virReportOOMError();
|
|
return -1;
|
|
@@ -2126,7 +2137,11 @@ int lxcContainerStart(virDomainDefPtr de
|
|
cflags |= CLONE_NEWNET;
|
|
}
|
|
|
|
+#ifdef __ia64__
|
|
+ pid = __clone2(lxcContainerChild, stack, stacksize, cflags, &args);
|
|
+#else
|
|
pid = clone(lxcContainerChild, stacktop, cflags, &args);
|
|
+#endif
|
|
VIR_FREE(stack);
|
|
VIR_DEBUG("clone() completed, new container PID is %d", pid);
|
|
|
|
@@ -2152,6 +2167,7 @@ int lxcContainerAvailable(int features)
|
|
int cpid;
|
|
char *childStack;
|
|
char *stack;
|
|
+ int stacksize = getpagesize() * 4;
|
|
|
|
if (features & LXC_CONTAINER_FEATURE_USER)
|
|
flags |= CLONE_NEWUSER;
|
|
@@ -2159,14 +2175,21 @@ int lxcContainerAvailable(int features)
|
|
if (features & LXC_CONTAINER_FEATURE_NET)
|
|
flags |= CLONE_NEWNET;
|
|
|
|
- if (VIR_ALLOC_N(stack, getpagesize() * 4) < 0) {
|
|
+#ifdef __ia64__
|
|
+ stacksize *= 2;
|
|
+#endif
|
|
+ if (VIR_ALLOC_N(stack, stacksize) < 0) {
|
|
VIR_DEBUG("Unable to allocate stack");
|
|
return -1;
|
|
}
|
|
|
|
- childStack = stack + (getpagesize() * 4);
|
|
+ childStack = stack + stacksize;
|
|
|
|
+#ifdef __ia64__
|
|
+ cpid = __clone2(lxcContainerDummyChild, stack, stacksize, flags, NULL);
|
|
+#else
|
|
cpid = clone(lxcContainerDummyChild, childStack, flags, NULL);
|
|
+#endif
|
|
VIR_FREE(stack);
|
|
if (cpid < 0) {
|
|
char ebuf[1024] ATTRIBUTE_UNUSED;
|