+#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)
+}
+
+ /* pass vxi and arg (long) */
+
+#define __VXH_LONG \
+ __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)
+}
+
+
+static inline
+void __vxh_throw_oops(void *__here)
+{
+ __VXH_BODY(VXH_THROW_OOPS, {}, __here);
+ /* prevent further acquisition */
+ vxh_active = 0;
+}
+
+
+#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);
+
+#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);
+
+#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__);
+
+#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__);
+
+#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__);
+
+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_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_claim_vx_info(v,d,h) do { } while (0)
+#define __vxh_release_vx_info(v,d,h) do { } while (0)
+
+#define vxh_alloc_vx_info(v) do { } while (0)
+#define vxh_dealloc_vx_info(v) do { } while (0)
+
+#define vxh_hash_vx_info(v) do { } while (0)
+#define vxh_unhash_vx_info(v) do { } while (0)
+
+#define vxh_loc_vx_info(a,v) do { } while (0)
+#define vxh_lookup_vx_info(a,v) do { } while (0)
+#define vxh_create_vx_info(a,v) do { } while (0)
+
+#define vxh_dump_history() do { } while (0)
+
+
+#endif /* CONFIG_VSERVER_HISTORY */
+
+
+#ifdef CONFIG_VSERVER_DEBUG
+#define vxd_assert_lock(l) assert_spin_locked(l)
+#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(c,f,x...) do { } while (0)
+#endif