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