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 extern void free_vx_info(struct vx_info *);
33 #define put_vx_info(i) __put_vx_info(i,__FILE__,__LINE__)
35 static inline void __put_vx_info(struct vx_info *vxi, const char *_file, int _line)
39 vxlprintk(VXD_CBIT(xid, 2), "put_vx_info(%p[#%d.%d])",
40 vxi, vxi?vxi->vx_id:0, vxi?atomic_read(&vxi->vx_usecnt):0,
42 if (atomic_dec_and_test(&vxi->vx_usecnt))
46 #define set_vx_info(p,i) __set_vx_info(p,i,__FILE__,__LINE__)
48 static inline void __set_vx_info(struct vx_info **vxp, struct vx_info *vxi,
49 const char *_file, int _line)
56 vxlprintk(VXD_CBIT(xid, 3), "set_vx_info(%p[#%d.%d.%d])",
57 vxi, vxi?vxi->vx_id:0,
58 vxi?atomic_read(&vxi->vx_usecnt):0,
59 vxi?atomic_read(&vxi->vx_refcnt):0,
62 atomic_inc(&vxi->vx_refcnt);
63 vxo = xchg(vxp, __get_vx_info(vxi, _file, _line));
67 #define clr_vx_info(p) __clr_vx_info(p,__FILE__,__LINE__)
69 static inline void __clr_vx_info(struct vx_info **vxp,
70 const char *_file, int _line)
74 vxo = xchg(vxp, NULL);
78 vxlprintk(VXD_CBIT(xid, 3), "clr_vx_info(%p[#%d.%d.%d])",
79 vxo, vxo?vxo->vx_id:0,
80 vxo?atomic_read(&vxo->vx_usecnt):0,
81 vxo?atomic_read(&vxo->vx_refcnt):0,
84 if (atomic_dec_and_test(&vxo->vx_refcnt))
86 __put_vx_info(vxo, _file, _line);
90 #define task_get_vx_info(i) __task_get_vx_info(i,__FILE__,__LINE__)
92 static __inline__ struct vx_info *__task_get_vx_info(struct task_struct *p,
93 const char *_file, int _line)
98 vxlprintk(VXD_CBIT(xid, 5), "task_get_vx_info(%p)",
100 vxi = __get_vx_info(p->vx_info, _file, _line);
106 #define vx_verify_info(p,i) \
107 __vx_verify_info((p)->vx_info,i,__FILE__,__LINE__)
109 static __inline__ void __vx_verify_info(
110 struct vx_info *vxa, struct vx_info *vxb,
111 const char *_file, int _line)
115 printk(KERN_ERR "vx bad assumption (%p==%p) at %s:%d\n",
116 vxa, vxb, _file, _line);
121 #warning duplicate inclusion