linux-rdma.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH rdma-next v1 0/3] Fix in-kernel active_speed type
@ 2020-09-02  7:45 Leon Romanovsky
  2020-09-02  7:45 ` [PATCH mlx5-next v1 1/3] net/mlx5: Refactor query port speed functions Leon Romanovsky
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Leon Romanovsky @ 2020-09-02  7:45 UTC (permalink / raw)
  To: Doug Ledford, Jason Gunthorpe
  Cc: Leon Romanovsky, Achiad Shochat, Adit Ranadive, Aharon Landau,
	Ariel Elior, Dennis Dalessandro, Devesh Sharma, Jakub Kicinski,
	linux-rdma, Michael Guralnik, Michal Kalderon, Mike Marciniszyn,
	Naresh Kumar PBS, netdev, Saeed Mahameed, Selvin Xavier,
	Somnath Kotur, Sriharsha Basavapatna, VMware PV-Drivers

From: Leon Romanovsky <leonro@nvidia.com>

Changelog:
v1:
 * Changed patch #1 to fix memory corruption to help with bisect. No
   change in series, because the added code is changed anyway in patch
   #3.
v0:
 * https://lore.kernel.org/linux-rdma/20200824105826.1093613-1-leon@kernel.org

----------------------------------------------------------------------------------------

IBTA declares speed as 16 bits, but kernel stores it in u8. This series
fixes in-kernel declaration while keeping external interface intact.

Thanks

Aharon Landau (3):
  net/mlx5: Refactor query port speed functions
  RDMA/mlx5: Delete duplicated mlx5_ptys_width enum
  RDMA: Fix link active_speed size

 .../infiniband/core/uverbs_std_types_device.c |  3 +-
 drivers/infiniband/core/verbs.c               |  2 +-
 drivers/infiniband/hw/bnxt_re/bnxt_re.h       |  2 +-
 drivers/infiniband/hw/hfi1/verbs.c            |  2 +-
 drivers/infiniband/hw/mlx5/main.c             | 41 +++++++------------
 drivers/infiniband/hw/ocrdma/ocrdma_verbs.c   |  2 +-
 drivers/infiniband/hw/qedr/verbs.c            |  2 +-
 drivers/infiniband/hw/qib/qib.h               |  6 +--
 .../infiniband/hw/vmw_pvrdma/pvrdma_verbs.h   |  2 +-
 .../mellanox/mlx5/core/ipoib/ethtool.c        | 31 ++------------
 .../net/ethernet/mellanox/mlx5/core/port.c    | 23 ++---------
 include/linux/mlx5/port.h                     | 15 +++++--
 include/rdma/ib_verbs.h                       |  4 +-
 13 files changed, 47 insertions(+), 88 deletions(-)

--
2.26.2


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH mlx5-next v1 1/3] net/mlx5: Refactor query port speed functions
  2020-09-02  7:45 [PATCH rdma-next v1 0/3] Fix in-kernel active_speed type Leon Romanovsky
@ 2020-09-02  7:45 ` Leon Romanovsky
  2020-09-02  7:45 ` [PATCH mlx5-next v1 2/3] RDMA/mlx5: Delete duplicated mlx5_ptys_width enum Leon Romanovsky
  2020-09-02  7:45 ` [PATCH rdma-next v1 3/3] RDMA: Fix link active_speed size Leon Romanovsky
  2 siblings, 0 replies; 11+ messages in thread
From: Leon Romanovsky @ 2020-09-02  7:45 UTC (permalink / raw)
  To: Doug Ledford, Jason Gunthorpe
  Cc: Aharon Landau, Achiad Shochat, Jakub Kicinski, linux-rdma,
	Michael Guralnik, netdev, Saeed Mahameed

From: Aharon Landau <aharonl@mellanox.com>

The functions mlx5_query_port_link_width_oper and
mlx5_query_port_ib_proto_oper are always called together, so combine them
to a new function called mlx5_query_port_oper to avoid duplication.

And while the mlx5i_get_port_settings is the same as
mlx5_query_port_oper therefore let's remove it.

According to the IB spec link_width_oper and ib_proto_oper should be u16
and not as written u8, so perform casting as a preparation to cross-RDMA
patch which will fix that type for all drivers in the RDMA subsystem.

Fixes: ada68c31ba9c ("net/mlx5: Introduce a new header file for physical port functions")
Signed-off-by: Aharon Landau <aharonl@mellanox.com>
Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
---
 drivers/infiniband/hw/mlx5/main.c             | 27 ++++++++++---------
 .../mellanox/mlx5/core/ipoib/ethtool.c        | 23 +++-------------
 .../net/ethernet/mellanox/mlx5/core/port.c    | 23 +++-------------
 include/linux/mlx5/port.h                     |  7 +++--
 4 files changed, 25 insertions(+), 55 deletions(-)

diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index bfa8b6b3c681..ca33ff4b1d5e 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -326,8 +326,8 @@ void mlx5_ib_put_native_port_mdev(struct mlx5_ib_dev *ibdev, u8 port_num)
 	spin_unlock(&port->mp.mpi_lock);
 }
 
