]> git.openfabrics.org - ~shefty/ibacm.git/commitdiff
pick
authorSean Hefty <sean.hefty@intel.com>
Wed, 7 Jan 2015 22:25:34 +0000 (14:25 -0800)
committerSean Hefty <sean.hefty@intel.com>
Wed, 7 Jan 2015 22:25:34 +0000 (14:25 -0800)
meta
patches/ibacm-open-only-prov-endpoints [new file with mode: 0644]

diff --git a/meta b/meta
index 7c540ecdd72f0f979bac512228b09d93d6c3d1d1..c013626f6a2986960a1889255e88b96dc7b125f9 100644 (file)
--- a/meta
+++ b/meta
@@ -1,7 +1,8 @@
 Version: 1
-Previous: 6de829ca0099cb1b533b3cdd26aa53c71e6d3bc8
-Head: 7a781f6d554532995181b9efbe445599b25c271a
+Previous: 5f327962283f5898f6c947573fc7125a0aa34b1f
+Head: 2a41f79aef1fd3992272623e7114622dd64e7f1c
 Applied:
+  ibacm-open-only-prov-endpoints: 2a41f79aef1fd3992272623e7114622dd64e7f1c
 Unapplied:
   suse: 7076e2a00570a3cda4e4ce034419399a23ebfb0a
   dev-name2ip: 8e00708e882239292492e13aa51c82042255933c
diff --git a/patches/ibacm-open-only-prov-endpoints b/patches/ibacm-open-only-prov-endpoints
new file mode 100644 (file)
index 0000000..60ba78f
--- /dev/null
@@ -0,0 +1,63 @@
+Bottom: 989ff3790414f79d1d5f48618310870be6cb70e5
+Top:    64e8af33e50308b09126af20b30b242eaad40ae2
+Author: Kaike Wan <kaike.wan@intel.com>
+Date:   2015-01-07 14:25:34 -0800
+
+ibacm: open only prov endpoints with name/addr configured
+
+This patch modifies the ibacm core so that it will request the provider to
+open those endpoints that have been assigned with at least one name or address.
+This change will avoid unnecessary endpoint open and close for those without
+any name/address configured by the administrator.
+
+Signed-off-by: Kaike Wan <kaike.wan@intel.com>
+
+
+---
+
+diff --git a/src/acm.c b/src/acm.c
+index 2d0d2e1..815a916 100644
+--- a/src/acm.c
++++ b/src/acm.c
+@@ -1517,6 +1517,17 @@ acm_ep_insert_addr(struct acmc_ep *ep, const char *name, uint8_t *addr,
+                       goto out;
+               }
++              /* Open the provider endpoint only if at least a name or
++                 address is found */
++              if (!ep->prov_ep_context) {
++                      ret = ep->port->prov->open_endpoint(&ep->endpoint,
++                              ep->port->prov_port_context, 
++                              &ep->prov_ep_context);
++                      if (ret) {
++                              acm_log(0, "Error: failed to open prov ep\n");
++                              goto out;
++                      }
++              }
+               ep->addr_info[i].addr.type = addr_type;
+               strncpy(ep->addr_info[i].string_buf, name, ACM_MAX_ADDRESS);
+               memcpy(ep->addr_info[i].addr.info.addr, tmp, ACM_MAX_ADDRESS);
+@@ -1735,12 +1746,6 @@ static void acm_ep_up(struct acmc_port *port, uint16_t pkey)
+       if (!ep)
+               return;
+-      if (port->prov->open_endpoint(&ep->endpoint, port->prov_port_context, 
+-                                    &ep->prov_ep_context)) {
+-              acm_log(0, "Error -- failed to open prov endpoint\n");
+-              goto err;
+-      }
+-
+       ret = acm_assign_ep_names(ep);
+       if (ret) {
+               acm_log(0, "ERROR - unable to assign EP name for pkey 0x%x\n", pkey);
+@@ -1751,9 +1756,9 @@ static void acm_ep_up(struct acmc_port *port, uint16_t pkey)
+       return;
+ ep_close:
+-      port->prov->close_endpoint(ep->prov_ep_context);
++      if (ep->prov_ep_context) 
++              port->prov->close_endpoint(ep->prov_ep_context);
+-err:
+       free(ep);
+ }