Version: 1
-Previous: 6de829ca0099cb1b533b3cdd26aa53c71e6d3bc8
-Head: 7a781f6d554532995181b9efbe445599b25c271a
+Previous: 5f327962283f5898f6c947573fc7125a0aa34b1f
+Head: 2a41f79aef1fd3992272623e7114622dd64e7f1c
Applied:
+ ibacm-open-only-prov-endpoints: 2a41f79aef1fd3992272623e7114622dd64e7f1c
Unapplied:
suse: 7076e2a00570a3cda4e4ce034419399a23ebfb0a
dev-name2ip: 8e00708e882239292492e13aa51c82042255933c
--- /dev/null
+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);
+ }