1 #ifndef _VX_VS_CONTEXT_H
2 #define _VX_VS_CONTEXT_H
5 #include <linux/kernel.h>
6 #include <linux/rcupdate.h>
7 #include <linux/sched.h>
9 #include "vserver/context.h"
10 #include "vserver/debug.h"
13 extern int proc_pid_vx_info(struct task_struct *, char *);
16 #define get_vx_info(i) __get_vx_info(i,__FILE__,__LINE__)
18 static inline struct vx_info *__get_vx_info(struct vx_info *vxi,
19 const char *_file, int _line)
23 vxlprintk(VXD_CBIT(xid, 2), "get_vx_info(%p[#%d.%d])",
24 vxi, vxi?vxi->vx_id:0, vxi?atomic_read(&vxi->vx_usecnt):0,
26 atomic_inc(&vxi->vx_usecnt);
31 #define free_vx_info(i) \
32 call_rcu(&i->vx_rcu, rcu_free_vx_info);
34 #define put_vx_info(i) __put_vx_info(i,__FILE__,__LINE__)
36 static inline void __put_vx_info(struct vx_info *vxi, const char *_file, int _line)
40 vxlprintk(VXD_CBIT(xid, 2), "put_vx_info(%p[#%d.%d])",
41 vxi, vxi?vxi->vx_id:0, vxi?atomic_read(&vxi->vx_usecnt):0,
43 if (atomic_dec_and_test(&vxi->vx_usecnt))
47 #define set_vx_info(p,i) __set_vx_info(p,i,__FILE__,__LINE__)
49 static inline void __set_vx_info(struct vx_info **vxp, struct vx_info *vxi,
50 const char *_file, int _line)
55 vxlprintk(VXD_CBIT(xid, 3), "set_vx_info(%p[#%d.%d.%d])",
56 vxi, vxi?vxi->vx_id:0,
57 vxi?atomic_read(&vxi->vx_usecnt):0,
58 vxi?atomic_read(&vxi->vx_refcnt):0,
60 atomic_inc(&vxi->vx_refcnt);
61 *vxp = __get_vx_info(vxi, _file, _line);
64 #define clr_vx_info(p) __clr_vx_info(p,__FILE__,__LINE__)
66 static inline void __clr_vx_info(struct vx_info **vxp,
67 const char *_file, int _line)
69 struct vx_info *vxo = *vxp;
73 vxlprintk(VXD_CBIT(xid, 3), "clr_vx_info(%p[#%d.%d.%d])",
74 vxo, vxo?vxo->vx_id:0,
75 vxo?atomic_read(&vxo->vx_usecnt):0,
76 vxo?atomic_read(&vxo->vx_refcnt):0,
80 if (vxo && atomic_dec_and_test(&vxo->vx_refcnt))
82 __put_vx_info(vxo, _file, _line);
86 #define task_get_vx_info(i) __task_get_vx_info(i,__FILE__,__LINE__)
88 static __inline__ struct vx_info *__task_get_vx_info(struct task_struct *p,
89 const char *_file, int _line)
94 vxlprintk(VXD_CBIT(xid, 5), "task_get_vx_info(%p)",
96 vxi = __get_vx_info(p->vx_info, _file, _line);
102 #define vx_verify_info(p,i) \
103 __vx_verify_info((p)->vx_info,i,__FILE__,__LINE__)
105 static __inline__ void __vx_verify_info(
106 struct vx_info *vxa, struct vx_info *vxb,
107 const char *_file, int _line)
111 printk(KERN_ERR "vx bad assumption (%p==%p) at %s:%d\n",
112 vxa, vxb, _file, _line);
117 #warning duplicate inclusion