#ifndef _VX_DEBUG_H
#define _VX_DEBUG_H
-#ifndef CONFIG_VSERVER
+#ifndef CONFIG_VSERVER
#warning config options missing
#endif
#define VXD_QPOS(v,p) (((uint32_t)(v) >> ((p)*8)) & 0xFF)
#define VXD_QUAD(v) VXD_QPOS(v,0), VXD_QPOS(v,1), \
VXD_QPOS(v,2), VXD_QPOS(v,3)
+#define VXF_QUAD "%u.%u.%u.%u"
+
+#define VXD_DEV(d) (d), (d)->bd_inode->i_ino, \
+ imajor((d)->bd_inode), iminor((d)->bd_inode)
+#define VXF_DEV "%p[%lu,%d:%d]"
+
#define __FUNC__ __func__
extern unsigned int vx_debug_net;
extern unsigned int vx_debug_limit;
extern unsigned int vx_debug_dlim;
-extern unsigned int vx_debug_quota;
extern unsigned int vx_debug_cvirt;
extern unsigned int vx_debug_misc;
({ static char _buffer[PATH_MAX]; \
d_path((d), (m), _buffer, sizeof(_buffer)); })
-
-void dump_vx_info(struct vx_info *, int);
-void dump_vx_info_inactive(int);
-
#else /* CONFIG_VSERVER_DEBUG */
#define vx_debug_switch 0
#define vxd_path "<none>"
-
#endif /* CONFIG_VSERVER_DEBUG */
struct _vx_hist_entry *vxh_advance(void *loc);
+#define VXH_HERE(__type) \
+ ({ __label__ __vxh_##__type; \
+ __vxh_##__type:; \
+ &&__vxh_##__type; })
+
-static inline
-void __vxh_copy_vxi(struct _vx_hist_entry *entry, struct vx_info *vxi)
+
+static inline void __vxh_copy_vxi(struct _vx_hist_entry *entry, struct vx_info *vxi)
{
entry->vxi.ptr = vxi;
if (vxi) {
}
-#define __HERE__ \
- ({ __label__ __vxh_label; __vxh_label:; &&__vxh_label; })
-
-#define __VXH_BODY(__type, __data, __here) \
+#define __VXH_BODY(__type, __data) \
struct _vx_hist_entry *entry; \
\
preempt_disable(); \
- entry = vxh_advance(__here); \
+ entry = vxh_advance(VXH_HERE(__type)); \
__data; \
entry->type = __type; \
preempt_enable();
/* pass vxi only */
-
-#define __VXH_SMPL \
+#define __VXH_SIMPLE \
__vxh_copy_vxi(entry, vxi)
-static inline
-void __vxh_smpl(struct vx_info *vxi, int __type, void *__here)
-{
- __VXH_BODY(__type, __VXH_SMPL, __here)
+#define VXH_SIMPLE(__name, __type) \
+static inline void __name(struct vx_info *vxi) \
+{ \
+ __VXH_BODY(__type, __VXH_SIMPLE) \
}
/* pass vxi and data (void *) */
-
#define __VXH_DATA \
__vxh_copy_vxi(entry, vxi); \
entry->sc.data = data
-static inline
-void __vxh_data(struct vx_info *vxi, void *data,
- int __type, void *__here)
-{
- __VXH_BODY(__type, __VXH_DATA, __here)
+#define VXH_DATA(__name, __type) \
+static inline \
+void __name(struct vx_info *vxi, void *data) \
+{ \
+ __VXH_BODY(__type, __VXH_DATA) \
}
/* pass vxi and arg (long) */
-
-#define __VXH_LONG \
+#define __VXH_LARG \
__vxh_copy_vxi(entry, vxi); \
entry->ll.arg = arg
-static inline
-void __vxh_long(struct vx_info *vxi, long arg,
- int __type, void *__here)
-{
- __VXH_BODY(__type, __VXH_LONG, __here)
+#define VXH_LARG(__name, __type) \
+static inline \
+void __name(struct vx_info *vxi, long arg) \
+{ \
+ __VXH_BODY(__type, __VXH_LARG) \
}
-static inline
-void __vxh_throw_oops(void *__here)
+static inline void vxh_throw_oops(void)
{
- __VXH_BODY(VXH_THROW_OOPS, {}, __here);
+ __VXH_BODY(VXH_THROW_OOPS, {});
/* prevent further acquisition */
vxh_active = 0;
}
+VXH_SIMPLE(vxh_get_vx_info, VXH_GET_VX_INFO);
+VXH_SIMPLE(vxh_put_vx_info, VXH_PUT_VX_INFO);
-#define vxh_throw_oops() __vxh_throw_oops(__HERE__);
-
-#define __vxh_get_vx_info(v,h) __vxh_smpl(v, VXH_GET_VX_INFO, h);
-#define __vxh_put_vx_info(v,h) __vxh_smpl(v, VXH_PUT_VX_INFO, h);
-
-#define __vxh_init_vx_info(v,d,h) \
- __vxh_data(v,d, VXH_INIT_VX_INFO, h);
-#define __vxh_set_vx_info(v,d,h) \
- __vxh_data(v,d, VXH_SET_VX_INFO, h);
-#define __vxh_clr_vx_info(v,d,h) \
- __vxh_data(v,d, VXH_CLR_VX_INFO, h);
+VXH_DATA(vxh_init_vx_info, VXH_INIT_VX_INFO);
+VXH_DATA(vxh_set_vx_info, VXH_SET_VX_INFO);
+VXH_DATA(vxh_clr_vx_info, VXH_CLR_VX_INFO);
-#define __vxh_claim_vx_info(v,d,h) \
- __vxh_data(v,d, VXH_CLAIM_VX_INFO, h);
-#define __vxh_release_vx_info(v,d,h) \
- __vxh_data(v,d, VXH_RELEASE_VX_INFO, h);
+VXH_DATA(vxh_claim_vx_info, VXH_CLAIM_VX_INFO);
+VXH_DATA(vxh_release_vx_info, VXH_RELEASE_VX_INFO);
-#define vxh_alloc_vx_info(v) \
- __vxh_smpl(v, VXH_ALLOC_VX_INFO, __HERE__);
-#define vxh_dealloc_vx_info(v) \
- __vxh_smpl(v, VXH_DEALLOC_VX_INFO, __HERE__);
+VXH_SIMPLE(vxh_alloc_vx_info, VXH_ALLOC_VX_INFO);
+VXH_SIMPLE(vxh_dealloc_vx_info, VXH_DEALLOC_VX_INFO);
-#define vxh_hash_vx_info(v) \
- __vxh_smpl(v, VXH_HASH_VX_INFO, __HERE__);
-#define vxh_unhash_vx_info(v) \
- __vxh_smpl(v, VXH_UNHASH_VX_INFO, __HERE__);
+VXH_SIMPLE(vxh_hash_vx_info, VXH_HASH_VX_INFO);
+VXH_SIMPLE(vxh_unhash_vx_info, VXH_UNHASH_VX_INFO);
-#define vxh_loc_vx_info(v,l) \
- __vxh_long(v,l, VXH_LOC_VX_INFO, __HERE__);
-#define vxh_lookup_vx_info(v,l) \
- __vxh_long(v,l, VXH_LOOKUP_VX_INFO, __HERE__);
-#define vxh_create_vx_info(v,l) \
- __vxh_long(v,l, VXH_CREATE_VX_INFO, __HERE__);
+VXH_LARG(vxh_loc_vx_info, VXH_LOC_VX_INFO);
+VXH_LARG(vxh_lookup_vx_info, VXH_LOOKUP_VX_INFO);
+VXH_LARG(vxh_create_vx_info, VXH_CREATE_VX_INFO);
extern void vxh_dump_history(void);
#else /* CONFIG_VSERVER_HISTORY */
-#define __HERE__ 0
#define vxh_throw_oops() do { } while (0)
-#define __vxh_get_vx_info(v,h) do { } while (0)
-#define __vxh_put_vx_info(v,h) do { } while (0)
+#define vxh_get_vx_info(v) do { } while (0)
+#define vxh_put_vx_info(v) do { } while (0)
-#define __vxh_init_vx_info(v,d,h) do { } while (0)
-#define __vxh_set_vx_info(v,d,h) do { } while (0)
-#define __vxh_clr_vx_info(v,d,h) do { } while (0)
+#define vxh_init_vx_info(v,d) do { } while (0)
+#define vxh_set_vx_info(v,d) do { } while (0)
+#define vxh_clr_vx_info(v,d) do { } while (0)
-#define __vxh_claim_vx_info(v,d,h) do { } while (0)
-#define __vxh_release_vx_info(v,d,h) do { } while (0)
+#define vxh_claim_vx_info(v,d) do { } while (0)
+#define vxh_release_vx_info(v,d) do { } while (0)
#define vxh_alloc_vx_info(v) do { } while (0)
#define vxh_dealloc_vx_info(v) do { } while (0)
#define vxd_assert(c,f,x...) vxlprintk(!(c), \
"assertion [" f "] failed.", ##x, __FILE__, __LINE__)
#else
-#define vxd_assert_lock(l) do { } while (0)
+#define vxd_assert_lock(l) do { } while (0)
#define vxd_assert(c,f,x...) do { } while (0)
#endif