5 #warning config options missing
8 #define VXD_CBIT(n,m) (vx_debug_ ## n & (1 << (m)))
9 #define VXD_CMIN(n,m) (vx_debug_ ## n > (m))
10 #define VXD_MASK(n,m) (vx_debug_ ## n & (m))
12 #define VXD_QPOS(v,p) (((uint32_t)(v) >> ((p)*8)) & 0xFF)
13 #define VXD_QUAD(v) VXD_QPOS(v,0), VXD_QPOS(v,1), \
14 VXD_QPOS(v,2), VXD_QPOS(v,3)
15 #define VXF_QUAD "%u.%u.%u.%u"
17 #define VXD_DEV(d) (d), (d)->bd_inode->i_ino, \
18 imajor((d)->bd_inode), iminor((d)->bd_inode)
19 #define VXF_DEV "%p[%lu,%d:%d]"
22 #define __FUNC__ __func__
25 #ifdef CONFIG_VSERVER_DEBUG
27 extern unsigned int vx_debug_switch;
28 extern unsigned int vx_debug_xid;
29 extern unsigned int vx_debug_nid;
30 extern unsigned int vx_debug_net;
31 extern unsigned int vx_debug_limit;
32 extern unsigned int vx_debug_dlim;
33 extern unsigned int vx_debug_cvirt;
34 extern unsigned int vx_debug_misc;
37 #define VX_LOGLEVEL "vxD: "
38 #define VX_WARNLEVEL KERN_WARNING "vxW: "
40 #define vxdprintk(c,f,x...) \
43 printk(VX_LOGLEVEL f "\n" , ##x); \
46 #define vxlprintk(c,f,x...) \
49 printk(VX_LOGLEVEL f " @%s:%d\n", x); \
52 #define vxfprintk(c,f,x...) \
55 printk(VX_LOGLEVEL f " %s@%s:%d\n", x); \
59 #define vxwprintk(c,f,x...) \
62 printk(VX_WARNLEVEL f "\n" , ##x); \
66 #define vxd_path(d,m) \
67 ({ static char _buffer[PATH_MAX]; \
68 d_path((d), (m), _buffer, sizeof(_buffer)); })
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_dlim 0
78 #define vx_debug_cvirt 0
80 #define vxdprintk(x...) do { } while (0)
81 #define vxlprintk(x...) do { } while (0)
82 #define vxfprintk(x...) do { } while (0)
83 #define vxwprintk(x...) do { } while (0)
85 #define vxd_path "<none>"
87 #endif /* CONFIG_VSERVER_DEBUG */
92 #ifdef CONFIG_VSERVER_HISTORY
95 extern unsigned volatile int vxh_active;
104 struct _vxhe_set_clr {
108 struct _vxhe_loc_lookup {
132 struct _vx_hist_entry {
136 struct _vxhe_vxi vxi;
138 struct _vxhe_set_clr sc;
139 struct _vxhe_loc_lookup ll;
143 struct _vx_hist_entry *vxh_advance(void *loc);
145 #define VXH_HERE(__type) \
146 ({ __label__ __vxh_##__type; \
152 static inline void __vxh_copy_vxi(struct _vx_hist_entry *entry, struct vx_info *vxi)
154 entry->vxi.ptr = vxi;
156 entry->vxi.usecnt = atomic_read(&vxi->vx_usecnt);
157 entry->vxi.tasks = atomic_read(&vxi->vx_tasks);
158 entry->vxi.xid = vxi->vx_id;
163 #define __VXH_BODY(__type, __data) \
164 struct _vx_hist_entry *entry; \
167 entry = vxh_advance(VXH_HERE(__type)); \
169 entry->type = __type; \
174 #define __VXH_SIMPLE \
175 __vxh_copy_vxi(entry, vxi)
177 #define VXH_SIMPLE(__name, __type) \
178 static inline void __name(struct vx_info *vxi) \
180 __VXH_BODY(__type, __VXH_SIMPLE) \
183 /* pass vxi and data (void *) */
185 __vxh_copy_vxi(entry, vxi); \
186 entry->sc.data = data
188 #define VXH_DATA(__name, __type) \
190 void __name(struct vx_info *vxi, void *data) \
192 __VXH_BODY(__type, __VXH_DATA) \
195 /* pass vxi and arg (long) */
197 __vxh_copy_vxi(entry, vxi); \
200 #define VXH_LARG(__name, __type) \
202 void __name(struct vx_info *vxi, long arg) \
204 __VXH_BODY(__type, __VXH_LARG) \
208 static inline void vxh_throw_oops(void)
210 __VXH_BODY(VXH_THROW_OOPS, {});
211 /* prevent further acquisition */
215 VXH_SIMPLE(vxh_get_vx_info, VXH_GET_VX_INFO);
216 VXH_SIMPLE(vxh_put_vx_info, VXH_PUT_VX_INFO);
218 VXH_DATA(vxh_init_vx_info, VXH_INIT_VX_INFO);
219 VXH_DATA(vxh_set_vx_info, VXH_SET_VX_INFO);
220 VXH_DATA(vxh_clr_vx_info, VXH_CLR_VX_INFO);
222 VXH_DATA(vxh_claim_vx_info, VXH_CLAIM_VX_INFO);
223 VXH_DATA(vxh_release_vx_info, VXH_RELEASE_VX_INFO);
225 VXH_SIMPLE(vxh_alloc_vx_info, VXH_ALLOC_VX_INFO);
226 VXH_SIMPLE(vxh_dealloc_vx_info, VXH_DEALLOC_VX_INFO);
228 VXH_SIMPLE(vxh_hash_vx_info, VXH_HASH_VX_INFO);
229 VXH_SIMPLE(vxh_unhash_vx_info, VXH_UNHASH_VX_INFO);
231 VXH_LARG(vxh_loc_vx_info, VXH_LOC_VX_INFO);
232 VXH_LARG(vxh_lookup_vx_info, VXH_LOOKUP_VX_INFO);
233 VXH_LARG(vxh_create_vx_info, VXH_CREATE_VX_INFO);
235 extern void vxh_dump_history(void);
238 #else /* CONFIG_VSERVER_HISTORY */
241 #define vxh_throw_oops() do { } while (0)
243 #define vxh_get_vx_info(v) do { } while (0)
244 #define vxh_put_vx_info(v) do { } while (0)
246 #define vxh_init_vx_info(v,d) do { } while (0)
247 #define vxh_set_vx_info(v,d) do { } while (0)
248 #define vxh_clr_vx_info(v,d) do { } while (0)
250 #define vxh_claim_vx_info(v,d) do { } while (0)
251 #define vxh_release_vx_info(v,d) do { } while (0)
253 #define vxh_alloc_vx_info(v) do { } while (0)
254 #define vxh_dealloc_vx_info(v) do { } while (0)
256 #define vxh_hash_vx_info(v) do { } while (0)
257 #define vxh_unhash_vx_info(v) do { } while (0)
259 #define vxh_loc_vx_info(a,v) do { } while (0)
260 #define vxh_lookup_vx_info(a,v) do { } while (0)
261 #define vxh_create_vx_info(a,v) do { } while (0)
263 #define vxh_dump_history() do { } while (0)
266 #endif /* CONFIG_VSERVER_HISTORY */
269 #ifdef CONFIG_VSERVER_DEBUG
270 #define vxd_assert_lock(l) assert_spin_locked(l)
271 #define vxd_assert(c,f,x...) vxlprintk(!(c), \
272 "assertion [" f "] failed.", ##x, __FILE__, __LINE__)
274 #define vxd_assert_lock(l) do { } while (0)
275 #define vxd_assert(c,f,x...) do { } while (0)
279 #endif /* _VX_DEBUG_H */