]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
Commited old fixes from kernel_patches/fixes/cma_established1.patch into git
authorAmir Vadai <amirv@mellanox.co.il>
Thu, 22 May 2008 13:10:49 +0000 (16:10 +0300)
committerMukesh Kacker <mukesh.kacker@oracle.com>
Tue, 6 Oct 2015 12:04:16 +0000 (05:04 -0700)
Signed-off-by: Amir Vadai <amirv@mellanox.co.il>
drivers/infiniband/ulp/sdp/sdp.h
drivers/infiniband/ulp/sdp/sdp_bcopy.c
drivers/infiniband/ulp/sdp/sdp_cma.c
drivers/infiniband/ulp/sdp/sdp_main.c

index c434b60c619093472af0c21b17e40c50fa9921b7..bb2434ae8de3f6dfb7760347496ea4b5550e8629 100644 (file)
@@ -152,6 +152,7 @@ struct sdp_sock {
        unsigned min_bufs;      /* Low water mark to wake senders */
 
        int               remote_credits;
+       int               poll_cq;
 
        struct sdp_buf   *tx_ring;
        unsigned          tx_head;
index 36cbbadf82fe63b94ee185146dc1260b8857aac1..be7c5987e28d18ee2e463540f44ce00ac4309eaa 100644 (file)
@@ -764,6 +764,14 @@ void sdp_work(struct work_struct *work)
        cq = ssk->cq;
        if (unlikely(!cq))
                goto out;
+
+       if (unlikely(!ssk->poll_cq)) {
+               struct rdma_cm_id *id = ssk->id;
+               if (id && id->qp)
+                       rdma_notify(id, RDMA_CM_EVENT_ESTABLISHED);
+               goto out;
+       }
+
        sdp_poll_cq(ssk, cq);
        release_sock(sk);
        sk_mem_reclaim(sk);
index 0cab38bb9fbaa6d688910c75b86499815bfd2c21..2e4ceb58ce5c1907b6de47722b96cfc59c2b2630 100644 (file)
@@ -162,6 +162,8 @@ int sdp_init_qp(struct sock *sk, struct rdma_cm_id *id)
                goto err_cq;
        }
 
+       ib_req_notify_cq(cq, IB_CQ_NEXT_COMP);
+
         qp_init_attr.send_cq = qp_init_attr.recv_cq = cq;
 
        rc = rdma_create_qp(id, pd, &qp_init_attr);
@@ -292,7 +294,9 @@ static int sdp_response_handler(struct sock *sk, struct rdma_cm_id *id,
                sdp_sk(sk)->xmit_size_goal,
                sdp_sk(sk)->min_bufs);
 
+       sdp_sk(sk)->poll_cq = 1;
        ib_req_notify_cq(sdp_sk(sk)->cq, IB_CQ_NEXT_COMP);
+       sdp_poll_cq(sdp_sk(sk), sdp_sk(sk)->cq);
 
        sk->sk_state_change(sk);
        sk_wake_async(sk, 0, POLL_OUT);
index d35c803a43fd1f94ee6cc86cec98d3a10be3d899..8f1e8b0879fef3b442811fd53e7f2aa1e57c2c29 100644 (file)
@@ -759,6 +759,7 @@ out:
                lock_sock(newsk);
                if (newssk->cq) {
                        sdp_dbg(newsk, "%s: ib_req_notify_cq\n", __func__);
+                       newssk->poll_cq = 1;
                        ib_req_notify_cq(newssk->cq, IB_CQ_NEXT_COMP);
                        sdp_poll_cq(newssk, newssk->cq);
                }