]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
IB/mlx5: Report correctly tag matching rendezvous capability
authorDanit Goldberg <danitg@mellanox.com>
Fri, 5 Jul 2019 16:21:57 +0000 (19:21 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Mon, 8 Jul 2019 17:26:37 +0000 (14:26 -0300)
Userspace expects the IB_TM_CAP_RC bit to indicate that the device
supports RC transport tag matching with rendezvous offload. However the
firmware splits this into two capabilities for eager and rendezvous tag
matching.

Only if the FW supports both modes should userspace be told the tag
matching capability is available.

Cc: <stable@vger.kernel.org> # 4.13
Fixes: eb761894351d ("IB/mlx5: Fill XRQ capabilities")
Signed-off-by: Danit Goldberg <danitg@mellanox.com>
Reviewed-by: Yishai Hadas <yishaih@mellanox.com>
Reviewed-by: Artemy Kovalyov <artemyko@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/mlx5/main.c
include/rdma/ib_verbs.h

index 7581571bd9cd15d75948134f121175a2c5f7468a..56d4b1e9dd2366cc2c1718e316f26dba8ce8571a 100644 (file)
@@ -1046,15 +1046,19 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,
        }
 
        if (MLX5_CAP_GEN(mdev, tag_matching)) {
-               props->tm_caps.max_rndv_hdr_size = MLX5_TM_MAX_RNDV_MSG_SIZE;
                props->tm_caps.max_num_tags =
                        (1 << MLX5_CAP_GEN(mdev, log_tag_matching_list_sz)) - 1;
-               props->tm_caps.flags = IB_TM_CAP_RC;
                props->tm_caps.max_ops =
                        1 << MLX5_CAP_GEN(mdev, log_max_qp_sz);
                props->tm_caps.max_sge = MLX5_TM_MAX_SGE;
        }
 
+       if (MLX5_CAP_GEN(mdev, tag_matching) &&
+           MLX5_CAP_GEN(mdev, rndv_offload_rc)) {
+               props->tm_caps.flags = IB_TM_CAP_RNDV_RC;
+               props->tm_caps.max_rndv_hdr_size = MLX5_TM_MAX_RNDV_MSG_SIZE;
+       }
+
        if (MLX5_CAP_GEN(dev->mdev, cq_moderation)) {
                props->cq_caps.max_cq_moderation_count =
                                                MLX5_MAX_CQ_COUNT;
index 50806bef9f2066cc2091e9abdd72dbd877a1abef..4053be51b7fa33a79158646d309283eabb614a5b 100644 (file)
@@ -307,8 +307,8 @@ struct ib_rss_caps {
 };
 
 enum ib_tm_cap_flags {
-       /*  Support tag matching on RC transport */
-       IB_TM_CAP_RC                = 1 << 0,
+       /*  Support tag matching with rendezvous offload for RC transport */
+       IB_TM_CAP_RNDV_RC = 1 << 0,
 };
 
 struct ib_tm_caps {