From c13cacbd96170d4bb8d576cb402790853fd00d61 Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Thu, 30 Jun 2011 12:44:48 -0700 Subject: [PATCH] refresh --- meta | 7 +-- patches/counters | 69 ++++++++++++++++------- patches/refresh-temp | 127 ------------------------------------------- 3 files changed, 53 insertions(+), 150 deletions(-) delete mode 100644 patches/refresh-temp diff --git a/meta b/meta index 249c088..526e93b 100644 --- a/meta +++ b/meta @@ -1,11 +1,10 @@ Version: 1 -Previous: 2f678fc68d6d19cb702204c9554570a6dbf662f1 -Head: 5c134c2743854a765b6ab18ee2179953a6c9a31d +Previous: bfdaacaa7cc1bddb61223189033ac27e6613ef30 +Head: 820f8831c428377789ad7266cce3b5f826aed02a Applied: bldwrn: be4fb9a97bdc0942c04ffddca19692ccf5875878 alias: cf8b034d082dbc168524cfadc86e231772254a64 - counters: dd732562f2edbc1175e88fd5873faddd32e272bd - refresh-temp: 5c134c2743854a765b6ab18ee2179953a6c9a31d + counters: 820f8831c428377789ad7266cce3b5f826aed02a Unapplied: acm1.0.5: 1b225173756cfcec4d81d26b1160ebae7644261b name2ip: 8e00708e882239292492e13aa51c82042255933c diff --git a/patches/counters b/patches/counters index 390c7b7..17699b1 100644 --- a/patches/counters +++ b/patches/counters @@ -1,5 +1,5 @@ Bottom: c1a3265ecb373be6114f838a6a7b82453aafd16e -Top: 4752ef8a02ea3138fab37b0b02c0d1af3e3bf7a2 +Top: 2dabfe33c4a42a8c11d65c804d0641d900fe1b2e Author: Sean Hefty Date: 2011-06-27 10:29:36 -0700 @@ -25,7 +25,7 @@ Signed-off-by: Sean Hefty --- diff --git a/include/infiniband/acm.h b/include/infiniband/acm.h -index 5ef8c1d..7a06161 100644 +index 5ef8c1d..c2d4088 100644 --- a/include/infiniband/acm.h +++ b/include/infiniband/acm.h @@ -37,6 +37,7 @@ @@ -45,7 +45,18 @@ index 5ef8c1d..7a06161 100644 uint16_t length; uint64_t tid; }; -@@ -97,6 +98,22 @@ struct acm_resolve_msg { +@@ -92,11 +93,36 @@ 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]; }; @@ -60,6 +71,9 @@ index 5ef8c1d..7a06161 100644 + ACM_MAX_COUNTER +}; + ++/* ++ * Performance messages are sent/receive in network byte order. ++ */ +struct acm_perf_msg { + struct acm_hdr hdr; + uint64_t data[0]; @@ -69,7 +83,7 @@ index 5ef8c1d..7a06161 100644 struct acm_hdr hdr; union{ diff --git a/src/acm.c b/src/acm.c -index 1c643f3..5d0e423 100644 +index 1c643f3..fed0440 100644 --- a/src/acm.c +++ b/src/acm.c @@ -47,7 +47,7 @@ @@ -159,7 +173,7 @@ index 1c643f3..5d0e423 100644 status = ACM_STATUS_SUCCESS; break; case ACM_INIT: -@@ -2216,6 +2231,43 @@ put: +@@ -2216,6 +2231,51 @@ put: return ret; } @@ -179,6 +193,7 @@ index 1c643f3..5d0e423 100644 +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; @@ -186,12 +201,13 @@ index 1c643f3..5d0e423 100644 + 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 @@ -199,11 +215,26 @@ index 1c643f3..5d0e423 100644 + + 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; -@@ -2234,19 +2286,17 @@ static void acm_svr_receive(struct acm_client *client) +@@ -2223,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; +@@ -2234,19 +2294,17 @@ static void acm_svr_receive(struct acm_client *client) goto out; } @@ -233,7 +264,7 @@ index 1c643f3..5d0e423 100644 } out: -@@ -2563,7 +2613,6 @@ static struct acm_ep * +@@ -2563,7 +2621,6 @@ static struct acm_ep * acm_alloc_ep(struct acm_port *port, uint16_t pkey, uint16_t pkey_index) { struct acm_ep *ep; @@ -241,7 +272,7 @@ index 1c643f3..5d0e423 100644 acm_log(1, "\n"); ep = calloc(1, sizeof *ep); -@@ -2583,9 +2632,6 @@ acm_alloc_ep(struct acm_port *port, uint16_t pkey, uint16_t pkey_index) +@@ -2583,9 +2640,6 @@ acm_alloc_ep(struct acm_port *port, uint16_t pkey, uint16_t pkey_index) DListInit(&ep->wait_queue); lock_init(&ep->lock); @@ -251,7 +282,7 @@ index 1c643f3..5d0e423 100644 return ep; } -@@ -3086,7 +3132,7 @@ static void show_usage(char *program) +@@ -3086,7 +3140,7 @@ static void show_usage(char *program) int CDECL_FUNC main(int argc, char **argv) { @@ -260,7 +291,7 @@ index 1c643f3..5d0e423 100644 while ((op = getopt(argc, argv, "DPA:O:")) != -1) { switch (op) { -@@ -3129,6 +3175,9 @@ int CDECL_FUNC main(int argc, char **argv) +@@ -3129,6 +3183,9 @@ int CDECL_FUNC main(int argc, char **argv) DListInit(&dev_list); DListInit(&timeout_list); event_init(&timeout_event); @@ -402,7 +433,7 @@ index d42ba81..3787998 100644 if (verbose || !(make_addr || make_opts) || ret) printf("return status 0x%x\n", ret); diff --git a/src/libacm.c b/src/libacm.c -index 8a644c4..427fa50 100644 +index 8a644c4..f96760c 100644 --- a/src/libacm.c +++ b/src/libacm.c @@ -36,6 +36,8 @@ @@ -481,21 +512,20 @@ index 8a644c4..427fa50 100644 +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) { @@ -509,8 +539,9 @@ index 8a644c4..427fa50 100644 + 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); diff --git a/patches/refresh-temp b/patches/refresh-temp deleted file mode 100644 index ec9c233..0000000 --- a/patches/refresh-temp +++ /dev/null @@ -1,127 +0,0 @@ -Bottom: 4752ef8a02ea3138fab37b0b02c0d1af3e3bf7a2 -Top: 2dabfe33c4a42a8c11d65c804d0641d900fe1b2e -Author: Sean Hefty -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); -- 2.41.0