9ec4a115c9484ab67cce54c2ee60a87de689fab1
[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_IRQ        0x4000
7 #define VX_IRQ_MASK   0xF000
8 #if 0
9 #include <linux/hardirq.h>
10 #endif
11
12 #define vx_task_xid(t)  ((t)->xid)
13
14 #define vx_current_xid() vx_task_xid(current)
15
16 #define current_vx_info() (current->vx_info)
17
18 #define vx_check(c,m)   __vx_check(vx_current_xid(),c,m|VX_IRQ)
19
20 #define vx_weak_check(c,m)      ((m) ? vx_check(c,m) : 1)
21
22
23 /*
24  * check current context for ADMIN/WATCH and
25  * optionally against supplied argument
26  */
27 static inline int __vx_check(xid_t cid, xid_t id, unsigned int mode)
28 {
29         if (mode & VX_ARG_MASK) {
30                 if ((mode & VX_IDENT) &&
31                         (id == cid))
32                         return 1;
33         }
34         if (mode & VX_ATR_MASK) {
35                 if ((mode & VX_DYNAMIC) &&
36                         (id >= MIN_D_CONTEXT) &&
37                         (id <= MAX_S_CONTEXT))
38                         return 1;
39                 if ((mode & VX_STATIC) &&
40                         (id > 1) && (id < MIN_D_CONTEXT))
41                         return 1;
42         }
43 #if 0
44         if ((mode & VX_IRQ) && (unlikely(in_interrupt())))
45                 return 1;
46 #endif
47
48         return (((mode & VX_ADMIN) && (cid == 0)) ||
49                 ((mode & VX_WATCH) && (cid == 1)) ||
50                 ((mode & VX_HOSTID) && (id == 0)));
51 }
52
53
54 #define __vx_state(v)   ((v) ? ((v)->vx_state) : 0)
55
56 #define vx_info_state(v,m)      (__vx_state(v) & (m))
57
58
59 /* generic flag merging */
60
61 #define vx_check_flags(v,m,f)   (((v) & (m)) ^ (f))
62
63 #define vx_mask_flags(v,f,m)    (((v) & ~(m)) | ((f) & (m)))
64
65 #define vx_mask_mask(v,f,m)     (((v) & ~(m)) | ((v) & (f) & (m)))
66
67 #define vx_check_bit(v,n)       ((v) & (1LL << (n)))
68
69
70 /* context flags */
71
72 #define __vx_flags(v)   ((v) ? (v)->vx_flags : 0)
73
74 #define vx_current_flags()      __vx_flags(current->vx_info)
75
76 #define vx_info_flags(v,m,f) \
77         vx_check_flags(__vx_flags(v),(m),(f))
78
79 #define task_vx_flags(t,m,f) \
80         ((t) && vx_info_flags((t)->vx_info, (m), (f)))
81
82 #define vx_flags(m,f)   vx_info_flags(current->vx_info,(m),(f))
83
84
85 /* context caps */
86
87 #define __vx_ccaps(v)   ((v) ? (v)->vx_ccaps : 0)
88
89 #define vx_current_ccaps()      __vx_ccaps(current->vx_info)
90
91 #define vx_info_ccaps(v,c)      (__vx_ccaps(v) & (c))
92
93 #define vx_ccaps(c)     vx_info_ccaps(current->vx_info,(c))
94
95
96 #define __vx_mcaps(v)   ((v) ? (v)->vx_ccaps >> 32UL : ~0 )
97
98 #define vx_info_mcaps(v,c)      (__vx_mcaps(v) & (c))
99
100 #define vx_mcaps(c)     vx_info_mcaps(current->vx_info,(c))
101
102
103 #define vx_current_bcaps() \
104         (((current->vx_info) && !vx_flags(VXF_STATE_SETUP, 0)) ? \
105         current->vx_info->vx_bcaps : cap_bset)
106
107
108 #define vx_current_initpid(n) \
109         (current->vx_info && \
110         (current->vx_info->vx_initpid == (n)))
111
112 #define vx_capable(b,c) (capable(b) || \
113         ((current->euid == 0) && vx_ccaps(c)))
114
115 #else
116 #warning duplicate inclusion
117 #endif