OSDN Git Service

IB/mlx4: Don't return an invalid speed when a port is down
authorOr Gerlitz <ogerlitz@mellanox.com>
Mon, 2 Apr 2012 14:45:20 +0000 (17:45 +0300)
committerRoland Dreier <roland@purestorage.com>
Mon, 2 Apr 2012 17:55:24 +0000 (10:55 -0700)
When the IB port is down, the active_speed value returned by the
MAD_IFC command is seven (7) which isn't among the defined IB speeds
in enum ib_port_speed, and this invalid speed value is passed up to
higher layers or applications who do port query.

Fix that by setting the speed to be SDR -- the lowest possible -- when
the port is down.

Signed-off-by: Roland Dreier <roland@purestorage.com>
drivers/infiniband/hw/mlx4/main.c

index 75d3056..669673e 100644 (file)
@@ -253,6 +253,11 @@ static int ib_link_query_port(struct ib_device *ibdev, u8 port,
                if (out_mad->data[15] & 0x1)
                        props->active_speed = IB_SPEED_FDR10;
        }
+
+       /* Avoid wrong speed value returned by FW if the IB link is down. */
+       if (props->state == IB_PORT_DOWN)
+                props->active_speed = IB_SPEED_SDR;
+
 out:
        kfree(in_mad);
        kfree(out_mad);