FAILED: patch "[PATCH] IB/mlx5: Avoid load failure due to unknown link width" failed to apply to 4.4-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.4-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
db7a691a1551a748cb92d9c89c6b190ea87e28d5Mon Sep 17 00:00:00 2001
From: Michael Guralnik <[email protected]>
Date: Wed, 21 Nov 2018 15:03:54 +0200
Subject: [PATCH] IB/mlx5: Avoid load failure due to unknown link width
If the firmware reports a connection width that is not 1x, 4x, 8x or 12x it causes the driver to fail during initialization.
To prevent this failure every time a new width is introduced to the RDMA stack, we will set a default 4x width for these widths which ar unknown to the driver.
This is needed to allow to run old kernels with new firmware.
drivers/infiniband/hw/mlx5/main.c +11 -18
@@ -1094,31 +1094,26 @@ enum mlx5_ib_width { MLX5_IB_WIDTH_12X = 1 << 4 }; -static int translate_active_width (struct ib_device *ibdev,u8 active_width, +static void translate_active_width (struct ib_device *ibdev,u8 active_width,u8 *ib_width) {struct mlx5_ib_dev *dev =to_mdev (ibdev); -int err =0 ; -if (active_width &MLX5_IB_WIDTH_1X ) { +if (active_width &MLX5_IB_WIDTH_1X ) *ib_width =IB_WIDTH_1X ; - }else if (active_width &MLX5_IB_WIDTH_2X ) { -mlx5_ib_dbg (dev,"active_width %d is not supported by IB spec\n" , - (int )active_width); - err = -EINVAL ; - }else if (active_width &MLX5_IB_WIDTH_4X ) { +else if (active_width &MLX5_IB_WIDTH_4X ) *ib_width =IB_WIDTH_4X ; - }else if (active_width &MLX5_IB_WIDTH_8X ) { +else if (active_width &MLX5_IB_WIDTH_8X ) *ib_width =IB_WIDTH_8X ; - }else if (active_width &MLX5_IB_WIDTH_12X ) { +else if (active_width &MLX5_IB_WIDTH_12X ) *ib_width =IB_WIDTH_12X ; - }else { -mlx5_ib_dbg (dev,"Invalid active_width %d\n" , +else { +mlx5_ib_dbg (dev,"Invalid active_width %d, setting width to default value: 4x\n" , (int )active_width); - err = -EINVAL ; + *ib_width =IB_WIDTH_4X ; } -return err; +return ; }static int mlx5_mtu_to_ib_mtu (int mtu)
@@ -1225,10 +1220,8 @@ static int mlx5_query_hca_port(struct ib_device *ibdev, u8 port,if (err) goto out; - err =translate_active_width (ibdev, ib_link_width_oper, - &props->active_width); -if (err) - goto out; +translate_active_width (ibdev, ib_link_width_oper, &props->active_width); + err =mlx5_query_port_ib_proto_oper (mdev, &props->active_speed, port);if (err) goto out;