From: Sean Hefty Date: Tue, 11 Dec 2012 22:00:12 +0000 (-0800) Subject: Refresh of dsocket X-Git-Url: https://openfabrics.org/gitweb/?a=commitdiff_plain;h=7701ae56cb5f63885c416e1ae221dd12d2eb59d7;p=~shefty%2Flibrdmacm.git Refresh of dsocket --- diff --git a/src/rsocket.c b/src/rsocket.c index 7dc5409e..c61d6893 100644 --- a/src/rsocket.c +++ b/src/rsocket.c @@ -386,7 +386,7 @@ static int rs_add_to_svc(struct rsocket *rs) pthread_mutex_lock(&mut); if (!svc_cnt) { - ret = socketpair(AF_INET, SOCK_STREAM, 0, svc_sock); + ret = socketpair(AF_UNIX, SOCK_STREAM, 0, svc_sock); if (ret) goto err1; @@ -402,7 +402,7 @@ static int rs_add_to_svc(struct rsocket *rs) msg.rs = rs; write(svc_sock[0], &msg, sizeof msg); read(svc_sock[0], &msg, sizeof msg); - ret = ERR(msg.status); + ret = rdma_seterrno(msg.status); if (ret && !svc_cnt) goto err3; @@ -1885,8 +1885,7 @@ static void ds_poll_cqs(struct rsocket *rs) struct ibv_wc wc; int ret, cnt; - qp = rs->qp_list; - if (!qp) + if (!(qp = rs->qp_list)) return; do { @@ -1935,7 +1934,9 @@ static void ds_req_notify_cqs(struct rsocket *rs) { struct ds_qp *qp; - qp = rs->qp_list; + if (!(qp = rs->qp_list)) + return; + do { if (!qp->cq_armed) { ibv_req_notify_cq(qp->cm_id->recv_cq, 0); @@ -1953,17 +1954,20 @@ static int ds_get_cq_event(struct rsocket *rs) void *context; int ret; + printf("%s \n", __func__); if (!rs->cq_armed) return 0; ret = epoll_wait(rs->epfd, &event, 1, -1); + printf("%s epoll wait ret %d errno %s\n", __func__, ret, strerror(errno)); if (ret <= 0) return ret; qp = event.data.ptr; - ret = ibv_get_cq_event(rs->cm_id->recv_cq_channel, &cq, &context); + ret = ibv_get_cq_event(qp->cm_id->recv_cq_channel, &cq, &context); + printf("%s get cq event ret %d errno %s\n", __func__, ret, strerror(errno)); if (!ret) { - ibv_ack_cq_events(rs->cm_id->recv_cq, 1); + ibv_ack_cq_events(qp->cm_id->recv_cq, 1); qp->cq_armed = 0; rs->cq_armed = 0; } @@ -1979,25 +1983,29 @@ static int ds_process_cqs(struct rsocket *rs, int nonblock, int (*test)(struct r do { ds_poll_cqs(rs); if (test(rs)) { + printf("%s test succeeded\n", __func__); ret = 0; break; } else if (nonblock) { ret = ERR(EWOULDBLOCK); + printf("%s nonblocking \n", __func__); } else if (!rs->cq_armed) { + printf("%s req notify \n", __func__); ds_req_notify_cqs(rs); rs->cq_armed = 1; } else { - rs_update_credits(rs); fastlock_acquire(&rs->cq_wait_lock); fastlock_release(&rs->cq_lock); ret = ds_get_cq_event(rs); + printf("%s get event ret %d %s\n", __func__, ret, strerror(errno)); fastlock_release(&rs->cq_wait_lock); fastlock_acquire(&rs->cq_lock); } } while (!ret); fastlock_release(&rs->cq_lock); + printf("%s ret %d errno %s\n", __func__, ret, strerror(errno)); return ret; } @@ -2009,6 +2017,7 @@ static int ds_get_comp(struct rsocket *rs, int nonblock, int (*test)(struct rsoc do { ret = ds_process_cqs(rs, 1, test); + printf("%s ret %d errno %s\n", __func__, ret, strerror(errno)); if (!ret || nonblock || errno != EWOULDBLOCK) return ret; @@ -2123,12 +2132,16 @@ static ssize_t ds_recvfrom(struct rsocket *rs, void *buf, size_t len, int flags, struct ds_header *hdr; int ret; +ret = 0; + printf("%s \n", __func__); if (!(rs->state & rs_readable)) return ERR(EINVAL); if (!rs_have_rdata(rs)) { + printf("%s need rdata \n", __func__); ret = ds_get_comp(rs, rs_nonblocking(rs, flags), rs_have_rdata); + printf("%s ds_get_comp ret %d errno %s\n", __func__, ret, strerror(errno)); if (ret) return ret; }