]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
refresh
authorSean Hefty <sean.hefty@intel.com>
Sun, 16 Dec 2012 01:37:50 +0000 (17:37 -0800)
committerSean Hefty <sean.hefty@intel.com>
Sun, 16 Dec 2012 01:37:50 +0000 (17:37 -0800)
meta
patches/dsocket
patches/refresh-temp [deleted file]

diff --git a/meta b/meta
index 532a9e5a1609f37d9770105bcbd196653b1116e6..ab4e7c6e5b2b443c85314131f307ee330d30895d 100644 (file)
--- a/meta
+++ b/meta
@@ -1,9 +1,8 @@
 Version: 1
-Previous: 7b11c9c60e43984f9bdc0950ddb80a8d7a54962f
-Head: c0e4bc3d4c9ea79a4f8d1013840487def750562f
+Previous: d6cd4105aa3029f0ea24aa8c33b61bc859f755b6
+Head: 30a3a196b65c1c0637c01d0829f1ed00ba53225d
 Applied:
-  dsocket: e7e16224fd7e40798f5288261284b14fe0093f72
-  refresh-temp: c0e4bc3d4c9ea79a4f8d1013840487def750562f
+  dsocket: 30a3a196b65c1c0637c01d0829f1ed00ba53225d
 Unapplied:
   udpong: 342b04b1773e2e80607914cc7260080f7bf93d9f
   test-udp: f6c78ad2a26f452cf166aff1baa7b76160bd8bf7
index 4f2365dca40722edc5c38c19bfa02ae17888e92c..02e26241316fe350a07fafe0c9d8148be115c3fb 100644 (file)
@@ -1,5 +1,5 @@
 Bottom: 1fa07c62817ac4b6cb8d9c5e327ea2cdc75dbd21
-Top:    118b72bdf8de5351caaf3d746984f9e4401d4253
+Top:    085131bec099e61aa57e12da9977ca49a5ea1a1e
 Author: Sean Hefty <sean.hefty@intel.com>
 Date:   2012-11-09 10:26:38 -0800
 
@@ -113,7 +113,7 @@ index 0a0370e..7135a61 100644
  {
        errno = err;
 diff --git a/src/rsocket.c b/src/rsocket.c
-index a060f66..8fd901f 100644
+index a060f66..a5a01ba 100644
 --- a/src/rsocket.c
 +++ b/src/rsocket.c
 @@ -47,6 +47,8 @@
@@ -227,7 +227,7 @@ index a060f66..8fd901f 100644
        rs_connect_error   =                0x0800,
        rs_disconnected    =                0x1000,
        rs_error           =                0x2000,
-@@ -170,68 +220,248 @@ enum rs_state {
+@@ -170,68 +220,249 @@ enum rs_state {
  
  #define RS_OPT_SWAP_SGL 1
  
@@ -501,14 +501,15 @@ index a060f66..8fd901f 100644
 +      sa2 = (const struct sockaddr *) dst2;
 +
 +      len = (sa1->sa_family == AF_INET6 && sa2->sa_family == AF_INET6) ?
-+            sizeof(struct sockaddr_in6) : sizeof(struct sockaddr);
++            sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in);
++//    printf("%s len %d sizeof sin %d memcmp %d\n", __func__, len, sizeof(struct sockaddr_in), memcmp(dst1,dst2,len));
 +      return memcmp(dst1, dst2, len);
 +}
 +
  static int rs_value_to_scale(int value, int bits)
  {
        return value <= (1 << (bits - 1)) ?
-@@ -307,10 +537,10 @@ out:
+@@ -307,10 +538,10 @@ out:
        pthread_mutex_unlock(&mut);
  }
  
@@ -521,7 +522,7 @@ index a060f66..8fd901f 100644
        pthread_mutex_unlock(&mut);
        return rs->index;
  }
-@@ -322,7 +552,7 @@ static void rs_remove(struct rsocket *rs)
+@@ -322,7 +553,7 @@ static void rs_remove(struct rsocket *rs)
        pthread_mutex_unlock(&mut);
  }
  
@@ -530,7 +531,7 @@ index a060f66..8fd901f 100644
  {
        struct rsocket *rs;
  
-@@ -330,29 +560,39 @@ static struct rsocket *rs_alloc(struct rsocket *inherited_rs)
+@@ -330,29 +561,39 @@ static struct rsocket *rs_alloc(struct rsocket *inherited_rs)
        if (!rs)
                return NULL;
  
@@ -575,7 +576,7 @@ index a060f66..8fd901f 100644
        dlist_init(&rs->iomap_list);
        dlist_init(&rs->iomap_queue);
        return rs;
-@@ -360,13 +600,26 @@ static struct rsocket *rs_alloc(struct rsocket *inherited_rs)
+@@ -360,13 +601,26 @@ static struct rsocket *rs_alloc(struct rsocket *inherited_rs)
  
  static int rs_set_nonblocking(struct rsocket *rs, long arg)
  {
@@ -606,7 +607,7 @@ index a060f66..8fd901f 100644
  
        return ret;
  }
-@@ -390,17 +643,39 @@ static void rs_set_qp_size(struct rsocket *rs)
+@@ -390,17 +644,39 @@ static void rs_set_qp_size(struct rsocket *rs)
                rs->rq_size = 2;
  }
  
