1 #ifndef _VX_VS_CONTEXT_H
2 #define _VX_VS_CONTEXT_H
5 #include <linux/kernel.h>
6 #include "vserver/debug.h"
9 #define get_vx_info(i) __get_vx_info(i,__FILE__,__LINE__)
11 static inline struct vx_info *__get_vx_info(struct vx_info *vxi,
12 const char *_file, int _line)
17 vxlprintk(VXD_CBIT(xid, 2), "get_vx_info(%p[#%d.%d])",
18 vxi, vxi?vxi->vx_id:0, vxi?atomic_read(&vxi->vx_usecnt):0,
22 atomic_inc(&vxi->vx_usecnt);
27 extern void free_vx_info(struct vx_info *);
29 #define put_vx_info(i) __put_vx_info(i,__FILE__,__LINE__)
31 static inline void __put_vx_info(struct vx_info *vxi, const char *_file, int _line)
35 vxlprintk(VXD_CBIT(xid, 2), "put_vx_info(%p[#%d.%d])",
36 vxi, vxi?vxi->vx_id:0, vxi?atomic_read(&vxi->vx_usecnt):0,
40 if (atomic_dec_and_test(&vxi->vx_usecnt))
45 #define init_vx_info(p,i) __init_vx_info(p,i,__FILE__,__LINE__)
47 static inline void __init_vx_info(struct vx_info **vxp, struct vx_info *vxi,
48 const char *_file, int _line)
51 vxlprintk(VXD_CBIT(xid, 3),
52 "init_vx_info(%p[#%d.%d])",
53 vxi, vxi?vxi->vx_id:0,
54 vxi?atomic_read(&vxi->vx_usecnt):0,
56 vxh_init_vx_info(vxi, vxp);
58 atomic_inc(&vxi->vx_usecnt);
64 #define set_vx_info(p,i) __set_vx_info(p,i,__FILE__,__LINE__)
66 static inline void __set_vx_info(struct vx_info **vxp, struct vx_info *vxi,
67 const char *_file, int _line)
74 vxlprintk(VXD_CBIT(xid, 3), "set_vx_info(%p[#%d.%d])",
75 vxi, vxi?vxi->vx_id:0,
76 vxi?atomic_read(&vxi->vx_usecnt):0,
78 vxh_set_vx_info(vxi, vxp);
80 // vxo = xchg(vxp, __get_vx_info(vxi, _file, _line));
81 atomic_inc(&vxi->vx_usecnt);
87 #define clr_vx_info(p) __clr_vx_info(p,__FILE__,__LINE__)
89 static inline void __clr_vx_info(struct vx_info **vxp,
90 const char *_file, int _line)
94 vxo = xchg(vxp, NULL);
98 vxlprintk(VXD_CBIT(xid, 3), "clr_vx_info(%p[#%d.%d])",
99 vxo, vxo?vxo->vx_id:0,
100 vxo?atomic_read(&vxo->vx_usecnt):0,
102 vxh_clr_vx_info(vxo, vxp);
104 // __put_vx_info(vxo, _file, _line);
105 if (atomic_dec_and_test(&vxo->vx_usecnt))
110 #define claim_vx_info(v,p) __claim_vx_info(v,p,__FILE__,__LINE__)
112 static inline void __claim_vx_info(struct vx_info *vxi,
113 struct task_struct *task, const char *_file, int _line)
115 vxlprintk(VXD_CBIT(xid, 3), "claim_vx_info(%p[#%d.%d.%d]) %p",
116 vxi, vxi?vxi->vx_id:0,
117 vxi?atomic_read(&vxi->vx_usecnt):0,
118 vxi?atomic_read(&vxi->vx_tasks):0,
120 vxh_claim_vx_info(vxi, task);
122 atomic_inc(&vxi->vx_tasks);
126 extern void unhash_vx_info(struct vx_info *);
128 #define release_vx_info(v,p) __release_vx_info(v,p,__FILE__,__LINE__)
130 static inline void __release_vx_info(struct vx_info *vxi,
131 struct task_struct *task, const char *_file, int _line)
133 vxlprintk(VXD_CBIT(xid, 3), "release_vx_info(%p[#%d.%d.%d]) %p",
134 vxi, vxi?vxi->vx_id:0,
135 vxi?atomic_read(&vxi->vx_usecnt):0,
136 vxi?atomic_read(&vxi->vx_tasks):0,
138 vxh_release_vx_info(vxi, task);
142 if (atomic_dec_and_test(&vxi->vx_tasks))
147 #define task_get_vx_info(p) __task_get_vx_info(p,__FILE__,__LINE__)
149 static __inline__ struct vx_info *__task_get_vx_info(struct task_struct *p,
150 const char *_file, int _line)
155 vxlprintk(VXD_CBIT(xid, 5), "task_get_vx_info(%p)",
157 vxi = __get_vx_info(p->vx_info, _file, _line);
164 #warning duplicate inclusion