From: Daniel Hokka Zakrisson Date: Fri, 15 Sep 2006 21:18:21 +0000 (+0000) Subject: - Update the kernel headers to 2.0.2.1. X-Git-Tag: release-0.30.211~38 X-Git-Url: http://git.linux-vserver.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0cbf992ea2fb9e247615e94c29b2083032a32152;p=util-vserver.git - Update the kernel headers to 2.0.2.1. - Add missing flags. - Fix the calls that got updated so they work as expected. git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@2317 94cd875c-1c1d-0410-91d2-eb244daf1a30 --- diff --git a/kernel/context.h b/kernel/context.h index ed1145e..816b8a2 100644 --- a/kernel/context.h +++ b/kernel/context.h @@ -36,7 +36,9 @@ #define VXF_STATE_SETUP (1ULL<<32) #define VXF_STATE_INIT (1ULL<<33) -#define VXF_STATE_HELPER (1ULL<<36) +#define VXF_SC_HELPER (1ULL<<36) +#define VXF_REBOOT_KILL (1ULL<<37) +#define VXF_PERSISTENT (1ULL<<38) #define VXF_FORK_RSS (1ULL<<48) #define VXF_PROLIFIC (1ULL<<49) @@ -48,6 +50,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 @@ -100,15 +107,18 @@ struct vx_info { uint64_t vx_bcaps; /* bounding caps (system) */ uint64_t vx_ccaps; /* context caps (vserver) */ - pid_t vx_initpid; /* PID of fake init process */ - - wait_queue_head_t vx_wait; /* context exit waitqueue */ + struct task_struct *vx_reaper; /* guest reaper process */ + pid_t vx_initpid; /* PID of guest init */ struct _vx_limit limit; /* vserver limits */ struct _vx_sched sched; /* vserver scheduler */ struct _vx_cvirt cvirt; /* virtual/bias stuff */ struct _vx_cacct cacct; /* context accounting */ + wait_queue_head_t vx_wait; /* context exit waitqueue */ + int reboot_cmd; /* last sys_reboot() cmd */ + int exit_code; /* last process exit code */ + char vx_name[65]; /* vserver name */ }; @@ -119,6 +129,7 @@ struct vx_info { #define VXS_PAUSED 0x0010 #define VXS_ONHOLD 0x0020 #define VXS_SHUTDOWN 0x0100 +#define VXS_HELPER 0x1000 #define VXS_RELEASED 0x8000 /* check conditions */ @@ -144,8 +155,8 @@ struct vx_info { extern void claim_vx_info(struct vx_info *, struct task_struct *); extern void release_vx_info(struct vx_info *, struct task_struct *); -extern struct vx_info *locate_vx_info(int); -extern struct vx_info *locate_or_create_vx_info(int); +extern struct vx_info *lookup_vx_info(int); +extern struct vx_info *lookup_or_create_vx_info(int); extern int get_xid_list(int, unsigned int *, int); extern int xid_is_hashed(xid_t); diff --git a/kernel/context_cmd.h b/kernel/context_cmd.h index f631095..5a3195f 100644 --- a/kernel/context_cmd.h +++ b/kernel/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 *); diff --git a/kernel/cvirt.h b/kernel/cvirt.h index eb13878..204db79 100644 --- a/kernel/cvirt.h +++ b/kernel/cvirt.h @@ -1,6 +1,7 @@ #ifndef _VX_CVIRT_H #define _VX_CVIRT_H + #ifdef __KERNEL__ struct timespec; diff --git a/kernel/cvirt_cmd.h b/kernel/cvirt_cmd.h index 3260b9f..6720469 100644 --- a/kernel/cvirt_cmd.h +++ b/kernel/cvirt_cmd.h @@ -1,6 +1,7 @@ #ifndef _VX_CVIRT_CMD_H #define _VX_CVIRT_CMD_H + /* virtual host info name commands */ #define VCMD_set_vhi_name VC_CMD(VHOST, 1, 0) diff --git a/kernel/debug.h b/kernel/debug.h index afdf3d4..5195209 100644 --- a/kernel/debug.h +++ b/kernel/debug.h @@ -1,9 +1,6 @@ #ifndef _VX_DEBUG_H #define _VX_DEBUG_H -#ifndef CONFIG_VSERVER -#warning config options missing -#endif #define VXD_CBIT(n,m) (vx_debug_ ## n & (1 << (m))) #define VXD_CMIN(n,m) (vx_debug_ ## n > (m)) @@ -29,6 +26,7 @@ extern unsigned int vx_debug_xid; extern unsigned int vx_debug_nid; extern unsigned int vx_debug_net; extern unsigned int vx_debug_limit; +extern unsigned int vx_debug_cres; extern unsigned int vx_debug_dlim; extern unsigned int vx_debug_cvirt; extern unsigned int vx_debug_misc; @@ -62,11 +60,13 @@ extern unsigned int vx_debug_misc; printk(VX_WARNLEVEL f "\n" , ##x); \ } while (0) - #define vxd_path(d,m) \ ({ static char _buffer[PATH_MAX]; \ d_path((d), (m), _buffer, sizeof(_buffer)); }) +#define vxd_cond_path(n) \ + ((n) ? vxd_path((n)->dentry, (n)->mnt) : "" ) + #else /* CONFIG_VSERVER_DEBUG */ #define vx_debug_switch 0 @@ -74,6 +74,7 @@ extern unsigned int vx_debug_misc; #define vx_debug_nid 0 #define vx_debug_net 0 #define vx_debug_limit 0 +#define vx_debug_cres 0 #define vx_debug_dlim 0 #define vx_debug_cvirt 0 @@ -83,6 +84,7 @@ extern unsigned int vx_debug_misc; #define vxwprintk(x...) do { } while (0) #define vxd_path "" +#define vxd_cond_path vxd_path #endif /* CONFIG_VSERVER_DEBUG */ @@ -142,14 +144,9 @@ struct _vx_hist_entry { struct _vx_hist_entry *vxh_advance(void *loc); -#define VXH_HERE(__type) \ - ({ __label__ __vxh_##__type; \ - __vxh_##__type:; \ - &&__vxh_##__type; }) - - -static inline void __vxh_copy_vxi(struct _vx_hist_entry *entry, struct vx_info *vxi) +static inline +void __vxh_copy_vxi(struct _vx_hist_entry *entry, struct vx_info *vxi) { entry->vxi.ptr = vxi; if (vxi) { @@ -160,95 +157,117 @@ static inline void __vxh_copy_vxi(struct _vx_hist_entry *entry, struct vx_info * } -#define __VXH_BODY(__type, __data) \ +#define __HERE__ current_text_addr() + +#define __VXH_BODY(__type, __data, __here) \ struct _vx_hist_entry *entry; \ \ preempt_disable(); \ - entry = vxh_advance(VXH_HERE(__type)); \ + entry = vxh_advance(__here); \ __data; \ entry->type = __type; \ preempt_enable(); /* pass vxi only */ -#define __VXH_SIMPLE \ + +#define __VXH_SMPL \ __vxh_copy_vxi(entry, vxi) -#define VXH_SIMPLE(__name, __type) \ -static inline void __name(struct vx_info *vxi) \ -{ \ - __VXH_BODY(__type, __VXH_SIMPLE) \ +static inline +void __vxh_smpl(struct vx_info *vxi, int __type, void *__here) +{ + __VXH_BODY(__type, __VXH_SMPL, __here) } /* pass vxi and data (void *) */ + #define __VXH_DATA \ __vxh_copy_vxi(entry, vxi); \ entry->sc.data = data -#define VXH_DATA(__name, __type) \ -static inline \ -void __name(struct vx_info *vxi, void *data) \ -{ \ - __VXH_BODY(__type, __VXH_DATA) \ +static inline +void __vxh_data(struct vx_info *vxi, void *data, + int __type, void *__here) +{ + __VXH_BODY(__type, __VXH_DATA, __here) } /* pass vxi and arg (long) */ -#define __VXH_LARG \ + +#define __VXH_LONG \ __vxh_copy_vxi(entry, vxi); \ entry->ll.arg = arg -#define VXH_LARG(__name, __type) \ -static inline \ -void __name(struct vx_info *vxi, long arg) \ -{ \ - __VXH_BODY(__type, __VXH_LARG) \ +static inline +void __vxh_long(struct vx_info *vxi, long arg, + int __type, void *__here) +{ + __VXH_BODY(__type, __VXH_LONG, __here) } -static inline void vxh_throw_oops(void) +static inline +void __vxh_throw_oops(void *__here) { - __VXH_BODY(VXH_THROW_OOPS, {}); + __VXH_BODY(VXH_THROW_OOPS, {}, __here); /* prevent further acquisition */ vxh_active = 0; } -VXH_SIMPLE(vxh_get_vx_info, VXH_GET_VX_INFO); -VXH_SIMPLE(vxh_put_vx_info, VXH_PUT_VX_INFO); -VXH_DATA(vxh_init_vx_info, VXH_INIT_VX_INFO); -VXH_DATA(vxh_set_vx_info, VXH_SET_VX_INFO); -VXH_DATA(vxh_clr_vx_info, VXH_CLR_VX_INFO); +#define vxh_throw_oops() __vxh_throw_oops(__HERE__); + +#define __vxh_get_vx_info(v,h) __vxh_smpl(v, VXH_GET_VX_INFO, h); +#define __vxh_put_vx_info(v,h) __vxh_smpl(v, VXH_PUT_VX_INFO, h); + +#define __vxh_init_vx_info(v,d,h) \ + __vxh_data(v,d, VXH_INIT_VX_INFO, h); +#define __vxh_set_vx_info(v,d,h) \ + __vxh_data(v,d, VXH_SET_VX_INFO, h); +#define __vxh_clr_vx_info(v,d,h) \ + __vxh_data(v,d, VXH_CLR_VX_INFO, h); -VXH_DATA(vxh_claim_vx_info, VXH_CLAIM_VX_INFO); -VXH_DATA(vxh_release_vx_info, VXH_RELEASE_VX_INFO); +#define __vxh_claim_vx_info(v,d,h) \ + __vxh_data(v,d, VXH_CLAIM_VX_INFO, h); +#define __vxh_release_vx_info(v,d,h) \ + __vxh_data(v,d, VXH_RELEASE_VX_INFO, h); -VXH_SIMPLE(vxh_alloc_vx_info, VXH_ALLOC_VX_INFO); -VXH_SIMPLE(vxh_dealloc_vx_info, VXH_DEALLOC_VX_INFO); +#define vxh_alloc_vx_info(v) \ + __vxh_smpl(v, VXH_ALLOC_VX_INFO, __HERE__); +#define vxh_dealloc_vx_info(v) \ + __vxh_smpl(v, VXH_DEALLOC_VX_INFO, __HERE__); -VXH_SIMPLE(vxh_hash_vx_info, VXH_HASH_VX_INFO); -VXH_SIMPLE(vxh_unhash_vx_info, VXH_UNHASH_VX_INFO); +#define vxh_hash_vx_info(v) \ + __vxh_smpl(v, VXH_HASH_VX_INFO, __HERE__); +#define vxh_unhash_vx_info(v) \ + __vxh_smpl(v, VXH_UNHASH_VX_INFO, __HERE__); -VXH_LARG(vxh_loc_vx_info, VXH_LOC_VX_INFO); -VXH_LARG(vxh_lookup_vx_info, VXH_LOOKUP_VX_INFO); -VXH_LARG(vxh_create_vx_info, VXH_CREATE_VX_INFO); +#define vxh_loc_vx_info(v,l) \ + __vxh_long(v,l, VXH_LOC_VX_INFO, __HERE__); +#define vxh_lookup_vx_info(v,l) \ + __vxh_long(v,l, VXH_LOOKUP_VX_INFO, __HERE__); +#define vxh_create_vx_info(v,l) \ + __vxh_long(v,l, VXH_CREATE_VX_INFO, __HERE__); extern void vxh_dump_history(void); #else /* CONFIG_VSERVER_HISTORY */ +#define __HERE__ 0 #define vxh_throw_oops() do { } while (0) -#define vxh_get_vx_info(v) do { } while (0) -#define vxh_put_vx_info(v) do { } while (0) +#define __vxh_get_vx_info(v,h) do { } while (0) +#define __vxh_put_vx_info(v,h) do { } while (0) -#define vxh_init_vx_info(v,d) do { } while (0) -#define vxh_set_vx_info(v,d) do { } while (0) -#define vxh_clr_vx_info(v,d) do { } while (0) +#define __vxh_init_vx_info(v,d,h) do { } while (0) +#define __vxh_set_vx_info(v,d,h) do { } while (0) +#define __vxh_clr_vx_info(v,d,h) do { } while (0) -#define vxh_claim_vx_info(v,d) do { } while (0) -#define vxh_release_vx_info(v,d) do { } while (0) +#define __vxh_claim_vx_info(v,d,h) do { } while (0) +#define __vxh_release_vx_info(v,d,h) do { } while (0) #define vxh_alloc_vx_info(v) do { } while (0) #define vxh_dealloc_vx_info(v) do { } while (0) diff --git a/kernel/dlimit_cmd.h b/kernel/dlimit_cmd.h index b91a946..35f7a68 100644 --- a/kernel/dlimit_cmd.h +++ b/kernel/dlimit_cmd.h @@ -1,6 +1,7 @@ #ifndef _VX_DLIMIT_CMD_H #define _VX_DLIMIT_CMD_H + /* dlimit vserver commands */ #define VCMD_add_dlimit VC_CMD(DLIMIT, 1, 0) diff --git a/kernel/inode.h b/kernel/inode.h index 25859ee..d5dec6a 100644 --- a/kernel/inode.h +++ b/kernel/inode.h @@ -15,9 +15,6 @@ #ifdef __KERNEL__ -#ifndef CONFIG_VSERVER -#warning config options missing -#endif #ifdef CONFIG_VSERVER_PROC_SECURE #define IATTR_PROC_DEFAULT ( IATTR_ADMIN | IATTR_HIDE ) diff --git a/kernel/inode_cmd.h b/kernel/inode_cmd.h index f14c899..df5e966 100644 --- a/kernel/inode_cmd.h +++ b/kernel/inode_cmd.h @@ -1,6 +1,7 @@ #ifndef _VX_INODE_CMD_H #define _VX_INODE_CMD_H + /* inode vserver commands */ #define VCMD_get_iattr_v0 VC_CMD(INODE, 1, 0) @@ -27,6 +28,7 @@ struct vcmd_ctx_iattr_v1 { #ifdef __KERNEL__ + #ifdef CONFIG_COMPAT struct vcmd_ctx_iattr_v1_x32 { diff --git a/kernel/legacy.h b/kernel/legacy.h index f058983..41afbd9 100644 --- a/kernel/legacy.h +++ b/kernel/legacy.h @@ -3,6 +3,7 @@ #include "switch.h" + /* compatibiliy vserver commands */ #define VCMD_new_s_context VC_CMD(COMPAT, 1, 1) diff --git a/kernel/limit.h b/kernel/limit.h index 8656fd9..aaaee11 100644 --- a/kernel/limit.h +++ b/kernel/limit.h @@ -14,11 +14,7 @@ struct sysinfo; void vx_vsi_meminfo(struct sysinfo *); void vx_vsi_swapinfo(struct sysinfo *); -#define VXD_RLIMIT(r,l) (VXD_CBIT(limit, (l)) && ((r) == (l))) - #define NUM_LIMITS 24 -extern const char *vlimit_name[NUM_LIMITS]; - #endif /* __KERNEL__ */ #endif /* _VX_LIMIT_H */ diff --git a/kernel/limit_cmd.h b/kernel/limit_cmd.h index a994d02..13a7892 100644 --- a/kernel/limit_cmd.h +++ b/kernel/limit_cmd.h @@ -1,6 +1,7 @@ #ifndef _VX_LIMIT_CMD_H #define _VX_LIMIT_CMD_H + /* rlimit vserver commands */ #define VCMD_get_rlimit VC_CMD(RLIMIT, 1, 0) @@ -26,11 +27,29 @@ struct vcmd_ctx_rlimit_mask_v0 { #ifdef __KERNEL__ +#ifdef CONFIG_IA32_EMULATION + +struct vcmd_ctx_rlimit_v0_x32 { + uint32_t id; + uint64_t minimum; + uint64_t softlimit; + uint64_t maximum; +} __attribute__ ((aligned (4))); + +#endif /* CONFIG_IA32_EMULATION */ + #include extern int vc_get_rlimit(uint32_t, void __user *); extern int vc_set_rlimit(uint32_t, void __user *); extern int vc_get_rlimit_mask(uint32_t, void __user *); +#ifdef CONFIG_IA32_EMULATION + +extern int vc_get_rlimit_x32(uint32_t, void __user *); +extern int vc_set_rlimit_x32(uint32_t, void __user *); + +#endif /* CONFIG_IA32_EMULATION */ + #endif /* __KERNEL__ */ #endif /* _VX_LIMIT_CMD_H */ diff --git a/kernel/limit_def.h b/kernel/limit_def.h index bab1def..b4a32c8 100644 --- a/kernel/limit_def.h +++ b/kernel/limit_def.h @@ -6,6 +6,7 @@ #include "limit.h" + /* context sub struct */ struct _vx_limit { diff --git a/kernel/namespace.h b/kernel/namespace.h index 1a6bb84..fb6cdd1 100644 --- a/kernel/namespace.h +++ b/kernel/namespace.h @@ -1,6 +1,7 @@ #ifndef _VX_NAMESPACE_H #define _VX_NAMESPACE_H + #include struct vx_info; diff --git a/kernel/namespace_cmd.h b/kernel/namespace_cmd.h index 7533100..b88f263 100644 --- a/kernel/namespace_cmd.h +++ b/kernel/namespace_cmd.h @@ -1,15 +1,17 @@ #ifndef _VX_NAMESPACE_CMD_H #define _VX_NAMESPACE_CMD_H + #define VCMD_enter_namespace VC_CMD(PROCALT, 1, 0) +/* XXX: This is not available in recent kernels */ #define VCMD_cleanup_namespace VC_CMD(PROCALT, 2, 0) -#define VCMD_set_namespace VC_CMD(PROCALT, 3, 0) +#define VCMD_set_namespace_v0 VC_CMD(PROCALT, 3, 0) +#define VCMD_set_namespace VC_CMD(PROCALT, 3, 1) #ifdef __KERNEL__ extern int vc_enter_namespace(uint32_t, void __user *); -extern int vc_cleanup_namespace(uint32_t, void __user *); extern int vc_set_namespace(uint32_t, void __user *); #endif /* __KERNEL__ */ diff --git a/kernel/network.h b/kernel/network.h index 84a005c..0e0253b 100644 --- a/kernel/network.h +++ b/kernel/network.h @@ -15,7 +15,8 @@ #define NXF_STATE_SETUP (1ULL<<32) -#define NXF_STATE_HELPER (1ULL<<36) +#define NXF_SC_HELPER (1ULL<<36) +#define NXF_PERSISTENT (1ULL<<38) #define NXF_ONE_TIME (0x0001ULL<<32) @@ -29,7 +30,7 @@ #define NXA_MOD_BCAST (1<<8) -#define NXA_TYPE_ANY (~0) +#define NXA_TYPE_ANY ((uint16_t)-1) #ifdef __KERNEL__ @@ -70,8 +71,7 @@ struct nx_info { #define NXS_SHUTDOWN 0x0100 #define NXS_RELEASED 0x8000 -extern struct nx_info *locate_nx_info(int); -extern struct nx_info *locate_or_create_nx_info(int); +extern struct nx_info *lookup_nx_info(int); extern int get_nid_list(int, unsigned int *, int); extern int nid_is_hashed(nid_t); @@ -83,12 +83,35 @@ extern long vs_net_change(struct nx_info *, unsigned int); struct in_ifaddr; struct net_device; +#ifdef CONFIG_INET int ifa_in_nx_info(struct in_ifaddr *, struct nx_info *); int dev_in_nx_info(struct net_device *, struct nx_info *); +#else /* CONFIG_INET */ +static inline +int ifa_in_nx_info(struct in_ifaddr *a, struct nx_info *n) +{ + return 1; +} + +static inline +int dev_in_nx_info(struct net_device *d, struct nx_info *n) +{ + return 1; +} +#endif /* CONFIG_INET */ + struct sock; +#ifdef CONFIG_INET int nx_addr_conflict(struct nx_info *, uint32_t, struct sock *); +#else /* CONFIG_INET */ +static inline +int nx_addr_conflict(struct nx_info *n, uint32_t a, struct sock *s) +{ + return 1; +} +#endif /* CONFIG_INET */ #endif /* __KERNEL__ */ #else /* _VX_NETWORK_H */ diff --git a/kernel/sched.h b/kernel/sched.h index 60569ab..2ef4b99 100644 --- a/kernel/sched.h +++ b/kernel/sched.h @@ -1,6 +1,7 @@ #ifndef _VX_SCHED_H #define _VX_SCHED_H + #ifdef __KERNEL__ struct timespec; diff --git a/kernel/sched_cmd.h b/kernel/sched_cmd.h index 2a6f55b..b9e8ac1 100644 --- a/kernel/sched_cmd.h +++ b/kernel/sched_cmd.h @@ -1,6 +1,7 @@ #ifndef _VX_SCHED_CMD_H #define _VX_SCHED_CMD_H + /* sched vserver commands */ #define VCMD_set_sched_v2 VC_CMD(SCHED, 1, 2) diff --git a/kernel/signal_cmd.h b/kernel/signal_cmd.h index e842538..1a2bcc3 100644 --- a/kernel/signal_cmd.h +++ b/kernel/signal_cmd.h @@ -1,6 +1,7 @@ #ifndef _VX_SIGNAL_CMD_H #define _VX_SIGNAL_CMD_H + /* signalling vserver commands */ #define VCMD_ctx_kill VC_CMD(PROCTRL, 1, 0) @@ -12,8 +13,8 @@ struct vcmd_ctx_kill_v0 { }; struct vcmd_wait_exit_v0 { - int32_t a; - int32_t b; + int32_t reboot_cmd; + int32_t exit_code; }; #ifdef __KERNEL__ diff --git a/kernel/switch.h b/kernel/switch.h index 0c7fddb..b7e255e 100644 --- a/kernel/switch.h +++ b/kernel/switch.h @@ -3,6 +3,7 @@ #include + #define VC_CATEGORY(c) (((c) >> 24) & 0x3F) #define VC_COMMAND(c) (((c) >> 16) & 0xFF) #define VC_VERSION(c) ((c) & 0xFFF) @@ -77,7 +78,7 @@ /* interface version */ -#define VCI_VERSION 0x00020001 +#define VCI_VERSION 0x00020002 #define VCI_LEGACY_VERSION 0x000100FF /* query version */ diff --git a/kernel/xid.h b/kernel/xid.h index 263ed67..2e4349e 100644 --- a/kernel/xid.h +++ b/kernel/xid.h @@ -1,9 +1,8 @@ #ifndef _VX_XID_H #define _VX_XID_H -#ifndef CONFIG_VSERVER -#warning config options missing -#endif +#include + #define XID_TAG(in) (IS_TAGXID(in)) diff --git a/lib/cflags-v13.c b/lib/cflags-v13.c index a779503..8f0b240 100644 --- a/lib/cflags-v13.c +++ b/lib/cflags-v13.c @@ -54,6 +54,10 @@ static struct Mapping_uint64 const VALUES[] = { DECL("state_setup", VC_VXF_STATE_SETUP), DECL("state_init", VC_VXF_STATE_INIT), + DECL("sc_helper", VC_VXF_SC_HELPER), + DECL("persistent", VC_VXF_PERSISTENT), + DECL("reboot_kill", VC_VXF_REBOOT_KILL), + DECL("fork_rss", VC_VXF_FORK_RSS), DECL("prolific", VC_VXF_PROLIFIC), DECL("igneg_nice", VC_VXF_IGNEG_NICE), diff --git a/lib/syscall_ctxmigrate-v13.hc b/lib/syscall_ctxmigrate-v13.hc index bc18a19..34b3073 100644 --- a/lib/syscall_ctxmigrate-v13.hc +++ b/lib/syscall_ctxmigrate-v13.hc @@ -23,5 +23,5 @@ static inline ALWAYSINLINE int vc_ctx_migrate_v13(xid_t xid) { - return vserver(VCMD_ctx_migrate, CTX_USER2KERNEL(xid), 0); + return vserver(VCMD_ctx_migrate, CTX_USER2KERNEL(xid), NULL); } diff --git a/lib/syscall_setnamespace-v13.hc b/lib/syscall_setnamespace-v13.hc index 04fec90..ce7d5ad 100644 --- a/lib/syscall_setnamespace-v13.hc +++ b/lib/syscall_setnamespace-v13.hc @@ -25,5 +25,5 @@ static inline ALWAYSINLINE int vc_set_namespace_v13(int UNUSED tmp) { - return vserver(VCMD_set_namespace, 0, 0); + return vserver(VCMD_set_namespace, -1, 0); } diff --git a/lib/syscall_waitexit-v13.hc b/lib/syscall_waitexit-v13.hc index d786a17..d44ad2a 100644 --- a/lib/syscall_waitexit-v13.hc +++ b/lib/syscall_waitexit-v13.hc @@ -23,7 +23,7 @@ static inline ALWAYSINLINE int vc_wait_exit_v13b(xid_t ctx) { - struct vcmd_wait_exit_v0 param = { .a = 0, .b = 0 }; + struct vcmd_wait_exit_v0 param = { .reboot_cmd = 0, .exit_code = 0 }; return vserver(VCMD_wait_exit, CTX_USER2KERNEL(ctx), ¶m); } diff --git a/lib/vserver.h b/lib/vserver.h index 8279869..cdf671a 100644 --- a/lib/vserver.h +++ b/lib/vserver.h @@ -181,6 +181,10 @@ #define VC_VXF_STATE_SETUP (1ULL<<32) #define VC_VXF_STATE_INIT (1ULL<<33) +#define VC_VXF_SC_HELPER (1ULL<<36) +#define VC_VXF_REBOOT_KILL (1ULL<<37) +#define VC_VXF_PERSISTENT (1ULL<<38) + #define VC_VXF_FORK_RSS (1ULL<<48) #define VC_VXF_PROLIFIC (1ULL<<49)