-static int translate_eth_legacy_proto_oper(u32 eth_proto_oper, u8 *active_speed,
-					   u8 *active_width)
+static int translate_eth_legacy_proto_oper(u32 eth_proto_oper,
+					   u16 *active_speed, u8 *active_width)
 {
 	switch (eth_proto_oper) {
 	case MLX5E_PROT_MASK(MLX5E_1000BASE_CX_SGMII):
@@ -384,7 +384,7 @@ static int translate_eth_legacy_proto_oper(u32 eth_proto_oper, u8 *active_speed,
 	return 0;
 }
 
-static int translate_eth_ext_proto_oper(u32 eth_proto_oper, u8 *active_speed,
+static int translate_eth_ext_proto_oper(u32 eth_proto_oper, u16 *active_speed,
 					u8 *active_width)
 {
 	switch (eth_proto_oper) {
@@ -436,7 +436,7 @@ static int translate_eth_ext_proto_oper(u32 eth_proto_oper, u8 *active_speed,
 	return 0;
 }
 
-static int translate_eth_proto_oper(u32 eth_proto_oper, u8 *active_speed,
+static int translate_eth_proto_oper(u32 eth_proto_oper, u16 *active_speed,
 				    u8 *active_width, bool ext)
 {
 	return ext ?
@@ -457,6 +457,7 @@ static int mlx5_query_port_roce(struct ib_device *device, u8 port_num,
 	bool put_mdev = true;
 	u16 qkey_viol_cntr;
 	u32 eth_prot_oper;
+	u16 active_speed;
 	u8 mdev_port_num;
 	bool ext;
 	int err;
@@ -490,9 +491,12 @@ static int mlx5_query_port_roce(struct ib_device *device, u8 port_num,
 	props->active_width     = IB_WIDTH_4X;
 	props->active_speed     = IB_SPEED_QDR;
 
-	translate_eth_proto_oper(eth_prot_oper, &props->active_speed,
+	translate_eth_proto_oper(eth_prot_oper, &active_speed,
 				 &props->active_width, ext);
 
+	WARN_ON_ONCE(active_speed & ~0xFF);
+	props->active_speed = (u8)active_speed;
+
 	props->port_cap_flags |= IB_PORT_CM_SUP;
 	props->ip_gids = true;
 
@@ -1183,8 +1187,8 @@ enum mlx5_ib_width {
 	MLX5_IB_WIDTH_12X	= 1 << 4
 };
 
-static void translate_active_width(struct ib_device *ibdev, u8 active_width,
-				  u8 *ib_width)
+static void translate_active_width(struct ib_device *ibdev, u16 active_width,
+				   u8 *ib_width)
 {
 	struct mlx5_ib_dev *dev = to_mdev(ibdev);
 
@@ -1277,7 +1281,7 @@ static int mlx5_query_hca_port(struct ib_device *ibdev, u8 port,
 	u16 max_mtu;
 	u16 oper_mtu;
 	int err;
-	u8 ib_link_width_oper;
+	u16 ib_link_width_oper;
 	u8 vl_hw_cap;
 
 	rep = kzalloc(sizeof(*rep), GFP_KERNEL);
@@ -1310,16 +1314,13 @@ static int mlx5_query_hca_port(struct ib_device *ibdev, u8 port,
 	if (props->port_cap_flags & IB_PORT_CAP_MASK2_SUP)
 		props->port_cap_flags2 = rep->cap_mask2;
 
-	err = mlx5_query_port_link_width_oper(mdev, &ib_link_width_oper, port);
+	err = mlx5_query_ib_port_oper(mdev, &ib_link_width_oper,
+				      (u16 *)&props->active_speed, port);
 	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;
-
 	mlx5_query_port_max_mtu(mdev, &max_mtu, port);
 
 	props->max_mtu = mlx5_mtu_to_ib_mtu(max_mtu);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ethtool.c
index 1eef66ee849e..17f5be801d2f 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ethtool.c
@@ -174,24 +174,6 @@ static inline int mlx5_ptys_rate_enum_to_int(enum mlx5_ptys_rate rate)
 	}
 }
 
-static int mlx5i_get_port_settings(struct net_device *netdev,
-				   u16 *ib_link_width_oper, u16 *ib_proto_oper)
-{
-	struct mlx5e_priv *priv    = mlx5i_epriv(netdev);
-	struct mlx5_core_dev *mdev = priv->mdev;
-	u32 out[MLX5_ST_SZ_DW(ptys_reg)] = {0};
-	int ret;
-
-	ret = mlx5_query_port_ptys(mdev, out, sizeof(out), MLX5_PTYS_IB, 1);
-	if (ret)
-		return ret;
-
-	*ib_link_width_oper = MLX5_GET(ptys_reg, out, ib_link_width_oper);
-	*ib_proto_oper      = MLX5_GET(ptys_reg, out, ib_proto_oper);
-
-	return 0;
-}
-
 static int mlx5i_get_speed_settings(u16 ib_link_width_oper, u16 ib_proto_oper)
 {
 	int rate, width;
@@ -209,11 +191,14 @@ static int mlx5i_get_speed_settings(u16 ib_link_width_oper, u16 ib_proto_oper)
 static int mlx5i_get_link_ksettings(struct net_device *netdev,
 				    struct ethtool_link_ksettings *link_ksettings)
 {
+	struct mlx5e_priv *priv = mlx5i_epriv(netdev);
+	struct mlx5_core_dev *mdev = priv->mdev;
 	u16 ib_link_width_oper;
 	u16 ib_proto_oper;
 	int speed, ret;
 
-	ret = mlx5i_get_port_settings(netdev, &ib_link_width_oper, &ib_proto_oper);
+	ret = mlx5_query_ib_port_oper(mdev, &ib_link_width_oper, &ib_proto_oper,
+				      1);
 	if (ret)
 		return ret;
 
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/port.c b/drivers/net/ethernet/mellanox/mlx5/core/port.c
index e4186e84b3ff..4bb219565c58 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/port.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/port.c
@@ -154,24 +154,8 @@ int mlx5_set_port_beacon(struct mlx5_core_dev *dev, u16 beacon_duration)
 				    sizeof(out), MLX5_REG_MLCR, 0, 1);
 }
 
-int mlx5_query_port_link_width_oper(struct mlx5_core_dev *dev,
-				    u8 *link_width_oper, u8 local_port)
-{
-	u32 out[MLX5_ST_SZ_DW(ptys_reg)];
-	int err;
-
-	err = mlx5_query_port_ptys(dev, out, sizeof(out), MLX5_PTYS_IB, local_port);
-	if (err)
-		return err;
-
-	*link_width_oper = MLX5_GET(ptys_reg, out, ib_link_width_oper);
-
-	return 0;
-}
-EXPORT_SYMBOL_GPL(mlx5_query_port_link_width_oper);
-
-int mlx5_query_port_ib_proto_oper(struct mlx5_core_dev *dev,
-				  u8 *proto_oper, u8 local_port)
+int mlx5_query_ib_port_oper(struct mlx5_core_dev *dev, u16 *link_width_oper,
+			    u16 *proto_oper, u8 local_port)
 {
 	u32 out[MLX5_ST_SZ_DW(ptys_reg)];
 	int err;
@@ -181,11 +165,12 @@ int mlx5_query_port_ib_proto_oper(struct mlx5_core_dev *dev,
 	if (err)
 		return err;
 
+	*link_width_oper = MLX5_GET(ptys_reg, out, ib_link_width_oper);
 	*proto_oper = MLX5_GET(ptys_reg, out, ib_proto_oper);
 
 	return 0;
 }
-EXPORT_SYMBOL(mlx5_query_port_ib_proto_oper);
+EXPORT_SYMBOL(mlx5_query_ib_port_oper);
 
 /* This function should be used after setting a port register only */
 void mlx5_toggle_port_link(struct mlx5_core_dev *dev)
diff --git a/include/linux/mlx5/port.h b/include/linux/mlx5/port.h
index 2d45a6af52a4..4d33ae0c2d97 100644
--- a/include/linux/mlx5/port.h
+++ b/include/linux/mlx5/port.h
@@ -133,10 +133,9 @@ enum mlx5e_connector_type {
 int mlx5_set_port_caps(struct mlx5_core_dev *dev, u8 port_num, u32 caps);
 int mlx5_query_port_ptys(struct mlx5_core_dev *dev, u32 *ptys,
 			 int ptys_size, int proto_mask, u8 local_port);
-int mlx5_query_port_link_width_oper(struct mlx5_core_dev *dev,
-				    u8 *link_width_oper, u8 local_port);
-int mlx5_query_port_ib_proto_oper(struct mlx5_core_dev *dev,
-				  u8 *proto_oper, u8 local_port);
+
+int mlx5_query_ib_port_oper(struct mlx5_core_dev *dev, u16 *link_width_oper,
+			    u16 *proto_oper, u8 local_port);
 void mlx5_toggle_port_link(struct mlx5_core_dev *dev);
 int mlx5_set_port_admin_status(struct mlx5_core_dev *dev,
 			       enum mlx5_port_status status);
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH mlx5-next v1 2/3] RDMA/mlx5: Delete duplicated mlx5_ptys_width enum
  2020-09-02  7:45 [PATCH rdma-next v1 0/3] Fix in-kernel active_speed type Leon Romanovsky
  2020-09-02  7:45 ` [PATCH mlx5-next v1 1/3] net/mlx5: Refactor query port speed functions Leon Romanovsky
@ 2020-09-02  7:45 ` Leon Romanovsky
  2020-09-02  7:45 ` [PATCH rdma-next v1 3/3] RDMA: Fix link active_speed size Leon Romanovsky
  2 siblings, 0 replies; 11+ messages in thread
From: Leon Romanovsky @ 2020-09-02  7:45 UTC (permalink / raw)
  To: Doug Ledford, Jason Gunthorpe
  Cc: Aharon Landau, Jakub Kicinski, linux-rdma, Michael Guralnik,
	netdev, Saeed Mahameed

From: Aharon Landau <aharonl@mellanox.com>

Combine two same enums to avoid duplication.

Signed-off-by: Aharon Landau <aharonl@mellanox.com>
Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
---
 drivers/infiniband/hw/mlx5/main.c             | 20 ++++++-------------
 .../mellanox/mlx5/core/ipoib/ethtool.c        |  8 --------
 include/linux/mlx5/port.h                     |  8 ++++++++
 3 files changed, 14 insertions(+), 22 deletions(-)

diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index ca33ff4b1d5e..545f23d27660 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -1179,32 +1179,24 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,
 	return 0;
 }
 
-enum mlx5_ib_width {
-	MLX5_IB_WIDTH_1X	= 1 << 0,
-	MLX5_IB_WIDTH_2X	= 1 << 1,
-	MLX5_IB_WIDTH_4X	= 1 << 2,
-	MLX5_IB_WIDTH_8X	= 1 << 3,
-	MLX5_IB_WIDTH_12X	= 1 << 4
-};
-
 static void translate_active_width(struct ib_device *ibdev, u16 active_width,
 				   u8 *ib_width)
 {
 	struct mlx5_ib_dev *dev = to_mdev(ibdev);
 
-	if (active_width & MLX5_IB_WIDTH_1X)
+	if (active_width & MLX5_PTYS_WIDTH_1X)
 		*ib_width = IB_WIDTH_1X;
-	else if (active_width & MLX5_IB_WIDTH_2X)
+	else if (active_width & MLX5_PTYS_WIDTH_2X)
 		*ib_width = IB_WIDTH_2X;
-	else if (active_width & MLX5_IB_WIDTH_4X)
+	else if (active_width & MLX5_PTYS_WIDTH_4X)
 		*ib_width = IB_WIDTH_4X;
-	else if (active_width & MLX5_IB_WIDTH_8X)
+	else if (active_width & MLX5_PTYS_WIDTH_8X)
 		*ib_width = IB_WIDTH_8X;
-	else if (active_width & MLX5_IB_WIDTH_12X)
+	else if (active_width & MLX5_PTYS_WIDTH_12X)
 		*ib_width = IB_WIDTH_12X;
 	else {
 		mlx5_ib_dbg(dev, "Invalid active_width %d, setting width to default value: 4x\n",
-			    (int)active_width);
+			    active_width);
 		*ib_width = IB_WIDTH_4X;
 	}
 
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ethtool.c
index 17f5be801d2f..cac8f085b16d 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ethtool.c
@@ -130,14 +130,6 @@ static int mlx5i_flash_device(struct net_device *netdev,
 	return mlx5e_ethtool_flash_device(priv, flash);
 }
 
-enum mlx5_ptys_width {
-	MLX5_PTYS_WIDTH_1X	= 1 << 0,
-	MLX5_PTYS_WIDTH_2X	= 1 << 1,
-	MLX5_PTYS_WIDTH_4X	= 1 << 2,
-	MLX5_PTYS_WIDTH_8X	= 1 << 3,
-	MLX5_PTYS_WIDTH_12X	= 1 << 4,
-};
-
 static inline int mlx5_ptys_width_enum_to_int(enum mlx5_ptys_width width)
 {
 	switch (width) {
diff --git a/include/linux/mlx5/port.h b/include/linux/mlx5/port.h
index 4d33ae0c2d97..23edd2db4803 100644
--- a/include/linux/mlx5/port.h
+++ b/include/linux/mlx5/port.h
@@ -125,6 +125,14 @@ enum mlx5e_connector_type {
 	MLX5E_CONNECTOR_TYPE_NUMBER,
 };
 
+enum mlx5_ptys_width {
+	MLX5_PTYS_WIDTH_1X	= 1 << 0,
+	MLX5_PTYS_WIDTH_2X	= 1 << 1,
+	MLX5_PTYS_WIDTH_4X	= 1 << 2,
+	MLX5_PTYS_WIDTH_8X	= 1 << 3,
+	MLX5_PTYS_WIDTH_12X	= 1 << 4,
+};
+
 #define MLX5E_PROT_MASK(link_mode) (1 << link_mode)
 #define MLX5_GET_ETH_PROTO(reg, out, ext, field)	\
 	(ext ? MLX5_GET(reg, out, ext_##field) :	\
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH rdma-next v1 3/3] RDMA: Fix link active_speed size
  2020-09-02  7:45 [PATCH rdma-next v1 0/3] Fix in-kernel active_speed type Leon Romanovsky
  2020-09-02  7:45 ` [PATCH mlx5-next v1 1/3] net/mlx5: Refactor query port speed functions Leon Romanovsky
  2020-09-02  7:45 ` [PATCH mlx5-next v1 2/3] RDMA/mlx5: Delete duplicated mlx5_ptys_width enum Leon Romanovsky
@ 2020-09-02  7:45 ` Leon Romanovsky
  2020-09-08 14:19   ` Jason Gunthorpe
  2 siblings, 1 reply; 11+ messages in thread
From: Leon Romanovsky @ 2020-09-02  7:45 UTC (permalink / raw)
  To: Doug Ledford, Jason Gunthorpe
  Cc: Aharon Landau, Adit Ranadive, Ariel Elior, Dennis Dalessandro,
	Devesh Sharma, linux-rdma, Michael Guralnik, Michal Kalderon,
	Mike Marciniszyn, Naresh Kumar PBS, Selvin Xavier, Somnath Kotur,
	Sriharsha Basavapatna, VMware PV-Drivers

From: Aharon Landau <aharonl@mellanox.com>

According to the IB spec active_speed size should be u16 and not u8 as
before. Changing it to allow further extensions in offered speeds.

Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
Signed-off-by: Aharon Landau <aharonl@mellanox.com>
Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
---
 drivers/infiniband/core/uverbs_std_types_device.c | 3 ++-
 drivers/infiniband/core/verbs.c                   | 2 +-
 drivers/infiniband/hw/bnxt_re/bnxt_re.h           | 2 +-
 drivers/infiniband/hw/hfi1/verbs.c                | 2 +-
 drivers/infiniband/hw/mlx5/main.c                 | 8 ++------
 drivers/infiniband/hw/ocrdma/ocrdma_verbs.c       | 2 +-
 drivers/infiniband/hw/qedr/verbs.c                | 2 +-
 drivers/infiniband/hw/qib/qib.h                   | 6 +++---
 drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h   | 2 +-
 include/rdma/ib_verbs.h                           | 4 ++--
 10 files changed, 15 insertions(+), 18 deletions(-)

diff --git a/drivers/infiniband/core/uverbs_std_types_device.c b/drivers/infiniband/core/uverbs_std_types_device.c
index 75df2094a010..7b03446b6936 100644
--- a/drivers/infiniband/core/uverbs_std_types_device.c
+++ b/drivers/infiniband/core/uverbs_std_types_device.c
@@ -165,7 +165,8 @@ void copy_port_attr_to_resp(struct ib_port_attr *attr,
 	resp->subnet_timeout = attr->subnet_timeout;
 	resp->init_type_reply = attr->init_type_reply;
 	resp->active_width = attr->active_width;
-	resp->active_speed = attr->active_speed;
+	WARN_ON(attr->active_speed & ~0xFF);
+	resp->active_speed = (u8)attr->active_speed;
 	resp->phys_state = attr->phys_state;
 	resp->link_layer = rdma_port_get_link_layer(ib_dev, port_num);
 }
diff --git a/drivers/infiniband/core/verbs.c b/drivers/infiniband/core/verbs.c
index c0b9bf0563bc..b9990297e4b0 100644
--- a/drivers/infiniband/core/verbs.c
+++ b/drivers/infiniband/core/verbs.c
@@ -1802,7 +1802,7 @@ int ib_modify_qp_with_udata(struct ib_qp *ib_qp, struct ib_qp_attr *attr,
 }
 EXPORT_SYMBOL(ib_modify_qp_with_udata);
 
-int ib_get_eth_speed(struct ib_device *dev, u8 port_num, u8 *speed, u8 *width)
+int ib_get_eth_speed(struct ib_device *dev, u8 port_num, u16 *speed, u8 *width)
 {
 	int rc;
 	u32 netdev_speed;
diff --git a/drivers/infiniband/hw/bnxt_re/bnxt_re.h b/drivers/infiniband/hw/bnxt_re/bnxt_re.h
index a300588634c5..b930ea3dab7a 100644
--- a/drivers/infiniband/hw/bnxt_re/bnxt_re.h
+++ b/drivers/infiniband/hw/bnxt_re/bnxt_re.h
@@ -150,7 +150,7 @@ struct bnxt_re_dev {
 
 	struct delayed_work		worker;
 	u8				cur_prio_map;
-	u8				active_speed;
+	u16				active_speed;
 	u8				active_width;
 
 	/* FP Notification Queue (CQ & SRQ) */
diff --git a/drivers/infiniband/hw/hfi1/verbs.c b/drivers/infiniband/hw/hfi1/verbs.c
index 30865635b449..3591923abebb 100644
--- a/drivers/infiniband/hw/hfi1/verbs.c
+++ b/drivers/infiniband/hw/hfi1/verbs.c
@@ -1424,7 +1424,7 @@ static int query_port(struct rvt_dev_info *rdi, u8 port_num,
 	props->gid_tbl_len = HFI1_GUIDS_PER_PORT;
 	props->active_width = (u8)opa_width_to_ib(ppd->link_width_active);
 	/* see rate_show() in ib core/sysfs.c */
-	props->active_speed = (u8)opa_speed_to_ib(ppd->link_speed_active);
+	props->active_speed = opa_speed_to_ib(ppd->link_speed_active);
 	props->max_vl_num = ppd->vls_supported;
 
 	/* Once we are a "first class" citizen and have added the OPA MTUs to
diff --git a/drivers/infiniband/hw/mlx5/main.c b/drivers/infiniband/hw/mlx5/main.c
index 545f23d27660..790b874fffe2 100644
--- a/drivers/infiniband/hw/mlx5/main.c
+++ b/drivers/infiniband/hw/mlx5/main.c
@@ -457,7 +457,6 @@ static int mlx5_query_port_roce(struct ib_device *device, u8 port_num,
 	bool put_mdev = true;
 	u16 qkey_viol_cntr;
 	u32 eth_prot_oper;
-	u16 active_speed;
 	u8 mdev_port_num;
 	bool ext;
 	int err;
@@ -491,12 +490,9 @@ static int mlx5_query_port_roce(struct ib_device *device, u8 port_num,
 	props->active_width     = IB_WIDTH_4X;
 	props->active_speed     = IB_SPEED_QDR;
 
-	translate_eth_proto_oper(eth_prot_oper, &active_speed,
+	translate_eth_proto_oper(eth_prot_oper, &props->active_speed,
 				 &props->active_width, ext);
 
-	WARN_ON_ONCE(active_speed & ~0xFF);
-	props->active_speed = (u8)active_speed;
-
 	props->port_cap_flags |= IB_PORT_CM_SUP;
 	props->ip_gids = true;
 
@@ -1307,7 +1303,7 @@ static int mlx5_query_hca_port(struct ib_device *ibdev, u8 port,
 		props->port_cap_flags2 = rep->cap_mask2;
 
 	err = mlx5_query_ib_port_oper(mdev, &ib_link_width_oper,
-				      (u16 *)&props->active_speed, port);
+				      &props->active_speed, port);
 	if (err)
 		goto out;
 
diff --git a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
index b24437619412..6ea3ceb1958d 100644
--- a/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
+++ b/drivers/infiniband/hw/ocrdma/ocrdma_verbs.c
@@ -112,7 +112,7 @@ int ocrdma_query_device(struct ib_device *ibdev, struct ib_device_attr *attr,
 }
 
 static inline void get_link_speed_and_width(struct ocrdma_dev *dev,
-					    u8 *ib_speed, u8 *ib_width)
+					    u16 *ib_speed, u8 *ib_width)
 {
 	int status;
 	u8 speed;
diff --git a/drivers/infiniband/hw/qedr/verbs.c b/drivers/infiniband/hw/qedr/verbs.c
index 2f28d4ef3c05..fd0bbee24ce0 100644
--- a/drivers/infiniband/hw/qedr/verbs.c
+++ b/drivers/infiniband/hw/qedr/verbs.c
@@ -163,7 +163,7 @@ int qedr_query_device(struct ib_device *ibdev,
 	return 0;
 }
 
-static inline void get_link_speed_and_width(int speed, u8 *ib_speed,
+static inline void get_link_speed_and_width(int speed, u16 *ib_speed,
 					    u8 *ib_width)
 {
 	switch (speed) {
diff --git a/drivers/infiniband/hw/qib/qib.h b/drivers/infiniband/hw/qib/qib.h
index 432d6d0fd7f4..ee211423058a 100644
--- a/drivers/infiniband/hw/qib/qib.h
+++ b/drivers/infiniband/hw/qib/qib.h
@@ -619,11 +619,11 @@ struct qib_pportdata {
 	/* LID mask control */
 	u8 lmc;
 	u8 link_width_supported;
-	u8 link_speed_supported;
+	u16 link_speed_supported;
 	u8 link_width_enabled;
-	u8 link_speed_enabled;
+	u16 link_speed_enabled;
 	u8 link_width_active;
-	u8 link_speed_active;
+	u16 link_speed_active;
 	u8 vls_supported;
 	u8 vls_operational;
 	/* Rx Polarity inversion (compensate for ~tx on partner) */
diff --git a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h
index 97ed8f952f6e..f0e5ffba2d51 100644
--- a/drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h
+++ b/drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h
@@ -176,7 +176,7 @@ struct pvrdma_port_attr {
 	u8			subnet_timeout;
 	u8			init_type_reply;
 	u8			active_width;
-	u8			active_speed;
+	u16			active_speed;
 	u8			phys_state;
 	u8			reserved[2];
 };
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 73fb9f2455d9..a596f1657c44 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -670,7 +670,7 @@ struct ib_port_attr {
 	u8			subnet_timeout;
 	u8			init_type_reply;
 	u8			active_width;
-	u8			active_speed;
+	u16			active_speed;
 	u8                      phys_state;
 	u16			port_cap_flags2;
 };
@@ -4359,7 +4359,7 @@ void ib_drain_rq(struct ib_qp *qp);
 void ib_drain_sq(struct ib_qp *qp);
 void ib_drain_qp(struct ib_qp *qp);
 
-int ib_get_eth_speed(struct ib_device *dev, u8 port_num, u8 *speed, u8 *width);
+int ib_get_eth_speed(struct ib_device *dev, u8 port_num, u16 *speed, u8 *width);
 
 static inline u8 *rdma_ah_retrieve_dmac(struct rdma_ah_attr *attr)
 {
-- 
2.26.2


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH rdma-next v1 3/3] RDMA: Fix link active_speed size
  2020-09-02  7:45 ` [PATCH rdma-next v1 3/3] RDMA: Fix link active_speed size Leon Romanovsky
@ 2020-09-08 14:19   ` Jason Gunthorpe
  2020-09-08 14:26     ` Leon Romanovsky
  0 siblings, 1 reply; 11+ messages in thread
From: Jason Gunthorpe @ 2020-09-08 14:19 UTC (permalink / raw)
  To: Leon Romanovsky
  Cc: Doug Ledford, Aharon Landau, Adit Ranadive, Ariel Elior,
	Dennis Dalessandro, Devesh Sharma, linux-rdma, Michael Guralnik,
	Michal Kalderon, Mike Marciniszyn, Naresh Kumar PBS,
	Selvin Xavier, Somnath Kotur, Sriharsha Basavapatna,
	VMware PV-Drivers

On Wed, Sep 02, 2020 at 10:45:03AM +0300, Leon Romanovsky wrote:
> From: Aharon Landau <aharonl@mellanox.com>
> 
> According to the IB spec active_speed size should be u16 and not u8 as
> before. Changing it to allow further extensions in offered speeds.
> 
> Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> Signed-off-by: Aharon Landau <aharonl@mellanox.com>
> Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
> Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
>  drivers/infiniband/core/uverbs_std_types_device.c | 3 ++-
>  drivers/infiniband/core/verbs.c                   | 2 +-
>  drivers/infiniband/hw/bnxt_re/bnxt_re.h           | 2 +-
>  drivers/infiniband/hw/hfi1/verbs.c                | 2 +-
>  drivers/infiniband/hw/mlx5/main.c                 | 8 ++------
>  drivers/infiniband/hw/ocrdma/ocrdma_verbs.c       | 2 +-
>  drivers/infiniband/hw/qedr/verbs.c                | 2 +-
>  drivers/infiniband/hw/qib/qib.h                   | 6 +++---
>  drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h   | 2 +-
>  include/rdma/ib_verbs.h                           | 4 ++--
>  10 files changed, 15 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/infiniband/core/uverbs_std_types_device.c b/drivers/infiniband/core/uverbs_std_types_device.c
> index 75df2094a010..7b03446b6936 100644
> +++ b/drivers/infiniband/core/uverbs_std_types_device.c
> @@ -165,7 +165,8 @@ void copy_port_attr_to_resp(struct ib_port_attr *attr,
>  	resp->subnet_timeout = attr->subnet_timeout;
>  	resp->init_type_reply = attr->init_type_reply;
>  	resp->active_width = attr->active_width;
> -	resp->active_speed = attr->active_speed;
> +	WARN_ON(attr->active_speed & ~0xFF);

?? This doesn't seem like a warn on situation..

> @@ -1307,7 +1303,7 @@ static int mlx5_query_hca_port(struct ib_device *ibdev, u8 port,
>  		props->port_cap_flags2 = rep->cap_mask2;
>  
>  	err = mlx5_query_ib_port_oper(mdev, &ib_link_width_oper,
> -				      (u16 *)&props->active_speed, port);
> +				      &props->active_speed, port);

This hunk should be in the earlier patch

Jason

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH rdma-next v1 3/3] RDMA: Fix link active_speed size
  2020-09-08 14:19   ` Jason Gunthorpe
@ 2020-09-08 14:26     ` Leon Romanovsky
  2020-09-08 14:27       ` Jason Gunthorpe
  0 siblings, 1 reply; 11+ messages in thread
From: Leon Romanovsky @ 2020-09-08 14:26 UTC (permalink / raw)
  To: Jason Gunthorpe
  Cc: Doug Ledford, Aharon Landau, Adit Ranadive, Ariel Elior,
	Dennis Dalessandro, Devesh Sharma, linux-rdma, Michael Guralnik,
	Michal Kalderon, Mike Marciniszyn, Naresh Kumar PBS,
	Selvin Xavier, Somnath Kotur, Sriharsha Basavapatna,
	VMware PV-Drivers

On Tue, Sep 08, 2020 at 11:19:24AM -0300, Jason Gunthorpe wrote:
> On Wed, Sep 02, 2020 at 10:45:03AM +0300, Leon Romanovsky wrote:
> > From: Aharon Landau <aharonl@mellanox.com>
> >
> > According to the IB spec active_speed size should be u16 and not u8 as
> > before. Changing it to allow further extensions in offered speeds.
> >
> > Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> > Signed-off-by: Aharon Landau <aharonl@mellanox.com>
> > Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
> > Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
> >  drivers/infiniband/core/uverbs_std_types_device.c | 3 ++-
> >  drivers/infiniband/core/verbs.c                   | 2 +-
> >  drivers/infiniband/hw/bnxt_re/bnxt_re.h           | 2 +-
> >  drivers/infiniband/hw/hfi1/verbs.c                | 2 +-
> >  drivers/infiniband/hw/mlx5/main.c                 | 8 ++------
> >  drivers/infiniband/hw/ocrdma/ocrdma_verbs.c       | 2 +-
> >  drivers/infiniband/hw/qedr/verbs.c                | 2 +-
> >  drivers/infiniband/hw/qib/qib.h                   | 6 +++---
> >  drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h   | 2 +-
> >  include/rdma/ib_verbs.h                           | 4 ++--
> >  10 files changed, 15 insertions(+), 18 deletions(-)
> >
> > diff --git a/drivers/infiniband/core/uverbs_std_types_device.c b/drivers/infiniband/core/uverbs_std_types_device.c
> > index 75df2094a010..7b03446b6936 100644
> > +++ b/drivers/infiniband/core/uverbs_std_types_device.c
> > @@ -165,7 +165,8 @@ void copy_port_attr_to_resp(struct ib_port_attr *attr,
> >  	resp->subnet_timeout = attr->subnet_timeout;
> >  	resp->init_type_reply = attr->init_type_reply;
> >  	resp->active_width = attr->active_width;
> > -	resp->active_speed = attr->active_speed;
> > +	WARN_ON(attr->active_speed & ~0xFF);
>
> ?? This doesn't seem like a warn on situation..

Why? We are returning u8 to the user, so need to catch overflow.

>
> > @@ -1307,7 +1303,7 @@ static int mlx5_query_hca_port(struct ib_device *ibdev, u8 port,
> >  		props->port_cap_flags2 = rep->cap_mask2;
> >
> >  	err = mlx5_query_ib_port_oper(mdev, &ib_link_width_oper,
> > -				      (u16 *)&props->active_speed, port);
> > +				      &props->active_speed, port);
>
> This hunk should be in the earlier patch

Sorry about that.

>
> Jason

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH rdma-next v1 3/3] RDMA: Fix link active_speed size
  2020-09-08 14:26     ` Leon Romanovsky
@ 2020-09-08 14:27       ` Jason Gunthorpe
  2020-09-08 14:42         ` Leon Romanovsky
  0 siblings, 1 reply; 11+ messages in thread
From: Jason Gunthorpe @ 2020-09-08 14:27 UTC (permalink / raw)
  To: Leon Romanovsky
  Cc: Doug Ledford, Aharon Landau, Adit Ranadive, Ariel Elior,
	Dennis Dalessandro, Devesh Sharma, linux-rdma, Michael Guralnik,
	Michal Kalderon, Mike Marciniszyn, Naresh Kumar PBS,
	Selvin Xavier, Somnath Kotur, Sriharsha Basavapatna,
	VMware PV-Drivers

On Tue, Sep 08, 2020 at 05:26:51PM +0300, Leon Romanovsky wrote:
> On Tue, Sep 08, 2020 at 11:19:24AM -0300, Jason Gunthorpe wrote:
> > On Wed, Sep 02, 2020 at 10:45:03AM +0300, Leon Romanovsky wrote:
> > > From: Aharon Landau <aharonl@mellanox.com>
> > >
> > > According to the IB spec active_speed size should be u16 and not u8 as
> > > before. Changing it to allow further extensions in offered speeds.
> > >
> > > Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> > > Signed-off-by: Aharon Landau <aharonl@mellanox.com>
> > > Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
> > > Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
> > >  drivers/infiniband/core/uverbs_std_types_device.c | 3 ++-
> > >  drivers/infiniband/core/verbs.c                   | 2 +-
> > >  drivers/infiniband/hw/bnxt_re/bnxt_re.h           | 2 +-
> > >  drivers/infiniband/hw/hfi1/verbs.c                | 2 +-
> > >  drivers/infiniband/hw/mlx5/main.c                 | 8 ++------
> > >  drivers/infiniband/hw/ocrdma/ocrdma_verbs.c       | 2 +-
> > >  drivers/infiniband/hw/qedr/verbs.c                | 2 +-
> > >  drivers/infiniband/hw/qib/qib.h                   | 6 +++---
> > >  drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h   | 2 +-
> > >  include/rdma/ib_verbs.h                           | 4 ++--
> > >  10 files changed, 15 insertions(+), 18 deletions(-)
> > >
> > > diff --git a/drivers/infiniband/core/uverbs_std_types_device.c b/drivers/infiniband/core/uverbs_std_types_device.c
> > > index 75df2094a010..7b03446b6936 100644
> > > +++ b/drivers/infiniband/core/uverbs_std_types_device.c
> > > @@ -165,7 +165,8 @@ void copy_port_attr_to_resp(struct ib_port_attr *attr,
> > >  	resp->subnet_timeout = attr->subnet_timeout;
> > >  	resp->init_type_reply = attr->init_type_reply;
> > >  	resp->active_width = attr->active_width;
> > > -	resp->active_speed = attr->active_speed;
> > > +	WARN_ON(attr->active_speed & ~0xFF);
> >
> > ?? This doesn't seem like a warn on situation..
> 
> Why? We are returning u8 to the user, so need to catch overflow.

We need to have actual backwards compat here, not just throw a warning
at the syscall boundary

Why can't it just be truncated?

Jason

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH rdma-next v1 3/3] RDMA: Fix link active_speed size
  2020-09-08 14:27       ` Jason Gunthorpe
@ 2020-09-08 14:42         ` Leon Romanovsky
  2020-09-08 14:46           ` Jason Gunthorpe
  0 siblings, 1 reply; 11+ messages in thread
From: Leon Romanovsky @ 2020-09-08 14:42 UTC (permalink / raw)
  To: Jason Gunthorpe
  Cc: Doug Ledford, Aharon Landau, Adit Ranadive, Ariel Elior,
	Dennis Dalessandro, Devesh Sharma, linux-rdma, Michael Guralnik,
	Michal Kalderon, Mike Marciniszyn, Naresh Kumar PBS,
	Selvin Xavier, Somnath Kotur, Sriharsha Basavapatna,
	VMware PV-Drivers

On Tue, Sep 08, 2020 at 11:27:56AM -0300, Jason Gunthorpe wrote:
> On Tue, Sep 08, 2020 at 05:26:51PM +0300, Leon Romanovsky wrote:
> > On Tue, Sep 08, 2020 at 11:19:24AM -0300, Jason Gunthorpe wrote:
> > > On Wed, Sep 02, 2020 at 10:45:03AM +0300, Leon Romanovsky wrote:
> > > > From: Aharon Landau <aharonl@mellanox.com>
> > > >
> > > > According to the IB spec active_speed size should be u16 and not u8 as
> > > > before. Changing it to allow further extensions in offered speeds.
> > > >
> > > > Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> > > > Signed-off-by: Aharon Landau <aharonl@mellanox.com>
> > > > Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
> > > > Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
> > > >  drivers/infiniband/core/uverbs_std_types_device.c | 3 ++-
> > > >  drivers/infiniband/core/verbs.c                   | 2 +-
> > > >  drivers/infiniband/hw/bnxt_re/bnxt_re.h           | 2 +-
> > > >  drivers/infiniband/hw/hfi1/verbs.c                | 2 +-
> > > >  drivers/infiniband/hw/mlx5/main.c                 | 8 ++------
> > > >  drivers/infiniband/hw/ocrdma/ocrdma_verbs.c       | 2 +-
> > > >  drivers/infiniband/hw/qedr/verbs.c                | 2 +-
> > > >  drivers/infiniband/hw/qib/qib.h                   | 6 +++---
> > > >  drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h   | 2 +-
> > > >  include/rdma/ib_verbs.h                           | 4 ++--
> > > >  10 files changed, 15 insertions(+), 18 deletions(-)
> > > >
> > > > diff --git a/drivers/infiniband/core/uverbs_std_types_device.c b/drivers/infiniband/core/uverbs_std_types_device.c
> > > > index 75df2094a010..7b03446b6936 100644
> > > > +++ b/drivers/infiniband/core/uverbs_std_types_device.c
> > > > @@ -165,7 +165,8 @@ void copy_port_attr_to_resp(struct ib_port_attr *attr,
> > > >  	resp->subnet_timeout = attr->subnet_timeout;
> > > >  	resp->init_type_reply = attr->init_type_reply;
> > > >  	resp->active_width = attr->active_width;
> > > > -	resp->active_speed = attr->active_speed;
> > > > +	WARN_ON(attr->active_speed & ~0xFF);
> > >
> > > ?? This doesn't seem like a warn on situation..
> >
> > Why? We are returning u8 to the user, so need to catch overflow.
>
> We need to have actual backwards compat here, not just throw a warning
> at the syscall boundary

We don't have fallback and don't have speed that crosses u8 limit yet.
This WARN_ON() is needed to ensure that we properly extend
ib_port_speed.

>
> Why can't it just be truncated?

The coming IBTA will have extension in that area.

>
> Jason

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH rdma-next v1 3/3] RDMA: Fix link active_speed size
  2020-09-08 14:42         ` Leon Romanovsky
@ 2020-09-08 14:46           ` Jason Gunthorpe
  2020-09-08 15:04             ` Leon Romanovsky
  0 siblings, 1 reply; 11+ messages in thread
From: Jason Gunthorpe @ 2020-09-08 14:46 UTC (permalink / raw)
  To: Leon Romanovsky
  Cc: Doug Ledford, Aharon Landau, Adit Ranadive, Ariel Elior,
	Dennis Dalessandro, Devesh Sharma, linux-rdma, Michael Guralnik,
	Michal Kalderon, Mike Marciniszyn, Naresh Kumar PBS,
	Selvin Xavier, Somnath Kotur, Sriharsha Basavapatna,
	VMware PV-Drivers

On Tue, Sep 08, 2020 at 05:42:05PM +0300, Leon Romanovsky wrote:
> On Tue, Sep 08, 2020 at 11:27:56AM -0300, Jason Gunthorpe wrote:
> > On Tue, Sep 08, 2020 at 05:26:51PM +0300, Leon Romanovsky wrote:
> > > On Tue, Sep 08, 2020 at 11:19:24AM -0300, Jason Gunthorpe wrote:
> > > > On Wed, Sep 02, 2020 at 10:45:03AM +0300, Leon Romanovsky wrote:
> > > > > From: Aharon Landau <aharonl@mellanox.com>
> > > > >
> > > > > According to the IB spec active_speed size should be u16 and not u8 as
> > > > > before. Changing it to allow further extensions in offered speeds.
> > > > >
> > > > > Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> > > > > Signed-off-by: Aharon Landau <aharonl@mellanox.com>
> > > > > Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
> > > > > Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
> > > > >  drivers/infiniband/core/uverbs_std_types_device.c | 3 ++-
> > > > >  drivers/infiniband/core/verbs.c                   | 2 +-
> > > > >  drivers/infiniband/hw/bnxt_re/bnxt_re.h           | 2 +-
> > > > >  drivers/infiniband/hw/hfi1/verbs.c                | 2 +-
> > > > >  drivers/infiniband/hw/mlx5/main.c                 | 8 ++------
> > > > >  drivers/infiniband/hw/ocrdma/ocrdma_verbs.c       | 2 +-
> > > > >  drivers/infiniband/hw/qedr/verbs.c                | 2 +-
> > > > >  drivers/infiniband/hw/qib/qib.h                   | 6 +++---
> > > > >  drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h   | 2 +-
> > > > >  include/rdma/ib_verbs.h                           | 4 ++--
> > > > >  10 files changed, 15 insertions(+), 18 deletions(-)
> > > > >
> > > > > diff --git a/drivers/infiniband/core/uverbs_std_types_device.c b/drivers/infiniband/core/uverbs_std_types_device.c
> > > > > index 75df2094a010..7b03446b6936 100644
> > > > > +++ b/drivers/infiniband/core/uverbs_std_types_device.c
> > > > > @@ -165,7 +165,8 @@ void copy_port_attr_to_resp(struct ib_port_attr *attr,
> > > > >  	resp->subnet_timeout = attr->subnet_timeout;
> > > > >  	resp->init_type_reply = attr->init_type_reply;
> > > > >  	resp->active_width = attr->active_width;
> > > > > -	resp->active_speed = attr->active_speed;
> > > > > +	WARN_ON(attr->active_speed & ~0xFF);
> > > >
> > > > ?? This doesn't seem like a warn on situation..
> > >
> > > Why? We are returning u8 to the user, so need to catch overflow.
> >
> > We need to have actual backwards compat here, not just throw a warning
> > at the syscall boundary
> 
> We don't have fallback and don't have speed that crosses u8 limit yet.
> This WARN_ON() is needed to ensure that we properly extend
> ib_port_speed.

Until we have some compat story I don't want to just increase this
value, it clearly renders the device unusable, so why do it?

Jason

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH rdma-next v1 3/3] RDMA: Fix link active_speed size
  2020-09-08 14:46           ` Jason Gunthorpe
@ 2020-09-08 15:04             ` Leon Romanovsky
  2020-09-08 17:21               ` Jason Gunthorpe
  0 siblings, 1 reply; 11+ messages in thread
From: Leon Romanovsky @ 2020-09-08 15:04 UTC (permalink / raw)
  To: Jason Gunthorpe
  Cc: Doug Ledford, Aharon Landau, Adit Ranadive, Ariel Elior,
	Dennis Dalessandro, Devesh Sharma, linux-rdma, Michael Guralnik,
	Michal Kalderon, Mike Marciniszyn, Naresh Kumar PBS,
	Selvin Xavier, Somnath Kotur, Sriharsha Basavapatna,
	VMware PV-Drivers

On Tue, Sep 08, 2020 at 11:46:46AM -0300, Jason Gunthorpe wrote:
> On Tue, Sep 08, 2020 at 05:42:05PM +0300, Leon Romanovsky wrote:
> > On Tue, Sep 08, 2020 at 11:27:56AM -0300, Jason Gunthorpe wrote:
> > > On Tue, Sep 08, 2020 at 05:26:51PM +0300, Leon Romanovsky wrote:
> > > > On Tue, Sep 08, 2020 at 11:19:24AM -0300, Jason Gunthorpe wrote:
> > > > > On Wed, Sep 02, 2020 at 10:45:03AM +0300, Leon Romanovsky wrote:
> > > > > > From: Aharon Landau <aharonl@mellanox.com>
> > > > > >
> > > > > > According to the IB spec active_speed size should be u16 and not u8 as
> > > > > > before. Changing it to allow further extensions in offered speeds.
> > > > > >
> > > > > > Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> > > > > > Signed-off-by: Aharon Landau <aharonl@mellanox.com>
> > > > > > Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
> > > > > > Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
> > > > > >  drivers/infiniband/core/uverbs_std_types_device.c | 3 ++-
> > > > > >  drivers/infiniband/core/verbs.c                   | 2 +-
> > > > > >  drivers/infiniband/hw/bnxt_re/bnxt_re.h           | 2 +-
> > > > > >  drivers/infiniband/hw/hfi1/verbs.c                | 2 +-
> > > > > >  drivers/infiniband/hw/mlx5/main.c                 | 8 ++------
> > > > > >  drivers/infiniband/hw/ocrdma/ocrdma_verbs.c       | 2 +-
> > > > > >  drivers/infiniband/hw/qedr/verbs.c                | 2 +-
> > > > > >  drivers/infiniband/hw/qib/qib.h                   | 6 +++---
> > > > > >  drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h   | 2 +-
> > > > > >  include/rdma/ib_verbs.h                           | 4 ++--
> > > > > >  10 files changed, 15 insertions(+), 18 deletions(-)
> > > > > >
> > > > > > diff --git a/drivers/infiniband/core/uverbs_std_types_device.c b/drivers/infiniband/core/uverbs_std_types_device.c
> > > > > > index 75df2094a010..7b03446b6936 100644
> > > > > > +++ b/drivers/infiniband/core/uverbs_std_types_device.c
> > > > > > @@ -165,7 +165,8 @@ void copy_port_attr_to_resp(struct ib_port_attr *attr,
> > > > > >  	resp->subnet_timeout = attr->subnet_timeout;
> > > > > >  	resp->init_type_reply = attr->init_type_reply;
> > > > > >  	resp->active_width = attr->active_width;
> > > > > > -	resp->active_speed = attr->active_speed;
> > > > > > +	WARN_ON(attr->active_speed & ~0xFF);
> > > > >
> > > > > ?? This doesn't seem like a warn on situation..
> > > >
> > > > Why? We are returning u8 to the user, so need to catch overflow.
> > >
> > > We need to have actual backwards compat here, not just throw a warning
> > > at the syscall boundary
> >
> > We don't have fallback and don't have speed that crosses u8 limit yet.
> > This WARN_ON() is needed to ensure that we properly extend
> > ib_port_speed.
>
> Until we have some compat story I don't want to just increase this
> value, it clearly renders the device unusable, so why do it?

Because IBTA port speed extension was already approved, it is just
not published yet.

I need to prepare code as much as possible.

Thanks

>
> Jason

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH rdma-next v1 3/3] RDMA: Fix link active_speed size
  2020-09-08 15:04             ` Leon Romanovsky
@ 2020-09-08 17:21               ` Jason Gunthorpe
  0 siblings, 0 replies; 11+ messages in thread
From: Jason Gunthorpe @ 2020-09-08 17:21 UTC (permalink / raw)
  To: Leon Romanovsky
  Cc: Doug Ledford, Aharon Landau, Adit Ranadive, Ariel Elior,
	Dennis Dalessandro, Devesh Sharma, linux-rdma, Michael Guralnik,
	Michal Kalderon, Mike Marciniszyn, Naresh Kumar PBS,
	Selvin Xavier, Somnath Kotur, Sriharsha Basavapatna,
	VMware PV-Drivers

On Tue, Sep 08, 2020 at 06:04:27PM +0300, Leon Romanovsky wrote:
> On Tue, Sep 08, 2020 at 11:46:46AM -0300, Jason Gunthorpe wrote:
> > On Tue, Sep 08, 2020 at 05:42:05PM +0300, Leon Romanovsky wrote:
> > > On Tue, Sep 08, 2020 at 11:27:56AM -0300, Jason Gunthorpe wrote:
> > > > On Tue, Sep 08, 2020 at 05:26:51PM +0300, Leon Romanovsky wrote:
> > > > > On Tue, Sep 08, 2020 at 11:19:24AM -0300, Jason Gunthorpe wrote:
> > > > > > On Wed, Sep 02, 2020 at 10:45:03AM +0300, Leon Romanovsky wrote:
> > > > > > > From: Aharon Landau <aharonl@mellanox.com>
> > > > > > >
> > > > > > > According to the IB spec active_speed size should be u16 and not u8 as
> > > > > > > before. Changing it to allow further extensions in offered speeds.
> > > > > > >
> > > > > > > Fixes: 1da177e4c3f4 ("Linux-2.6.12-rc2")
> > > > > > > Signed-off-by: Aharon Landau <aharonl@mellanox.com>
> > > > > > > Reviewed-by: Michael Guralnik <michaelgur@nvidia.com>
> > > > > > > Signed-off-by: Leon Romanovsky <leonro@nvidia.com>
> > > > > > >  drivers/infiniband/core/uverbs_std_types_device.c | 3 ++-
> > > > > > >  drivers/infiniband/core/verbs.c                   | 2 +-
> > > > > > >  drivers/infiniband/hw/bnxt_re/bnxt_re.h           | 2 +-
> > > > > > >  drivers/infiniband/hw/hfi1/verbs.c                | 2 +-
> > > > > > >  drivers/infiniband/hw/mlx5/main.c                 | 8 ++------
> > > > > > >  drivers/infiniband/hw/ocrdma/ocrdma_verbs.c       | 2 +-
> > > > > > >  drivers/infiniband/hw/qedr/verbs.c                | 2 +-
> > > > > > >  drivers/infiniband/hw/qib/qib.h                   | 6 +++---
> > > > > > >  drivers/infiniband/hw/vmw_pvrdma/pvrdma_verbs.h   | 2 +-
> > > > > > >  include/rdma/ib_verbs.h                           | 4 ++--
> > > > > > >  10 files changed, 15 insertions(+), 18 deletions(-)
> > > > > > >
> > > > > > > diff --git a/drivers/infiniband/core/uverbs_std_types_device.c b/drivers/infiniband/core/uverbs_std_types_device.c
> > > > > > > index 75df2094a010..7b03446b6936 100644
> > > > > > > +++ b/drivers/infiniband/core/uverbs_std_types_device.c
> > > > > > > @@ -165,7 +165,8 @@ void copy_port_attr_to_resp(struct ib_port_attr *attr,
> > > > > > >  	resp->subnet_timeout = attr->subnet_timeout;
> > > > > > >  	resp->init_type_reply = attr->init_type_reply;
> > > > > > >  	resp->active_width = attr->active_width;
> > > > > > > -	resp->active_speed = attr->active_speed;
> > > > > > > +	WARN_ON(attr->active_speed & ~0xFF);
> > > > > >
> > > > > > ?? This doesn't seem like a warn on situation..
> > > > >
> > > > > Why? We are returning u8 to the user, so need to catch overflow.
> > > >
> > > > We need to have actual backwards compat here, not just throw a warning
> > > > at the syscall boundary
> > >
> > > We don't have fallback and don't have speed that crosses u8 limit yet.
> > > This WARN_ON() is needed to ensure that we properly extend
> > > ib_port_speed.
> >
> > Until we have some compat story I don't want to just increase this
> > value, it clearly renders the device unusable, so why do it?
> 
> Because IBTA port speed extension was already approved, it is just
> not published yet.

So there should be a compat story. It can't just WARN_ON here.

The u8 active_speed should saturate at the highest speed we can
represent in the u8, and this will have to be updated somehow to pass
the u16 version.

Jason

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2020-09-08 20:13 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-02  7:45 [PATCH rdma-next v1 0/3] Fix in-kernel active_speed type Leon Romanovsky
2020-09-02  7:45 ` [PATCH mlx5-next v1 1/3] net/mlx5: Refactor query port speed functions Leon Romanovsky
2020-09-02  7:45 ` [PATCH mlx5-next v1 2/3] RDMA/mlx5: Delete duplicated mlx5_ptys_width enum Leon Romanovsky
2020-09-02  7:45 ` [PATCH rdma-next v1 3/3] RDMA: Fix link active_speed size Leon Romanovsky
2020-09-08 14:19   ` Jason Gunthorpe
2020-09-08 14:26     ` Leon Romanovsky
2020-09-08 14:27       ` Jason Gunthorpe
2020-09-08 14:42         ` Leon Romanovsky
2020-09-08 14:46           ` Jason Gunthorpe
2020-09-08 15:04             ` Leon Romanovsky
2020-09-08 17:21               ` Jason Gunthorpe

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).