]> CyberLeo.Net >> Repos - FreeBSD/releng/10.0.git/blob - sys/ofed/drivers/infiniband/ulp/sdp/sdp_dbg.h
- Copy stable/10 (r259064) to releng/10.0 as part of the
[FreeBSD/releng/10.0.git] / sys / ofed / drivers / infiniband / ulp / sdp / sdp_dbg.h
1 #ifndef _SDP_DBG_H_
2 #define _SDP_DBG_H_
3
4 #define SDPSTATS_ON
5
6 //#define GETNSTIMEODAY_SUPPORTED
7
8 #define _sdp_printk(func, line, level, sk, format, arg...)      \
9 do {                                                            \
10         printk(level "%s:%d %p sdp_sock(%d:%d %d:%d): " format "\n",    \
11                func, line, sk ? sdp_sk(sk) : NULL,              \
12                curproc->p_pid, PCPU_GET(cpuid),                 \
13                (sk) && sdp_sk(sk) ? ntohs(sdp_sk(sk)->lport) : -1,      \
14                (sk) && sdp_sk(sk) ? ntohs(sdp_sk(sk)->fport) : -1, ## arg);     \
15 } while (0)
16 #define sdp_printk(level, sk, format, arg...)                \
17         _sdp_printk(__func__, __LINE__, level, sk, format, ## arg)
18 #define sdp_warn(sk, format, arg...)                         \
19         sdp_printk(KERN_WARNING, sk, format , ## arg)
20
21 #define SDP_MODPARAM_SINT(var, def_val, msg) \
22         static int var = def_val; \
23         module_param_named(var, var, int, 0644); \
24         MODULE_PARM_DESC(var, msg " [" #def_val "]"); \
25
26 #define SDP_MODPARAM_INT(var, def_val, msg) \
27         int var = def_val; \
28         module_param_named(var, var, int, 0644); \
29         MODULE_PARM_DESC(var, msg " [" #def_val "]"); \
30
31 #ifdef SDP_PROFILING
32 struct mbuf;
33 struct sdpprf_log {
34         int             idx;
35         int             pid;
36         int             cpu;
37         int             sk_num;
38         int             sk_dport;
39         struct mbuf     *mb;
40         char            msg[256];
41
42         unsigned long long time;
43
44         const char      *func;
45         int             line;
46 };
47
48 #define SDPPRF_LOG_SIZE 0x20000 /* must be a power of 2 */
49
50 extern struct sdpprf_log sdpprf_log[SDPPRF_LOG_SIZE];
51 extern int sdpprf_log_count;
52
53 #ifdef GETNSTIMEODAY_SUPPORTED
54 static inline unsigned long long current_nsec(void)
55 {
56         struct timespec tv;
57         getnstimeofday(&tv);
58         return tv.tv_sec * NSEC_PER_SEC + tv.tv_nsec;
59 }
60 #else
61 #define current_nsec() jiffies_to_usecs(jiffies)
62 #endif
63
64 #define sdp_prf1(sk, s, format, arg...) ({ \
65         struct sdpprf_log *l = \
66                 &sdpprf_log[sdpprf_log_count++ & (SDPPRF_LOG_SIZE - 1)]; \
67         preempt_disable(); \
68         l->idx = sdpprf_log_count - 1; \
69         l->pid = current->pid; \
70         l->sk_num = (sk) ? inet_sk(sk)->num : -1;                 \
71         l->sk_dport = (sk) ? ntohs(inet_sk(sk)->dport) : -1; \
72         l->cpu = smp_processor_id(); \
73         l->mb = s; \
74         snprintf(l->msg, sizeof(l->msg) - 1, format, ## arg); \
75         l->time = current_nsec(); \
76         l->func = __func__; \
77         l->line = __LINE__; \
78         preempt_enable(); \
79         1; \
80 })
81 //#define sdp_prf(sk, s, format, arg...)
82 #define sdp_prf(sk, s, format, arg...) sdp_prf1(sk, s, format, ## arg)
83
84 #else
85 #define sdp_prf1(sk, s, format, arg...)
86 #define sdp_prf(sk, s, format, arg...)
87 #endif
88
89 #ifdef CONFIG_INFINIBAND_SDP_DEBUG
90 extern int sdp_debug_level;
91
92 #define sdp_dbg(sk, format, arg...)                          \
93         do {                                                 \
94                 if (sdp_debug_level > 0)                     \
95                 sdp_printk(KERN_WARNING, sk, format , ## arg); \
96         } while (0)
97
98 #else /* CONFIG_INFINIBAND_SDP_DEBUG */
99 #define sdp_dbg(priv, format, arg...)                        \
100         do { (void) (priv); } while (0)
101 #define sock_ref(sk, msg, sock_op) sock_op(sk)
102 #endif /* CONFIG_INFINIBAND_SDP_DEBUG */
103
104 #ifdef CONFIG_INFINIBAND_SDP_DEBUG_DATA
105
106 extern int sdp_data_debug_level;
107 #define sdp_dbg_data(sk, format, arg...)                                \
108         do {                                                            \
109                 if (sdp_data_debug_level & 0x2)                         \
110                         sdp_printk(KERN_WARNING, sk, format , ## arg);  \
111         } while (0)
112 #define SDP_DUMP_PACKET(sk, str, mb, h)                                 \
113         do {                                                            \
114                 if (sdp_data_debug_level & 0x1)                         \
115                         dump_packet(sk, str, mb, h);                    \
116         } while (0)
117 #else
118 #define sdp_dbg_data(priv, format, arg...)
119 #define SDP_DUMP_PACKET(sk, str, mb, h)
120 #endif
121
122 #define SOCK_REF_RESET "RESET"
123 #define SOCK_REF_ALIVE "ALIVE" /* sock_alloc -> destruct_sock */
124 #define SOCK_REF_CLONE "CLONE"
125 #define SOCK_REF_CMA "CMA" /* sdp_cma_handler() is expected to be invoked */
126 #define SOCK_REF_SEQ "SEQ" /* during proc read */
127 #define SOCK_REF_DREQ_TO "DREQ_TO" /* dreq timeout is pending */
128 #define SOCK_REF_ZCOPY "ZCOPY" /* zcopy send in process */
129 #define SOCK_REF_RDMA_RD "RDMA_RD" /* RDMA read in process */
130
131 #define sock_hold(sk, msg)  sock_ref(sk, msg, sock_hold)
132 #define sock_put(sk, msg)  sock_ref(sk, msg, sock_put)
133 #define __sock_put(sk, msg)  sock_ref(sk, msg, __sock_put)
134
135 #define ENUM2STR(e) [e] = #e
136
137 static inline char *sdp_state_str(int state)
138 {
139         static char *state2str[] = {
140                 ENUM2STR(TCPS_ESTABLISHED),
141                 ENUM2STR(TCPS_SYN_SENT),
142                 ENUM2STR(TCPS_SYN_RECEIVED),
143                 ENUM2STR(TCPS_FIN_WAIT_1),
144                 ENUM2STR(TCPS_FIN_WAIT_2),
145                 ENUM2STR(TCPS_TIME_WAIT),
146                 ENUM2STR(TCPS_CLOSED),
147                 ENUM2STR(TCPS_CLOSE_WAIT),
148                 ENUM2STR(TCPS_LAST_ACK),
149                 ENUM2STR(TCPS_LISTEN),
150                 ENUM2STR(TCPS_CLOSING),
151         };
152
153         if (state < 0 || state >= ARRAY_SIZE(state2str))
154                 return "unknown";
155
156         return state2str[state];
157 }
158
159 struct sdp_bsdh;
160 #ifdef CONFIG_INFINIBAND_SDP_DEBUG_DATA
161 void _dump_packet(const char *func, int line, struct socket *sk, char *str,
162                 struct mbuf *mb, const struct sdp_bsdh *h);
163 #define dump_packet(sk, str, mb, h) \
164         _dump_packet(__func__, __LINE__, sk, str, mb, h)
165 #endif
166
167 #endif