1219820Sjeff#ifndef _SDP_DBG_H_ 2219820Sjeff#define _SDP_DBG_H_ 3219820Sjeff 4219820Sjeff#define SDPSTATS_ON 5219820Sjeff 6219820Sjeff//#define GETNSTIMEODAY_SUPPORTED 7219820Sjeff 8219820Sjeff#define _sdp_printk(func, line, level, sk, format, arg...) \ 9219820Sjeffdo { \ 10219820Sjeff printk(level "%s:%d %p sdp_sock(%d:%d %d:%d): " format "\n", \ 11219820Sjeff func, line, sk ? sdp_sk(sk) : NULL, \ 12219820Sjeff curproc->p_pid, PCPU_GET(cpuid), \ 13219820Sjeff (sk) && sdp_sk(sk) ? ntohs(sdp_sk(sk)->lport) : -1, \ 14219820Sjeff (sk) && sdp_sk(sk) ? ntohs(sdp_sk(sk)->fport) : -1, ## arg); \ 15219820Sjeff} while (0) 16219820Sjeff#define sdp_printk(level, sk, format, arg...) \ 17219820Sjeff _sdp_printk(__func__, __LINE__, level, sk, format, ## arg) 18219820Sjeff#define sdp_warn(sk, format, arg...) \ 19219820Sjeff sdp_printk(KERN_WARNING, sk, format , ## arg) 20219820Sjeff 21219820Sjeff#define SDP_MODPARAM_SINT(var, def_val, msg) \ 22219820Sjeff static int var = def_val; \ 23219820Sjeff module_param_named(var, var, int, 0644); \ 24219820Sjeff MODULE_PARM_DESC(var, msg " [" #def_val "]"); \ 25219820Sjeff 26219820Sjeff#define SDP_MODPARAM_INT(var, def_val, msg) \ 27219820Sjeff int var = def_val; \ 28219820Sjeff module_param_named(var, var, int, 0644); \ 29219820Sjeff MODULE_PARM_DESC(var, msg " [" #def_val "]"); \ 30219820Sjeff 31219820Sjeff#ifdef SDP_PROFILING 32219820Sjeffstruct mbuf; 33219820Sjeffstruct sdpprf_log { 34219820Sjeff int idx; 35219820Sjeff int pid; 36219820Sjeff int cpu; 37219820Sjeff int sk_num; 38219820Sjeff int sk_dport; 39219820Sjeff struct mbuf *mb; 40219820Sjeff char msg[256]; 41219820Sjeff 42219820Sjeff unsigned long long time; 43219820Sjeff 44219820Sjeff const char *func; 45219820Sjeff int line; 46219820Sjeff}; 47219820Sjeff 48219820Sjeff#define SDPPRF_LOG_SIZE 0x20000 /* must be a power of 2 */ 49219820Sjeff 50219820Sjeffextern struct sdpprf_log sdpprf_log[SDPPRF_LOG_SIZE]; 51219820Sjeffextern int sdpprf_log_count; 52219820Sjeff 53219820Sjeff#ifdef GETNSTIMEODAY_SUPPORTED 54219820Sjeffstatic inline unsigned long long current_nsec(void) 55219820Sjeff{ 56219820Sjeff struct timespec tv; 57219820Sjeff getnstimeofday(&tv); 58219820Sjeff return tv.tv_sec * NSEC_PER_SEC + tv.tv_nsec; 59219820Sjeff} 60219820Sjeff#else 61219820Sjeff#define current_nsec() jiffies_to_usecs(jiffies) 62219820Sjeff#endif 63219820Sjeff 64219820Sjeff#define sdp_prf1(sk, s, format, arg...) ({ \ 65219820Sjeff struct sdpprf_log *l = \ 66219820Sjeff &sdpprf_log[sdpprf_log_count++ & (SDPPRF_LOG_SIZE - 1)]; \ 67219820Sjeff preempt_disable(); \ 68219820Sjeff l->idx = sdpprf_log_count - 1; \ 69219820Sjeff l->pid = current->pid; \ 70219820Sjeff l->sk_num = (sk) ? inet_sk(sk)->num : -1; \ 71219820Sjeff l->sk_dport = (sk) ? ntohs(inet_sk(sk)->dport) : -1; \ 72219820Sjeff l->cpu = smp_processor_id(); \ 73219820Sjeff l->mb = s; \ 74219820Sjeff snprintf(l->msg, sizeof(l->msg) - 1, format, ## arg); \ 75219820Sjeff l->time = current_nsec(); \ 76219820Sjeff l->func = __func__; \ 77219820Sjeff l->line = __LINE__; \ 78219820Sjeff preempt_enable(); \ 79219820Sjeff 1; \ 80219820Sjeff}) 81219820Sjeff//#define sdp_prf(sk, s, format, arg...) 82219820Sjeff#define sdp_prf(sk, s, format, arg...) sdp_prf1(sk, s, format, ## arg) 83219820Sjeff 84219820Sjeff#else 85219820Sjeff#define sdp_prf1(sk, s, format, arg...) 86219820Sjeff#define sdp_prf(sk, s, format, arg...) 87219820Sjeff#endif 88219820Sjeff 89219820Sjeff#ifdef CONFIG_INFINIBAND_SDP_DEBUG 90219820Sjeffextern int sdp_debug_level; 91219820Sjeff 92219820Sjeff#define sdp_dbg(sk, format, arg...) \ 93219820Sjeff do { \ 94219820Sjeff if (sdp_debug_level > 0) \ 95219820Sjeff sdp_printk(KERN_WARNING, sk, format , ## arg); \ 96219820Sjeff } while (0) 97219820Sjeff 98219820Sjeff#else /* CONFIG_INFINIBAND_SDP_DEBUG */ 99219820Sjeff#define sdp_dbg(priv, format, arg...) \ 100219820Sjeff do { (void) (priv); } while (0) 101219820Sjeff#define sock_ref(sk, msg, sock_op) sock_op(sk) 102219820Sjeff#endif /* CONFIG_INFINIBAND_SDP_DEBUG */ 103219820Sjeff 104219820Sjeff#ifdef CONFIG_INFINIBAND_SDP_DEBUG_DATA 105219820Sjeff 106219820Sjeffextern int sdp_data_debug_level; 107219820Sjeff#define sdp_dbg_data(sk, format, arg...) \ 108219820Sjeff do { \ 109219820Sjeff if (sdp_data_debug_level & 0x2) \ 110219820Sjeff sdp_printk(KERN_WARNING, sk, format , ## arg); \ 111219820Sjeff } while (0) 112219820Sjeff#define SDP_DUMP_PACKET(sk, str, mb, h) \ 113219820Sjeff do { \ 114219820Sjeff if (sdp_data_debug_level & 0x1) \ 115219820Sjeff dump_packet(sk, str, mb, h); \ 116219820Sjeff } while (0) 117219820Sjeff#else 118219820Sjeff#define sdp_dbg_data(priv, format, arg...) 119219820Sjeff#define SDP_DUMP_PACKET(sk, str, mb, h) 120219820Sjeff#endif 121219820Sjeff 122219820Sjeff#define SOCK_REF_RESET "RESET" 123219820Sjeff#define SOCK_REF_ALIVE "ALIVE" /* sock_alloc -> destruct_sock */ 124219820Sjeff#define SOCK_REF_CLONE "CLONE" 125219820Sjeff#define SOCK_REF_CMA "CMA" /* sdp_cma_handler() is expected to be invoked */ 126219820Sjeff#define SOCK_REF_SEQ "SEQ" /* during proc read */ 127219820Sjeff#define SOCK_REF_DREQ_TO "DREQ_TO" /* dreq timeout is pending */ 128219820Sjeff#define SOCK_REF_ZCOPY "ZCOPY" /* zcopy send in process */ 129219820Sjeff#define SOCK_REF_RDMA_RD "RDMA_RD" /* RDMA read in process */ 130219820Sjeff 131219820Sjeff#define sock_hold(sk, msg) sock_ref(sk, msg, sock_hold) 132219820Sjeff#define sock_put(sk, msg) sock_ref(sk, msg, sock_put) 133219820Sjeff#define __sock_put(sk, msg) sock_ref(sk, msg, __sock_put) 134219820Sjeff 135219820Sjeff#define ENUM2STR(e) [e] = #e 136219820Sjeff 137219820Sjeffstatic inline char *sdp_state_str(int state) 138219820Sjeff{ 139219820Sjeff static char *state2str[] = { 140219820Sjeff ENUM2STR(TCPS_ESTABLISHED), 141219820Sjeff ENUM2STR(TCPS_SYN_SENT), 142219820Sjeff ENUM2STR(TCPS_SYN_RECEIVED), 143219820Sjeff ENUM2STR(TCPS_FIN_WAIT_1), 144219820Sjeff ENUM2STR(TCPS_FIN_WAIT_2), 145219820Sjeff ENUM2STR(TCPS_TIME_WAIT), 146219820Sjeff ENUM2STR(TCPS_CLOSED), 147219820Sjeff ENUM2STR(TCPS_CLOSE_WAIT), 148219820Sjeff ENUM2STR(TCPS_LAST_ACK), 149219820Sjeff ENUM2STR(TCPS_LISTEN), 150219820Sjeff ENUM2STR(TCPS_CLOSING), 151219820Sjeff }; 152219820Sjeff 153219820Sjeff if (state < 0 || state >= ARRAY_SIZE(state2str)) 154219820Sjeff return "unknown"; 155219820Sjeff 156219820Sjeff return state2str[state]; 157219820Sjeff} 158219820Sjeff 159219820Sjeffstruct sdp_bsdh; 160219820Sjeff#ifdef CONFIG_INFINIBAND_SDP_DEBUG_DATA 161219820Sjeffvoid _dump_packet(const char *func, int line, struct socket *sk, char *str, 162219820Sjeff struct mbuf *mb, const struct sdp_bsdh *h); 163219820Sjeff#define dump_packet(sk, str, mb, h) \ 164219820Sjeff _dump_packet(__func__, __LINE__, sk, str, mb, h) 165219820Sjeff#endif 166219820Sjeff 167219820Sjeff#endif 168