d24d0e23e4572caae4b3daa23bbfcc9c3e9f20ae
[linux-2.6.git] / include / linux / ninline.h
1 #error THIS FILE SHOULD NO LONGER BE USED
2
3 #ifndef _NX_INLINE_H
4 #define _NX_INLINE_H
5
6
7 // #define NX_DEBUG
8
9 #include <linux/kernel.h>
10 #include <linux/rcupdate.h>
11 #include <linux/sched.h>
12
13 #include "vserver/network.h"
14
15 #if defined(NX_DEBUG)
16 #define nxdprintk(x...) printk("nxd: " x)
17 #else
18 #define nxdprintk(x...)
19 #endif
20
21
22 extern int proc_pid_nx_info(struct task_struct *, char *);
23
24
25 #define get_nx_info(i)  __get_nx_info(i,__FILE__,__LINE__)
26
27 static inline struct nx_info *__get_nx_info(struct nx_info *nxi,
28         const char *_file, int _line)
29 {
30         if (!nxi)
31                 return NULL;
32         nxdprintk("get_nx_info(%p[#%d.%d])\t%s:%d\n",
33                 nxi, nxi?nxi->nx_id:0, nxi?atomic_read(&nxi->nx_usecnt):0,
34                 _file, _line);
35         atomic_inc(&nxi->nx_usecnt);
36         return nxi;
37 }
38
39
40 #define free_nx_info(nxi)       \
41         call_rcu(&nxi->nx_rcu, rcu_free_nx_info, nxi);
42
43 #define put_nx_info(i)  __put_nx_info(i,__FILE__,__LINE__)
44
45 static inline void __put_nx_info(struct nx_info *nxi, const char *_file, int _line)
46 {
47         if (!nxi)
48                 return;
49         nxdprintk("put_nx_info(%p[#%d.%d])\t%s:%d\n",
50                 nxi, nxi?nxi->nx_id:0, nxi?atomic_read(&nxi->nx_usecnt):0,
51                 _file, _line);
52         if (atomic_dec_and_test(&nxi->nx_usecnt))
53                 free_nx_info(nxi);
54 }
55
56
57 #define set_nx_info(p,i) __set_nx_info(p,i,__FILE__,__LINE__)
58
59 static inline void __set_nx_info(struct nx_info **nxp, struct nx_info *nxi,
60         const char *_file, int _line)
61 {
62         BUG_ON(*nxp);
63         if (!nxi)
64                 return;
65         nxdprintk("set_nx_info(%p[#%d.%d.%d])\t%s:%d\n",
66                 nxi, nxi?nxi->nx_id:0,
67                 nxi?atomic_read(&nxi->nx_usecnt):0,
68                 nxi?atomic_read(&nxi->nx_refcnt):0,
69                 _file, _line);
70         atomic_inc(&nxi->nx_refcnt);
71         *nxp = __get_nx_info(nxi, _file, _line);
72 }
73
74 #define clr_nx_info(p)  __clr_nx_info(p,__FILE__,__LINE__)
75
76 static inline void __clr_nx_info(struct nx_info **nxp,
77         const char *_file, int _line)
78 {
79         struct nx_info *nxo = *nxp;
80
81         if (!nxo)
82                 return;
83         nxdprintk("clr_nx_info(%p[#%d.%d.%d])\t%s:%d\n",
84                 nxo, nxo?nxo->nx_id:0,
85                 nxo?atomic_read(&nxo->nx_usecnt):0,
86                 nxo?atomic_read(&nxo->nx_refcnt):0,
87                 _file, _line);
88         *nxp = NULL;
89         wmb();
90         if (nxo && atomic_dec_and_test(&nxo->nx_refcnt))
91                 unhash_nx_info(nxo);
92         __put_nx_info(nxo, _file, _line);
93 }
94
95
96 #define task_get_nx_info(i)     __task_get_nx_info(i,__FILE__,__LINE__)
97
98 static __inline__ struct nx_info *__task_get_nx_info(struct task_struct *p,
99         const char *_file, int _line)
100 {
101         struct nx_info *nxi;
102         
103         task_lock(p);
104         nxi = __get_nx_info(p->nx_info, _file, _line);
105         task_unlock(p);
106         return nxi;
107 }
108
109 #define nx_verify_info(p,i)     \
110         __nx_verify_info((p)->nx_info,i,__FILE__,__LINE__)
111
112 static __inline__ void __nx_verify_info(
113         struct nx_info *ipa, struct nx_info *ipb,
114         const char *_file, int _line)
115 {
116         if (ipa == ipb)
117                 return;
118         printk(KERN_ERR "ip bad assumption (%p==%p) at %s:%d\n",
119                 ipa, ipb, _file, _line);
120 }
121
122
123 #define nx_task_nid(t)  ((t)->nid)
124
125 #define nx_current_nid() nx_task_nid(current)
126
127 #define nx_check(c,m)   __nx_check(nx_current_nid(),c,m)
128
129 #define nx_weak_check(c,m)      ((m) ? nx_check(c,m) : 1)
130
131 #undef nxdprintk
132 #define nxdprintk(x...)
133
134
135 #define __nx_flags(v,m,f)       (((v) & (m)) ^ (f))
136
137 #define __nx_task_flags(t,m,f) \
138         (((t) && ((t)->nx_info)) ? \
139                 __nx_flags((t)->nx_info->nx_flags,(m),(f)) : 0)
140
141 #define nx_current_flags() \
142         ((current->nx_info) ? current->nx_info->nx_flags : 0)
143
144 #define nx_flags(m,f)   __nx_flags(nx_current_flags(),(m),(f))
145
146
147 #define nx_current_ncaps() \
148         ((current->nx_info) ? current->nx_info->nx_ncaps : 0)
149
150 #define nx_ncaps(c)     (nx_current_ncaps() & (c))
151
152
153
154 #define sock_nx_init(s)  do {           \
155         (s)->sk_nid = 0;                \
156         (s)->sk_nx_info = NULL;         \
157         } while (0)
158
159
160
161 #endif