libvirt/clone.patch

59 lines
1.7 KiB
Diff
Raw Normal View History

Index: src/lxc/lxc_container.c
===================================================================
--- src/lxc/lxc_container.c.orig
+++ src/lxc/lxc_container.c
@@ -814,6 +814,9 @@ int lxcContainerStart(virDomainDefPtr de
lxc_child_argv_t args = { def, nveths, veths, control, ttyPath };
/* allocate a stack for the container */
+#ifdef __ia64__
+ stacksize *= 2;
+#endif
if (VIR_ALLOC_N(stack, stacksize) < 0) {
virReportOOMError(NULL);
return -1;
@@ -828,7 +831,11 @@ int lxcContainerStart(virDomainDefPtr de
if (def->nets != NULL)
flags |= CLONE_NEWNET;
+#ifdef __ia64__
+ pid = __clone2(lxcContainerChild, stack, stacksize, flags, &args);
+#else
pid = clone(lxcContainerChild, stacktop, flags, &args);
+#endif
VIR_FREE(stack);
DEBUG("clone() returned, %d", pid);
@@ -854,6 +861,7 @@ int lxcContainerAvailable(int features)
char *childStack;
char *stack;
int childStatus;
+ int stacksize = getpagesize() * 4;
if (features & LXC_CONTAINER_FEATURE_USER)
flags |= CLONE_NEWUSER;
@@ -861,14 +869,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) {
DEBUG0("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];