From: Amir Vadai Date: Thu, 22 May 2008 13:10:49 +0000 (+0300) Subject: Commited old fixes from kernel_patches/fixes/cma_established1.patch into git X-Git-Tag: v4.1.12-92~264^2~5^2~321 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=27e172fa81155b0df754574becbcede051c1021e;p=users%2Fjedix%2Flinux-maple.git Commited old fixes from kernel_patches/fixes/cma_established1.patch into git Signed-off-by: Amir Vadai --- diff --git a/drivers/infiniband/ulp/sdp/sdp.h b/drivers/infiniband/ulp/sdp/sdp.h index c434b60c61909..bb2434ae8de3f 100644 --- a/drivers/infiniband/ulp/sdp/sdp.h +++ b/drivers/infiniband/ulp/sdp/sdp.h @@ -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; diff --git a/drivers/infiniband/ulp/sdp/sdp_bcopy.c b/drivers/infiniband/ulp/sdp/sdp_bcopy.c index 36cbbadf82fe6..be7c5987e28d1 100644 --- a/drivers/infiniband/ulp/sdp/sdp_bcopy.c +++ b/drivers/infiniband/ulp/sdp/sdp_bcopy.c @@ -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); diff --git a/drivers/infiniband/ulp/sdp/sdp_cma.c b/drivers/infiniband/ulp/sdp/sdp_cma.c index 0cab38bb9fbaa..2e4ceb58ce5c1 100644 --- a/drivers/infiniband/ulp/sdp/sdp_cma.c +++ b/drivers/infiniband/ulp/sdp/sdp_cma.c @@ -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); diff --git a/drivers/infiniband/ulp/sdp/sdp_main.c b/drivers/infiniband/ulp/sdp/sdp_main.c index d35c803a43fd1..8f1e8b0879fef 100644 --- a/drivers/infiniband/ulp/sdp/sdp_main.c +++ b/drivers/infiniband/ulp/sdp/sdp_main.c @@ -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); }