vserver 1.9.3
[linux-2.6.git] / include / linux / vs_base.h
1 #ifndef _VX_VS_BASE_H
2 #define _VX_VS_BASE_H
3
4 #include "vserver/context.h"
5
6
7 #define vx_task_xid(t)  ((t)->xid)
8
9 #define vx_current_xid() vx_task_xid(current)
10
11 #define vx_check(c,m)   __vx_check(vx_current_xid(),c,m)
12
13 #define vx_weak_check(c,m)      ((m) ? vx_check(c,m) : 1)
14
15
16 /*
17  * check current context for ADMIN/WATCH and
18  * optionally agains supplied argument
19  */
20 static __inline__ int __vx_check(xid_t cid, xid_t id, unsigned int mode)
21 {
22         if (mode & VX_ARG_MASK) {
23                 if ((mode & VX_IDENT) &&
24                         (id == cid))
25                         return 1;
26         }
27         if (mode & VX_ATR_MASK) {
28                 if ((mode & VX_DYNAMIC) &&
29                         (id >= MIN_D_CONTEXT) &&
30                         (id <= MAX_S_CONTEXT))
31                         return 1;
32                 if ((mode & VX_STATIC) &&
33                         (id > 1) && (id < MIN_D_CONTEXT))
34                         return 1;
35         }
36         return (((mode & VX_ADMIN) && (cid == 0)) ||
37                 ((mode & VX_WATCH) && (cid == 1)));
38 }
39
40
41 #define __vx_state(v)   ((v) ? ((v)->vx_state) : 0)
42
43 #define vx_info_state(v,m)      (__vx_state(v) & (m))
44
45
46 /* generic flag merging */
47
48 #define vx_check_flags(v,m,f)   (((v) & (m)) ^ (f))
49
50 #define vx_mask_flags(v,f,m)    (((v) & ~(m)) | ((f) & (m)))
51
52 #define vx_mask_mask(v,f,m)     (((v) & ~(m)) | ((v) & (f) & (m)))
53
54
55 /* context flags */
56
57 #define __vx_flags(v)   ((v) ? (v)->vx_flags : 0)
58
59 #define vx_current_flags()      __vx_flags(current->vx_info)
60
61 #define vx_info_flags(v,m,f) \
62         vx_check_flags(__vx_flags(v),(m),(f))
63
64 #define task_vx_flags(t,m,f) \
65         ((t) && vx_info_flags((t)->vx_info, (m), (f)))
66
67 #define vx_flags(m,f)   vx_info_flags(current->vx_info,(m),(f))
68
69
70 /* context caps */
71
72 #define __vx_ccaps(v)   ((v) ? (v)->vx_ccaps : 0)
73
74 #define vx_current_ccaps()      __vx_ccaps(current->vx_info)
75
76 #define vx_info_ccaps(v,c)      (__vx_ccaps(v) & (c))
77
78 #define vx_ccaps(c)     vx_info_ccaps(current->vx_info,(c))
79
80
81 #define vx_current_bcaps() \
82         (((current->vx_info) && !vx_flags(VXF_STATE_SETUP, 0)) ? \
83         current->vx_info->vx_bcaps : cap_bset)
84
85
86 #define vx_current_initpid(n) \
87         (current->vx_info && \
88         (current->vx_info->vx_initpid == (n)))
89
90
91 #endif