* [PATCH rdma-next v2 0/3] Fix in-kernel active_speed type
@ 2020-09-17 9:02 Leon Romanovsky
2020-09-17 9:02 ` [PATCH mlx5-next v2 1/3] net/mlx5: Refactor query port speed functions Leon Romanovsky
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Leon Romanovsky @ 2020-09-17 9:02 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:
v2:
* Changed WARN_ON casting to be saturated value instead while returning active_speed
to the user.
v1: https://lore.kernel.org/linux-rdma/20200902074503.743310-1-leon@kernel.org
* 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] 8+ messages in thread
* [PATCH mlx5-next v2 1/3] net/mlx5: Refactor query port speed functions
2020-09-17 9:02 [PATCH rdma-next v2 0/3] Fix in-kernel active_speed type Leon Romanovsky
@ 2020-09-17 9:02 ` Leon Romanovsky
2020-09-17 9:02 ` [PATCH mlx5-next v2 2/3] RDMA/mlx5: Delete duplicated mlx5_ptys_width enum Leon Romanovsky
` (2 subsequent siblings)
3 siblings, 0 replies; 8+ messages in thread
From: Leon Romanovsky @ 2020-09-17 9:02 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] 8+ messages in thread
* [PATCH mlx5-next v2 2/3] RDMA/mlx5: Delete duplicated mlx5_ptys_width enum
2020-09-17 9:02 [PATCH rdma-next v2 0/3] Fix in-kernel active_speed type Leon Romanovsky
2020-09-17 9:02 ` [PATCH mlx5-next v2 1/3] net/mlx5: Refactor query port speed functions Leon Romanovsky
@ 2020-09-17 9:02 ` Leon Romanovsky
2020-09-17 9:02 ` [PATCH rdma-next v2 3/3] RDMA: Fix link active_speed size Leon Romanovsky
2020-09-17 11:41 ` [PATCH rdma-next v2 0/3] Fix in-kernel active_speed type Jason Gunthorpe
3 siblings, 0 replies; 8+ messages in thread
From: Leon Romanovsky @ 2020-09-17 9:02 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] 8+ messages in thread
* [PATCH rdma-next v2 3/3] RDMA: Fix link active_speed size
2020-09-17 9:02 [PATCH rdma-next v2 0/3] Fix in-kernel active_speed type Leon Romanovsky
2020-09-17 9:02 ` [PATCH mlx5-next v2 1/3] net/mlx5: Refactor query port speed functions Leon Romanovsky
2020-09-17 9:02 ` [PATCH mlx5-next v2 2/3] RDMA/mlx5: Delete duplicated mlx5_ptys_width enum Leon Romanovsky
@ 2020-09-17 9:02 ` Leon Romanovsky
2020-09-17 11:41 ` [PATCH rdma-next v2 0/3] Fix in-kernel active_speed type Jason Gunthorpe
3 siblings, 0 replies; 8+ messages in thread
From: Leon Romanovsky @ 2020-09-17 9:02 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..9f43c0161a8e 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;
+ /* This ABI needs to be extended to provide any speed more than IB_SPEED_NDR */
+ resp->active_speed = min_t(u16, attr->active_speed, IB_SPEED_NDR);
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 b3b1805c2e84..c60bb308bf44 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 6f9c763d5b79..7350fe16f164 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 1b241fee4605..ba8626847cf6 100644
--- a/drivers/infiniband/hw/qedr/verbs.c
+++ b/drivers/infiniband/hw/qedr/verbs.c
@@ -165,7 +165,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 0cd2dba331ee..3f8a743e99a7 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;
};
@@ -4332,7 +4332,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] 8+ messages in thread
* Re: [PATCH rdma-next v2 0/3] Fix in-kernel active_speed type
2020-09-17 9:02 [PATCH rdma-next v2 0/3] Fix in-kernel active_speed type Leon Romanovsky
` (2 preceding siblings ...)
2020-09-17 9:02 ` [PATCH rdma-next v2 3/3] RDMA: Fix link active_speed size Leon Romanovsky
@ 2020-09-17 11:41 ` Jason Gunthorpe
2020-09-17 16:35 ` Leon Romanovsky
3 siblings, 1 reply; 8+ messages in thread
From: Jason Gunthorpe @ 2020-09-17 11:41 UTC (permalink / raw)
To: Leon Romanovsky
Cc: Doug Ledford, 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
On Thu, Sep 17, 2020 at 12:02:20PM +0300, Leon Romanovsky wrote:
> From: Leon Romanovsky <leonro@nvidia.com>
>
> Changelog:
> v2:
> * Changed WARN_ON casting to be saturated value instead while returning active_speed
> to the user.
> v1: https://lore.kernel.org/linux-rdma/20200902074503.743310-1-leon@kernel.org
> * 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
Look OK, can you update the shared branch?
Thanks,
Jason
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH rdma-next v2 0/3] Fix in-kernel active_speed type
2020-09-17 11:41 ` [PATCH rdma-next v2 0/3] Fix in-kernel active_speed type Jason Gunthorpe
@ 2020-09-17 16:35 ` Leon Romanovsky
2020-09-17 23:04 ` Jason Gunthorpe
0 siblings, 1 reply; 8+ messages in thread
From: Leon Romanovsky @ 2020-09-17 16:35 UTC (permalink / raw)
To: Jason Gunthorpe
Cc: Doug Ledford, 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
On Thu, Sep 17, 2020 at 08:41:54AM -0300, Jason Gunthorpe wrote:
> On Thu, Sep 17, 2020 at 12:02:20PM +0300, Leon Romanovsky wrote:
> > From: Leon Romanovsky <leonro@nvidia.com>
> >
> > Changelog:
> > v2:
> > * Changed WARN_ON casting to be saturated value instead while returning active_speed
> > to the user.
> > v1: https://lore.kernel.org/linux-rdma/20200902074503.743310-1-leon@kernel.org
> > * 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
>
> Look OK, can you update the shared branch?
I pushed first two patches to mlx5-next branch:
e27014bdb47e RDMA/mlx5: Delete duplicated mlx5_ptys_width enum
639bf4415cad net/mlx5: Refactor query port speed functions
Thanks
>
> Thanks,
> Jason
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH rdma-next v2 0/3] Fix in-kernel active_speed type
2020-09-17 16:35 ` Leon Romanovsky
@ 2020-09-17 23:04 ` Jason Gunthorpe
2020-09-18 13:33 ` Jason Gunthorpe
0 siblings, 1 reply; 8+ messages in thread
From: Jason Gunthorpe @ 2020-09-17 23:04 UTC (permalink / raw)
To: Leon Romanovsky
Cc: Doug Ledford, 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
On Thu, Sep 17, 2020 at 07:35:20PM +0300, Leon Romanovsky wrote:
> On Thu, Sep 17, 2020 at 08:41:54AM -0300, Jason Gunthorpe wrote:
> > On Thu, Sep 17, 2020 at 12:02:20PM +0300, Leon Romanovsky wrote:
> > > From: Leon Romanovsky <leonro@nvidia.com>
> > >
> > > Changelog:
> > > v2:
> > > * Changed WARN_ON casting to be saturated value instead while returning active_speed
> > > to the user.
> > > v1: https://lore.kernel.org/linux-rdma/20200902074503.743310-1-leon@kernel.org
> > > * 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
> >
> > Look OK, can you update the shared branch?
>
> I pushed first two patches to mlx5-next branch:
>
> e27014bdb47e RDMA/mlx5: Delete duplicated mlx5_ptys_width enum
> 639bf4415cad net/mlx5: Refactor query port speed functions
Applied to for-next, thanks
Jason
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH rdma-next v2 0/3] Fix in-kernel active_speed type
2020-09-17 23:04 ` Jason Gunthorpe
@ 2020-09-18 13:33 ` Jason Gunthorpe
0 siblings, 0 replies; 8+ messages in thread
From: Jason Gunthorpe @ 2020-09-18 13:33 UTC (permalink / raw)
To: Leon Romanovsky
Cc: Doug Ledford, 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
On Thu, Sep 17, 2020 at 08:04:42PM -0300, Jason Gunthorpe wrote:
> On Thu, Sep 17, 2020 at 07:35:20PM +0300, Leon Romanovsky wrote:
> > On Thu, Sep 17, 2020 at 08:41:54AM -0300, Jason Gunthorpe wrote:
> > > On Thu, Sep 17, 2020 at 12:02:20PM +0300, Leon Romanovsky wrote:
> > > > From: Leon Romanovsky <leonro@nvidia.com>
> > > >
> > > > Changelog:
> > > > v2:
> > > > * Changed WARN_ON casting to be saturated value instead while returning active_speed
> > > > to the user.
> > > > v1: https://lore.kernel.org/linux-rdma/20200902074503.743310-1-leon@kernel.org
> > > > * 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
> > >
> > > Look OK, can you update the shared branch?
> >
> > I pushed first two patches to mlx5-next branch:
> >
> > e27014bdb47e RDMA/mlx5: Delete duplicated mlx5_ptys_width enum
> > 639bf4415cad net/mlx5: Refactor query port speed functions
>
> Applied to for-next, thanks
Actually it needed a little help with this:
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index caa9c5966e44bd..a7e203bcb012db 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -535,7 +535,8 @@ enum ib_port_speed {
IB_SPEED_FDR10 = 8,
IB_SPEED_FDR = 16,
IB_SPEED_EDR = 32,
- IB_SPEED_HDR = 64
+ IB_SPEED_HDR = 64,
+ IB_SPEED_NDR = 128,
};
/**
I fixed it
Jason
^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2020-09-18 13:34 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2020-09-17 9:02 [PATCH rdma-next v2 0/3] Fix in-kernel active_speed type Leon Romanovsky
2020-09-17 9:02 ` [PATCH mlx5-next v2 1/3] net/mlx5: Refactor query port speed functions Leon Romanovsky
2020-09-17 9:02 ` [PATCH mlx5-next v2 2/3] RDMA/mlx5: Delete duplicated mlx5_ptys_width enum Leon Romanovsky
2020-09-17 9:02 ` [PATCH rdma-next v2 3/3] RDMA: Fix link active_speed size Leon Romanovsky
2020-09-17 11:41 ` [PATCH rdma-next v2 0/3] Fix in-kernel active_speed type Jason Gunthorpe
2020-09-17 16:35 ` Leon Romanovsky
2020-09-17 23:04 ` Jason Gunthorpe
2020-09-18 13:33 ` 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).