7 #include <linux/kernel.h>
8 #include <linux/sched.h>
10 #include "vserver/network.h"
13 #define nxdprintk(x...) printk("nxd: " x)
15 #define nxdprintk(x...)
19 void free_nx_info(struct nx_info *);
21 extern int proc_pid_nx_info(struct task_struct *, char *);
24 #define get_nx_info(i) __get_nx_info(i,__FILE__,__LINE__)
26 static __inline__ struct nx_info *__get_nx_info(struct nx_info *nxi, const char *_file, int _line)
30 nxdprintk("get_nx_info(%p[%d.%d])\t%s:%d\n",
31 nxi, nxi?nxi->nx_id:0, nxi?atomic_read(&nxi->nx_refcount):0,
33 atomic_inc(&nxi->nx_refcount);
37 #define put_nx_info(i) __put_nx_info(i,__FILE__,__LINE__)
39 static __inline__ void __put_nx_info(struct nx_info *nxi, const char *_file, int _line)
43 nxdprintk("put_nx_info(%p[%d.%d])\t%s:%d\n",
44 nxi, nxi?nxi->nx_id:0, nxi?atomic_read(&nxi->nx_refcount):0,
46 if (atomic_dec_and_lock(&nxi->nx_refcount, &nxlist_lock)) {
47 list_del(&nxi->nx_list);
48 spin_unlock(&nxlist_lock);
54 #define set_nx_info(p,i) __set_nx_info(p,i,__FILE__,__LINE__)
56 static inline void __set_nx_info(struct nx_info **nxp, struct nx_info *nxi,
57 const char *_file, int _line)
62 nxdprintk("set_nx_info(%p[#%d.%d])\t%s:%d\n",
63 nxi, nxi?nxi->nx_id:0, nxi?atomic_read(&nxi->nx_refcount):0,
65 *nxp = __get_nx_info(nxi, _file, _line);
68 #define clr_nx_info(p) __clr_nx_info(p,__FILE__,__LINE__)
70 static inline void __clr_nx_info(struct nx_info **nxp,
71 const char *_file, int _line)
73 struct nx_info *nxo = *nxp;
77 nxdprintk("clr_nx_info(%p[#%d.%d])\t%s:%d\n",
78 nxo, nxo?nxo->nx_id:0, nxo?atomic_read(&nxo->nx_refcount):0,
82 __put_nx_info(nxo, _file, _line);
86 #define task_get_nx_info(i) __task_get_nx_info(i,__FILE__,__LINE__)
88 static __inline__ struct nx_info *__task_get_nx_info(struct task_struct *p,
89 const char *_file, int _line)
94 nxi = __get_nx_info(p->nx_info, _file, _line);
99 #define nx_verify_info(p,i) \
100 __nx_verify_info((p)->nx_info,i,__FILE__,__LINE__)
102 static __inline__ void __nx_verify_info(
103 struct nx_info *ipa, struct nx_info *ipb,
104 const char *_file, int _line)
108 printk(KERN_ERR "ip bad assumption (%p==%p) at %s:%d\n",
109 ipa, ipb, _file, _line);
113 #define nx_task_nid(t) ((t)->nid)
115 #define nx_current_nid() nx_task_nid(current)
117 #define nx_check(c,m) __nx_check(nx_current_nid(),c,m)
119 #define nx_weak_check(c,m) ((m) ? nx_check(c,m) : 1)
122 #define nxdprintk(x...)
125 #define __nx_flags(v,m,f) (((v) & (m)) ^ (f))
127 #define __nx_task_flags(t,m,f) \
128 (((t) && ((t)->nx_info)) ? \
129 __nx_flags((t)->nx_info->nx_flags,(m),(f)) : 0)
131 #define nx_current_flags() \
132 ((current->nx_info) ? current->nx_info->nx_flags : 0)
134 #define nx_flags(m,f) __nx_flags(nx_current_flags(),(m),(f))
137 #define nx_current_ncaps() \
138 ((current->nx_info) ? current->nx_info->nx_ncaps : 0)
140 #define nx_ncaps(c) (nx_current_ncaps() & (c))
144 #define sock_nx_init(s) do { \
146 (s)->sk_nx_info = NULL; \