IB/core: Fix SDR rates in sysfs
authorRoland Dreier <roland@purestorage.com>
Mon, 27 Feb 2012 17:15:08 +0000 (09:15 -0800)
committerRoland Dreier <roland@purestorage.com>
Mon, 27 Feb 2012 17:15:08 +0000 (09:15 -0800)
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>
drivers/infiniband/core/sysfs.c

index c61bca30fd2dd3d06aa0cc9b6f7d729515af606f..a860b6ddbb61e1e4eb435b958f1d0979a51b109b 100644 (file)
@@ -179,33 +179,37 @@ static ssize_t rate_show(struct ib_port *p, struct port_attribute *unused,
 {
        struct ib_port_attr attr;
        char *speed = "";
-       int rate;
+       int rate = -1;          /* in deci-Gb/sec */
        ssize_t ret;
 
        ret = ib_query_port(p->ibdev, p->port_num, &attr);
        if (ret)
                return ret;
 
-       rate = (25 * attr.active_speed) / 10;
-
        switch (attr.active_speed) {
+       case 1:
+               /* SDR */
+               rate = 25;
+               break;
        case 2:
                speed = " DDR";
+               rate = 50;
                break;
        case 4:
                speed = " QDR";
+               rate = 100;
                break;
        case 8:
                speed = " FDR10";
-               rate = 10;
+               rate = 100;
                break;
        case 16:
                speed = " FDR";
-               rate = 14;
+               rate = 140;
                break;
        case 32:
                speed = " EDR";
-               rate = 25;
+               rate = 250;
                break;
        }
 
@@ -214,7 +218,7 @@ static ssize_t rate_show(struct ib_port *p, struct port_attribute *unused,
                return -EINVAL;
 
        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);
 }