4 #include "vserver/context.h"
7 #define VX_IRQ_MASK 0xF000
8 #include <linux/hardirq.h>
10 #define vx_task_xid(t) ((t)->xid)
12 #define vx_current_xid() vx_task_xid(current)
14 #define vx_check(c,m) __vx_check(vx_current_xid(),c,m|VX_IRQ)
16 #define vx_weak_check(c,m) ((m) ? vx_check(c,m) : 1)
20 * check current context for ADMIN/WATCH and
21 * optionally against supplied argument
23 static inline int __vx_check(xid_t cid, xid_t id, unsigned int mode)
25 if (mode & VX_ARG_MASK) {
26 if ((mode & VX_IDENT) &&
30 if (mode & VX_ATR_MASK) {
31 if ((mode & VX_DYNAMIC) &&
32 (id >= MIN_D_CONTEXT) &&
33 (id <= MAX_S_CONTEXT))
35 if ((mode & VX_STATIC) &&
36 (id > 1) && (id < MIN_D_CONTEXT))
39 if ((mode & VX_IRQ) && (unlikely(in_interrupt())))
42 return (((mode & VX_ADMIN) && (cid == 0)) ||
43 ((mode & VX_WATCH) && (cid == 1)) ||
44 ((mode & VX_HOSTID) && (id == 0)));
48 #define __vx_state(v) ((v) ? ((v)->vx_state) : 0)
50 #define vx_info_state(v,m) (__vx_state(v) & (m))
53 /* generic flag merging */
55 #define vx_check_flags(v,m,f) (((v) & (m)) ^ (f))
57 #define vx_mask_flags(v,f,m) (((v) & ~(m)) | ((f) & (m)))
59 #define vx_mask_mask(v,f,m) (((v) & ~(m)) | ((v) & (f) & (m)))
61 #define vx_check_bit(v,n) ((v) & (1LL << (n)))
66 #define __vx_flags(v) ((v) ? (v)->vx_flags : 0)
68 #define vx_current_flags() __vx_flags(current->vx_info)
70 #define vx_info_flags(v,m,f) \
71 vx_check_flags(__vx_flags(v),(m),(f))
73 #define task_vx_flags(t,m,f) \
74 ((t) && vx_info_flags((t)->vx_info, (m), (f)))
76 #define vx_flags(m,f) vx_info_flags(current->vx_info,(m),(f))
81 #define __vx_ccaps(v) ((v) ? (v)->vx_ccaps : 0)
83 #define vx_current_ccaps() __vx_ccaps(current->vx_info)
85 #define vx_info_ccaps(v,c) (__vx_ccaps(v) & (c))
87 #define vx_ccaps(c) vx_info_ccaps(current->vx_info,(c))
90 #define __vx_mcaps(v) ((v) ? (v)->vx_ccaps >> 32UL : ~0 )
92 #define vx_info_mcaps(v,c) (__vx_mcaps(v) & (c))
94 #define vx_mcaps(c) vx_info_mcaps(current->vx_info,(c))
97 #define vx_current_bcaps() \
98 (((current->vx_info) && !vx_flags(VXF_STATE_SETUP, 0)) ? \
99 current->vx_info->vx_bcaps : cap_bset)
102 #define vx_current_initpid(n) \
103 (current->vx_info && \
104 (current->vx_info->vx_initpid == (n)))
106 #define vx_capable(b,c) (capable(b) || \
107 ((current->euid == 0) && vx_ccaps(c)))
110 #warning duplicate inclusion