This commit was manufactured by cvs2svn to create branch 'vserver'.
[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 // #define VX_DEBUG
7
8
9 #if defined(VX_DEBUG)
10 #define vxdprintk(x...) printk("vxd: " x)
11 #else
12 #define vxdprintk(x...)
13 #endif
14
15
16 #define vx_task_xid(t)  ((t)->xid)
17
18 #define vx_current_xid() vx_task_xid(current)
19
20 #define vx_check(c,m)   __vx_check(vx_current_xid(),c,m)
21
22 #define vx_weak_check(c,m)      ((m) ? vx_check(c,m) : 1)
23
24
25 /*
26  * check current context for ADMIN/WATCH and
27  * optionally agains supplied argument
28  */
29 static __inline__ int __vx_check(xid_t cid, xid_t id, unsigned int mode)
30 {
31         if (mode & VX_ARG_MASK) {
32                 if ((mode & VX_IDENT) &&
33                         (id == cid))
34                         return 1;
35         }
36         if (mode & VX_ATR_MASK) {
37                 if ((mode & VX_DYNAMIC) &&
38                         (id >= MIN_D_CONTEXT) &&
39                         (id <= MAX_S_CONTEXT))
40                         return 1;
41                 if ((mode & VX_STATIC) &&
42                         (id > 1) && (id < MIN_D_CONTEXT))
43                         return 1;
44         }
45         return (((mode & VX_ADMIN) && (cid == 0)) ||
46                 ((mode & VX_WATCH) && (cid == 1)));
47 }
48
49
50 #define __vx_flags(v,m,f)       (((v) & (m)) ^ (f))
51
52 #define __vx_task_flags(t,m,f) \
53         (((t) && ((t)->vx_info)) ? \
54                 __vx_flags((t)->vx_info->vx_flags,(m),(f)) : 0)
55
56 #define vx_current_flags() \
57         ((current->vx_info) ? current->vx_info->vx_flags : 0)
58
59 #define vx_flags(m,f)   __vx_flags(vx_current_flags(),(m),(f))
60
61
62 #define vx_current_ccaps() \
63         ((current->vx_info) ? current->vx_info->vx_ccaps : 0)
64
65 #define vx_ccaps(c)     (vx_current_ccaps() & (c))
66
67 #define vx_current_bcaps() \
68         (((current->vx_info) && !vx_flags(VXF_STATE_SETUP, 0)) ? \
69         current->vx_info->vx_bcaps : cap_bset)
70
71
72 /* generic flag merging */
73
74 #define vx_mask_flags(v,f,m)    (((v) & ~(m)) | ((f) & (m)))
75
76 #define vx_mask_mask(v,f,m)     (((v) & ~(m)) | ((v) & (f) & (m)))
77
78 #endif