summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
2f9e794)
The OFED version of libibumad stores a list of ports associated with a umad_ca_t differently based on whether the CA is on a host or is part of a switch. On a host, the port information is maintained in the port array starting at index 1, not 0. In this case, umad_ca_t:port[0] is NULL. Update the WinOF version of libibumad to behave the same. This fixes an issue with ibstat reporting 1 too many ports.
Signed-off-by: Sean Hefty <sean.hefty@intel.com>
git-svn-id: svn://openib.tc.cornell.edu/gen1/trunk@2014
ad392aa1-c5ef-ae45-8dd8-
e69d62a5ef86
if (umad_get_ca(ca_name, &ca) < 0)\r
return -1;\r
\r
if (umad_get_ca(ca_name, &ca) < 0)\r
return -1;\r
\r
- if (ca.numports + 1 > max) {\r
+ if (ca.numports > max) {\r
umad_release_ca(&ca);\r
return -ENOMEM;\r
}\r
\r
umad_release_ca(&ca);\r
return -ENOMEM;\r
}\r
\r
- for (i = 0; i <= ca.numports; i++)\r
+ for (i = 1; i <= ca.numports; i++)\r
portguids[ports++] = ca.ports[i]->port_guid;\r
\r
umad_release_ca(&ca);\r
portguids[ports++] = ca.ports[i]->port_guid;\r
\r
umad_release_ca(&ca);\r
\r
strcpy(ca->ca_name, ca_name);\r
umad_convert_ca_attr(ca, &dev_attr);\r
\r
strcpy(ca->ca_name, ca_name);\r
umad_convert_ca_attr(ca, &dev_attr);\r
+ memset(ca->ports, 0, sizeof(ca->ports));\r
- for (i = 0; i < dev_attr.phys_port_cnt; i++, ports += port_size) {\r
+ for (i = 1; i <= dev_attr.phys_port_cnt; i++, ports += port_size) {\r
\r
ca->ports[i] = (umad_port_t *) ports;\r
strcpy(ca->ports[i]->ca_name, ca_name);\r
\r
ca->ports[i] = (umad_port_t *) ports;\r
strcpy(ca->ports[i]->ca_name, ca_name);\r
- ca->ports[i]->portnum = i + 1;\r
+ ca->ports[i]->portnum = i;\r
ca->ports[i]->pkeys = (uint16_t *) (ports + sizeof(umad_port_t));\r
\r
ret = umad_query_port(context, ca->ports[i]);\r
ca->ports[i]->pkeys = (uint16_t *) (ports + sizeof(umad_port_t));\r
\r
ret = umad_query_port(context, ca->ports[i]);\r
- memcpy(port, ca.ports[portnum - 1], sizeof(umad_port_t));\r
+ memcpy(port, ca.ports[portnum], sizeof(umad_port_t));\r
- port->pkeys = new uint16_t[ca.ports[portnum - 1]->pkeys_size];\r
+ port->pkeys = new uint16_t[ca.ports[portnum]->pkeys_size];\r
if (port->pkeys == NULL) {\r
ret = -ENOMEM;\r
goto out;\r
}\r
\r
if (port->pkeys == NULL) {\r
ret = -ENOMEM;\r
goto out;\r
}\r
\r
- memcpy(port->pkeys, ca.ports[portnum - 1]->pkeys,\r
- sizeof(uint16_t) * ca.ports[portnum - 1]->pkeys_size);\r
+ memcpy(port->pkeys, ca.ports[portnum]->pkeys,\r
+ sizeof(uint16_t) * ca.ports[portnum]->pkeys_size);\r
out:\r
umad_release_ca(&ca);\r
return ret;\r
out:\r
umad_release_ca(&ca);\r
return ret;\r
- for (i = 0; i < ca.numports; i++) {\r
+ for (i = 1; i <= ca.numports; i++) {\r
if (ca.ports[i]->state == state) {\r
i = ca.ports[i]->portnum;\r
umad_release_ca(&ca);\r
if (ca.ports[i]->state == state) {\r
i = ca.ports[i]->portnum;\r
umad_release_ca(&ca);\r