@@ -648,7 +649,7 @@ index a060f66..8fd901f 100644
  
        rs->smr = rdma_reg_msgs(rs->cm_id, rs->sbuf, rs->sbuf_size);
        if (!rs->smr)
-@@ -410,7 +685,7 @@ static int rs_init_bufs(struct rsocket *rs)
+@@ -410,7 +686,7 @@ static int rs_init_bufs(struct rsocket *rs)
              sizeof(*rs->target_iomap) * rs->target_iomap_size;
        rs->target_buffer_list = malloc(len);
        if (!rs->target_buffer_list)
@@ -657,7 +658,7 @@ index a060f66..8fd901f 100644
  
        rs->target_mr = rdma_reg_write(rs->cm_id, rs->target_buffer_list, len);
        if (!rs->target_mr)
-@@ -423,7 +698,7 @@ static int rs_init_bufs(struct rsocket *rs)
+@@ -423,7 +699,7 @@ static int rs_init_bufs(struct rsocket *rs)
  
        rs->rbuf = calloc(rs->rbuf_size, sizeof(*rs->rbuf));
        if (!rs->rbuf)
@@ -666,7 +667,7 @@ index a060f66..8fd901f 100644
  
        rs->rmr = rdma_reg_write(rs->cm_id, rs->rbuf, rs->rbuf_size);
        if (!rs->rmr)
-@@ -440,37 +715,57 @@ static int rs_init_bufs(struct rsocket *rs)
+@@ -440,37 +716,57 @@ static int rs_init_bufs(struct rsocket *rs)
        return 0;
  }
  
@@ -739,7 +740,7 @@ index a060f66..8fd901f 100644
  {
        struct ibv_recv_wr wr, *bad;
  
-@@ -482,6 +777,26 @@ rs_post_recv(struct rsocket *rs)
+@@ -482,6 +778,26 @@ rs_post_recv(struct rsocket *rs)
        return rdma_seterrno(ibv_post_recv(rs->cm_id->qp, &wr, &bad));
  }
  
@@ -766,7 +767,7 @@ index a060f66..8fd901f 100644
  static int rs_create_ep(struct rsocket *rs)
  {
        struct ibv_qp_init_attr qp_attr;
-@@ -492,7 +807,7 @@ static int rs_create_ep(struct rsocket *rs)
+@@ -492,7 +808,7 @@ static int rs_create_ep(struct rsocket *rs)
        if (ret)
                return ret;
  
@@ -775,7 +776,7 @@ index a060f66..8fd901f 100644
        if (ret)
                return ret;
  
-@@ -549,8 +864,73 @@ static void rs_free_iomappings(struct rsocket *rs)
+@@ -549,8 +865,73 @@ static void rs_free_iomappings(struct rsocket *rs)
        }
  }
  
@@ -849,7 +850,7 @@ index a060f66..8fd901f 100644
        if (rs->index >= 0)
                rs_remove(rs);
  
-@@ -582,7 +962,7 @@ static void rs_free(struct rsocket *rs)
+@@ -582,7 +963,7 @@ static void rs_free(struct rsocket *rs)
                rdma_destroy_id(rs->cm_id);
        }
  
@@ -858,7 +859,7 @@ index a060f66..8fd901f 100644
        fastlock_destroy(&rs->cq_wait_lock);
        fastlock_destroy(&rs->cq_lock);
        fastlock_destroy(&rs->rlock);
-@@ -636,29 +1016,88 @@ static void rs_save_conn_data(struct rsocket *rs, struct rs_conn_data *conn)
+@@ -636,29 +1017,88 @@ static void rs_save_conn_data(struct rsocket *rs, struct rs_conn_data *conn)
        rs->sseq_comp = ntohs(conn->credits);
  }
  
@@ -955,7 +956,7 @@ index a060f66..8fd901f 100644
        return rs->index;
  
  err:
-@@ -672,9 +1111,18 @@ int rbind(int socket, const struct sockaddr *addr, socklen_t addrlen)
+@@ -672,9 +1112,18 @@ int rbind(int socket, const struct sockaddr *addr, socklen_t addrlen)
        int ret;
  
        rs = idm_at(&idm, socket);
@@ -977,7 +978,7 @@ index a060f66..8fd901f 100644
        return ret;
  }
  
-@@ -710,7 +1158,7 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen)
+@@ -710,7 +1159,7 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen)
        int ret;
  
        rs = idm_at(&idm, socket);
@@ -986,7 +987,7 @@ index a060f66..8fd901f 100644
        if (!new_rs)
                return ERR(ENOMEM);
  
