1 #ifndef _VX_VS_CONTEXT_H
2 #define _VX_VS_CONTEXT_H
7 #include <linux/kernel.h>
8 #include <linux/rcupdate.h>
9 #include <linux/sched.h>
11 #include "vserver/context.h"
15 #define vxdprintk(x...) printk("vxd: " x)
17 #define vxdprintk(x...)
22 extern int proc_pid_vx_info(struct task_struct *, char *);
25 #define get_vx_info(i) __get_vx_info(i,__FILE__,__LINE__)
27 static inline struct vx_info *__get_vx_info(struct vx_info *vxi,
28 const char *_file, int _line)
32 vxdprintk("get_vx_info(%p[#%d.%d])\t%s:%d\n",
33 vxi, vxi?vxi->vx_id:0, vxi?atomic_read(&vxi->vx_usecnt):0,
35 atomic_inc(&vxi->vx_usecnt);
40 #define free_vx_info(i) \
41 call_rcu(&i->vx_rcu, rcu_free_vx_info);
43 #define put_vx_info(i) __put_vx_info(i,__FILE__,__LINE__)
45 static inline void __put_vx_info(struct vx_info *vxi, const char *_file, int _line)
49 vxdprintk("put_vx_info(%p[#%d.%d])\t%s:%d\n",
50 vxi, vxi?vxi->vx_id:0, vxi?atomic_read(&vxi->vx_usecnt):0,
52 if (atomic_dec_and_test(&vxi->vx_usecnt))
56 #define set_vx_info(p,i) __set_vx_info(p,i,__FILE__,__LINE__)
58 static inline void __set_vx_info(struct vx_info **vxp, struct vx_info *vxi,
59 const char *_file, int _line)
64 vxdprintk("set_vx_info(%p[#%d.%d.%d])\t%s:%d\n",
65 vxi, vxi?vxi->vx_id:0,
66 vxi?atomic_read(&vxi->vx_usecnt):0,
67 vxi?atomic_read(&vxi->vx_refcnt):0,
69 atomic_inc(&vxi->vx_refcnt);
70 *vxp = __get_vx_info(vxi, _file, _line);
73 #define clr_vx_info(p) __clr_vx_info(p,__FILE__,__LINE__)
75 static inline void __clr_vx_info(struct vx_info **vxp,
76 const char *_file, int _line)
78 struct vx_info *vxo = *vxp;
82 vxdprintk("clr_vx_info(%p[#%d.%d.%d])\t%s:%d\n",
83 vxo, vxo?vxo->vx_id:0,
84 vxo?atomic_read(&vxo->vx_usecnt):0,
85 vxo?atomic_read(&vxo->vx_refcnt):0,
89 if (vxo && atomic_dec_and_test(&vxo->vx_refcnt))
91 __put_vx_info(vxo, _file, _line);
95 #define task_get_vx_info(i) __task_get_vx_info(i,__FILE__,__LINE__)
97 static __inline__ struct vx_info *__task_get_vx_info(struct task_struct *p,
98 const char *_file, int _line)
103 vxi = __get_vx_info(p->vx_info, _file, _line);
109 #define vx_verify_info(p,i) \
110 __vx_verify_info((p)->vx_info,i,__FILE__,__LINE__)
112 static __inline__ void __vx_verify_info(
113 struct vx_info *vxa, struct vx_info *vxb,
114 const char *_file, int _line)
118 printk(KERN_ERR "vx bad assumption (%p==%p) at %s:%d\n",
119 vxa, vxb, _file, _line);
124 #define vxdprintk(x...)
127 #warning duplicate inclusion