]> git.openfabrics.org - ~shefty/ibacm.git/commitdiff
pick
authorSean Hefty <sean.hefty@intel.com>
Fri, 20 Jun 2014 15:55:23 +0000 (08:55 -0700)
committerSean Hefty <sean.hefty@intel.com>
Fri, 20 Jun 2014 15:55:23 +0000 (08:55 -0700)
meta
patches/ibacm-prov-export-a-function-t-0 [new file with mode: 0644]

diff --git a/meta b/meta
index 34adf0db73037d4fe3fd68c83b3675dd95425800..61b813f993d76121b647657703aa5fc38e4590e0 100644 (file)
--- 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 (file)
index 0000000..5e09af4
--- /dev/null
@@ -0,0 +1,121 @@
+Bottom: 07014405cca6b5e9bb67a82361b2ec1d634f6281
+Top:    35fd60e5ad8d8c58e2774173414af34ecd73c204
+Author: Kaike Wan <kaike.wan@intel.com>
+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 <kaike.wan@intel.com>
+
+
+---
+
+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)
+ {