4 #include "vserver/context.h"
7 #define vx_task_xid(t) ((t)->xid)
9 #define vx_current_xid() vx_task_xid(current)
11 #define vx_check(c,m) __vx_check(vx_current_xid(),c,m)
13 #define vx_weak_check(c,m) ((m) ? vx_check(c,m) : 1)
17 * check current context for ADMIN/WATCH and
18 * optionally agains supplied argument
20 static __inline__ int __vx_check(xid_t cid, xid_t id, unsigned int mode)
22 if (mode & VX_ARG_MASK) {
23 if ((mode & VX_IDENT) &&
27 if (mode & VX_ATR_MASK) {
28 if ((mode & VX_DYNAMIC) &&
29 (id >= MIN_D_CONTEXT) &&
30 (id <= MAX_S_CONTEXT))
32 if ((mode & VX_STATIC) &&
33 (id > 1) && (id < MIN_D_CONTEXT))
36 return (((mode & VX_ADMIN) && (cid == 0)) ||
37 ((mode & VX_WATCH) && (cid == 1)));
41 #define __vx_flags(v,m,f) (((v) & (m)) ^ (f))
43 #define __vx_task_flags(t,m,f) \
44 (((t) && ((t)->vx_info)) ? \
45 __vx_flags((t)->vx_info->vx_flags,(m),(f)) : 0)
47 #define vx_current_flags() \
48 ((current->vx_info) ? current->vx_info->vx_flags : 0)
50 #define vx_flags(m,f) __vx_flags(vx_current_flags(),(m),(f))
53 #define vx_current_ccaps() \
54 ((current->vx_info) ? current->vx_info->vx_ccaps : 0)
56 #define vx_ccaps(c) (vx_current_ccaps() & (c))
58 #define vx_current_bcaps() \
59 (((current->vx_info) && !vx_flags(VXF_STATE_SETUP, 0)) ? \
60 current->vx_info->vx_bcaps : cap_bset)
63 /* generic flag merging */
65 #define vx_mask_flags(v,f,m) (((v) & ~(m)) | ((f) & (m)))
67 #define vx_mask_mask(v,f,m) (((v) & ~(m)) | ((v) & (f) & (m)))