]> git.openfabrics.org - ~shefty/ibacm.git/commitdiff
refresh (create temporary patch)
authorSean Hefty <sean.hefty@intel.com>
Thu, 30 Jun 2011 19:44:48 +0000 (12:44 -0700)
committerSean Hefty <sean.hefty@intel.com>
Thu, 30 Jun 2011 19:44:48 +0000 (12:44 -0700)
meta
patches/refresh-temp [new file with mode: 0644]

diff --git a/meta b/meta
index 84275e4c76f481c240cd6223bdb2469eb43a412e..249c0882f1f3adb9a3a60039a44dcb14553dda14 100644 (file)
--- a/meta
+++ b/meta
@@ -1,10 +1,11 @@
 Version: 1
-Previous: 3e01860b1cce52cabfdf601b89b337ed86f79bb2
-Head: dd732562f2edbc1175e88fd5873faddd32e272bd
+Previous: 2f678fc68d6d19cb702204c9554570a6dbf662f1
+Head: 5c134c2743854a765b6ab18ee2179953a6c9a31d
 Applied:
   bldwrn: be4fb9a97bdc0942c04ffddca19692ccf5875878
   alias: cf8b034d082dbc168524cfadc86e231772254a64
   counters: dd732562f2edbc1175e88fd5873faddd32e272bd
+  refresh-temp: 5c134c2743854a765b6ab18ee2179953a6c9a31d
 Unapplied:
   acm1.0.5: 1b225173756cfcec4d81d26b1160ebae7644261b
   name2ip: 8e00708e882239292492e13aa51c82042255933c
diff --git a/patches/refresh-temp b/patches/refresh-temp
new file mode 100644 (file)
index 0000000..ec9c233
--- /dev/null
@@ -0,0 +1,127 @@
+Bottom: 4752ef8a02ea3138fab37b0b02c0d1af3e3bf7a2
+Top:    2dabfe33c4a42a8c11d65c804d0641d900fe1b2e
+Author: Sean Hefty <sean.hefty@intel.com>
+Date:   2011-06-30 12:44:48 -0700
+
+Refresh of counters
+
+---
+
+diff --git a/include/infiniband/acm.h b/include/infiniband/acm.h
+index 7a06161..c2d4088 100644
+--- a/include/infiniband/acm.h
++++ b/include/infiniband/acm.h
+@@ -93,6 +93,12 @@ struct acm_ep_addr_data {
+       union acm_ep_info       info;
+ };
++/*
++ * Resolve messages with the opcode set to ACM_OP_RESOLVE are only
++ * used to communicate with the local ib_acm service.  Message fields
++ * in this case are not byte swapped, but note that the address
++ * data is in big-endian format.
++ */
+ struct acm_resolve_msg {
+       struct acm_hdr          hdr;
+       struct acm_ep_addr_data data[0];
+@@ -109,6 +115,9 @@ enum {
+       ACM_MAX_COUNTER
+ };
++/*
++ * Performance messages are sent/receive in network byte order.
++ */
+ struct acm_perf_msg {
+       struct acm_hdr          hdr;
+       uint64_t                data[0];
+diff --git a/src/acm.c b/src/acm.c
+index 5d0e423..fed0440 100644
+--- a/src/acm.c
++++ b/src/acm.c
+@@ -2247,6 +2247,7 @@ static int acm_svr_resolve(struct acm_client *client, struct acm_msg *msg)
+ static int acm_svr_perf_query(struct acm_client *client, struct acm_msg *msg)
+ {
+       int ret, i;
++      uint16_t len;
+       acm_log(2, "client %d\n", client->index);
+       msg->hdr.opcode |= ACM_OP_ACK;
+@@ -2254,12 +2255,13 @@ static int acm_svr_perf_query(struct acm_client *client, struct acm_msg *msg)
+       msg->hdr.data[0] = ACM_MAX_COUNTER;
+       msg->hdr.data[1] = 0;
+       msg->hdr.data[2] = 0;
+-      msg->hdr.length = ACM_MSG_HDR_LENGTH + (ACM_MAX_COUNTER * sizeof(uint64_t));
++      len = htons(ACM_MSG_HDR_LENGTH + (ACM_MAX_COUNTER * sizeof(uint64_t)));
++      msg->hdr.length = htons(len);
+       for (i = 0; i < ACM_MAX_COUNTER; i++)
+-              msg->perf_data[i] = (uint64_t) atomic_get(&counter[i]);
++              msg->perf_data[i] = htonll((uint64_t) atomic_get(&counter[i]));
+-      ret = send(client->sock, (char *) msg, msg->hdr.length, 0);
++      ret = send(client->sock, (char *) msg, len, 0);
+       if (ret != msg->hdr.length)
+               acm_log(0, "ERROR - failed to send response\n");
+       else
+@@ -2268,6 +2270,12 @@ static int acm_svr_perf_query(struct acm_client *client, struct acm_msg *msg)
+       return ret;
+ }
++static int acm_msg_length(struct acm_msg *msg)
++{
++      return (msg->hdr.opcode == ACM_OP_RESOLVE) ?
++              msg->hdr.length : ntohs(msg->hdr.length);
++}
++
+ static void acm_svr_receive(struct acm_client *client)
+ {
+       struct acm_msg msg;
+@@ -2275,7 +2283,7 @@ static void acm_svr_receive(struct acm_client *client)
+       acm_log(2, "client %d\n", client->index);
+       ret = recv(client->sock, (char *) &msg, sizeof msg, 0);
+-      if (ret <= 0 || ret != msg.hdr.length) {
++      if (ret <= 0 || ret != acm_msg_length(&msg)) {
+               acm_log(2, "client disconnected\n");
+               ret = ACM_STATUS_ENOTCONN;
+               goto out;
+diff --git a/src/libacm.c b/src/libacm.c
+index 427fa50..f96760c 100644
+--- a/src/libacm.c
++++ b/src/libacm.c
+@@ -319,21 +319,20 @@ out:
+ int ib_acm_query_perf(uint64_t **counters, int *count)
+ {
+       struct acm_msg msg;
+-      struct acm_perf_msg *perf_msg = (struct acm_perf_msg *) &msg;
+-      int ret;
++      int ret, i;
+       lock_acquire(&lock);
+       memset(&msg, 0, sizeof msg);
+       msg.hdr.version = ACM_VERSION;
+       msg.hdr.opcode = ACM_OP_PERF_QUERY;
+-      msg.hdr.length = ACM_MSG_HDR_LENGTH;
++      msg.hdr.length = htons(ACM_MSG_HDR_LENGTH);
+       ret = send(sock, (char *) &msg, msg.hdr.length, 0);
+       if (ret != msg.hdr.length)
+               goto out;
+       ret = recv(sock, (char *) &msg, sizeof msg, 0);
+-      if (ret < ACM_MSG_HDR_LENGTH || ret != msg.hdr.length)
++      if (ret < ACM_MSG_HDR_LENGTH || ret != ntohs(msg.hdr.length))
+               goto out;
+       if (msg.hdr.status) {
+@@ -347,8 +346,9 @@ int ib_acm_query_perf(uint64_t **counters, int *count)
+               goto out;
+       }
+-      memcpy(*counters, perf_msg->data, sizeof(uint64_t) * msg.hdr.data[0]);
+       *count = msg.hdr.data[0];
++      for (i = 0; i < *count; i++)
++              (*counters)[i] = ntohll(msg.perf_data[i]);
+       ret = 0;
+ out:
+       lock_release(&lock);