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,
32 const char *_file, int _line)
37 vxlprintk(VXD_CBIT(xid, 2), "put_vx_info(%p[#%d.%d])",
38 vxi, vxi?vxi->vx_id:0, vxi?atomic_read(&vxi->vx_usecnt):0,
42 if (atomic_dec_and_test(&vxi->vx_usecnt))
47 #define init_vx_info(p,i) __init_vx_info(p,i,__FILE__,__LINE__)
49 static inline void __init_vx_info(struct vx_info **vxp, struct vx_info *vxi,
50 const char *_file, int _line)
53 vxlprintk(VXD_CBIT(xid, 3),
54 "init_vx_info(%p[#%d.%d])",
55 vxi, vxi?vxi->vx_id:0,
56 vxi?atomic_read(&vxi->vx_usecnt):0,
58 vxh_init_vx_info(vxi, vxp);
60 atomic_inc(&vxi->vx_usecnt);
66 #define set_vx_info(p,i) __set_vx_info(p,i,__FILE__,__LINE__)
68 static inline void __set_vx_info(struct vx_info **vxp, struct vx_info *vxi,
69 const char *_file, int _line)
76 vxlprintk(VXD_CBIT(xid, 3), "set_vx_info(%p[#%d.%d])",
77 vxi, vxi?vxi->vx_id:0,
78 vxi?atomic_read(&vxi->vx_usecnt):0,
80 vxh_set_vx_info(vxi, vxp);
82 atomic_inc(&vxi->vx_usecnt);
88 #define clr_vx_info(p) __clr_vx_info(p,__FILE__,__LINE__)
90 static inline void __clr_vx_info(struct vx_info **vxp,
91 const char *_file, int _line)
95 vxo = xchg(vxp, NULL);
99 vxlprintk(VXD_CBIT(xid, 3), "clr_vx_info(%p[#%d.%d])",
100 vxo, vxo?vxo->vx_id:0,
101 vxo?atomic_read(&vxo->vx_usecnt):0,
103 vxh_clr_vx_info(vxo, vxp);
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);
163 static inline void __wakeup_vx_info(struct vx_info *vxi)
165 if (waitqueue_active(&vxi->vx_wait))
166 wake_up_interruptible(&vxi->vx_wait);
170 #warning duplicate inclusion