On 4/2/2012 10:45 AM, Or Gerlitz wrote: > When the IB port is down, the active_speed value returned by the MAD_IFC > command equals seven (7) which isn't among the IB speeds defined by the > ib_port_speed enum. This results in invalid speed value seen by 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. > --- > drivers/infiniband/hw/mlx4/main.c | 4 ++++ > 1 files changed, 4 insertions(+), 0 deletions(-) > > diff --git a/drivers/infiniband/hw/mlx4/main.c > b/drivers/infiniband/hw/mlx4/main.c > index 75d3056..b727094 100644 > --- a/drivers/infiniband/hw/mlx4/main.c > +++ b/drivers/infiniband/hw/mlx4/main.c > @@ -253,6 +253,10 @@ 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;
Rather than always overwriting active_speed in this case, wouldn't it be better to only do that for invalid values ? -- Hal > out: > kfree(in_mad); > kfree(out_mad); -- To unsubscribe from this list: send the line "unsubscribe linux-rdma" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html