From: Amir Vadai Date: Thu, 4 Jun 2009 10:52:34 +0000 (+0300) Subject: sdp: make bzcopy poll timeout in jiffies instead of iterations count X-Git-Tag: v4.1.12-92~264^2~5^2~273 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=71d4fe01db188177197f1c985fc65f2b23092794;p=users%2Fjedix%2Flinux-maple.git sdp: make bzcopy poll timeout in jiffies instead of iterations count Signed-off-by: Amir Vadai --- diff --git a/drivers/infiniband/ulp/sdp/sdp.h b/drivers/infiniband/ulp/sdp/sdp.h index 41a9f1c38ac93..5d3e7d727e246 100644 --- a/drivers/infiniband/ulp/sdp/sdp.h +++ b/drivers/infiniband/ulp/sdp/sdp.h @@ -10,8 +10,8 @@ #undef SDPSTATS_ON #undef SDP_PROFILING -#undef CONFIG_INFINIBAND_SDP_DEBUG_DATA -#undef CONFIG_INFINIBAND_SDP_DEBUG +//#undef CONFIG_INFINIBAND_SDP_DEBUG_DATA +//#undef CONFIG_INFINIBAND_SDP_DEBUG #define SDPSTATS_ON //#define SDP_PROFILING @@ -235,6 +235,9 @@ static inline void sdpstats_hist(u32 *h, u32 val, u32 maxidx, int is_log) #define SDP_OP_RECV 0x800000000LL #define SDP_OP_SEND 0x400000000LL +/* how long (in jiffies) to block sender till tx completion*/ +#define SDP_BZCOPY_POLL_TIMEOUT (HZ / 10) + #define BZCOPY_STATE(skb) (*(struct bzcopy_state **)(skb->cb)) #ifndef MIN #define MIN(a, b) (a < b ? a : b) diff --git a/drivers/infiniband/ulp/sdp/sdp_main.c b/drivers/infiniband/ulp/sdp/sdp_main.c index 55e1b127085c9..64511fea03cb6 100644 --- a/drivers/infiniband/ulp/sdp/sdp_main.c +++ b/drivers/infiniband/ulp/sdp/sdp_main.c @@ -91,16 +91,6 @@ module_param_named(data_debug_level, sdp_data_debug_level, int, 0644); MODULE_PARM_DESC(data_debug_level, "Enable data path debug tracing if > 0."); #endif -static int send_poll_hit; - -module_param_named(send_poll_hit, send_poll_hit, int, 0644); -MODULE_PARM_DESC(send_poll_hit, "How many times send poll helped."); - -static int send_poll_miss; - -module_param_named(send_poll_miss, send_poll_miss, int, 0644); -MODULE_PARM_DESC(send_poll_miss, "How many times send poll missed."); - static int recv_poll_hit; module_param_named(recv_poll_hit, recv_poll_hit, int, 0644); @@ -111,21 +101,11 @@ static int recv_poll_miss; module_param_named(recv_poll_miss, recv_poll_miss, int, 0644); MODULE_PARM_DESC(recv_poll_miss, "How many times recv poll missed."); -static int send_poll = 100; - -module_param_named(send_poll, send_poll, int, 0644); -MODULE_PARM_DESC(send_poll, "How many times to poll send."); - static int recv_poll = 1000; module_param_named(recv_poll, recv_poll, int, 0644); MODULE_PARM_DESC(recv_poll, "How many times to poll recv."); -static int send_poll_thresh = 8192; - -module_param_named(send_poll_thresh, send_poll_thresh, int, 0644); -MODULE_PARM_DESC(send_poll_thresh, "Send message size thresh hold over which to start polling."); - static unsigned int sdp_keepalive_time = SDP_KEEPALIVE_TIME; module_param_named(sdp_keepalive_time, sdp_keepalive_time, uint, 0644); @@ -1143,19 +1123,6 @@ static inline int poll_recv_cq(struct sock *sk) return 1; } -static inline void poll_send_cq(struct sock *sk) -{ - int i; - if (sdp_sk(sk)->tx_ring.cq) { - for (i = 0; i < send_poll; ++i) - if (sdp_xmit_poll(sdp_sk(sk), 1)) { - ++send_poll_hit; - return; - } - ++send_poll_miss; - } -} - /* Like tcp_recv_urg */ /* * Handle reading urgent data. BSD has very simple semantics for @@ -1240,19 +1207,18 @@ static inline void skb_entail(struct sock *sk, struct sdp_sock *ssk, static inline struct bzcopy_state *sdp_bz_cleanup(struct bzcopy_state *bz) { - int i, max_retry; + int i; struct sdp_sock *ssk = (struct sdp_sock *)bz->ssk; /* Wait for in-flight sends; should be quick */ if (bz->busy) { struct sock *sk = &ssk->isk.sk; + unsigned long timeout = jiffies + SDP_BZCOPY_POLL_TIMEOUT; - for (max_retry = 0; max_retry < 10000; max_retry++) { - poll_send_cq(sk); - + while (jiffies < timeout) { + sdp_xmit_poll(sdp_sk(sk), 1); if (!bz->busy) break; - SDPSTATS_COUNTER_INC(bzcopy_poll_miss); }