-@@ -718,7 +1166,7 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen)
+@@ -718,7 +1167,7 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen)
        if (ret)
                goto err;
  
@@ -995,7 +996,7 @@ index a060f66..8fd901f 100644
        if (ret < 0)
                goto err;
  
-@@ -729,7 +1177,7 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen)
+@@ -729,7 +1178,7 @@ int raccept(int socket, struct sockaddr *addr, socklen_t *addrlen)
        }
  
        if (rs->fd_flags & O_NONBLOCK)
@@ -1004,7 +1005,7 @@ index a060f66..8fd901f 100644
  
        ret = rs_create_ep(new_rs);
        if (ret)
-@@ -831,7 +1279,7 @@ connected:
+@@ -831,7 +1280,7 @@ connected:
                break;
        case rs_accepting:
                if (!(rs->fd_flags & O_NONBLOCK))
@@ -1013,7 +1014,7 @@ index a060f66..8fd901f 100644
  
                ret = ucma_complete(rs->cm_id);
                if (ret)
-@@ -855,13 +1303,251 @@ connected:
+@@ -855,13 +1304,251 @@ connected:
        return ret;
  }
  
@@ -1267,7 +1268,7 @@ index a060f66..8fd901f 100644
  }
  
  static int rs_post_write_msg(struct rsocket *rs,
-@@ -903,6 +1589,26 @@ static int rs_post_write(struct rsocket *rs,
+@@ -903,6 +1590,26 @@ static int rs_post_write(struct rsocket *rs,
        return rdma_seterrno(ibv_post_send(rs->cm_id->qp, &wr, &bad));
  }
  
@@ -1294,7 +1295,7 @@ index a060f66..8fd901f 100644
  /*
   * Update target SGE before sending data.  Otherwise the remote side may
   * update the entry before we do.
-@@ -1046,7 +1752,7 @@ static int rs_poll_cq(struct rsocket *rs)
+@@ -1046,7 +1753,7 @@ static int rs_poll_cq(struct rsocket *rs)
                                        rs->state = rs_disconnected;
                                        return 0;
                                } else if (rs_msg_data(imm_data) == RS_CTRL_SHUTDOWN) {
@@ -1303,7 +1304,7 @@ index a060f66..8fd901f 100644
                                }
                                break;
                        case RS_OP_WRITE:
-@@ -1137,42 +1843,215 @@ static int rs_process_cq(struct rsocket *rs, int nonblock, int (*test)(struct rs
+@@ -1137,42 +1844,215 @@ static int rs_process_cq(struct rsocket *rs, int nonblock, int (*test)(struct rs
  
        fastlock_acquire(&rs->cq_lock);
        do {
@@ -1400,7 +1401,7 @@ index a060f66..8fd901f 100644
 +                      if (ds_wr_is_recv(wc.wr_id)) {
 +                              if (rs->rqe_avail && wc.status == IBV_WC_SUCCESS &&
 +                                  ds_valid_recv(qp, &wc)) {
-+                                      printf("%s recv over QP\n", __func__);
++//                                    printf("%s recv over QP\n", __func__);
 +                                      rs->rqe_avail--;
 +                                      rmsg = &rs->dmsg[rs->rmsg_tail];
 +                                      rmsg->qp = qp;
@@ -1409,7 +1410,7 @@ index a060f66..8fd901f 100644
 +                                      if (++rs->rmsg_tail == rs->rq_size + 1)
 +                                              rs->rmsg_tail = 0;
 +                              } else {
-+                                      printf("%s invalid recv\n", __func__);
++//                                    printf("%s invalid recv\n", __func__);
 +                                      ds_post_recv(rs, qp, ds_wr_offset(wc.wr_id));
 +                              }
 +                      } else {
@@ -1529,7 +1530,7 @@ index a060f66..8fd901f 100644
                if (!ret || nonblock || errno != EWOULDBLOCK)
                        return ret;
  
-@@ -1184,7 +2063,7 @@ static int rs_get_comp(struct rsocket *rs, int nonblock, int (*test)(struct rsoc
+@@ -1184,7 +2064,7 @@ static int rs_get_comp(struct rsocket *rs, int nonblock, int (*test)(struct rsoc
                            (e.tv_usec - s.tv_usec) + 1;
        } while (poll_time <= polling_time);
  
@@ -1538,7 +1539,7 @@ index a060f66..8fd901f 100644
        return ret;
  }
  
-@@ -1219,9 +2098,19 @@ static int rs_can_send(struct rsocket *rs)
+@@ -1219,9 +2099,19 @@ static int rs_can_send(struct rsocket *rs)
               (rs->target_sgl[rs->target_sge].length != 0);
  }
  
@@ -1559,7 +1560,7 @@ index a060f66..8fd901f 100644
  }
  
  static int rs_conn_can_send_ctrl(struct rsocket *rs)
-@@ -1236,7 +2125,7 @@ static int rs_have_rdata(struct rsocket *rs)
+@@ -1236,7 +2126,7 @@ static int rs_have_rdata(struct rsocket *rs)
  
  static int rs_conn_have_rdata(struct rsocket *rs)
  {
@@ -1568,7 +1569,7 @@ index a060f66..8fd901f 100644
  }
  
  static int rs_conn_all_sends_done(struct rsocket *rs)
-@@ -1245,6 +2134,73 @@ static int rs_conn_all_sends_done(struct rsocket *rs)
+@@ -1245,6 +2135,73 @@ static int rs_conn_all_sends_done(struct rsocket *rs)
               !(rs->state & rs_connected);
  }
  
@@ -1577,6 +1578,7 @@ index a060f66..8fd901f 100644
 +{
 +      union socket_addr sa;
 +
++      memset(&sa, 0, sizeof sa);
 +      if (hdr->version == 4) {
 +              if (*addrlen > sizeof(sa.sin))
 +                      *addrlen = sizeof(sa.sin);
@@ -1592,7 +1594,6 @@ index a060f66..8fd901f 100644
 +              sa.sin6.sin6_port = hdr->port;
 +              sa.sin6.sin6_flowinfo = hdr->addr.ipv6.flowinfo;
 +              memcpy(&sa.sin6.sin6_addr, &hdr->addr.ipv6.addr, 16);
-+              sa.sin6.sin6_scope_id = 0;
 +      }
 +      memcpy(addr, &sa, *addrlen);
 +}
@@ -1642,7 +1643,7 @@ index a060f66..8fd901f 100644
  static ssize_t rs_peek(struct rsocket *rs, void *buf, size_t len)
  {
        size_t left = len;
-@@ -1290,6 +2246,13 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags)
+@@ -1290,6 +2247,13 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags)
        int ret;
  
        rs = idm_at(&idm, socket);
@@ -1656,7 +1657,7 @@ index a060f66..8fd901f 100644
        if (rs->state & rs_opening) {
                ret = rs_do_connect(rs);
                if (ret) {
-@@ -1339,7 +2302,7 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags)
+@@ -1339,7 +2303,7 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags)
                        rs->rbuf_bytes_avail += rsize;
                }
  
@@ -1665,7 +1666,7 @@ index a060f66..8fd901f 100644
  
        fastlock_release(&rs->rlock);
        return ret ? ret : len - left;
-@@ -1348,8 +2311,17 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags)
+@@ -1348,8 +2312,17 @@ ssize_t rrecv(int socket, void *buf, size_t len, int flags)
  ssize_t rrecvfrom(int socket, void *buf, size_t len, int flags,
                  struct sockaddr *src_addr, socklen_t *addrlen)
  {
@@ -1683,7 +1684,7 @@ index a060f66..8fd901f 100644
        ret = rrecv(socket, buf, len, flags);
        if (ret > 0 && src_addr)
                rgetpeername(socket, src_addr, addrlen);
-@@ -1391,14 +2363,14 @@ static int rs_send_iomaps(struct rsocket *rs, int flags)
+@@ -1391,14 +2364,14 @@ static int rs_send_iomaps(struct rsocket *rs, int flags)
        struct rs_iomap iom;
        int ret;
  
@@ -1700,7 +1701,7 @@ index a060f66..8fd901f 100644
                                ret = ERR(ECONNRESET);
                                break;
                        }
-@@ -1447,10 +2419,99 @@ static int rs_send_iomaps(struct rsocket *rs, int flags)
+@@ -1447,10 +2420,100 @@ static int rs_send_iomaps(struct rsocket *rs, int flags)
        }
  
        rs->iomap_pending = !dlist_empty(&rs->iomap_queue);
@@ -1772,7 +1773,7 @@ index a060f66..8fd901f 100644
 +      uint64_t offset;
 +      int ret = 0;
 +
-+      printf("%s\n", __func__);
++//    printf("%s\n", __func__);
 +      if (!rs->conn_dest->ah)
 +              return ds_send_udp(rs, buf, len, flags, RS_OP_DATA);
 +
@@ -1793,15 +1794,16 @@ index a060f66..8fd901f 100644
 +      sge.lkey = rs->conn_dest->qp->smr->lkey;
 +      offset = (uint8_t *) msg - rs->sbuf;
 +
-+      printf("%s - sending over QP\n", __func__);
++//    printf("%s - sending over QP\n", __func__);
 +      ret = ds_post_send(rs, &sge, ds_send_wr_id(offset, sge.length));
++//    printf("%s - ds_post_send %d %s\n", __func__, ret, strerror(errno));
 +      return ret ? ret : len;
 +}
 +
  /*
   * We overlap sending the data, by posting a small work request immediately,
   * then increasing the size of the send on each iteration.
-@@ -1464,6 +2525,13 @@ ssize_t rsend(int socket, const void *buf, size_t len, int flags)
+@@ -1464,6 +2527,13 @@ ssize_t rsend(int socket, const void *buf, size_t len, int flags)
        int ret = 0;
  
        rs = idm_at(&idm, socket);
@@ -1815,7 +1817,7 @@ index a060f66..8fd901f 100644
        if (rs->state & rs_opening) {
                ret = rs_do_connect(rs);
                if (ret) {
-@@ -1485,7 +2553,7 @@ ssize_t rsend(int socket, const void *buf, size_t len, int flags)
+@@ -1485,7 +2555,7 @@ ssize_t rsend(int socket, const void *buf, size_t len, int flags)
                                          rs_conn_can_send);
                        if (ret)
                                break;
@@ -1824,7 +1826,7 @@ index a060f66..8fd901f 100644
                                ret = ERR(ECONNRESET);
                                break;
                        }
-@@ -1538,10 +2606,36 @@ out:
+@@ -1538,10 +2608,51 @@ out:
  ssize_t rsendto(int socket, const void *buf, size_t len, int flags,
                const struct sockaddr *dest_addr, socklen_t addrlen)
  {
@@ -1851,20 +1853,35 @@ index a060f66..8fd901f 100644
 +      }
 +
 +      fastlock_acquire(&rs->slock);
++//    printf("%s - checking conn dest %p\n", __func__, rs->conn_dest);
++//    printf("dest addr: af %d", dest_addr->sa_family); PRINTADDR(dest_addr);
++//    if (rs->conn_dest) {
++//            int i;
++//            printf("conn addr: af %d", rs->conn_dest->addr.sa.sa_family); PRINTADDR(&rs->conn_dest->addr);
++//            for (i=0;i<16;i++)
++//                    printf("%x", ((uint8_t *)dest_addr)[i]);
++//            printf("\n");
++//            for (i=0;i<16;i++)
++//                    printf("%x", ((uint8_t *)&rs->conn_dest->addr)[i]);
++//            printf("\n");
++//    }
 +      if (!rs->conn_dest || ds_compare_addr(dest_addr, &rs->conn_dest->addr)) {
++//            printf("%s - getting conn dest\n", __func__);
 +              ret = ds_get_dest(rs, dest_addr, addrlen, &rs->conn_dest);
++//            printf("%s - get conn dest %d %s\n", __func__, ret, strerror(errno));
 +              if (ret)
 +                      goto out;
 +      }
 +
 +      ret = dsend(rs, buf, len, flags);
++//    printf("%s - dsend %d %s\n", __func__, ret, strerror(errno));
 +out:
 +      fastlock_release(&rs->slock);
 +      return ret;
  }
  
  static void rs_copy_iov(void *dst, const struct iovec **iov, size_t *offset, size_t len)
-@@ -1600,7 +2694,7 @@ static ssize_t rsendv(int socket, const struct iovec *iov, int iovcnt, int flags
+@@ -1600,7 +2711,7 @@ static ssize_t rsendv(int socket, const struct iovec *iov, int iovcnt, int flags
                                          rs_conn_can_send);
                        if (ret)
                                break;
@@ -1873,7 +1890,7 @@ index a060f66..8fd901f 100644
                                ret = ERR(ECONNRESET);
                                break;
                        }
-@@ -1653,7 +2747,7 @@ ssize_t rsendmsg(int socket, const struct msghdr *msg, int flags)
+@@ -1653,7 +2764,7 @@ ssize_t rsendmsg(int socket, const struct msghdr *msg, int flags)
        if (msg->msg_control && msg->msg_controllen)
                return ERR(ENOTSUP);
  
@@ -1882,7 +1899,7 @@ index a060f66..8fd901f 100644
  }
  
  ssize_t rwrite(int socket, const void *buf, size_t count)
-@@ -1690,8 +2784,8 @@ static int rs_poll_rs(struct rsocket *rs, int events,
+@@ -1690,8 +2801,8 @@ static int rs_poll_rs(struct rsocket *rs, int events,
        int ret;
  
  check_cq:
@@ -1893,7 +1910,7 @@ index a060f66..8fd901f 100644
                rs_process_cq(rs, nonblock, test);
  
                revents = 0;
-@@ -1707,6 +2801,16 @@ check_cq:
+@@ -1707,6 +2818,16 @@ check_cq:
                }
  
                return revents;
@@ -1910,7 +1927,7 @@ index a060f66..8fd901f 100644
        }
  
        if (rs->state == rs_listening) {
-@@ -1766,11 +2870,14 @@ static int rs_poll_arm(struct pollfd *rfds, struct pollfd *fds, nfds_t nfds)
+@@ -1766,11 +2887,14 @@ static int rs_poll_arm(struct pollfd *rfds, struct pollfd *fds, nfds_t nfds)
                        if (fds[i].revents)
                                return 1;
  
@@ -1930,7 +1947,7 @@ index a060f66..8fd901f 100644
                        rfds[i].events = POLLIN;
                } else {
                        rfds[i].fd = fds[i].fd;
-@@ -1793,7 +2900,10 @@ static int rs_poll_events(struct pollfd *rfds, struct pollfd *fds, nfds_t nfds)
+@@ -1793,7 +2917,10 @@ static int rs_poll_events(struct pollfd *rfds, struct pollfd *fds, nfds_t nfds)
  
                rs = idm_lookup(&idm, fds[i].fd);
                if (rs) {
@@ -1942,7 +1959,7 @@ index a060f66..8fd901f 100644
                        fds[i].revents = rs_poll_rs(rs, fds[i].events, 1, rs_poll_all);
                } else {
                        fds[i].revents = rfds[i].revents;
-@@ -1949,7 +3059,7 @@ int rshutdown(int socket, int how)
+@@ -1949,7 +3076,7 @@ int rshutdown(int socket, int how)
  
        rs = idm_at(&idm, socket);
        if (how == SHUT_RD) {
@@ -1951,7 +1968,7 @@ index a060f66..8fd901f 100644
                return 0;
        }
  
-@@ -1959,10 +3069,10 @@ int rshutdown(int socket, int how)
+@@ -1959,10 +3086,10 @@ int rshutdown(int socket, int how)
        if (rs->state & rs_connected) {
                if (how == SHUT_RDWR) {
                        ctrl = RS_CTRL_DISCONNECT;
@@ -1965,7 +1982,7 @@ index a060f66..8fd901f 100644
                                RS_CTRL_SHUTDOWN : RS_CTRL_DISCONNECT;
                }
                if (!rs->ctrl_avail) {
-@@ -1987,13 +3097,29 @@ int rshutdown(int socket, int how)
+@@ -1987,13 +3114,29 @@ int rshutdown(int socket, int how)
        return 0;
  }
  
@@ -1997,7 +2014,7 @@ index a060f66..8fd901f 100644
  
        rs_free(rs);
        return 0;
-@@ -2018,8 +3144,12 @@ int rgetpeername(int socket, struct sockaddr *addr, socklen_t *addrlen)
+@@ -2018,8 +3161,12 @@ int rgetpeername(int socket, struct sockaddr *addr, socklen_t *addrlen)
        struct rsocket *rs;
  
        rs = idm_at(&idm, socket);
@@ -2012,7 +2029,7 @@ index a060f66..8fd901f 100644
  }
  
  int rgetsockname(int socket, struct sockaddr *addr, socklen_t *addrlen)
-@@ -2027,8 +3157,12 @@ int rgetsockname(int socket, struct sockaddr *addr, socklen_t *addrlen)
+@@ -2027,8 +3174,12 @@ int rgetsockname(int socket, struct sockaddr *addr, socklen_t *addrlen)
        struct rsocket *rs;
  
        rs = idm_at(&idm, socket);
@@ -2027,7 +2044,7 @@ index a060f66..8fd901f 100644
  }
  
  int rsetsockopt(int socket, int level, int optname,
-@@ -2040,22 +3174,31 @@ int rsetsockopt(int socket, int level, int optname,
+@@ -2040,22 +3191,31 @@ int rsetsockopt(int socket, int level, int optname,
  
        ret = ERR(ENOTSUP);
        rs = idm_at(&idm, socket);
@@ -2067,7 +2084,7 @@ index a060f66..8fd901f 100644
                                rs->rbuf_size = (*(uint32_t *) optval) << 1;
                        ret = 0;
                        break;
-@@ -2101,9 +3244,11 @@ int rsetsockopt(int socket, int level, int optname,
+@@ -2101,9 +3261,11 @@ int rsetsockopt(int socket, int level, int optname,
                opts = &rs->ipv6_opts;
                switch (optname) {
                case IPV6_V6ONLY:
@@ -2082,7 +2099,7 @@ index a060f66..8fd901f 100644
                        opt_on = *(int *) optval;
                        break;
                default:
-@@ -2315,7 +3460,7 @@ off_t riomap(int socket, void *buf, size_t len, int prot, int flags, off_t offse
+@@ -2315,7 +3477,7 @@ off_t riomap(int socket, void *buf, size_t len, int prot, int flags, off_t offse
        if (!rs->cm_id->pd || (prot & ~(PROT_WRITE | PROT_NONE)))
                return ERR(EINVAL);
  
@@ -2091,7 +2108,7 @@ index a060f66..8fd901f 100644
        if (prot & PROT_WRITE) {
                iomr = rs_get_iomap_mr(rs);
                access |= IBV_ACCESS_REMOTE_WRITE;
-@@ -2349,7 +3494,7 @@ off_t riomap(int socket, void *buf, size_t len, int prot, int flags, off_t offse
+@@ -2349,7 +3511,7 @@ off_t riomap(int socket, void *buf, size_t len, int prot, int flags, off_t offse
                dlist_insert_tail(&iomr->entry, &rs->iomap_list);
        }
  out:
@@ -2100,7 +2117,7 @@ index a060f66..8fd901f 100644
        return offset;
  }
  
-@@ -2361,7 +3506,7 @@ int riounmap(int socket, void *buf, size_t len)
+@@ -2361,7 +3523,7 @@ int riounmap(int socket, void *buf, size_t len)
        int ret = 0;
  
        rs = idm_at(&idm, socket);
@@ -2109,7 +2126,7 @@ index a060f66..8fd901f 100644
  
        for (entry = rs->iomap_list.next; entry != &rs->iomap_list;
             entry = entry->next) {
-@@ -2382,7 +3527,7 @@ int riounmap(int socket, void *buf, size_t len)
+@@ -2382,7 +3544,7 @@ int riounmap(int socket, void *buf, size_t len)
        }
        ret = ERR(EINVAL);
  out:
@@ -2118,7 +2135,7 @@ index a060f66..8fd901f 100644
        return ret;
  }
  
-@@ -2426,7 +3571,7 @@ size_t riowrite(int socket, const void *buf, size_t count, off_t offset, int fla
+@@ -2426,7 +3588,7 @@ size_t riowrite(int socket, const void *buf, size_t count, off_t offset, int fla
                                          rs_conn_can_send);
                        if (ret)
                                break;
@@ -2127,7 +2144,7 @@ index a060f66..8fd901f 100644
                                ret = ERR(ECONNRESET);
                                break;
                        }
-@@ -2476,3 +3621,278 @@ out:
+@@ -2476,3 +3638,278 @@ out:
  
        return (ret && left == count) ? ret : count - left;
  }
@@ -2267,15 +2284,15 @@ index a060f66..8fd901f 100644
 +              goto out;
 +
 +      memset(&attr, 0, sizeof attr);
-+      if (id->route.path_rec->hop_limit) {
++      if (id->route.path_rec->hop_limit > 1) {
 +              attr.is_global = 1;
 +              attr.grh.dgid = id->route.path_rec->dgid;
-+              attr.grh.flow_label = id->route.path_rec->flow_label;
++              attr.grh.flow_label = ntohl(id->route.path_rec->flow_label);
 +              attr.grh.sgid_index = rs_svc_sgid_index(dest, &id->route.path_rec->sgid);
 +              attr.grh.hop_limit = id->route.path_rec->hop_limit;
 +              attr.grh.traffic_class = id->route.path_rec->traffic_class;
 +      }
-+      attr.dlid = id->route.path_rec->dlid;
++      attr.dlid = ntohs(id->route.path_rec->dlid);
 +      attr.sl = id->route.path_rec->sl;
 +      attr.src_path_bits = id->route.path_rec->slid & rs_svc_path_bits(dest);
 +      attr.static_rate = id->route.path_rec->rate;
diff --git a/patches/refresh-temp b/patches/refresh-temp
deleted file mode 100644 (file)
index 139ab5e..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-Bottom: 118b72bdf8de5351caaf3d746984f9e4401d4253
-Top:    085131bec099e61aa57e12da9977ca49a5ea1a1e
-Author: Sean Hefty <sean.hefty@intel.com>
-Date:   2012-12-15 17:37:49 -0800
-
-Refresh of dsocket
-
----
-
-diff --git a/src/rsocket.c b/src/rsocket.c
-index 8fd901f..a5a01ba 100644
---- a/src/rsocket.c
-+++ b/src/rsocket.c
-@@ -458,7 +458,8 @@ static int ds_compare_addr(const void *dst1, const void *dst2)
-       sa2 = (const struct sockaddr *) dst2;
-       len = (sa1->sa_family == AF_INET6 && sa2->sa_family == AF_INET6) ?
--            sizeof(struct sockaddr_in6) : sizeof(struct sockaddr);
-+            sizeof(struct sockaddr_in6) : sizeof(struct sockaddr_in);
-+//    printf("%s len %d sizeof sin %d memcmp %d\n", __func__, len, sizeof(struct sockaddr_in), memcmp(dst1,dst2,len));
-       return memcmp(dst1, dst2, len);
- }
-@@ -1934,7 +1935,7 @@ static void ds_poll_cqs(struct rsocket *rs)
-                       if (ds_wr_is_recv(wc.wr_id)) {
-                               if (rs->rqe_avail && wc.status == IBV_WC_SUCCESS &&
-                                   ds_valid_recv(qp, &wc)) {
--                                      printf("%s recv over QP\n", __func__);
-+//                                    printf("%s recv over QP\n", __func__);
-                                       rs->rqe_avail--;
-                                       rmsg = &rs->dmsg[rs->rmsg_tail];
-                                       rmsg->qp = qp;
-@@ -1943,7 +1944,7 @@ static void ds_poll_cqs(struct rsocket *rs)
-                                       if (++rs->rmsg_tail == rs->rq_size + 1)
-                                               rs->rmsg_tail = 0;
-                               } else {
--                                      printf("%s invalid recv\n", __func__);
-+//                                    printf("%s invalid recv\n", __func__);
-                                       ds_post_recv(rs, qp, ds_wr_offset(wc.wr_id));
-                               }
-                       } else {
-@@ -2139,6 +2140,7 @@ static void ds_set_src(struct sockaddr *addr, socklen_t *addrlen,
- {
-       union socket_addr sa;
-+      memset(&sa, 0, sizeof sa);
-       if (hdr->version == 4) {
-               if (*addrlen > sizeof(sa.sin))
-                       *addrlen = sizeof(sa.sin);
-@@ -2154,7 +2156,6 @@ static void ds_set_src(struct sockaddr *addr, socklen_t *addrlen,
-               sa.sin6.sin6_port = hdr->port;
-               sa.sin6.sin6_flowinfo = hdr->addr.ipv6.flowinfo;
-               memcpy(&sa.sin6.sin6_addr, &hdr->addr.ipv6.addr, 16);
--              sa.sin6.sin6_scope_id = 0;
-       }
-       memcpy(addr, &sa, *addrlen);
- }
-@@ -2486,7 +2487,7 @@ static ssize_t dsend(struct rsocket *rs, const void *buf, size_t len, int flags)
-       uint64_t offset;
-       int ret = 0;
--      printf("%s\n", __func__);
-+//    printf("%s\n", __func__);
-       if (!rs->conn_dest->ah)
-               return ds_send_udp(rs, buf, len, flags, RS_OP_DATA);
-@@ -2507,8 +2508,9 @@ static ssize_t dsend(struct rsocket *rs, const void *buf, size_t len, int flags)
-       sge.lkey = rs->conn_dest->qp->smr->lkey;
-       offset = (uint8_t *) msg - rs->sbuf;
--      printf("%s - sending over QP\n", __func__);
-+//    printf("%s - sending over QP\n", __func__);
-       ret = ds_post_send(rs, &sge, ds_send_wr_id(offset, sge.length));
-+//    printf("%s - ds_post_send %d %s\n", __func__, ret, strerror(errno));
-       return ret ? ret : len;
- }
-@@ -2626,13 +2628,28 @@ ssize_t rsendto(int socket, const void *buf, size_t len, int flags,
-       }
-       fastlock_acquire(&rs->slock);
-+//    printf("%s - checking conn dest %p\n", __func__, rs->conn_dest);
-+//    printf("dest addr: af %d", dest_addr->sa_family); PRINTADDR(dest_addr);
-+//    if (rs->conn_dest) {
-+//            int i;
-+//            printf("conn addr: af %d", rs->conn_dest->addr.sa.sa_family); PRINTADDR(&rs->conn_dest->addr);
-+//            for (i=0;i<16;i++)
-+//                    printf("%x", ((uint8_t *)dest_addr)[i]);
-+//            printf("\n");
-+//            for (i=0;i<16;i++)
-+//                    printf("%x", ((uint8_t *)&rs->conn_dest->addr)[i]);
-+//            printf("\n");
-+//    }
-       if (!rs->conn_dest || ds_compare_addr(dest_addr, &rs->conn_dest->addr)) {
-+//            printf("%s - getting conn dest\n", __func__);
-               ret = ds_get_dest(rs, dest_addr, addrlen, &rs->conn_dest);
-+//            printf("%s - get conn dest %d %s\n", __func__, ret, strerror(errno));
-               if (ret)
-                       goto out;
-       }
-       ret = dsend(rs, buf, len, flags);
-+//    printf("%s - dsend %d %s\n", __func__, ret, strerror(errno));
- out:
-       fastlock_release(&rs->slock);
-       return ret;
-@@ -3757,15 +3774,15 @@ static void rs_svc_create_ah(struct rsocket *rs, struct ds_dest *dest, uint32_t
-               goto out;
-       memset(&attr, 0, sizeof attr);
--      if (id->route.path_rec->hop_limit) {
-+      if (id->route.path_rec->hop_limit > 1) {
-               attr.is_global = 1;
-               attr.grh.dgid = id->route.path_rec->dgid;
--              attr.grh.flow_label = id->route.path_rec->flow_label;
-+              attr.grh.flow_label = ntohl(id->route.path_rec->flow_label);
-               attr.grh.sgid_index = rs_svc_sgid_index(dest, &id->route.path_rec->sgid);
-               attr.grh.hop_limit = id->route.path_rec->hop_limit;
-               attr.grh.traffic_class = id->route.path_rec->traffic_class;
-       }
--      attr.dlid = id->route.path_rec->dlid;
-+      attr.dlid = ntohs(id->route.path_rec->dlid);
-       attr.sl = id->route.path_rec->sl;
-       attr.src_path_bits = id->route.path_rec->slid & rs_svc_path_bits(dest);
-       attr.static_rate = id->route.path_rec->rate;