http://git.etherboot.org
/
mirror
/
winof
/
.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
libibumad: match behavior of OFED libibumad wrt ca ports
[mirror/winof/.git]
/
ulp
/
libibumad
/
src
/
umad.cpp
diff --git
a/ulp/libibumad/src/umad.cpp
b/ulp/libibumad/src/umad.cpp
index
1471cfe
..
bf70c42
100644
(file)
--- a/
ulp/libibumad/src/umad.cpp
+++ b/
ulp/libibumad/src/umad.cpp
@@
-99,12
+99,12
@@
int umad_get_ca_portguids(char *ca_name, uint64_t *portguids, int max)
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
@@
-208,12
+208,13
@@
int umad_get_ca(char *ca_name, umad_ca_t *ca)
\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
\r
\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
@@
-266,16
+267,16
@@
int umad_get_port(char *ca_name, int portnum, umad_port_t *port)
return ret;
\r
}
\r
\r
return ret;
\r
}
\r
\r
- memcpy(port, ca.ports[portnum
- 1
], sizeof(umad_port_t));
\r
+ memcpy(port, ca.ports[portnum], sizeof(umad_port_t));
\r
\r
\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
@@
-304,7
+305,7
@@
static uint8_t umad_find_port(char *ca_name, enum ibv_port_state state)
return 0;
\r
}
\r
\r
return 0;
\r
}
\r
\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