5 #define VXD_CBIT(n,m) (vx_debug_ ## n & (1 << (m)))
6 #define VXD_CMIN(n,m) (vx_debug_ ## n > (m))
7 #define VXD_MASK(n,m) (vx_debug_ ## n & (m))
9 #define VXD_QPOS(v,p) (((uint32_t)(v) >> ((p)*8)) & 0xFF)
10 #define VXD_QUAD(v) VXD_QPOS(v,0), VXD_QPOS(v,1), \
11 VXD_QPOS(v,2), VXD_QPOS(v,3)
12 #define VXF_QUAD "%u.%u.%u.%u"
14 #define VXD_DEV(d) (d), (d)->bd_inode->i_ino, \
15 imajor((d)->bd_inode), iminor((d)->bd_inode)
16 #define VXF_DEV "%p[%lu,%d:%d]"
19 #define __FUNC__ __func__
22 #ifdef CONFIG_VSERVER_DEBUG
24 extern unsigned int vx_debug_switch;
25 extern unsigned int vx_debug_xid;
26 extern unsigned int vx_debug_nid;
27 extern unsigned int vx_debug_net;
28 extern unsigned int vx_debug_limit;
29 extern unsigned int vx_debug_cres;
30 extern unsigned int vx_debug_dlim;
31 extern unsigned int vx_debug_cvirt;
32 extern unsigned int vx_debug_misc;
35 #define VX_LOGLEVEL "vxD: "
36 #define VX_WARNLEVEL KERN_WARNING "vxW: "
38 #define vxdprintk(c,f,x...) \
41 printk(VX_LOGLEVEL f "\n" , ##x); \
44 #define vxlprintk(c,f,x...) \
47 printk(VX_LOGLEVEL f " @%s:%d\n", x); \
50 #define vxfprintk(c,f,x...) \
53 printk(VX_LOGLEVEL f " %s@%s:%d\n", x); \
57 #define vxwprintk(c,f,x...) \
60 printk(VX_WARNLEVEL f "\n" , ##x); \
63 #define vxd_path(d,m) \
64 ({ static char _buffer[PATH_MAX]; \
65 d_path((d), (m), _buffer, sizeof(_buffer)); })
67 #define vxd_cond_path(n) \
68 ((n) ? vxd_path((n)->dentry, (n)->mnt) : "<null>" )
70 #else /* CONFIG_VSERVER_DEBUG */
72 #define vx_debug_switch 0
73 #define vx_debug_xid 0
74 #define vx_debug_nid 0
75 #define vx_debug_net 0
76 #define vx_debug_limit 0
77 #define vx_debug_cres 0
78 #define vx_debug_dlim 0
79 #define vx_debug_cvirt 0
81 #define vxdprintk(x...) do { } while (0)
82 #define vxlprintk(x...) do { } while (0)
83 #define vxfprintk(x...) do { } while (0)
84 #define vxwprintk(x...) do { } while (0)
86 #define vxd_path "<none>"
87 #define vxd_cond_path vxd_path
89 #endif /* CONFIG_VSERVER_DEBUG */
94 #ifdef CONFIG_VSERVER_HISTORY
97 extern unsigned volatile int vxh_active;
106 struct _vxhe_set_clr {
110 struct _vxhe_loc_lookup {
134 struct _vx_hist_entry {
138 struct _vxhe_vxi vxi;
140 struct _vxhe_set_clr sc;
141 struct _vxhe_loc_lookup ll;
145 struct _vx_hist_entry *vxh_advance(void *loc);
149 void __vxh_copy_vxi(struct _vx_hist_entry *entry, struct vx_info *vxi)
151 entry->vxi.ptr = vxi;
153 entry->vxi.usecnt = atomic_read(&vxi->vx_usecnt);
154 entry->vxi.tasks = atomic_read(&vxi->vx_tasks);
155 entry->vxi.xid = vxi->vx_id;
160 #define __HERE__ current_text_addr()
162 #define __VXH_BODY(__type, __data, __here) \
163 struct _vx_hist_entry *entry; \
166 entry = vxh_advance(__here); \
168 entry->type = __type; \
175 __vxh_copy_vxi(entry, vxi)
178 void __vxh_smpl(struct vx_info *vxi, int __type, void *__here)
180 __VXH_BODY(__type, __VXH_SMPL, __here)
183 /* pass vxi and data (void *) */
186 __vxh_copy_vxi(entry, vxi); \
187 entry->sc.data = data
190 void __vxh_data(struct vx_info *vxi, void *data,
191 int __type, void *__here)
193 __VXH_BODY(__type, __VXH_DATA, __here)
196 /* pass vxi and arg (long) */
199 __vxh_copy_vxi(entry, vxi); \
203 void __vxh_long(struct vx_info *vxi, long arg,
204 int __type, void *__here)
206 __VXH_BODY(__type, __VXH_LONG, __here)
211 void __vxh_throw_oops(void *__here)
213 __VXH_BODY(VXH_THROW_OOPS, {}, __here);
214 /* prevent further acquisition */
219 #define vxh_throw_oops() __vxh_throw_oops(__HERE__);
221 #define __vxh_get_vx_info(v,h) __vxh_smpl(v, VXH_GET_VX_INFO, h);
222 #define __vxh_put_vx_info(v,h) __vxh_smpl(v, VXH_PUT_VX_INFO, h);
224 #define __vxh_init_vx_info(v,d,h) \
225 __vxh_data(v,d, VXH_INIT_VX_INFO, h);
226 #define __vxh_set_vx_info(v,d,h) \
227 __vxh_data(v,d, VXH_SET_VX_INFO, h);
228 #define __vxh_clr_vx_info(v,d,h) \
229 __vxh_data(v,d, VXH_CLR_VX_INFO, h);
231 #define __vxh_claim_vx_info(v,d,h) \
232 __vxh_data(v,d, VXH_CLAIM_VX_INFO, h);
233 #define __vxh_release_vx_info(v,d,h) \
234 __vxh_data(v,d, VXH_RELEASE_VX_INFO, h);
236 #define vxh_alloc_vx_info(v) \
237 __vxh_smpl(v, VXH_ALLOC_VX_INFO, __HERE__);
238 #define vxh_dealloc_vx_info(v) \
239 __vxh_smpl(v, VXH_DEALLOC_VX_INFO, __HERE__);
241 #define vxh_hash_vx_info(v) \
242 __vxh_smpl(v, VXH_HASH_VX_INFO, __HERE__);
243 #define vxh_unhash_vx_info(v) \
244 __vxh_smpl(v, VXH_UNHASH_VX_INFO, __HERE__);
246 #define vxh_loc_vx_info(v,l) \
247 __vxh_long(v,l, VXH_LOC_VX_INFO, __HERE__);
248 #define vxh_lookup_vx_info(v,l) \
249 __vxh_long(v,l, VXH_LOOKUP_VX_INFO, __HERE__);
250 #define vxh_create_vx_info(v,l) \
251 __vxh_long(v,l, VXH_CREATE_VX_INFO, __HERE__);
253 extern void vxh_dump_history(void);
256 #else /* CONFIG_VSERVER_HISTORY */
260 #define vxh_throw_oops() do { } while (0)
262 #define __vxh_get_vx_info(v,h) do { } while (0)
263 #define __vxh_put_vx_info(v,h) do { } while (0)
265 #define __vxh_init_vx_info(v,d,h) do { } while (0)
266 #define __vxh_set_vx_info(v,d,h) do { } while (0)
267 #define __vxh_clr_vx_info(v,d,h) do { } while (0)
269 #define __vxh_claim_vx_info(v,d,h) do { } while (0)
270 #define __vxh_release_vx_info(v,d,h) do { } while (0)
272 #define vxh_alloc_vx_info(v) do { } while (0)
273 #define vxh_dealloc_vx_info(v) do { } while (0)
275 #define vxh_hash_vx_info(v) do { } while (0)
276 #define vxh_unhash_vx_info(v) do { } while (0)
278 #define vxh_loc_vx_info(a,v) do { } while (0)
279 #define vxh_lookup_vx_info(a,v) do { } while (0)
280 #define vxh_create_vx_info(a,v) do { } while (0)
282 #define vxh_dump_history() do { } while (0)
285 #endif /* CONFIG_VSERVER_HISTORY */
288 #ifdef CONFIG_VSERVER_DEBUG
289 #define vxd_assert_lock(l) assert_spin_locked(l)
290 #define vxd_assert(c,f,x...) vxlprintk(!(c), \
291 "assertion [" f "] failed.", ##x, __FILE__, __LINE__)
293 #define vxd_assert_lock(l) do { } while (0)
294 #define vxd_assert(c,f,x...) do { } while (0)
298 #endif /* _VX_DEBUG_H */