From 6ac505f993e383a81331790e3efcc12bc3bac576 Mon Sep 17 00:00:00 2001 From: Sean Hefty Date: Fri, 20 Jun 2014 08:55:23 -0700 Subject: [PATCH] pick --- meta | 5 +- patches/ibacm-prov-export-a-function-t-0 | 121 +++++++++++++++++++++++ 2 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 patches/ibacm-prov-export-a-function-t-0 diff --git a/meta b/meta index 34adf0d..61b813f 100644 --- a/meta +++ b/meta @@ -1,10 +1,11 @@ Version: 1 -Previous: 96e49a7a12a5682ab96f794954c578a665acc3ad -Head: b0e500b5b2768b0176c2724a0925043d97886d23 +Previous: 550244307a1e0e5162d7ee1621fe47c594c42414 +Head: b3d217ff41f3331d831a831a701fbf489d1f0e5d Applied: ibacm-update-man-page: 740d2536b9ba2ae764fffcc2205c656771bde779 ibacm-add-provider-man-page: a2b702c11c98eb1065bb8831d28e07979155c2a2 ibacm-prov-export-a-function-t: b0e500b5b2768b0176c2724a0925043d97886d23 + ibacm-prov-export-a-function-t-0: b3d217ff41f3331d831a831a701fbf489d1f0e5d Unapplied: suse: 7076e2a00570a3cda4e4ce034419399a23ebfb0a dev-name2ip: 8e00708e882239292492e13aa51c82042255933c diff --git a/patches/ibacm-prov-export-a-function-t-0 b/patches/ibacm-prov-export-a-function-t-0 new file mode 100644 index 0000000..5e09af4 --- /dev/null +++ b/patches/ibacm-prov-export-a-function-t-0 @@ -0,0 +1,121 @@ +Bottom: 07014405cca6b5e9bb67a82361b2ec1d634f6281 +Top: 35fd60e5ad8d8c58e2774173414af34ecd73c204 +Author: Kaike Wan +Date: 2014-06-20 08:55:23 -0700 + +ibacm/prov: export a function to increment performance counters + +Instead of exposing the combined counters directly, this patch exports a +function to providers to increment the combined counters. This offers better +encapsulation and avoids exposing the private type atomic_t. + +Signed-off-by: Kaike Wan + + +--- + +diff --git a/include/infiniband/acm_prov.h b/include/infiniband/acm_prov.h +index 9e299b9..890e6ba 100644 +--- a/include/infiniband/acm_prov.h ++++ b/include/infiniband/acm_prov.h +@@ -80,9 +80,6 @@ struct acm_provider { + void (*query_perf)(void *ep_context, uint64_t *values, uint8_t *cnt); + }; + +-/* Variables exported from core */ +-extern atomic_t counter[ACM_MAX_COUNTER]; +- + int provider_query(struct acm_provider **info, uint32_t *version); + + /* Functions exported from core */ +@@ -117,5 +114,6 @@ extern void acm_free_sa_mad(struct acm_sa_mad *mad); + extern int acm_send_sa_mad(struct acm_sa_mad *mad); + + extern char * acm_get_opts_file(void); ++extern void acm_increment_counter(int type); + + #endif /* ACM_PROV_H */ +diff --git a/prov/acmp/src/acmp.c b/prov/acmp/src/acmp.c +index 5db62e2..2dd356d 100644 +--- a/prov/acmp/src/acmp.c ++++ b/prov/acmp/src/acmp.c +@@ -798,7 +798,7 @@ static uint8_t acmp_resolve_path_sa(struct acmp_ep *ep, struct acmp_dest *dest, + memcpy(mad->data, &dest->path, sizeof(dest->path)); + mad->comp_mask = acm_path_comp_mask(&dest->path); + +- atomic_inc(&counter[ACM_CNTR_ROUTE_QUERY]); ++ acm_increment_counter(ACM_CNTR_ROUTE_QUERY); + atomic_inc(&ep->counters[ACM_CNTR_ROUTE_QUERY]); + dest->state = ACMP_QUERY_ROUTE; + if (acm_send_sa_mad(sa_mad)) { +@@ -1630,7 +1630,7 @@ acmp_query(void *addr_context, struct acm_msg *msg, uint64_t id) + sizeof(struct ibv_path_record)); + mad->comp_mask = acm_path_comp_mask(&msg->resolve_data[0].info.path); + +- atomic_inc(&counter[ACM_CNTR_ROUTE_QUERY]); ++ acm_increment_counter(ACM_CNTR_ROUTE_QUERY); + atomic_inc(&ep->counters[ACM_CNTR_ROUTE_QUERY]); + if (acm_send_sa_mad(sa_mad)) { + acm_log(0, "Error - Failed to send sa mad\n"); +@@ -1691,8 +1691,8 @@ acmp_send_resolve(struct acmp_ep *ep, struct acmp_dest *dest, + rec->gid_cnt = (uint8_t) ep->mc_cnt; + for (i = 0; i < ep->mc_cnt; i++) + memcpy(&rec->gid[i], ep->mc_dest[i].address, 16); +- +- atomic_inc(&counter[ACM_CNTR_ADDR_QUERY]); ++ ++ acm_increment_counter(ACM_CNTR_ADDR_QUERY); + atomic_inc(&ep->counters[ACM_CNTR_ADDR_QUERY]); + acmp_post_send(&ep->resolve_queue, msg); + return 0; +@@ -1758,13 +1758,13 @@ test: + if (acmp_dest_timeout(dest)) + goto test; + acm_log(2, "request satisfied from local cache\n"); +- atomic_inc(&counter[ACM_CNTR_ROUTE_CACHE]); ++ acm_increment_counter(ACM_CNTR_ROUTE_CACHE); + atomic_inc(&ep->counters[ACM_CNTR_ROUTE_CACHE]); + status = ACM_STATUS_SUCCESS; + break; + case ACMP_ADDR_RESOLVED: + acm_log(2, "have address, resolving route\n"); +- atomic_inc(&counter[ACM_CNTR_ADDR_CACHE]); ++ acm_increment_counter(ACM_CNTR_ADDR_CACHE); + atomic_inc(&ep->counters[ACM_CNTR_ADDR_CACHE]); + status = acmp_resolve_path_sa(ep, dest, acmp_dest_sa_resp); + if (status) { +@@ -1833,7 +1833,7 @@ test: + if (acmp_dest_timeout(dest)) + goto test; + acm_log(2, "request satisfied from local cache\n"); +- atomic_inc(&counter[ACM_CNTR_ROUTE_CACHE]); ++ acm_increment_counter(ACM_CNTR_ROUTE_CACHE); + atomic_inc(&ep->counters[ACM_CNTR_ROUTE_CACHE]); + status = ACM_STATUS_SUCCESS; + break; +diff --git a/src/acm.c b/src/acm.c +index 97b773e..8f147ef 100644 +--- a/src/acm.c ++++ b/src/acm.c +@@ -163,7 +163,7 @@ static struct acmc_client client_array[FD_SETSIZE - 1]; + static FILE *flog; + static lock_t log_lock; + PER_THREAD char log_data[ACM_MAX_ADDRESS]; +-atomic_t counter[ACM_MAX_COUNTER]; ++static atomic_t counter[ACM_MAX_COUNTER]; + + static struct acmc_device * + acm_get_device_from_gid(union ibv_gid *sgid, uint8_t *port); +@@ -261,6 +261,12 @@ char * acm_get_opts_file(void) + return opts_file; + } + ++void acm_increment_counter(int type) ++{ ++ if (type >= 0 && type < ACM_MAX_COUNTER) ++ atomic_inc(&counter[type]); ++} ++ + static struct acmc_prov_context * + acm_alloc_prov_context(struct acm_provider *prov) + { -- 2.41.0