--- /dev/null
+Bottom: ed43fb0fa39a4f3f51411e8cb67ee3b7271e74c3
+Top: cd42f24f71f72296a1e200caad51f1dc74bc3f0b
+Author: Sean Hefty <sean.hefty@intel.com>
+Date: 2011-06-29 17:35:59 -0700
+
+Refresh of bld
+
+---
+
+diff --git a/include/infiniband/acm.h b/include/infiniband/acm.h
+index 23d8198..7a06161 100644
+--- a/include/infiniband/acm.h
++++ b/include/infiniband/acm.h
+@@ -115,8 +115,12 @@ struct acm_perf_msg {
+ };
+
+ struct acm_msg {
+- struct acm_hdr hdr;
+- uint8_t data[ACM_MSG_DATA_LENGTH];
++ struct acm_hdr hdr;
++ union{
++ uint8_t data[ACM_MSG_DATA_LENGTH];
++ struct acm_ep_addr_data resolve_data[0];
++ uint64_t perf_data[0];
++ };
+ };
+
+ #endif /* ACM_H */
+diff --git a/src/libacm.c b/src/libacm.c
+index 5331b2c..b57710a 100644
+--- a/src/libacm.c
++++ b/src/libacm.c
+@@ -111,7 +111,7 @@ void ib_acm_disconnect(void)
+ }
+ }
+
+-static int acm_format_resp(struct acm_resolve_msg *msg,
++static int acm_format_resp(struct acm_msg *msg,
+ struct ibv_path_data **paths, int *count)
+ {
+ struct ibv_path_data *path_data;
+@@ -129,8 +129,8 @@ static int acm_format_resp(struct acm_resolve_msg *msg,
+ for (i = 0; i < addr_cnt; i++) {
+ switch (msg->data[i].type) {
+ case ACM_EP_INFO_PATH:
+- path_data[i].flags = msg->data[i].flags;
+- path_data[i].path = msg->data[i].info.path;
++ path_data[i].flags = msg->resolve_data[i].flags;
++ path_data[i].path = msg->resolve_data[i].info.path;
+ (*count)++;
+ break;
+ default:
+@@ -139,13 +139,16 @@ static int acm_format_resp(struct acm_resolve_msg *msg,
+
+ switch (msg->data[i].type) {
+ case ACM_EP_INFO_ADDRESS_IP:
+- inet_ntop(AF_INET, msg->data[i].info.addr, addr, sizeof addr);
++ inet_ntop(AF_INET, msg->resolve_data[i].info.addr,
++ addr, sizeof addr);
+ break;
+ case ACM_EP_INFO_ADDRESS_IP6:
+- inet_ntop(AF_INET6, msg->data[i].info.addr, addr, sizeof addr);
++ inet_ntop(AF_INET6, msg->resolve_data[i].info.addr,
++ addr, sizeof addr);
+ break;
+ case ACM_EP_INFO_NAME:
+- memcpy(addr, msg->data[i].info.name, ACM_MAX_ADDRESS);
++ memcpy(addr, msg->resolve_data[i].info.name,
++ ACM_MAX_ADDRESS);
+ break;
+ default:
+ goto err;
+@@ -220,7 +223,6 @@ static int acm_resolve(uint8_t *src, uint8_t *dest, uint8_t type,
+ struct ibv_path_data **paths, int *count, uint32_t flags)
+ {
+ struct acm_msg msg;
+- struct acm_resolve_msg *resolve_msg = (struct acm_resolve_msg *) &msg;
+ int ret, cnt = 0;
+
+ lock_acquire(&lock);
+@@ -229,13 +231,13 @@ static int acm_resolve(uint8_t *src, uint8_t *dest, uint8_t type,
+ msg.hdr.opcode = ACM_OP_RESOLVE;
+
+ if (src) {
+- ret = acm_format_ep_addr(&resolve_msg->data[cnt++], src, type,
++ ret = acm_format_ep_addr(&msg.resolve_data[cnt++], src, type,
+ ACM_EP_FLAG_SOURCE);
+ if (ret)
+ goto out;
+ }
+
+- ret = acm_format_ep_addr(&resolve_msg->data[cnt++], dest, type,
++ ret = acm_format_ep_addr(&msg.resolve_data[cnt++], dest, type,
+ ACM_EP_FLAG_DEST | flags);
+ if (ret)
+ goto out;
+@@ -255,7 +257,7 @@ static int acm_resolve(uint8_t *src, uint8_t *dest, uint8_t type,
+ goto out;
+ }
+
+- ret = acm_format_resp(resolve_msg, paths, count);
++ ret = acm_format_resp(&msg, paths, count);
+ out:
+ lock_release(&lock);
+ return ret;
+@@ -292,7 +294,7 @@ int ib_acm_resolve_path(struct ibv_path_record *path, uint32_t flags)
+ msg.hdr.opcode = ACM_OP_RESOLVE;
+ msg.hdr.length = ACM_MSG_HDR_LENGTH + ACM_MSG_EP_LENGTH;
+
+- data = &((struct acm_resolve_msg *) &msg)->data[0];
++ data = &msg.resolve_data[0];
+ data->flags = flags;
+ data->type = ACM_EP_INFO_PATH;
+ data->info.path = *path;
+@@ -317,7 +319,6 @@ 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;
+
+ lock_acquire(&lock);
+@@ -345,7 +346,7 @@ int ib_acm_query_perf(uint64_t **counters, int *count)
+ goto out;
+ }
+
+- memcpy(*counters, perf_msg->data, sizeof(uint64_t) * msg.hdr.data[0]);
++ memcpy(*counters, &msg.perf_data, sizeof(uint64_t) * msg.hdr.data[0]);
+ *count = msg.hdr.data[0];
+ ret = 0;
+ out: