IB/core: Fix SDR rates in sysfs
Commit 71eeba16
("IB: Add new InfiniBand link speeds") introduced a bug
where eg the rate for IB 4X SDR links iss displayed as "8.5 Gb/sec"
instead of "10 Gb/sec" as it used to be. Fix that.
Reported-by: Or Gerlitz <ogerlitz@mellanox.com>
Signed-off-by: Roland Dreier <roland@purestorage.com>
This commit is contained in:
parent
6b21d18ed5
commit
e9319b0cb0
1 changed files with 11 additions and 7 deletions
|
@ -179,33 +179,37 @@ static ssize_t rate_show(struct ib_port *p, struct port_attribute *unused,
|
||||||
{
|
{
|
||||||
struct ib_port_attr attr;
|
struct ib_port_attr attr;
|
||||||
char *speed = "";
|
char *speed = "";
|
||||||
int rate;
|
int rate = -1; /* in deci-Gb/sec */
|
||||||
ssize_t ret;
|
ssize_t ret;
|
||||||
|
|
||||||
ret = ib_query_port(p->ibdev, p->port_num, &attr);
|
ret = ib_query_port(p->ibdev, p->port_num, &attr);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
rate = (25 * attr.active_speed) / 10;
|
|
||||||
|
|
||||||
switch (attr.active_speed) {
|
switch (attr.active_speed) {
|
||||||
|
case 1:
|
||||||
|
/* SDR */
|
||||||
|
rate = 25;
|
||||||
|
break;
|
||||||
case 2:
|
case 2:
|
||||||
speed = " DDR";
|
speed = " DDR";
|
||||||
|
rate = 50;
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
speed = " QDR";
|
speed = " QDR";
|
||||||
|
rate = 100;
|
||||||
break;
|
break;
|
||||||
case 8:
|
case 8:
|
||||||
speed = " FDR10";
|
speed = " FDR10";
|
||||||
rate = 10;
|
rate = 100;
|
||||||
break;
|
break;
|
||||||
case 16:
|
case 16:
|
||||||
speed = " FDR";
|
speed = " FDR";
|
||||||
rate = 14;
|
rate = 140;
|
||||||
break;
|
break;
|
||||||
case 32:
|
case 32:
|
||||||
speed = " EDR";
|
speed = " EDR";
|
||||||
rate = 25;
|
rate = 250;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -214,7 +218,7 @@ static ssize_t rate_show(struct ib_port *p, struct port_attribute *unused,
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
return sprintf(buf, "%d%s Gb/sec (%dX%s)\n",
|
return sprintf(buf, "%d%s Gb/sec (%dX%s)\n",
|
||||||
rate, (attr.active_speed == 1) ? ".5" : "",
|
rate / 10, rate % 10 ? ".5" : "",
|
||||||
ib_width_enum_to_int(attr.active_width), speed);
|
ib_width_enum_to_int(attr.active_width), speed);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue