X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=include%2Flinux%2Fvserver%2Fdebug.h;h=1b1f34c92a2804e4b7dff578d197f00da8048368;hb=refs%2Fheads%2Fvserver;hp=51952093816a468c206c85ca415bbdd4d6a96260;hpb=76828883507a47dae78837ab5dec5a5b4513c667;p=linux-2.6.git diff --git a/include/linux/vserver/debug.h b/include/linux/vserver/debug.h index 519520938..1b1f34c92 100644 --- a/include/linux/vserver/debug.h +++ b/include/linux/vserver/debug.h @@ -19,21 +19,30 @@ #define __FUNC__ __func__ +#define vxd_path(d,m) \ + ({ static char _buffer[PATH_MAX]; \ + d_path((d), (m), _buffer, sizeof(_buffer)); }) + +#define vxd_cond_path(n) \ + ((n) ? vxd_path((n)->dentry, (n)->mnt) : "" ) + + #ifdef CONFIG_VSERVER_DEBUG extern unsigned int vx_debug_switch; extern unsigned int vx_debug_xid; extern unsigned int vx_debug_nid; +extern unsigned int vx_debug_tag; extern unsigned int vx_debug_net; extern unsigned int vx_debug_limit; extern unsigned int vx_debug_cres; extern unsigned int vx_debug_dlim; +extern unsigned int vx_debug_quota; extern unsigned int vx_debug_cvirt; extern unsigned int vx_debug_misc; #define VX_LOGLEVEL "vxD: " -#define VX_WARNLEVEL KERN_WARNING "vxW: " #define vxdprintk(c,f,x...) \ do { \ @@ -54,24 +63,17 @@ extern unsigned int vx_debug_misc; } while (0) -#define vxwprintk(c,f,x...) \ - do { \ - if (c) \ - printk(VX_WARNLEVEL f "\n" , ##x); \ - } while (0) +struct vx_info; -#define vxd_path(d,m) \ - ({ static char _buffer[PATH_MAX]; \ - d_path((d), (m), _buffer, sizeof(_buffer)); }) - -#define vxd_cond_path(n) \ - ((n) ? vxd_path((n)->dentry, (n)->mnt) : "" ) +void dump_vx_info(struct vx_info *, int); +void dump_vx_info_inactive(int); #else /* CONFIG_VSERVER_DEBUG */ #define vx_debug_switch 0 #define vx_debug_xid 0 #define vx_debug_nid 0 +#define vx_debug_tag 0 #define vx_debug_net 0 #define vx_debug_limit 0 #define vx_debug_cres 0 @@ -81,208 +83,25 @@ extern unsigned int vx_debug_misc; #define vxdprintk(x...) do { } while (0) #define vxlprintk(x...) do { } while (0) #define vxfprintk(x...) do { } while (0) -#define vxwprintk(x...) do { } while (0) - -#define vxd_path "" -#define vxd_cond_path vxd_path #endif /* CONFIG_VSERVER_DEBUG */ -/* history stuff */ - -#ifdef CONFIG_VSERVER_HISTORY - - -extern unsigned volatile int vxh_active; - -struct _vxhe_vxi { - struct vx_info *ptr; - unsigned xid; - unsigned usecnt; - unsigned tasks; -}; - -struct _vxhe_set_clr { - void *data; -}; - -struct _vxhe_loc_lookup { - unsigned arg; -}; - -enum { - VXH_UNUSED=0, - VXH_THROW_OOPS=1, - - VXH_GET_VX_INFO, - VXH_PUT_VX_INFO, - VXH_INIT_VX_INFO, - VXH_SET_VX_INFO, - VXH_CLR_VX_INFO, - VXH_CLAIM_VX_INFO, - VXH_RELEASE_VX_INFO, - VXH_ALLOC_VX_INFO, - VXH_DEALLOC_VX_INFO, - VXH_HASH_VX_INFO, - VXH_UNHASH_VX_INFO, - VXH_LOC_VX_INFO, - VXH_LOOKUP_VX_INFO, - VXH_CREATE_VX_INFO, -}; - -struct _vx_hist_entry { - void *loc; - unsigned short seq; - unsigned short type; - struct _vxhe_vxi vxi; - union { - struct _vxhe_set_clr sc; - struct _vxhe_loc_lookup ll; - }; -}; - -struct _vx_hist_entry *vxh_advance(void *loc); - - -static inline -void __vxh_copy_vxi(struct _vx_hist_entry *entry, struct vx_info *vxi) -{ - entry->vxi.ptr = vxi; - if (vxi) { - entry->vxi.usecnt = atomic_read(&vxi->vx_usecnt); - entry->vxi.tasks = atomic_read(&vxi->vx_tasks); - entry->vxi.xid = vxi->vx_id; - } -} - - -#define __HERE__ current_text_addr() - -#define __VXH_BODY(__type, __data, __here) \ - struct _vx_hist_entry *entry; \ - \ - preempt_disable(); \ - entry = vxh_advance(__here); \ - __data; \ - entry->type = __type; \ - preempt_enable(); - - - /* pass vxi only */ - -#define __VXH_SMPL \ - __vxh_copy_vxi(entry, vxi) - -static inline -void __vxh_smpl(struct vx_info *vxi, int __type, void *__here) -{ - __VXH_BODY(__type, __VXH_SMPL, __here) -} - - /* pass vxi and data (void *) */ +#ifdef CONFIG_VSERVER_WARN -#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 VX_WARNLEVEL KERN_WARNING "vxW: " -#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 vxwprintk(c,f,x...) \ + do { \ + if (c) \ + printk(VX_WARNLEVEL f "\n" , ##x); \ + } while (0) -#define vxh_dump_history() do { } while (0) +#else /* CONFIG_VSERVER_WARN */ +#define vxwprintk(x...) do { } while (0) -#endif /* CONFIG_VSERVER_HISTORY */ +#endif /* CONFIG_VSERVER_WARN */ #ifdef CONFIG_VSERVER_DEBUG