]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sdp: BUG1992 - enable transmission of credits update when tx_credits == 1
authorEldad Zinger <eldadz@mellanox.co.il>
Wed, 31 Mar 2010 13:02:03 +0000 (16:02 +0300)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Tue, 6 Oct 2015 12:04:51 +0000 (05:04 -0700)
According to spec, if one credit is available, we can only send messages that
provide additional credits and also do not contain data payload.

Signed-off-by: Eldad Zinger <eldadz@mellanox.co.il>
drivers/infiniband/ulp/sdp/sdp.h
drivers/infiniband/ulp/sdp/sdp_bcopy.c
drivers/infiniband/ulp/sdp/sdp_rx.c

index ac52d201090422bd847849f65ea5b25cba0c96bd..bb9bcaff485894863683c32c9b301ae25f6725aa 100644 (file)
@@ -677,6 +677,19 @@ static inline int sdp_tx_ring_slots_left(struct sdp_sock *ssk)
        return SDP_TX_SIZE - tx_ring_posted(ssk);
 }
 
+static inline int credit_update_needed(struct sdp_sock *ssk)
+{
+       int c;
+
+       c = remote_credits(ssk);
+       if (likely(c > SDP_MIN_TX_CREDITS))
+               c += c/2;
+       return unlikely(c < rx_ring_posted(ssk)) &&
+           likely(tx_credits(ssk) > 0) &&
+           likely(sdp_tx_ring_slots_left(ssk));
+}
+
+
 #ifdef SDPSTATS_ON
 
 #define SDPSTATS_MAX_HIST_SIZE 256
index e230b771a7c1274d4ac1ab2c31dde948527077c4..d7a8733b0793301eae4a37c671a516830322c823 100644 (file)
@@ -179,7 +179,6 @@ void sdp_post_sends(struct sdp_sock *ssk, gfp_t gfp)
 {
        /* TODO: nonagle? */
        struct sk_buff *skb;
-       int c;
        int post_count = 0;
        struct sock *sk = &ssk->isk.sk;
 
@@ -228,13 +227,7 @@ void sdp_post_sends(struct sdp_sock *ssk, gfp_t gfp)
                post_count++;
        }
 
-       c = remote_credits(ssk);
-       if (likely(c > SDP_MIN_TX_CREDITS))
-               c *= 2;
-
-       if (unlikely(c < rx_ring_posted(ssk)) &&
-           likely(tx_credits(ssk) > 1) &&
-           likely(sdp_tx_ring_slots_left(ssk)) &&
+       if (credit_update_needed(ssk) &&
            likely((1 << ssk->isk.sk.sk_state) &
                    (TCPF_ESTABLISHED | TCPF_FIN_WAIT1))) {
 
index 56ccc1a6f1210bfb278daa2d84c76ba01cb56ffe..1e02a6d0928b084a887103694f2363216ea2bf86 100644 (file)
@@ -395,20 +395,6 @@ static void sdp_handle_resize_ack(struct sdp_sock *ssk,
                ssk->sent_request = 0;
 }
 
-static inline int credit_update_needed(struct sdp_sock *ssk)
-{
-       int c;
-
-       c = remote_credits(ssk);
-       if (likely(c > SDP_MIN_TX_CREDITS))
-               c += c/2;
-
-       return unlikely(c < rx_ring_posted(ssk)) &&
-           likely(tx_credits(ssk) > 1) &&
-           likely(sdp_tx_ring_slots_left(ssk));
-}
-
-
 static struct sk_buff *sdp_recv_completion(struct sdp_sock *ssk, int id)
 {
        struct sdp_buf *rx_req;