summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'util-vserver/patches/0.30.211-r1/040_all_kernel-headers.patch')
-rw-r--r--util-vserver/patches/0.30.211-r1/040_all_kernel-headers.patch2577
1 files changed, 0 insertions, 2577 deletions
diff --git a/util-vserver/patches/0.30.211-r1/040_all_kernel-headers.patch b/util-vserver/patches/0.30.211-r1/040_all_kernel-headers.patch
deleted file mode 100644
index 06a3fbf..0000000
--- a/util-vserver/patches/0.30.211-r1/040_all_kernel-headers.patch
+++ /dev/null
@@ -1,2577 +0,0 @@
-Index: kernel/xid.h
-===================================================================
---- kernel/xid.h (revision 2366)
-+++ kernel/xid.h (revision 2369)
-@@ -1,146 +0,0 @@
--#ifndef _VX_XID_H
--#define _VX_XID_H
--
--#include <linux/config.h>
--
--
--#define XID_TAG(in) (IS_TAGXID(in))
--
--
--#ifdef CONFIG_XID_TAG_NFSD
--#define XID_TAG_NFSD 1
--#else
--#define XID_TAG_NFSD 0
--#endif
--
--
--#ifdef CONFIG_INOXID_NONE
--
--#define MAX_UID 0xFFFFFFFF
--#define MAX_GID 0xFFFFFFFF
--
--#define INOXID_XID(tag, uid, gid, xid) (0)
--
--#define XIDINO_UID(tag, uid, xid) (uid)
--#define XIDINO_GID(tag, gid, xid) (gid)
--
--#endif
--
--
--#ifdef CONFIG_INOXID_GID16
--
--#define MAX_UID 0xFFFFFFFF
--#define MAX_GID 0x0000FFFF
--
--#define INOXID_XID(tag, uid, gid, xid) \
-- ((tag) ? (((gid) >> 16) & 0xFFFF) : 0)
--
--#define XIDINO_UID(tag, uid, xid) (uid)
--#define XIDINO_GID(tag, gid, xid) \
-- ((tag) ? (((gid) & 0xFFFF) | ((xid) << 16)) : (gid))
--
--#endif
--
--
--#ifdef CONFIG_INOXID_UGID24
--
--#define MAX_UID 0x00FFFFFF
--#define MAX_GID 0x00FFFFFF
--
--#define INOXID_XID(tag, uid, gid, xid) \
-- ((tag) ? ((((uid) >> 16) & 0xFF00) | (((gid) >> 24) & 0xFF)) : 0)
--
--#define XIDINO_UID(tag, uid, xid) \
-- ((tag) ? (((uid) & 0xFFFFFF) | (((xid) & 0xFF00) << 16)) : (uid))
--#define XIDINO_GID(tag, gid, xid) \
-- ((tag) ? (((gid) & 0xFFFFFF) | (((xid) & 0x00FF) << 24)) : (gid))
--
--#endif
--
--
--#ifdef CONFIG_INOXID_UID16
--
--#define MAX_UID 0x0000FFFF
--#define MAX_GID 0xFFFFFFFF
--
--#define INOXID_XID(tag, uid, gid, xid) \
-- ((tag) ? (((uid) >> 16) & 0xFFFF) : 0)
--
--#define XIDINO_UID(tag, uid, xid) \
-- ((tag) ? (((uid) & 0xFFFF) | ((xid) << 16)) : (uid))
--#define XIDINO_GID(tag, gid, xid) (gid)
--
--#endif
--
--
--#ifdef CONFIG_INOXID_INTERN
--
--#define MAX_UID 0xFFFFFFFF
--#define MAX_GID 0xFFFFFFFF
--
--#define INOXID_XID(tag, uid, gid, xid) \
-- ((tag) ? (xid) : 0)
--
--#define XIDINO_UID(tag, uid, xid) (uid)
--#define XIDINO_GID(tag, gid, xid) (gid)
--
--#endif
--
--
--#ifdef CONFIG_INOXID_RUNTIME
--
--#define MAX_UID 0xFFFFFFFF
--#define MAX_GID 0xFFFFFFFF
--
--#define INOXID_XID(tag, uid, gid, xid) (0)
--
--#define XIDINO_UID(tag, uid, xid) (uid)
--#define XIDINO_GID(tag, gid, xid) (gid)
--
--#endif
--
--
--#ifndef CONFIG_INOXID_NONE
--#define vx_current_fsxid(sb) \
-- ((sb)->s_flags & MS_TAGXID ? current->xid : 0)
--#else
--#define vx_current_fsxid(sb) (0)
--#endif
--
--#ifndef CONFIG_INOXID_INTERN
--#define XIDINO_XID(tag, xid) (0)
--#else
--#define XIDINO_XID(tag, xid) ((tag) ? (xid) : 0)
--#endif
--
--#define INOXID_UID(tag, uid, gid) \
-- ((tag) ? ((uid) & MAX_UID) : (uid))
--#define INOXID_GID(tag, uid, gid) \
-- ((tag) ? ((gid) & MAX_GID) : (gid))
--
--
--static inline uid_t vx_map_uid(uid_t uid)
--{
-- if ((uid > MAX_UID) && (uid != -1))
-- uid = -2;
-- return (uid & MAX_UID);
--}
--
--static inline gid_t vx_map_gid(gid_t gid)
--{
-- if ((gid > MAX_GID) && (gid != -1))
-- gid = -2;
-- return (gid & MAX_GID);
--}
--
--
--#ifdef CONFIG_VSERVER_LEGACY
--#define FIOC_GETXID _IOR('x', 1, long)
--#define FIOC_SETXID _IOW('x', 2, long)
--#define FIOC_SETXIDJ _IOW('x', 3, long)
--#endif
--
--int vx_parse_xid(char *string, xid_t *xid, int remove);
--void vx_propagate_xid(struct nameidata *nd, struct inode *inode);
--
--#endif /* _VX_XID_H */
-Index: kernel/limit_def.h
-===================================================================
---- kernel/limit_def.h (revision 2366)
-+++ kernel/limit_def.h (revision 2369)
-@@ -7,16 +7,41 @@
- #include "limit.h"
-
-
-+struct _vx_res_limit {
-+ rlim_t soft; /* Context soft limit */
-+ rlim_t hard; /* Context hard limit */
-+
-+ rlim_atomic_t rcur; /* Current value */
-+ rlim_t rmin; /* Context minimum */
-+ rlim_t rmax; /* Context maximum */
-+
-+ atomic_t lhit; /* Limit hits */
-+};
-+
- /* context sub struct */
-
- struct _vx_limit {
-- atomic_t ticks;
--
-- unsigned long rlim[NUM_LIMITS]; /* Context limit */
-- unsigned long rmax[NUM_LIMITS]; /* Context maximum */
-- atomic_t rcur[NUM_LIMITS]; /* Current value */
-- atomic_t lhit[NUM_LIMITS]; /* Limit hits */
-+ struct _vx_res_limit res[NUM_LIMITS];
- };
-
-+#ifdef CONFIG_VSERVER_DEBUG
-
-+static inline void __dump_vx_limit(struct _vx_limit *limit)
-+{
-+ int i;
-+
-+ printk("\t_vx_limit:");
-+ for (i=0; i<NUM_LIMITS; i++) {
-+ printk("\t [%2d] = %8lu %8lu/%8lu, %8ld/%8ld, %8d\n",
-+ i, (unsigned long)__rlim_get(limit, i),
-+ (unsigned long)__rlim_rmin(limit, i),
-+ (unsigned long)__rlim_rmax(limit, i),
-+ (long)__rlim_soft(limit, i),
-+ (long)__rlim_hard(limit, i),
-+ atomic_read(&__rlim_lhit(limit, i)));
-+ }
-+}
-+
-+#endif
-+
- #endif /* _VX_LIMIT_DEF_H */
-Index: kernel/signal_cmd.h
-===================================================================
---- kernel/signal_cmd.h (revision 2366)
-+++ kernel/signal_cmd.h (revision 2369)
-@@ -19,8 +19,25 @@
-
- #ifdef __KERNEL__
-
--extern int vc_ctx_kill(uint32_t, void __user *);
--extern int vc_wait_exit(uint32_t, void __user *);
-+extern int vc_ctx_kill(struct vx_info *, void __user *);
-+extern int vc_wait_exit(struct vx_info *, void __user *);
-
- #endif /* __KERNEL__ */
-+
-+/* process alteration commands */
-+
-+#define VCMD_get_pflags VC_CMD(PROCALT, 1, 0)
-+#define VCMD_set_pflags VC_CMD(PROCALT, 2, 0)
-+
-+struct vcmd_pflags_v0 {
-+ uint32_t flagword;
-+ uint32_t mask;
-+};
-+
-+#ifdef __KERNEL__
-+
-+extern int vc_get_pflags(uint32_t pid, void __user *);
-+extern int vc_set_pflags(uint32_t pid, void __user *);
-+
-+#endif /* __KERNEL__ */
- #endif /* _VX_SIGNAL_CMD_H */
-Index: kernel/limit_cmd.h
-===================================================================
---- kernel/limit_cmd.h (revision 2366)
-+++ kernel/limit_cmd.h (revision 2369)
-@@ -7,6 +7,7 @@
- #define VCMD_get_rlimit VC_CMD(RLIMIT, 1, 0)
- #define VCMD_set_rlimit VC_CMD(RLIMIT, 2, 0)
- #define VCMD_get_rlimit_mask VC_CMD(RLIMIT, 3, 0)
-+#define VCMD_reset_minmax VC_CMD(RLIMIT, 9, 0)
-
- struct vcmd_ctx_rlimit_v0 {
- uint32_t id;
-@@ -21,6 +22,16 @@
- uint32_t maximum;
- };
-
-+#define VCMD_rlimit_stat VC_CMD(VSTAT, 1, 0)
-+
-+struct vcmd_rlimit_stat_v0 {
-+ uint32_t id;
-+ uint32_t hits;
-+ uint64_t value;
-+ uint64_t minimum;
-+ uint64_t maximum;
-+};
-+
- #define CRLIM_UNSET (0ULL)
- #define CRLIM_INFINITY (~0ULL)
- #define CRLIM_KEEP (~1ULL)
-@@ -40,14 +51,17 @@
-
- #include <linux/compiler.h>
-
--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 *);
-+extern int vc_get_rlimit(struct vx_info *, void __user *);
-+extern int vc_set_rlimit(struct vx_info *, void __user *);
-+extern int vc_reset_minmax(struct vx_info *, void __user *);
-
-+extern int vc_rlimit_stat(struct vx_info *, 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 *);
-+extern int vc_get_rlimit_x32(struct vx_info *, void __user *);
-+extern int vc_set_rlimit_x32(struct vx_info *, void __user *);
-
- #endif /* CONFIG_IA32_EMULATION */
-
-Index: kernel/history.h
-===================================================================
---- kernel/history.h (revision 0)
-+++ kernel/history.h (revision 2369)
-@@ -0,0 +1,197 @@
-+#ifndef _VX_HISTORY_H
-+#define _VX_HISTORY_H
-+
-+
-+enum {
-+ VXH_UNUSED=0,
-+ VXH_THROW_OOPS=1,
-+
-+ VXH_GET_VX_INFO,
-+ VXH_PUT_VX_INFO,
-+ VXH_INIT_VX_INFO,
-+ VXH_SET_VX_INFO,
-+ VXH_CLR_VX_INFO,
-+ VXH_CLAIM_VX_INFO,
-+ VXH_RELEASE_VX_INFO,
-+ VXH_ALLOC_VX_INFO,
-+ VXH_DEALLOC_VX_INFO,
-+ VXH_HASH_VX_INFO,
-+ VXH_UNHASH_VX_INFO,
-+ VXH_LOC_VX_INFO,
-+ VXH_LOOKUP_VX_INFO,
-+ VXH_CREATE_VX_INFO,
-+};
-+
-+struct _vxhe_vxi {
-+ struct vx_info *ptr;
-+ unsigned xid;
-+ unsigned usecnt;
-+ unsigned tasks;
-+};
-+
-+struct _vxhe_set_clr {
-+ void *data;
-+};
-+
-+struct _vxhe_loc_lookup {
-+ unsigned arg;
-+};
-+
-+struct _vx_hist_entry {
-+ void *loc;
-+ unsigned short seq;
-+ unsigned short type;
-+ struct _vxhe_vxi vxi;
-+ union {
-+ struct _vxhe_set_clr sc;
-+ struct _vxhe_loc_lookup ll;
-+ };
-+};
-+
-+#ifdef CONFIG_VSERVER_HISTORY
-+
-+extern unsigned volatile int vxh_active;
-+
-+struct _vx_hist_entry *vxh_advance(void *loc);
-+
-+
-+static inline
-+void __vxh_copy_vxi(struct _vx_hist_entry *entry, struct vx_info *vxi)
-+{
-+ entry->vxi.ptr = vxi;
-+ if (vxi) {
-+ entry->vxi.usecnt = atomic_read(&vxi->vx_usecnt);
-+ entry->vxi.tasks = atomic_read(&vxi->vx_tasks);
-+ entry->vxi.xid = vxi->vx_id;
-+ }
-+}
-+
-+
-+#define __HERE__ current_text_addr()
-+
-+#define __VXH_BODY(__type, __data, __here) \
-+ struct _vx_hist_entry *entry; \
-+ \
-+ preempt_disable(); \
-+ entry = vxh_advance(__here); \
-+ __data; \
-+ entry->type = __type; \
-+ preempt_enable();
-+
-+
-+ /* pass vxi only */
-+
-+#define __VXH_SMPL \
-+ __vxh_copy_vxi(entry, vxi)
-+
-+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
-+
-+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_LONG \
-+ __vxh_copy_vxi(entry, vxi); \
-+ entry->ll.arg = arg
-+
-+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 *__here)
-+{
-+ __VXH_BODY(VXH_THROW_OOPS, {}, __here);
-+ /* prevent further acquisition */
-+ vxh_active = 0;
-+}
-+
-+
-+#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);
-+
-+#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);
-+
-+#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__);
-+
-+#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__);
-+
-+#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,h) do { } while (0)
-+#define __vxh_put_vx_info(v,h) 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,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)
-+
-+#define vxh_hash_vx_info(v) do { } while (0)
-+#define vxh_unhash_vx_info(v) do { } while (0)
-+
-+#define vxh_loc_vx_info(a,v) do { } while (0)
-+#define vxh_lookup_vx_info(a,v) do { } while (0)
-+#define vxh_create_vx_info(a,v) do { } while (0)
-+
-+#define vxh_dump_history() do { } while (0)
-+
-+
-+#endif /* CONFIG_VSERVER_HISTORY */
-+
-+#endif /* _VX_HISTORY_H */
-Index: kernel/switch.h
-===================================================================
---- kernel/switch.h (revision 2366)
-+++ kernel/switch.h (revision 2369)
-@@ -34,7 +34,7 @@
- DISK | | | | |DLIMIT | | |INODE | |
- VFS | 32| 33| 34| 35| 36| 37| | 38| 39|
- -------+-------+-------+-------+-------+-------+-------+ +-------+-------+
-- OTHER | | | | | | | |VINFO | |
-+ OTHER |VSTAT | | | | | | |VINFO | |
- | 40| 41| 42| 43| 44| 45| | 46| 47|
- =======+=======+=======+=======+=======+=======+=======+ +=======+=======+
- SPECIAL|EVENT | | | |FLAGS | | | | |
-@@ -66,6 +66,7 @@
- #define VC_CAT_DLIMIT 36
- #define VC_CAT_INODE 38
-
-+#define VC_CAT_VSTAT 40
- #define VC_CAT_VINFO 46
- #define VC_CAT_EVENT 48
-
-@@ -78,12 +79,13 @@
-
- /* interface version */
-
--#define VCI_VERSION 0x00020002
-+#define VCI_VERSION 0x00020102
- #define VCI_LEGACY_VERSION 0x000100FF
-
- /* query version */
-
- #define VCMD_get_version VC_CMD(VERSION, 0, 0)
-+#define VCMD_get_vci VC_CMD(VERSION, 1, 0)
-
-
- #ifdef __KERNEL__
-Index: kernel/cvirt_def.h
-===================================================================
---- kernel/cvirt_def.h (revision 2366)
-+++ kernel/cvirt_def.h (revision 2369)
-@@ -35,7 +35,7 @@
- /* context sub struct */
-
- struct _vx_cvirt {
-- int max_threads; /* maximum allowed threads */
-+// int max_threads; /* maximum allowed threads */
- atomic_t nr_threads; /* number of current threads */
- atomic_t nr_running; /* number of running threads */
- atomic_t nr_uninterruptible; /* number of uninterruptible threads */
-@@ -43,6 +43,7 @@
- atomic_t nr_onhold; /* processes on hold */
- uint32_t onhold_last; /* jiffies when put on hold */
-
-+ struct timeval bias_tv; /* time offset to the host */
- struct timespec bias_idle;
- struct timespec bias_uptime; /* context creation point */
- uint64_t bias_clock; /* offset in clock_t */
-@@ -51,27 +52,33 @@
-
- spinlock_t load_lock; /* lock for the load averages */
- atomic_t load_updates; /* nr of load updates done so far */
-- uint32_t load_last; /* last time load was cacled */
-+ uint32_t load_last; /* last time load was calculated */
- uint32_t load[3]; /* load averages 1,5,15 */
-
- atomic_t total_forks; /* number of forks so far */
-
-- struct _vx_usage_stat cpustat[NR_CPUS];
--
- struct _vx_syslog syslog;
- };
-
--struct _vx_sock_acc {
-- atomic_t count;
-- atomic_t total;
-+struct _vx_cvirt_pc {
-+ struct _vx_usage_stat cpustat;
- };
-
--/* context sub struct */
-
--struct _vx_cacct {
-- unsigned long total_forks;
-+#ifdef CONFIG_VSERVER_DEBUG
-
-- struct _vx_sock_acc sock[5][3];
--};
-+static inline void __dump_vx_cvirt(struct _vx_cvirt *cvirt)
-+{
-+ printk("\t_vx_cvirt:\n");
-+ printk("\t threads: %4d, %4d, %4d, %4d\n",
-+ atomic_read(&cvirt->nr_threads),
-+ atomic_read(&cvirt->nr_running),
-+ atomic_read(&cvirt->nr_uninterruptible),
-+ atomic_read(&cvirt->nr_onhold));
-+ /* add rest here */
-+ printk("\t total_forks = %d\n", atomic_read(&cvirt->total_forks));
-+}
-
-+#endif
-+
- #endif /* _VX_CVIRT_DEF_H */
-Index: kernel/context_cmd.h
-===================================================================
---- kernel/context_cmd.h (revision 2366)
-+++ kernel/context_cmd.h (revision 2369)
-@@ -20,11 +20,23 @@
- };
-
- #ifdef __KERNEL__
--extern int vc_vx_info(uint32_t, void __user *);
-+extern int vc_vx_info(struct vx_info *, void __user *);
-
- #endif /* __KERNEL__ */
-
-+#define VCMD_ctx_stat VC_CMD(VSTAT, 0, 0)
-
-+struct vcmd_ctx_stat_v0 {
-+ uint32_t usecnt;
-+ uint32_t tasks;
-+ /* more to come */
-+};
-+
-+#ifdef __KERNEL__
-+extern int vc_ctx_stat(struct vx_info *, void __user *);
-+
-+#endif /* __KERNEL__ */
-+
- /* context commands */
-
- #define VCMD_ctx_create_v0 VC_CMD(VPROC, 1, 0)
-@@ -43,7 +55,7 @@
-
- #ifdef __KERNEL__
- extern int vc_ctx_create(uint32_t, void __user *);
--extern int vc_ctx_migrate(uint32_t, void __user *);
-+extern int vc_ctx_migrate(struct vx_info *, void __user *);
-
- #endif /* __KERNEL__ */
-
-@@ -59,16 +71,16 @@
- };
-
- #ifdef __KERNEL__
--extern int vc_get_cflags(uint32_t, void __user *);
--extern int vc_set_cflags(uint32_t, void __user *);
-+extern int vc_get_cflags(struct vx_info *, void __user *);
-+extern int vc_set_cflags(struct vx_info *, void __user *);
-
- #endif /* __KERNEL__ */
-
-
- /* context caps commands */
-
--#define VCMD_get_ccaps VC_CMD(FLAGS, 3, 0)
--#define VCMD_set_ccaps VC_CMD(FLAGS, 4, 0)
-+#define VCMD_get_ccaps_v0 VC_CMD(FLAGS, 3, 0)
-+#define VCMD_set_ccaps_v0 VC_CMD(FLAGS, 4, 0)
-
- struct vcmd_ctx_caps_v0 {
- uint64_t bcaps;
-@@ -76,9 +88,36 @@
- uint64_t cmask;
- };
-
-+#define VCMD_get_ccaps VC_CMD(FLAGS, 3, 1)
-+#define VCMD_set_ccaps VC_CMD(FLAGS, 4, 1)
-+
-+struct vcmd_ctx_caps_v1 {
-+ uint64_t ccaps;
-+ uint64_t cmask;
-+};
-+
- #ifdef __KERNEL__
--extern int vc_get_ccaps(uint32_t, void __user *);
--extern int vc_set_ccaps(uint32_t, void __user *);
-+extern int vc_get_ccaps_v0(struct vx_info *, void __user *);
-+extern int vc_set_ccaps_v0(struct vx_info *, void __user *);
-+extern int vc_get_ccaps(struct vx_info *, void __user *);
-+extern int vc_set_ccaps(struct vx_info *, void __user *);
-
- #endif /* __KERNEL__ */
-+
-+
-+/* bcaps commands */
-+
-+#define VCMD_get_bcaps VC_CMD(FLAGS, 9, 0)
-+#define VCMD_set_bcaps VC_CMD(FLAGS,10, 0)
-+
-+struct vcmd_bcaps {
-+ uint64_t bcaps;
-+ uint64_t bmask;
-+};
-+
-+#ifdef __KERNEL__
-+extern int vc_get_bcaps(struct vx_info *, void __user *);
-+extern int vc_set_bcaps(struct vx_info *, void __user *);
-+
-+#endif /* __KERNEL__ */
- #endif /* _VX_CONTEXT_CMD_H */
-Index: kernel/cvirt_cmd.h
-===================================================================
---- kernel/cvirt_cmd.h (revision 2366)
-+++ kernel/cvirt_cmd.h (revision 2369)
-@@ -28,8 +28,26 @@
-
- #include <linux/compiler.h>
-
--extern int vc_set_vhi_name(uint32_t, void __user *);
--extern int vc_get_vhi_name(uint32_t, void __user *);
-+extern int vc_set_vhi_name(struct vx_info *, void __user *);
-+extern int vc_get_vhi_name(struct vx_info *, void __user *);
-
- #endif /* __KERNEL__ */
-+
-+#define VCMD_virt_stat VC_CMD(VSTAT, 3, 0)
-+
-+struct vcmd_virt_stat_v0 {
-+ uint64_t offset;
-+ uint64_t uptime;
-+ uint32_t nr_threads;
-+ uint32_t nr_running;
-+ uint32_t nr_uninterruptible;
-+ uint32_t nr_onhold;
-+ uint32_t nr_forks;
-+ uint32_t load[3];
-+};
-+
-+#ifdef __KERNEL__
-+extern int vc_virt_stat(struct vx_info *, void __user *);
-+
-+#endif /* __KERNEL__ */
- #endif /* _VX_CVIRT_CMD_H */
-Index: kernel/cacct.h
-===================================================================
---- kernel/cacct.h (revision 0)
-+++ kernel/cacct.h (revision 2369)
-@@ -0,0 +1,15 @@
-+#ifndef _VX_CACCT_H
-+#define _VX_CACCT_H
-+
-+
-+enum sock_acc_field {
-+ VXA_SOCK_UNSPEC = 0,
-+ VXA_SOCK_UNIX,
-+ VXA_SOCK_INET,
-+ VXA_SOCK_INET6,
-+ VXA_SOCK_PACKET,
-+ VXA_SOCK_OTHER,
-+ VXA_SOCK_SIZE /* array size */
-+};
-+
-+#endif /* _VX_CACCT_H */
-Index: kernel/dlimit.h
-===================================================================
---- kernel/dlimit.h (revision 2366)
-+++ kernel/dlimit.h (revision 2369)
-@@ -3,13 +3,13 @@
-
- #include "switch.h"
-
--#define CDLIM_UNSET (0ULL)
--#define CDLIM_INFINITY (~0ULL)
--#define CDLIM_KEEP (~1ULL)
-
--
- #ifdef __KERNEL__
-
-+/* keep in sync with CDLIM_INFINITY */
-+
-+#define DLIM_INFINITY (~0ULL)
-+
- #include <linux/spinlock.h>
-
- struct super_block;
-@@ -17,7 +17,7 @@
- struct dl_info {
- struct hlist_node dl_hlist; /* linked list of contexts */
- struct rcu_head dl_rcu; /* the rcu head */
-- xid_t dl_xid; /* context id */
-+ tag_t dl_tag; /* context tag */
- atomic_t dl_usecnt; /* usage count */
- atomic_t dl_refcnt; /* reference count */
-
-@@ -25,10 +25,10 @@
-
- spinlock_t dl_lock; /* protect the values */
-
-- uint64_t dl_space_used; /* used space in bytes */
-- uint64_t dl_space_total; /* maximum space in bytes */
-- uint32_t dl_inodes_used; /* used inodes */
-- uint32_t dl_inodes_total; /* maximum inodes */
-+ unsigned long long dl_space_used; /* used space in bytes */
-+ unsigned long long dl_space_total; /* maximum space in bytes */
-+ unsigned long dl_inodes_used; /* used inodes */
-+ unsigned long dl_inodes_total; /* maximum inodes */
-
- unsigned int dl_nrlmult; /* non root limit mult */
- };
-@@ -38,7 +38,7 @@
- extern void rcu_free_dl_info(struct rcu_head *);
- extern void unhash_dl_info(struct dl_info *);
-
--extern struct dl_info *locate_dl_info(struct super_block *, xid_t);
-+extern struct dl_info *locate_dl_info(struct super_block *, tag_t);
-
-
- struct kstatfs;
-Index: kernel/sched.h
-===================================================================
---- kernel/sched.h (revision 2366)
-+++ kernel/sched.h (revision 2369)
-@@ -14,12 +14,12 @@
- void vx_update_load(struct vx_info *);
-
-
--struct task_struct;
-+int vx_tokens_recalc(struct _vx_sched_pc *,
-+ unsigned long *, unsigned long *, int [2]);
-
--int vx_effective_vavavoom(struct vx_info *, int);
-+void vx_update_sched_param(struct _vx_sched *sched,
-+ struct _vx_sched_pc *sched_pc);
-
--int vx_tokens_recalc(struct vx_info *);
--
- #endif /* __KERNEL__ */
- #else /* _VX_SCHED_H */
- #warning duplicate inclusion
-Index: kernel/debug.h
-===================================================================
---- kernel/debug.h (revision 2366)
-+++ kernel/debug.h (revision 2369)
-@@ -24,10 +24,12 @@
- extern unsigned int vx_debug_switch;
- extern unsigned int vx_debug_xid;
- extern unsigned int vx_debug_nid;
-+extern unsigned int vx_debug_tag;
- 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_quota;
- extern unsigned int vx_debug_cvirt;
- extern unsigned int vx_debug_misc;
-
-@@ -60,6 +62,7 @@
- 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)); })
-@@ -67,11 +70,18 @@
- #define vxd_cond_path(n) \
- ((n) ? vxd_path((n)->dentry, (n)->mnt) : "<null>" )
-
-+
-+struct vx_info;
-+
-+void dump_vx_info(struct vx_info *, int);
-+void dump_vx_info_inactive(int);
-+
- #else /* CONFIG_VSERVER_DEBUG */
-
- #define vx_debug_switch 0
- #define vx_debug_xid 0
- #define vx_debug_nid 0
-+#define vx_debug_tag 0
- #define vx_debug_net 0
- #define vx_debug_limit 0
- #define vx_debug_cres 0
-@@ -89,202 +99,6 @@
- #endif /* CONFIG_VSERVER_DEBUG */
-
-
--/* history stuff */
--
--#ifdef CONFIG_VSERVER_HISTORY
--
--
--extern unsigned volatile int vxh_active;
--
--struct _vxhe_vxi {
-- struct vx_info *ptr;
-- unsigned xid;
-- unsigned usecnt;
-- unsigned tasks;
--};
--
--struct _vxhe_set_clr {
-- void *data;
--};
--
--struct _vxhe_loc_lookup {
-- unsigned arg;
--};
--
--enum {
-- VXH_UNUSED=0,
-- VXH_THROW_OOPS=1,
--
-- VXH_GET_VX_INFO,
-- VXH_PUT_VX_INFO,
-- VXH_INIT_VX_INFO,
-- VXH_SET_VX_INFO,
-- VXH_CLR_VX_INFO,
-- VXH_CLAIM_VX_INFO,
-- VXH_RELEASE_VX_INFO,
-- VXH_ALLOC_VX_INFO,
-- VXH_DEALLOC_VX_INFO,
-- VXH_HASH_VX_INFO,
-- VXH_UNHASH_VX_INFO,
-- VXH_LOC_VX_INFO,
-- VXH_LOOKUP_VX_INFO,
-- VXH_CREATE_VX_INFO,
--};
--
--struct _vx_hist_entry {
-- void *loc;
-- unsigned short seq;
-- unsigned short type;
-- struct _vxhe_vxi vxi;
-- union {
-- struct _vxhe_set_clr sc;
-- struct _vxhe_loc_lookup ll;
-- };
--};
--
--struct _vx_hist_entry *vxh_advance(void *loc);
--
--
--static inline
--void __vxh_copy_vxi(struct _vx_hist_entry *entry, struct vx_info *vxi)
--{
-- entry->vxi.ptr = vxi;
-- if (vxi) {
-- entry->vxi.usecnt = atomic_read(&vxi->vx_usecnt);
-- entry->vxi.tasks = atomic_read(&vxi->vx_tasks);
-- entry->vxi.xid = vxi->vx_id;
-- }
--}
--
--
--#define __HERE__ current_text_addr()
--
--#define __VXH_BODY(__type, __data, __here) \
-- struct _vx_hist_entry *entry; \
-- \
-- preempt_disable(); \
-- entry = vxh_advance(__here); \
-- __data; \
-- entry->type = __type; \
-- preempt_enable();
--
--
-- /* pass vxi only */
--
--#define __VXH_SMPL \
-- __vxh_copy_vxi(entry, vxi)
--
--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
--
--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_LONG \
-- __vxh_copy_vxi(entry, vxi); \
-- entry->ll.arg = arg
--
--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 *__here)
--{
-- __VXH_BODY(VXH_THROW_OOPS, {}, __here);
-- /* prevent further acquisition */
-- vxh_active = 0;
--}
--
--
--#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);
--
--#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);
--
--#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__);
--
--#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__);
--
--#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,h) do { } while (0)
--#define __vxh_put_vx_info(v,h) 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,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)
--
--#define vxh_hash_vx_info(v) do { } while (0)
--#define vxh_unhash_vx_info(v) do { } while (0)
--
--#define vxh_loc_vx_info(a,v) do { } while (0)
--#define vxh_lookup_vx_info(a,v) do { } while (0)
--#define vxh_create_vx_info(a,v) do { } while (0)
--
--#define vxh_dump_history() do { } while (0)
--
--
--#endif /* CONFIG_VSERVER_HISTORY */
--
--
- #ifdef CONFIG_VSERVER_DEBUG
- #define vxd_assert_lock(l) assert_spin_locked(l)
- #define vxd_assert(c,f,x...) vxlprintk(!(c), \
-Index: kernel/cacct_int.h
-===================================================================
---- kernel/cacct_int.h (revision 0)
-+++ kernel/cacct_int.h (revision 2369)
-@@ -0,0 +1,21 @@
-+#ifndef _VX_CACCT_INT_H
-+#define _VX_CACCT_INT_H
-+
-+
-+#ifdef __KERNEL__
-+
-+static inline
-+unsigned long vx_sock_count(struct _vx_cacct *cacct, int type, int pos)
-+{
-+ return atomic_read(&cacct->sock[type][pos].count);
-+}
-+
-+
-+static inline
-+unsigned long vx_sock_total(struct _vx_cacct *cacct, int type, int pos)
-+{
-+ return atomic_read(&cacct->sock[type][pos].total);
-+}
-+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_CACCT_INT_H */
-Index: kernel/network.h
-===================================================================
---- kernel/network.h (revision 2366)
-+++ kernel/network.h (revision 2369)
-@@ -13,14 +13,17 @@
-
- /* network flags */
-
-+#define NXF_INFO_LOCK 0x00000001
-+
- #define NXF_STATE_SETUP (1ULL<<32)
-+#define NXF_STATE_ADMIN (1ULL<<34)
-
- #define NXF_SC_HELPER (1ULL<<36)
- #define NXF_PERSISTENT (1ULL<<38)
-
--#define NXF_ONE_TIME (0x0001ULL<<32)
-+#define NXF_ONE_TIME (0x0005ULL<<32)
-
--#define NXF_INIT_SET (0)
-+#define NXF_INIT_SET (NXF_STATE_ADMIN)
-
-
- /* address types */
-@@ -71,6 +74,26 @@
- #define NXS_SHUTDOWN 0x0100
- #define NXS_RELEASED 0x8000
-
-+/* check conditions */
-+
-+#define NX_ADMIN 0x0001
-+#define NX_WATCH 0x0002
-+#define NX_BLEND 0x0004
-+#define NX_HOSTID 0x0008
-+
-+#define NX_IDENT 0x0010
-+#define NX_EQUIV 0x0020
-+#define NX_PARENT 0x0040
-+#define NX_CHILD 0x0080
-+
-+#define NX_ARG_MASK 0x00F0
-+
-+#define NX_DYNAMIC 0x0100
-+#define NX_STATIC 0x0200
-+
-+#define NX_ATR_MASK 0x0F00
-+
-+
- extern struct nx_info *lookup_nx_info(int);
-
- extern int get_nid_list(int, unsigned int *, int);
-Index: kernel/cacct_def.h
-===================================================================
---- kernel/cacct_def.h (revision 0)
-+++ kernel/cacct_def.h (revision 2369)
-@@ -0,0 +1,43 @@
-+#ifndef _VX_CACCT_DEF_H
-+#define _VX_CACCT_DEF_H
-+
-+#include <asm/atomic.h>
-+#include <linux/vserver/cacct.h>
-+
-+
-+struct _vx_sock_acc {
-+ atomic_t count;
-+ atomic_t total;
-+};
-+
-+/* context sub struct */
-+
-+struct _vx_cacct {
-+ struct _vx_sock_acc sock[VXA_SOCK_SIZE][3];
-+ atomic_t slab[8];
-+ atomic_t page[6][8];
-+};
-+
-+#ifdef CONFIG_VSERVER_DEBUG
-+
-+static inline void __dump_vx_cacct(struct _vx_cacct *cacct)
-+{
-+ int i,j;
-+
-+ printk("\t_vx_cacct:");
-+ for (i=0; i<6; i++) {
-+ struct _vx_sock_acc *ptr = cacct->sock[i];
-+
-+ printk("\t [%d] =", i);
-+ for (j=0; j<3; j++) {
-+ printk(" [%d] = %8d, %8d", j,
-+ atomic_read(&ptr[j].count),
-+ atomic_read(&ptr[j].total));
-+ }
-+ printk("\n");
-+ }
-+}
-+
-+#endif
-+
-+#endif /* _VX_CACCT_DEF_H */
-Index: kernel/inode.h
-===================================================================
---- kernel/inode.h (revision 2366)
-+++ kernel/inode.h (revision 2369)
-@@ -2,7 +2,7 @@
- #define _VX_INODE_H
-
-
--#define IATTR_XID 0x01000000
-+#define IATTR_TAG 0x01000000
-
- #define IATTR_ADMIN 0x00000001
- #define IATTR_WATCH 0x00000002
-Index: kernel/cacct_cmd.h
-===================================================================
---- kernel/cacct_cmd.h (revision 0)
-+++ kernel/cacct_cmd.h (revision 2369)
-@@ -0,0 +1,23 @@
-+#ifndef _VX_CACCT_CMD_H
-+#define _VX_CACCT_CMD_H
-+
-+
-+/* virtual host info name commands */
-+
-+#define VCMD_sock_stat VC_CMD(VSTAT, 5, 0)
-+
-+struct vcmd_sock_stat_v0 {
-+ uint32_t field;
-+ uint32_t count[3];
-+ uint64_t total[3];
-+};
-+
-+
-+#ifdef __KERNEL__
-+
-+#include <linux/compiler.h>
-+
-+extern int vc_sock_stat(struct vx_info *, void __user *);
-+
-+#endif /* __KERNEL__ */
-+#endif /* _VX_CACCT_CMD_H */
-Index: kernel/global.h
-===================================================================
---- kernel/global.h (revision 0)
-+++ kernel/global.h (revision 2369)
-@@ -0,0 +1,8 @@
-+#ifndef _VX_GLOBAL_H
-+#define _VX_GLOBAL_H
-+
-+
-+extern atomic_t vx_global_ctotal;
-+extern atomic_t vx_global_cactive;
-+
-+#endif /* _VX_GLOBAL_H */
-Index: kernel/sched_def.h
-===================================================================
---- kernel/sched_def.h (revision 2366)
-+++ kernel/sched_def.h (revision 2369)
-@@ -8,31 +8,60 @@
- #include <asm/param.h>
-
-
--struct _vx_ticks {
-- uint64_t user_ticks; /* token tick events */
-- uint64_t sys_ticks; /* token tick events */
-- uint64_t hold_ticks; /* token ticks paused */
-- uint64_t unused[5]; /* cacheline ? */
--};
--
- /* context sub struct */
-
- struct _vx_sched {
-- atomic_t tokens; /* number of CPU tokens */
- spinlock_t tokens_lock; /* lock for token bucket */
-
-- int fill_rate; /* Fill rate: add X tokens... */
-- int interval; /* Divisor: per Y jiffies */
-+ int tokens; /* number of CPU tokens */
-+ int fill_rate[2]; /* Fill rate: add X tokens... */
-+ int interval[2]; /* Divisor: per Y jiffies */
- int tokens_min; /* Limit: minimum for unhold */
- int tokens_max; /* Limit: no more than N tokens */
-- uint32_t jiffies; /* last time accounted */
-
-- int priority_bias; /* bias offset for priority */
-+ unsigned update_mask; /* which features should be updated */
-+ cpumask_t update; /* CPUs which should update */
-+
-+ int prio_bias; /* bias offset for priority */
- int vavavoom; /* last calculated vavavoom */
-+};
-
-- cpumask_t cpus_allowed; /* cpu mask for context */
-+struct _vx_sched_pc {
-+ int tokens; /* number of CPU tokens */
-+ int flags; /* bucket flags */
-
-- struct _vx_ticks cpu[NR_CPUS];
-+ int fill_rate[2]; /* Fill rate: add X tokens... */
-+ int interval[2]; /* Divisor: per Y jiffies */
-+ int tokens_min; /* Limit: minimum for unhold */
-+ int tokens_max; /* Limit: no more than N tokens */
-+
-+ unsigned long norm_time; /* last time accounted */
-+ unsigned long idle_time; /* non linear time for fair sched */
-+ unsigned long token_time; /* token time for accounting */
-+ unsigned long onhold; /* jiffies when put on hold */
-+
-+ uint64_t user_ticks; /* token tick events */
-+ uint64_t sys_ticks; /* token tick events */
-+ uint64_t hold_ticks; /* token ticks paused */
- };
-
-+
-+#define VXSF_ONHOLD 0x0001
-+#define VXSF_IDLE_TIME 0x0100
-+
-+#ifdef CONFIG_VSERVER_DEBUG
-+
-+static inline void __dump_vx_sched(struct _vx_sched *sched)
-+{
-+ printk("\t_vx_sched:\n");
-+ printk("\t tokens: %4d/%4d, %4d/%4d, %4d, %4d\n",
-+ sched->fill_rate[0], sched->interval[0],
-+ sched->fill_rate[1], sched->interval[1],
-+ sched->tokens_min, sched->tokens_max);
-+ printk("\t priority = %4d, %4d\n",
-+ sched->prio_bias, sched->vavavoom);
-+}
-+
-+#endif
-+
- #endif /* _VX_SCHED_DEF_H */
-Index: kernel/dlimit_cmd.h
-===================================================================
---- kernel/dlimit_cmd.h (revision 2366)
-+++ kernel/dlimit_cmd.h (revision 2369)
-@@ -25,11 +25,16 @@
- uint32_t flags;
- };
-
-+#define CDLIM_UNSET ((uint32_t)0UL)
-+#define CDLIM_INFINITY ((uint32_t)~0UL)
-+#define CDLIM_KEEP ((uint32_t)~1UL)
-
- #ifdef __KERNEL__
-
- #ifdef CONFIG_COMPAT
-
-+#include <asm/compat.h>
-+
- struct vcmd_ctx_dlimit_base_v0_x32 {
- compat_uptr_t name_ptr;
- uint32_t flags;
-Index: kernel/sched_cmd.h
-===================================================================
---- kernel/sched_cmd.h (revision 2366)
-+++ kernel/sched_cmd.h (revision 2369)
-@@ -5,7 +5,8 @@
- /* sched vserver commands */
-
- #define VCMD_set_sched_v2 VC_CMD(SCHED, 1, 2)
--#define VCMD_set_sched VC_CMD(SCHED, 1, 3)
-+#define VCMD_set_sched_v3 VC_CMD(SCHED, 1, 3)
-+#define VCMD_set_sched VC_CMD(SCHED, 1, 4)
-
- struct vcmd_set_sched_v2 {
- int32_t fill_rate;
-@@ -26,23 +27,46 @@
- int32_t priority_bias;
- };
-
-+struct vcmd_set_sched_v4 {
-+ uint32_t set_mask;
-+ int32_t fill_rate;
-+ int32_t interval;
-+ int32_t tokens;
-+ int32_t tokens_min;
-+ int32_t tokens_max;
-+ int32_t prio_bias;
-+ int32_t cpu_id;
-+ int32_t bucket_id;
-+};
-
-+
- #define VXSM_FILL_RATE 0x0001
- #define VXSM_INTERVAL 0x0002
-+#define VXSM_FILL_RATE2 0x0004
-+#define VXSM_INTERVAL2 0x0008
- #define VXSM_TOKENS 0x0010
- #define VXSM_TOKENS_MIN 0x0020
- #define VXSM_TOKENS_MAX 0x0040
- #define VXSM_PRIO_BIAS 0x0100
-
--#define SCHED_KEEP (-2)
-+#define VXSM_IDLE_TIME 0x0200
-+#define VXSM_FORCE 0x0400
-
-+#define VXSM_V3_MASK 0x0173
-+#define VXSM_SET_MASK 0x01FF
-+
-+#define VXSM_CPU_ID 0x1000
-+#define VXSM_BUCKET_ID 0x2000
-+
-+#define SCHED_KEEP (-2) /* only for v2 */
-+
- #ifdef __KERNEL__
-
- #include <linux/compiler.h>
-
--extern int vc_set_sched_v1(uint32_t, void __user *);
--extern int vc_set_sched_v2(uint32_t, void __user *);
--extern int vc_set_sched(uint32_t, void __user *);
-+extern int vc_set_sched_v2(struct vx_info *, void __user *);
-+extern int vc_set_sched_v3(struct vx_info *, void __user *);
-+extern int vc_set_sched(struct vx_info *, void __user *);
-
- #endif /* __KERNEL__ */
- #endif /* _VX_SCHED_CMD_H */
-Index: kernel/debug_cmd.h
-===================================================================
---- kernel/debug_cmd.h (revision 2366)
-+++ kernel/debug_cmd.h (revision 2369)
-@@ -6,9 +6,53 @@
-
- #define VCMD_dump_history VC_CMD(DEBUG, 1, 0)
-
-+#define VCMD_read_history VC_CMD(DEBUG, 5, 0)
-+#define VCMD_read_monitor VC_CMD(DEBUG, 6, 0)
-+
-+struct vcmd_read_history_v0 {
-+ uint32_t index;
-+ uint32_t count;
-+ char __user *data;
-+};
-+
-+struct vcmd_read_monitor_v0 {
-+ uint32_t index;
-+ uint32_t count;
-+ char __user *data;
-+};
-+
-+
- #ifdef __KERNEL__
-
-+#ifdef CONFIG_COMPAT
-+
-+#include <asm/compat.h>
-+
-+struct vcmd_read_history_v0_x32 {
-+ uint32_t index;
-+ uint32_t count;
-+ compat_uptr_t data_ptr;
-+};
-+
-+struct vcmd_read_monitor_v0_x32 {
-+ uint32_t index;
-+ uint32_t count;
-+ compat_uptr_t data_ptr;
-+};
-+
-+#endif /* CONFIG_COMPAT */
-+
- extern int vc_dump_history(uint32_t);
-
-+extern int vc_read_history(uint32_t, void __user *);
-+extern int vc_read_monitor(uint32_t, void __user *);
-+
-+#ifdef CONFIG_COMPAT
-+
-+extern int vc_read_history_x32(uint32_t, void __user *);
-+extern int vc_read_monitor_x32(uint32_t, void __user *);
-+
-+#endif /* CONFIG_COMPAT */
-+
- #endif /* __KERNEL__ */
- #endif /* _VX_DEBUG_CMD_H */
-Index: kernel/tag.h
-===================================================================
---- kernel/tag.h (revision 0)
-+++ kernel/tag.h (revision 2369)
-@@ -0,0 +1,153 @@
-+#ifndef _DX_TAG_H
-+#define _DX_TAG_H
-+
-+
-+#define DX_TAG(in) (IS_TAGGED(in))
-+
-+
-+#ifdef CONFIG_DX_TAG_NFSD
-+#define DX_TAG_NFSD 1
-+#else
-+#define DX_TAG_NFSD 0
-+#endif
-+
-+
-+#ifdef CONFIG_TAGGING_NONE
-+
-+#define MAX_UID 0xFFFFFFFF
-+#define MAX_GID 0xFFFFFFFF
-+
-+#define INOTAG_TAG(cond, uid, gid, tag) (0)
-+
-+#define TAGINO_UID(cond, uid, tag) (uid)
-+#define TAGINO_GID(cond, gid, tag) (gid)
-+
-+#endif
-+
-+
-+#ifdef CONFIG_TAGGING_GID16
-+
-+#define MAX_UID 0xFFFFFFFF
-+#define MAX_GID 0x0000FFFF
-+
-+#define INOTAG_TAG(cond, uid, gid, tag) \
-+ ((cond) ? (((gid) >> 16) & 0xFFFF) : 0)
-+
-+#define TAGINO_UID(cond, uid, tag) (uid)
-+#define TAGINO_GID(cond, gid, tag) \
-+ ((cond) ? (((gid) & 0xFFFF) | ((tag) << 16)) : (gid))
-+
-+#endif
-+
-+
-+#ifdef CONFIG_TAGGING_ID24
-+
-+#define MAX_UID 0x00FFFFFF
-+#define MAX_GID 0x00FFFFFF
-+
-+#define INOTAG_TAG(cond, uid, gid, tag) \
-+ ((cond) ? ((((uid) >> 16) & 0xFF00) | (((gid) >> 24) & 0xFF)) : 0)
-+
-+#define TAGINO_UID(cond, uid, tag) \
-+ ((cond) ? (((uid) & 0xFFFFFF) | (((tag) & 0xFF00) << 16)) : (uid))
-+#define TAGINO_GID(cond, gid, tag) \
-+ ((cond) ? (((gid) & 0xFFFFFF) | (((tag) & 0x00FF) << 24)) : (gid))
-+
-+#endif
-+
-+
-+#ifdef CONFIG_TAGGING_UID16
-+
-+#define MAX_UID 0x0000FFFF
-+#define MAX_GID 0xFFFFFFFF
-+
-+#define INOTAG_TAG(cond, uid, gid, tag) \
-+ ((cond) ? (((uid) >> 16) & 0xFFFF) : 0)
-+
-+#define TAGINO_UID(cond, uid, tag) \
-+ ((cond) ? (((uid) & 0xFFFF) | ((tag) << 16)) : (uid))
-+#define TAGINO_GID(cond, gid, tag) (gid)
-+
-+#endif
-+
-+
-+#ifdef CONFIG_TAGGING_INTERN
-+
-+#define MAX_UID 0xFFFFFFFF
-+#define MAX_GID 0xFFFFFFFF
-+
-+#define INOTAG_TAG(cond, uid, gid, tag) \
-+ ((cond) ? (tag) : 0)
-+
-+#define TAGINO_UID(cond, uid, tag) (uid)
-+#define TAGINO_GID(cond, gid, tag) (gid)
-+
-+#endif
-+
-+
-+#ifdef CONFIG_TAGGING_RUNTIME
-+
-+#define MAX_UID 0xFFFFFFFF
-+#define MAX_GID 0xFFFFFFFF
-+
-+#define INOTAG_TAG(cond, uid, gid, tag) (0)
-+
-+#define TAGINO_UID(cond, uid, tag) (uid)
-+#define TAGINO_GID(cond, gid, tag) (gid)
-+
-+#endif
-+
-+
-+#ifndef CONFIG_TAGGING_NONE
-+#define dx_current_fstag(sb) \
-+ ((sb)->s_flags & MS_TAGGED ? dx_current_tag(): 0)
-+#else
-+#define dx_current_fstag(sb) (0)
-+#endif
-+
-+#ifndef CONFIG_TAGGING_INTERN
-+#define TAGINO_TAG(cond, tag) (0)
-+#else
-+#define TAGINO_TAG(cond, tag) ((cond) ? (tag) : 0)
-+#endif
-+
-+#define INOTAG_UID(cond, uid, gid) \
-+ ((cond) ? ((uid) & MAX_UID) : (uid))
-+#define INOTAG_GID(cond, uid, gid) \
-+ ((cond) ? ((gid) & MAX_GID) : (gid))
-+
-+
-+static inline uid_t dx_map_uid(uid_t uid)
-+{
-+ if ((uid > MAX_UID) && (uid != -1))
-+ uid = -2;
-+ return (uid & MAX_UID);
-+}
-+
-+static inline gid_t dx_map_gid(gid_t gid)
-+{
-+ if ((gid > MAX_GID) && (gid != -1))
-+ gid = -2;
-+ return (gid & MAX_GID);
-+}
-+
-+
-+#ifdef CONFIG_VSERVER_LEGACY
-+#define FIOC_GETTAG _IOR('x', 1, long)
-+#define FIOC_SETTAG _IOW('x', 2, long)
-+#define FIOC_SETTAGJ _IOW('x', 3, long)
-+#endif
-+
-+#ifdef CONFIG_PROPAGATE
-+
-+int dx_parse_tag(char *string, tag_t *tag, int remove);
-+
-+void __dx_propagate_tag(struct nameidata *nd, struct inode *inode);
-+
-+#define dx_propagate_tag(n,i) __dx_propagate_tag(n,i)
-+
-+#else
-+#define dx_propagate_tag(n,i) do { } while (0)
-+#endif
-+
-+#endif /* _DX_TAG_H */
-Index: kernel/network_cmd.h
-===================================================================
---- kernel/network_cmd.h (revision 2366)
-+++ kernel/network_cmd.h (revision 2369)
-@@ -19,7 +19,7 @@
- };
-
- #ifdef __KERNEL__
--extern int vc_nx_info(uint32_t, void __user *);
-+extern int vc_nx_info(struct nx_info *, void __user *);
-
- #endif /* __KERNEL__ */
-
-@@ -46,10 +46,10 @@
-
- #ifdef __KERNEL__
- extern int vc_net_create(uint32_t, void __user *);
--extern int vc_net_migrate(uint32_t, void __user *);
-+extern int vc_net_migrate(struct nx_info *, void __user *);
-
--extern int vc_net_add(uint32_t, void __user *);
--extern int vc_net_remove(uint32_t, void __user *);
-+extern int vc_net_add(struct nx_info *, void __user *);
-+extern int vc_net_remove(struct nx_info *, void __user *);
-
- #endif /* __KERNEL__ */
-
-@@ -65,8 +65,8 @@
- };
-
- #ifdef __KERNEL__
--extern int vc_get_nflags(uint32_t, void __user *);
--extern int vc_set_nflags(uint32_t, void __user *);
-+extern int vc_get_nflags(struct nx_info *, void __user *);
-+extern int vc_set_nflags(struct nx_info *, void __user *);
-
- #endif /* __KERNEL__ */
-
-@@ -82,8 +82,8 @@
- };
-
- #ifdef __KERNEL__
--extern int vc_get_ncaps(uint32_t, void __user *);
--extern int vc_set_ncaps(uint32_t, void __user *);
-+extern int vc_get_ncaps(struct nx_info *, void __user *);
-+extern int vc_set_ncaps(struct nx_info *, void __user *);
-
- #endif /* __KERNEL__ */
- #endif /* _VX_CONTEXT_CMD_H */
-Index: kernel/limit.h
-===================================================================
---- kernel/limit.h (revision 2366)
-+++ kernel/limit.h (revision 2369)
-@@ -6,9 +6,55 @@
- #define VLIMIT_OPENFD 17
- #define VLIMIT_ANON 18
- #define VLIMIT_SHMEM 19
-+#define VLIMIT_SEMARY 20
-+#define VLIMIT_NSEMS 21
-+#define VLIMIT_DENTRY 22
-
- #ifdef __KERNEL__
-
-+#define VLIM_NOCHECK (1L << VLIMIT_DENTRY)
-+
-+/* keep in sync with CRLIM_INFINITY */
-+
-+#define VLIM_INFINITY (~0ULL)
-+
-+#ifndef RLIM_INFINITY
-+#warning RLIM_INFINITY is undefined
-+#endif
-+
-+#define __rlim_val(l,r,v) ((l)->res[(r)].v)
-+
-+#define __rlim_soft(l,r) __rlim_val(l,r,soft)
-+#define __rlim_hard(l,r) __rlim_val(l,r,hard)
-+
-+#define __rlim_rcur(l,r) __rlim_val(l,r,rcur)
-+#define __rlim_rmin(l,r) __rlim_val(l,r,rmin)
-+#define __rlim_rmax(l,r) __rlim_val(l,r,rmax)
-+
-+#define __rlim_lhit(l,r) __rlim_val(l,r,lhit)
-+#define __rlim_hit(l,r) atomic_inc(&__rlim_lhit(l,r))
-+
-+typedef atomic_long_t rlim_atomic_t;
-+typedef unsigned long rlim_t;
-+
-+#define __rlim_get(l,r) atomic_long_read(&__rlim_rcur(l,r))
-+#define __rlim_set(l,r,v) atomic_long_set(&__rlim_rcur(l,r), v)
-+#define __rlim_inc(l,r) atomic_long_inc(&__rlim_rcur(l,r))
-+#define __rlim_dec(l,r) atomic_long_dec(&__rlim_rcur(l,r))
-+#define __rlim_add(l,r,v) atomic_long_add(v, &__rlim_rcur(l,r))
-+#define __rlim_sub(l,r,v) atomic_long_sub(v, &__rlim_rcur(l,r))
-+
-+
-+#if (RLIM_INFINITY == VLIM_INFINITY)
-+#define VX_VLIM(r) ((long long)(long)(r))
-+#define VX_RLIM(v) ((rlim_t)(v))
-+#else
-+#define VX_VLIM(r) (((r) == RLIM_INFINITY) \
-+ ? VLIM_INFINITY : (long long)(r))
-+#define VX_RLIM(v) (((v) == VLIM_INFINITY) \
-+ ? RLIM_INFINITY : (rlim_t)(v))
-+#endif
-+
- struct sysinfo;
-
- void vx_vsi_meminfo(struct sysinfo *);
-Index: kernel/namespace_cmd.h
-===================================================================
---- kernel/namespace_cmd.h (revision 2366)
-+++ kernel/namespace_cmd.h (revision 2369)
-@@ -3,7 +3,7 @@
-
-
- #define VCMD_enter_namespace VC_CMD(PROCALT, 1, 0)
--/* XXX: This is not available in recent kernels */
-+/* XXX: This is not available in recent kernels */
- #define VCMD_cleanup_namespace VC_CMD(PROCALT, 2, 0)
- #define VCMD_set_namespace_v0 VC_CMD(PROCALT, 3, 0)
- #define VCMD_set_namespace VC_CMD(PROCALT, 3, 1)
-@@ -11,8 +11,8 @@
-
- #ifdef __KERNEL__
-
--extern int vc_enter_namespace(uint32_t, void __user *);
--extern int vc_set_namespace(uint32_t, void __user *);
-+extern int vc_enter_namespace(struct vx_info *, void __user *);
-+extern int vc_set_namespace(struct vx_info *, void __user *);
-
- #endif /* __KERNEL__ */
- #endif /* _VX_NAMESPACE_CMD_H */
-Index: kernel/inode_cmd.h
-===================================================================
---- kernel/inode_cmd.h (revision 2366)
-+++ kernel/inode_cmd.h (revision 2369)
-@@ -31,6 +31,8 @@
-
- #ifdef CONFIG_COMPAT
-
-+#include <asm/compat.h>
-+
- struct vcmd_ctx_iattr_v1_x32 {
- compat_uptr_t name_ptr;
- uint32_t xid;
-Index: kernel/context.h
-===================================================================
---- kernel/context.h (revision 2366)
-+++ kernel/context.h (revision 2369)
-@@ -2,10 +2,16 @@
- #define _VX_CONTEXT_H
-
- #include <linux/types.h>
-+//#include <linux/capability.h>
-
-
- #define MAX_S_CONTEXT 65535 /* Arbitrary limit */
-+
-+#ifdef CONFIG_VSERVER_DYNAMIC_IDS
- #define MIN_D_CONTEXT 49152 /* dynamic contexts start here */
-+#else
-+#define MIN_D_CONTEXT 65536
-+#endif
-
- #define VX_DYNAMIC_ID ((uint32_t)-1) /* id for dynamic context */
-
-@@ -29,12 +35,15 @@
- #define VXF_VIRT_UPTIME 0x00020000
- #define VXF_VIRT_CPU 0x00040000
- #define VXF_VIRT_LOAD 0x00080000
-+#define VXF_VIRT_TIME 0x00100000
-
- #define VXF_HIDE_MOUNT 0x01000000
- #define VXF_HIDE_NETIF 0x02000000
-+#define VXF_HIDE_VINFO 0x04000000
-
- #define VXF_STATE_SETUP (1ULL<<32)
- #define VXF_STATE_INIT (1ULL<<33)
-+#define VXF_STATE_ADMIN (1ULL<<34)
-
- #define VXF_SC_HELPER (1ULL<<36)
- #define VXF_REBOOT_KILL (1ULL<<37)
-@@ -45,9 +54,9 @@
-
- #define VXF_IGNEG_NICE (1ULL<<52)
-
--#define VXF_ONE_TIME (0x0003ULL<<32)
-+#define VXF_ONE_TIME (0x0007ULL<<32)
-
--#define VXF_INIT_SET (VXF_STATE_SETUP|VXF_STATE_INIT)
-+#define VXF_INIT_SET (VXF_STATE_SETUP|VXF_STATE_INIT|VXF_STATE_ADMIN)
-
-
- /* context migration */
-@@ -70,6 +79,8 @@
- #define VXC_BINARY_MOUNT 0x00040000
-
- #define VXC_QUOTA_CTL 0x00100000
-+#define VXC_ADMIN_MAPPER 0x00200000
-+#define VXC_ADMIN_CLOOP 0x00400000
-
-
- /* context state changes */
-@@ -92,7 +103,13 @@
- #include "limit_def.h"
- #include "sched_def.h"
- #include "cvirt_def.h"
-+#include "cacct_def.h"
-
-+struct _vx_info_pc {
-+ struct _vx_sched_pc sched_pc;
-+ struct _vx_cvirt_pc cvirt_pc;
-+};
-+
- struct vx_info {
- struct hlist_node vx_hlist; /* linked list of contexts */
- xid_t vx_id; /* context id */
-@@ -106,6 +123,7 @@
- uint64_t vx_flags; /* context flags */
- uint64_t vx_bcaps; /* bounding caps (system) */
- uint64_t vx_ccaps; /* context caps (vserver) */
-+ kernel_cap_t vx_cap_bset; /* the guest's bset */
-
- struct task_struct *vx_reaper; /* guest reaper process */
- pid_t vx_initpid; /* PID of guest init */
-@@ -115,6 +133,12 @@
- struct _vx_cvirt cvirt; /* virtual/bias stuff */
- struct _vx_cacct cacct; /* context accounting */
-
-+#ifndef CONFIG_SMP
-+ struct _vx_info_pc info_pc; /* per cpu data */
-+#else
-+ struct _vx_info_pc *ptr_pc; /* per cpu array */
-+#endif
-+
- wait_queue_head_t vx_wait; /* context exit waitqueue */
- int reboot_cmd; /* last sys_reboot() cmd */
- int exit_code; /* last process exit code */
-@@ -122,12 +146,27 @@
- char vx_name[65]; /* vserver name */
- };
-
-+#ifndef CONFIG_SMP
-+#define vx_ptr_pc(vxi) (&(vxi)->info_pc)
-+#define vx_per_cpu(vxi, v, id) vx_ptr_pc(vxi)->v
-+#else
-+#define vx_ptr_pc(vxi) ((vxi)->ptr_pc)
-+#define vx_per_cpu(vxi, v, id) per_cpu_ptr(vx_ptr_pc(vxi), id)->v
-+#endif
-
-+#define vx_cpu(vxi, v) vx_per_cpu(vxi, v, smp_processor_id())
-+
-+
-+struct vx_info_save {
-+ struct vx_info *vxi;
-+ xid_t xid;
-+};
-+
-+
- /* status flags */
-
- #define VXS_HASHED 0x0001
- #define VXS_PAUSED 0x0010
--#define VXS_ONHOLD 0x0020
- #define VXS_SHUTDOWN 0x0100
- #define VXS_HELPER 0x1000
- #define VXS_RELEASED 0x8000
-@@ -152,6 +191,14 @@
- #define VX_ATR_MASK 0x0F00
-
-
-+#ifdef CONFIG_VSERVER_PRIVACY
-+#define VX_ADMIN_P (0)
-+#define VX_WATCH_P (0)
-+#else
-+#define VX_ADMIN_P VX_ADMIN
-+#define VX_WATCH_P VX_WATCH
-+#endif
-+
- extern void claim_vx_info(struct vx_info *, struct task_struct *);
- extern void release_vx_info(struct vx_info *, struct task_struct *);
-
-Index: kernel/monitor.h
-===================================================================
---- kernel/monitor.h (revision 0)
-+++ kernel/monitor.h (revision 2369)
-@@ -0,0 +1,95 @@
-+#ifndef _VX_MONITOR_H
-+#define _VX_MONITOR_H
-+
-+
-+enum {
-+ VXM_UNUSED = 0,
-+
-+ VXM_SYNC = 0x10,
-+
-+ VXM_UPDATE = 0x20,
-+ VXM_UPDATE_1,
-+ VXM_UPDATE_2,
-+
-+ VXM_RQINFO_1 = 0x24,
-+ VXM_RQINFO_2,
-+
-+ VXM_ACTIVATE = 0x40,
-+ VXM_DEACTIVATE,
-+ VXM_IDLE,
-+
-+ VXM_HOLD = 0x44,
-+ VXM_UNHOLD,
-+
-+ VXM_MIGRATE = 0x48,
-+ VXM_RESCHED,
-+
-+ /* all other bits are flags */
-+ VXM_SCHED = 0x80,
-+};
-+
-+struct _vxm_update_1 {
-+ uint32_t tokens_max;
-+ uint32_t fill_rate;
-+ uint32_t interval;
-+};
-+
-+struct _vxm_update_2 {
-+ uint32_t tokens_min;
-+ uint32_t fill_rate;
-+ uint32_t interval;
-+};
-+
-+struct _vxm_rqinfo_1 {
-+ uint16_t running;
-+ uint16_t onhold;
-+ uint16_t iowait;
-+ uint16_t uintr;
-+ uint32_t idle_tokens;
-+};
-+
-+struct _vxm_rqinfo_2 {
-+ uint32_t norm_time;
-+ uint32_t idle_time;
-+ uint32_t idle_skip;
-+};
-+
-+struct _vxm_sched {
-+ uint32_t tokens;
-+ uint32_t norm_time;
-+ uint32_t idle_time;
-+};
-+
-+struct _vxm_task {
-+ uint16_t pid;
-+ uint16_t state;
-+};
-+
-+struct _vxm_event {
-+ uint32_t jif;
-+ union {
-+ uint32_t seq;
-+ uint32_t sec;
-+ };
-+ union {
-+ uint32_t tokens;
-+ uint32_t nsec;
-+ struct _vxm_task tsk;
-+ };
-+};
-+
-+struct _vx_mon_entry {
-+ uint16_t type;
-+ uint16_t xid;
-+ union {
-+ struct _vxm_event ev;
-+ struct _vxm_sched sd;
-+ struct _vxm_update_1 u1;
-+ struct _vxm_update_2 u2;
-+ struct _vxm_rqinfo_1 q1;
-+ struct _vxm_rqinfo_2 q2;
-+ };
-+};
-+
-+
-+#endif /* _VX_MONITOR_H */
-Index: kernel/cvirt.h
-===================================================================
---- kernel/cvirt.h (revision 2366)
-+++ kernel/cvirt.h (revision 2369)
-@@ -21,6 +21,4 @@
- int vx_do_syslog(int, char __user *, int);
-
- #endif /* __KERNEL__ */
--#else /* _VX_CVIRT_H */
--#warning duplicate inclusion
- #endif /* _VX_CVIRT_H */
-Index: kernel/limit_int.h
-===================================================================
---- kernel/limit_int.h (revision 2366)
-+++ kernel/limit_int.h (revision 2369)
-@@ -4,73 +4,80 @@
-
- #ifdef __KERNEL__
-
--#define VXD_RCRES(r) VXD_CBIT(cres, (r))
--#define VXD_RLIMIT(r) VXD_CBIT(limit, (r))
-+#define VXD_RCRES_COND(r) VXD_CBIT(cres, (r))
-+#define VXD_RLIMIT_COND(r) VXD_CBIT(limit, (r))
-
- extern const char *vlimit_name[NUM_LIMITS];
-
- static inline void __vx_acc_cres(struct vx_info *vxi,
- int res, int dir, void *_data, char *_file, int _line)
- {
-- if (VXD_RCRES(res))
-- vxlprintk(1, "vx_acc_cres[%5d,%s,%2d]: %5d%s (%p)",
-+ if (VXD_RCRES_COND(res))
-+ vxlprintk(1, "vx_acc_cres[%5d,%s,%2d]: %5ld%s (%p)",
- (vxi ? vxi->vx_id : -1), vlimit_name[res], res,
-- (vxi ? atomic_read(&vxi->limit.rcur[res]) : 0),
-+ (vxi ? (long)__rlim_get(&vxi->limit, res) : 0),
- (dir > 0) ? "++" : "--", _data, _file, _line);
- if (!vxi)
- return;
-
- if (dir > 0)
-- atomic_inc(&vxi->limit.rcur[res]);
-+ __rlim_inc(&vxi->limit, res);
- else
-- atomic_dec(&vxi->limit.rcur[res]);
-+ __rlim_dec(&vxi->limit, res);
- }
-
- static inline void __vx_add_cres(struct vx_info *vxi,
- int res, int amount, void *_data, char *_file, int _line)
- {
-- if (VXD_RCRES(res))
-- vxlprintk(1, "vx_add_cres[%5d,%s,%2d]: %5d += %5d (%p)",
-+ if (VXD_RCRES_COND(res))
-+ vxlprintk(1, "vx_add_cres[%5d,%s,%2d]: %5ld += %5d (%p)",
- (vxi ? vxi->vx_id : -1), vlimit_name[res], res,
-- (vxi ? atomic_read(&vxi->limit.rcur[res]) : 0),
-+ (vxi ? (long)__rlim_get(&vxi->limit, res) : 0),
- amount, _data, _file, _line);
- if (amount == 0)
- return;
- if (!vxi)
- return;
-- atomic_add(amount, &vxi->limit.rcur[res]);
-+ __rlim_add(&vxi->limit, res, amount);
- }
-
- static inline int __vx_cres_avail(struct vx_info *vxi,
- int res, int num, char *_file, int _line)
- {
-- unsigned long value;
-+ rlim_t value;
-
-- if (VXD_RLIMIT(res))
-- vxlprintk(1, "vx_cres_avail[%5d,%s,%2d]: %5ld > %5d + %5d",
-+ if (VXD_RLIMIT_COND(res))
-+ vxlprintk(1, "vx_cres_avail[%5d,%s,%2d]: %5ld/%5ld > %5ld + %5d",
- (vxi ? vxi->vx_id : -1), vlimit_name[res], res,
-- (vxi ? vxi->limit.rlim[res] : 1),
-- (vxi ? atomic_read(&vxi->limit.rcur[res]) : 0),
-+ (vxi ? (long)__rlim_soft(&vxi->limit, res) : -1),
-+ (vxi ? (long)__rlim_hard(&vxi->limit, res) : -1),
-+ (vxi ? (long)__rlim_get(&vxi->limit, res) : 0),
- num, _file, _line);
- if (num == 0)
- return 1;
- if (!vxi)
- return 1;
-
-- value = atomic_read(&vxi->limit.rcur[res]);
-+ value = __rlim_get(&vxi->limit, res);
-
-- if (value > vxi->limit.rmax[res])
-- vxi->limit.rmax[res] = value;
-+ if (value > __rlim_rmax(&vxi->limit, res))
-+ __rlim_rmax(&vxi->limit, res) = value;
-+ else if (value < __rlim_rmin(&vxi->limit, res))
-+ __rlim_rmin(&vxi->limit, res) = value;
-
-- if (vxi->limit.rlim[res] == RLIM_INFINITY)
-- return 1;
-+ if (__rlim_soft(&vxi->limit, res) == RLIM_INFINITY)
-+ return -1;
-+ if (value + num <= __rlim_soft(&vxi->limit, res))
-+ return -1;
-
-- if (value + num <= vxi->limit.rlim[res])
-+ if (__rlim_hard(&vxi->limit, res) == RLIM_INFINITY)
- return 1;
-+ if (value + num <= __rlim_hard(&vxi->limit, res))
-+ return 1;
-
-- atomic_inc(&vxi->limit.lhit[res]);
-+ __rlim_hit(&vxi->limit, res);
- return 0;
- }
-
- #endif /* __KERNEL__ */
--#endif /* _VX_LIMIT_H */
-+#endif /* _VX_LIMIT_INT_H */
-Index: configure.ac
-===================================================================
---- configure.ac (revision 2366)
-+++ configure.ac (revision 2369)
-@@ -218,18 +218,19 @@
- AH_TEMPLATE(VC_ENABLE_API_V13OBS, [Enable support for some obsoleted API of vserver 1.3.x])
- AH_TEMPLATE(VC_ENABLE_API_V13, [Enable support for API of vserver 1.3.x])
- AH_TEMPLATE(VC_ENABLE_API_NET, [Enable support for network context API])
-+AH_TEMPLATE(VC_ENABLE_API_V21, [Enable support for API of vserver 2.1.x])
- AH_TEMPLATE(VC_ENABLE_API_OLDPROC, [Enable API for a backward compatible /proc parsing])
- AH_TEMPLATE(VC_ENABLE_API_OLDUTS, [Enable API for a backward compatible uts handling])
-
- AC_MSG_CHECKING([for supported APIs])
- AC_ARG_ENABLE([apis],
- [AC_HELP_STRING([--enable-apis=APIS],
-- [enable support for the given apis; possible values are: legacy,compat,v11,fscompat,v13obs,v13,net, ALL,NOLEGACY (default: v13,net)])],
-+ [enable support for the given apis; possible values are: legacy,compat,v11,fscompat,v13obs,v13,net, ALL,NOLEGACY (default: v13,net,v21)])],
- [],
-- [enable_apis=v13,net])
-+ [enable_apis=v13,net,v21])
-
--test x"$enable_apis" != xALL || enable_apis='legacy,compat,v11,fscompat,v13obs,v13,net'
--test x"$enable_apis" != xNOLEGACY || enable_apis='compat,v11,fscompat,v13,net'
-+test x"$enable_apis" != xALL || enable_apis='legacy,compat,v11,fscompat,v13obs,v13,net,v21'
-+test x"$enable_apis" != xNOLEGACY || enable_apis='compat,v11,fscompat,v13,net,v21'
- enable_api_oldproc=
- enable_api_olduts=
- old_IFS=$IFS
-@@ -254,6 +255,7 @@
- AC_DEFINE(VC_ENABLE_API_V13, 1);;
- (v13) AC_DEFINE(VC_ENABLE_API_V13, 1);;
- (net) AC_DEFINE(VC_ENABLE_API_NET, 1);;
-+ (v21) AC_DEFINE(VC_ENABLE_API_V21, 1);;
- (oldproc) enable_api_oldproc=2;;
- (olduts) enable_api_olduts=2;;
- (*) AC_MSG_ERROR(['$i' is not a supported API]);;
-Index: lib/ccaps-v13.c
-===================================================================
---- lib/ccaps-v13.c (revision 2366)
-+++ lib/ccaps-v13.c (revision 2369)
-@@ -38,6 +38,8 @@
- DECL("secure_remount", VC_VXC_SECURE_REMOUNT),
- DECL("binary_mount", VC_VXC_BINARY_MOUNT),
- DECL("quota_ctl", VC_VXC_QUOTA_CTL),
-+ DECL("admin_mapper", VC_VXC_ADMIN_MAPPER),
-+ DECL("admin_cloop", VC_VXC_ADMIN_CLOOP),
- // some deprecated values...
- DECL("mount", VC_VXC_SECURE_MOUNT),
- DECL("remount", VC_VXC_SECURE_REMOUNT),
-Index: lib/syscall_setsched-v21.hc
-===================================================================
---- lib/syscall_setsched-v21.hc (revision 0)
-+++ lib/syscall_setsched-v21.hc (revision 2369)
-@@ -0,0 +1,41 @@
-+// $Id$ --*- c -*--
-+
-+// Copyright (C) 2006 Daniel Hokka Zakrisson <daniel@hozac.com>
-+//
-+// This program is free software; you can redistribute it and/or modify
-+// it under the terms of the GNU General Public License as published by
-+// the Free Software Foundation; version 2 of the License.
-+//
-+// This program is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU General Public License
-+// along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+#include "vserver.h"
-+
-+static inline ALWAYSINLINE int
-+vc_set_sched_v21(xid_t xid, struct vc_set_sched const *data)
-+{
-+ struct vcmd_set_sched_v4 k_data;
-+
-+ k_data.set_mask = data->set_mask;
-+ k_data.fill_rate = data->fill_rate;
-+ k_data.interval = data->interval;
-+ k_data.tokens = data->tokens;
-+ k_data.tokens_min = data->tokens_min;
-+ k_data.tokens_max = data->tokens_max;
-+ k_data.prio_bias = data->priority_bias;
-+ k_data.cpu_id = data->cpu_id;
-+ k_data.bucket_id = data->bucket_id;
-+
-+ return vserver(VCMD_set_sched, CTX_USER2KERNEL(xid), &k_data);
-+}
-Index: lib/syscall_setccaps.c
-===================================================================
---- lib/syscall_setccaps.c (revision 2366)
-+++ lib/syscall_setccaps.c (revision 2369)
-@@ -21,14 +21,22 @@
- #endif
-
- #include "vserver.h"
--#include "vserver-internal.h"
- #include "virtual.h"
-
-+#if defined(VC_ENABLE_API_V13) && defined(VC_ENABLE_API_V21)
-+# define VC_MULTIVERSION_SYSCALL 1
-+#endif
-+#include "vserver-internal.h"
-+
- #if defined(VC_ENABLE_API_V13)
- # include "syscall_setccaps-v13.hc"
- #endif
-
--#if defined(VC_ENABLE_API_V13)
-+#if defined(VC_ENABLE_API_V21)
-+# include "syscall_setccaps-v21.hc"
-+#endif
-+
-+#if defined(VC_ENABLE_API_V13) || defined(VC_ENABLE_API_V21)
- int
- vc_set_ccaps(xid_t xid, struct vc_ctx_caps const *caps)
- {
-@@ -37,6 +45,7 @@
- return -1;
- }
-
-- CALL_VC(CALL_VC_V13A(vc_set_ccaps, xid, caps));
-+ CALL_VC(CALL_VC_V21(vc_set_ccaps, xid, caps),
-+ CALL_VC_V13A(vc_set_ccaps, xid, caps));
- }
- #endif
-Index: lib/vserver.h
-===================================================================
---- lib/vserver.h (revision 2366)
-+++ lib/vserver.h (revision 2369)
-@@ -174,12 +174,15 @@
- #define VC_VXF_VIRT_UPTIME 0x00020000ull
- #define VC_VXF_VIRT_CPU 0x00040000ull
- #define VC_VXF_VIRT_LOAD 0x00080000ull
-+#define VC_VXF_VIRT_TIME 0x00100000ull
-
- #define VC_VXF_HIDE_MOUNT 0x01000000ull
- #define VC_VXF_HIDE_NETIF 0x02000000ull
-+#define VC_VXF_HIDE_VINFO 0x04000000ull
-
- #define VC_VXF_STATE_SETUP (1ULL<<32)
- #define VC_VXF_STATE_INIT (1ULL<<33)
-+#define VC_VXF_STATE_ADMIN (1ULL<<34)
-
- #define VC_VXF_SC_HELPER (1ULL<<36)
- #define VC_VXF_REBOOT_KILL (1ULL<<37)
-@@ -203,16 +206,39 @@
- #define VC_VXC_BINARY_MOUNT 0x00040000ull
-
- #define VC_VXC_QUOTA_CTL 0x00100000ull
-+#define VC_VXC_ADMIN_MAPPER 0x00200000ull
-+#define VC_VXC_ADMIN_CLOOP 0x00400000ull
-
-
--#define VC_VXSM_FILL_RATE 0x0001
--#define VC_VXSM_INTERVAL 0x0002
--#define VC_VXSM_TOKENS 0x0010
--#define VC_VXSM_TOKENS_MIN 0x0020
--#define VC_VXSM_TOKENS_MAX 0x0040
--#define VC_VXSM_PRIO_BIAS 0x0100
-+// the scheduler flags
-+#define VC_VXSM_FILL_RATE 0x0001
-+#define VC_VXSM_INTERVAL 0x0002
-+#define VC_VXSM_FILL_RATE2 0x0004
-+#define VC_VXSM_INTERVAL2 0x0008
-+#define VC_VXSM_TOKENS 0x0010
-+#define VC_VXSM_TOKENS_MIN 0x0020
-+#define VC_VXSM_TOKENS_MAX 0x0040
-+#define VC_VXSM_PRIO_BIAS 0x0100
-+#define VC_VXSM_CPU_ID 0x1000
-+#define VC_VXSM_BUCKET_ID 0x2000
-
-+#define VC_VXSM_IDLE_TIME 0x0200
-+#define VC_VXSM_FORCE 0x0400
-
-+#define VC_VXSM_V3_MASK 0x0173
-+
-+
-+// the network flags
-+#define VC_NXF_INFO_LOCK 0x00000001ull
-+
-+#define VC_NXF_STATE_SETUP (1ULL<<32)
-+#define VC_NXF_STATE_ADMIN (1ULL<<34)
-+
-+#define VC_NXF_SC_HELPER (1ULL<<36)
-+#define VC_NXF_PERSISTENT (1ULL<<38)
-+
-+
-+
- #define VC_BAD_PERSONALITY ((uint_least32_t)(-1))
-
-
-@@ -684,6 +710,8 @@
- int_least32_t tokens_min;
- int_least32_t tokens_max;
- int_least32_t priority_bias;
-+ int_least32_t cpu_id;
-+ int_least32_t bucket_id;
- };
-
- int vc_set_sched(xid_t xid, struct vc_set_sched const *);
-Index: lib/syscall_setsched-v13.hc
-===================================================================
---- lib/syscall_setsched-v13.hc (revision 2366)
-+++ lib/syscall_setsched-v13.hc (revision 2369)
-@@ -30,21 +30,13 @@
- {
- struct vcmd_set_sched_v3 k_data;
-
-- // This expression will be evaluated at compile-time
-- if (sizeof(struct vcmd_set_sched_v3)==sizeof(struct vc_set_sched) &&
-- X(set_mask) && X(fill_rate) && X(interval) && X(tokens) &&
-- X(tokens_min) && X(tokens_max) && X(priority_bias))
-- return vserver(VCMD_set_sched, CTX_USER2KERNEL(xid),
-- const_cast(struct vc_set_sched *)(data));
-- else {
-- k_data.set_mask = data->set_mask;
-- k_data.fill_rate = data->fill_rate;
-- k_data.interval = data->interval;
-- k_data.tokens = data->tokens;
-- k_data.tokens_min = data->tokens_min;
-- k_data.tokens_max = data->tokens_max;
-- k_data.priority_bias = data->priority_bias;
-+ k_data.set_mask = data->set_mask & VC_VXSM_V3_MASK;
-+ k_data.fill_rate = data->fill_rate;
-+ k_data.interval = data->interval;
-+ k_data.tokens = data->tokens;
-+ k_data.tokens_min = data->tokens_min;
-+ k_data.tokens_max = data->tokens_max;
-+ k_data.priority_bias = data->priority_bias;
-
-- return vserver(VCMD_set_sched, CTX_USER2KERNEL(xid), &k_data);
-- }
-+ return vserver(VCMD_set_sched_v3, CTX_USER2KERNEL(xid), &k_data);
- }
-Index: lib/syscall_setccaps-v21.hc
-===================================================================
---- lib/syscall_setccaps-v21.hc (revision 0)
-+++ lib/syscall_setccaps-v21.hc (revision 2369)
-@@ -0,0 +1,39 @@
-+// $Id$ --*- c -*--
-+
-+// Copyright (C) 2006 Daniel Hokka Zakrisson <daniel@hozac.com>
-+//
-+// This program is free software; you can redistribute it and/or modify
-+// it under the terms of the GNU General Public License as published by
-+// the Free Software Foundation; version 2 of the License.
-+//
-+// This program is distributed in the hope that it will be useful,
-+// but WITHOUT ANY WARRANTY; without even the implied warranty of
-+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+// GNU General Public License for more details.
-+//
-+// You should have received a copy of the GNU General Public License
-+// along with this program; if not, write to the Free Software
-+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+
-+
-+#ifdef HAVE_CONFIG_H
-+# include <config.h>
-+#endif
-+
-+static inline ALWAYSINLINE int
-+vc_set_ccaps_v21(xid_t xid, struct vc_ctx_caps const *caps)
-+{
-+ struct vcmd_ctx_caps_v1 k_ccaps;
-+ struct vcmd_bcaps k_bcaps;
-+ int ret;
-+
-+ k_bcaps.bcaps = caps->bcaps;
-+ k_bcaps.bmask = caps->bmask;
-+ k_ccaps.ccaps = caps->ccaps;
-+ k_ccaps.cmask = caps->cmask;
-+
-+ ret = vserver(VCMD_set_ccaps, CTX_USER2KERNEL(xid), &k_ccaps);
-+ if (ret)
-+ return ret;
-+ return vserver(VCMD_set_bcaps, CTX_USER2KERNEL(xid), &k_bcaps);
-+}
-Index: lib/Makefile-files
-===================================================================
---- lib/Makefile-files (revision 2366)
-+++ lib/Makefile-files (revision 2369)
-@@ -109,6 +109,8 @@
- lib/ncaps_list-net.c \
- lib/nflags-net.c \
- lib/nflags_list-net.c
-+lib_v21_SRCS = lib/syscall_setccaps-v21.hc \
-+ lib/syscall_setsched-v21.hc
-
- if ENSC_HAVE_C99_COMPILER
- lib_v13_SRCS += lib/syscall_adddlimit-v13.hc \
-@@ -153,6 +155,7 @@
- $(lib_management_SRCS) \
- $(lib_v11_SRCS) \
- $(lib_v13_SRCS) \
-+ $(lib_v21_SRCS) \
- $(ensc_fmt_SRCS)
-
- include_HEADERS += lib/vserver.h
-Index: lib/cflags-v13.c
-===================================================================
---- lib/cflags-v13.c (revision 2366)
-+++ lib/cflags-v13.c (revision 2369)
-@@ -47,12 +47,15 @@
- DECL("virt_uptime", VC_VXF_VIRT_UPTIME),
- DECL("virt_cpu", VC_VXF_VIRT_CPU),
- DECL("virt_load", VC_VXF_VIRT_LOAD),
-+ DECL("virt_time", VC_VXF_VIRT_TIME),
-
- DECL("hide_mount", VC_VXF_HIDE_MOUNT),
- DECL("hide_netif", VC_VXF_HIDE_NETIF),
-+ DECL("hide_vinfo", VC_VXF_HIDE_VINFO),
-
- DECL("state_setup", VC_VXF_STATE_SETUP),
- DECL("state_init", VC_VXF_STATE_INIT),
-+ DECL("state_admin", VC_VXF_STATE_ADMIN),
-
- DECL("sc_helper", VC_VXF_SC_HELPER),
- DECL("persistent", VC_VXF_PERSISTENT),
-Index: lib/syscall_setccaps-v13.hc
-===================================================================
---- lib/syscall_setccaps-v13.hc (revision 2366)
-+++ lib/syscall_setccaps-v13.hc (revision 2369)
-@@ -29,5 +29,5 @@
- k_caps.ccaps = caps->ccaps;
- k_caps.cmask = caps->cmask;
-
-- return vserver(VCMD_set_ccaps, CTX_USER2KERNEL(xid), &k_caps);
-+ return vserver(VCMD_set_ccaps_v0, CTX_USER2KERNEL(xid), &k_caps);
- }
-Index: lib/vserver-internal.h
-===================================================================
---- lib/vserver-internal.h (revision 2366)
-+++ lib/vserver-internal.h (revision 2369)
-@@ -104,6 +104,13 @@
- #endif
-
-
-+#ifdef VC_ENABLE_API_V21
-+# define CALL_VC_V21(F,...) CALL_VC_GENERAL(0x00020100, v21, F, __VA_ARGS__)
-+#else
-+# define CALL_VC_V21(F,...) CALL_VC_NOOP
-+#endif
-+
-+
- #ifdef VC_ENABLE_API_NET
- # define CALL_VC_NET(F,...) CALL_VC_GENERAL(0x00010016, net, F, __VA_ARGS__)
- #else
-Index: lib/nflags-net.c
-===================================================================
---- lib/nflags-net.c (revision 2366)
-+++ lib/nflags-net.c (revision 2369)
-@@ -30,8 +30,13 @@
- #define DECL(STR, VAL) { STR, sizeof(STR)-1, VAL }
-
- static struct Mapping_uint64 const VALUES[] = {
--#warning Add the 'nflags' values here
-- DECL("", 0)
-+ DECL("lock", VC_NXF_INFO_LOCK),
-+
-+ DECL("state_setup", VC_NXF_STATE_SETUP),
-+ DECL("state_admin", VC_NXF_STATE_ADMIN),
-+
-+ DECL("sc_helper", VC_NXF_SC_HELPER),
-+ DECL("persistent", VC_NXF_PERSISTENT),
- };
-
- uint_least64_t
-Index: lib/syscall_setsched.c
-===================================================================
---- lib/syscall_setsched.c (revision 2366)
-+++ lib/syscall_setsched.c (revision 2369)
-@@ -23,9 +23,7 @@
- #include "vserver.h"
- #include "virtual.h"
-
--#if defined(VC_ENABLE_API_V13OBS) && defined(VC_ENABLE_API_V13)
--# define VC_MULTIVERSION_SYSCALL 1
--#endif
-+#define VC_MULTIVERSION_SYSCALL 1
- #include "vserver-internal.h"
-
- #ifdef VC_ENABLE_API_V13
-@@ -36,9 +34,14 @@
- # include "syscall_setsched-v13obs.hc"
- #endif
-
-+#ifdef VC_ENABLE_API_V21
-+# include "syscall_setsched-v21.hc"
-+#endif
-+
- int
- vc_set_sched(xid_t xid, struct vc_set_sched const *data)
- {
-- CALL_VC(CALL_VC_V13B (vc_set_sched,xid,data),
-+ CALL_VC(CALL_VC_V21 (vc_set_sched,xid,data),
-+ CALL_VC_V13B (vc_set_sched,xid,data),
- CALL_VC_V13OBS(vc_set_sched,xid,data));
- }
-Index: Makefile.am
-===================================================================
---- Makefile.am (revision 2366)
-+++ Makefile.am (revision 2369)
-@@ -58,37 +58,9 @@
-
- man_MANS =
-
--kernel_HDRS = \
-- kernel/context.h \
-- kernel/context_cmd.h \
-- kernel/cvirt.h \
-- kernel/cvirt_cmd.h \
-- kernel/cvirt_def.h \
-- kernel/debug.h \
-- kernel/debug_cmd.h \
-- kernel/dlimit.h \
-- kernel/dlimit_cmd.h \
-- kernel/inode.h \
-- kernel/inode_cmd.h \
-- kernel/legacy.h \
-- kernel/limit.h \
-- kernel/limit_cmd.h \
-- kernel/limit_def.h \
-- kernel/limit_int.h \
-- kernel/namespace.h \
-- kernel/namespace_cmd.h \
-- kernel/network.h \
-- kernel/network_cmd.h \
-- kernel/sched.h \
-- kernel/sched_cmd.h \
-- kernel/sched_def.h \
-- kernel/signal.h \
-- kernel/signal_cmd.h \
-- kernel/switch.h \
-- kernel/xid.h
-+kernel_HDRS = $(wildcard kernel/*.h)
-
-
--
- EXTRA_PROGRAMS =
- EXTRA_DIST = pathconfig.h.pathsubst \
- util-vserver.spec \