diff options
Diffstat (limited to 'vserver-sources/old/2.1.1_rc10-r1/4912_vs2.1.1-rc10-migrate-feat01.patch')
-rw-r--r-- | vserver-sources/old/2.1.1_rc10-r1/4912_vs2.1.1-rc10-migrate-feat01.patch | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/vserver-sources/old/2.1.1_rc10-r1/4912_vs2.1.1-rc10-migrate-feat01.patch b/vserver-sources/old/2.1.1_rc10-r1/4912_vs2.1.1-rc10-migrate-feat01.patch new file mode 100644 index 0000000..bf6875c --- /dev/null +++ b/vserver-sources/old/2.1.1_rc10-r1/4912_vs2.1.1-rc10-migrate-feat01.patch @@ -0,0 +1,76 @@ +Index: vserver-sources-2.1.1_2.6.15.4/include/linux/vserver/context.h +=================================================================== +--- vserver-sources-2.1.1_2.6.15.4.orig/include/linux/vserver/context.h ++++ vserver-sources-2.1.1_2.6.15.4/include/linux/vserver/context.h +@@ -56,6 +56,11 @@ + #define VXF_INIT_SET (VXF_STATE_SETUP|VXF_STATE_INIT) + + ++/* context migration */ ++ ++#define VXM_SET_INIT 0x00000001 ++#define VXM_SET_REAPER 0x00000002 ++ + /* context caps */ + + #define VXC_CAP_MASK 0x00000000 +Index: vserver-sources-2.1.1_2.6.15.4/include/linux/vserver/context_cmd.h +=================================================================== +--- vserver-sources-2.1.1_2.6.15.4.orig/include/linux/vserver/context_cmd.h ++++ vserver-sources-2.1.1_2.6.15.4/include/linux/vserver/context_cmd.h +@@ -34,7 +34,12 @@ struct vcmd_ctx_create { + uint64_t flagword; + }; + +-#define VCMD_ctx_migrate VC_CMD(PROCMIG, 1, 0) ++#define VCMD_ctx_migrate_v0 VC_CMD(PROCMIG, 1, 0) ++#define VCMD_ctx_migrate VC_CMD(PROCMIG, 1, 1) ++ ++struct vcmd_ctx_migrate { ++ uint64_t flagword; ++}; + + #ifdef __KERNEL__ + extern int vc_ctx_create(uint32_t, void __user *); +Index: vserver-sources-2.1.1_2.6.15.4/kernel/vserver/context.c +=================================================================== +--- vserver-sources-2.1.1_2.6.15.4.orig/kernel/vserver/context.c ++++ vserver-sources-2.1.1_2.6.15.4/kernel/vserver/context.c +@@ -849,10 +849,13 @@ int vc_ctx_create(uint32_t xid, void __u + + int vc_ctx_migrate(uint32_t id, void __user *data) + { ++ struct vcmd_ctx_migrate vc_data = { .flagword = 0 }; + struct vx_info *vxi; + + if (!capable(CAP_SYS_ADMIN)) + return -EPERM; ++ if (data && copy_from_user (&vc_data, data, sizeof(vc_data))) ++ return -EFAULT; + + /* dirty hack until Spectator becomes a cap */ + if (id == 1) { +@@ -864,6 +867,10 @@ int vc_ctx_migrate(uint32_t id, void __u + if (!vxi) + return -ESRCH; + vx_migrate_task(current, vxi); ++ if (vc_data.flagword & VXM_SET_INIT) ++ vx_set_init(vxi, current); ++ if (vc_data.flagword & VXM_SET_REAPER) ++ vx_set_reaper(vxi, current); + put_vx_info(vxi); + return 0; + } +Index: vserver-sources-2.1.1_2.6.15.4/kernel/vserver/switch.c +=================================================================== +--- vserver-sources-2.1.1_2.6.15.4.orig/kernel/vserver/switch.c ++++ vserver-sources-2.1.1_2.6.15.4/kernel/vserver/switch.c +@@ -219,6 +219,8 @@ long do_vserver(uint32_t cmd, uint32_t i + return vc_ctx_create(id, NULL); + case VCMD_ctx_create: + return vc_ctx_create(id, data); ++ case VCMD_ctx_migrate_v0: ++ return vc_ctx_migrate(id, NULL); + case VCMD_ctx_migrate: + return vc_ctx_migrate(id, data); + |