IB/mlx5: Mask out unsupported ODP capabilities for kernel QPs
authorMoni Shoua <monis@mellanox.com>
Wed, 15 Jan 2020 12:43:36 +0000 (14:43 +0200)
committerLeon Romanovsky <leonro@mellanox.com>
Thu, 16 Jan 2020 14:15:00 +0000 (16:15 +0200)
The ODP handler for WQEs in RQ or SRQ is not implented for kernel QPs.
Therefore don't report support in these if query comes from a kernel user.

Signed-off-by: Moni Shoua <monis@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
drivers/infiniband/hw/mlx5/main.c

index 760630c..994d59c 100644 (file)
@@ -1015,6 +1015,23 @@ static int mlx5_ib_query_device(struct ib_device *ibdev,
                if (dev->odp_caps.general_caps & IB_ODP_SUPPORT)
                        props->device_cap_flags |= IB_DEVICE_ON_DEMAND_PAGING;
                props->odp_caps = dev->odp_caps;
+               if (!uhw) {
+                       /* ODP for kernel QPs is not implemented for receive
+                        * WQEs and SRQ WQEs
+                        */
+                       props->odp_caps.per_transport_caps.rc_odp_caps &=
+                               ~(IB_ODP_SUPPORT_READ |
+                                 IB_ODP_SUPPORT_SRQ_RECV);
+                       props->odp_caps.per_transport_caps.uc_odp_caps &=
+                               ~(IB_ODP_SUPPORT_READ |
+                                 IB_ODP_SUPPORT_SRQ_RECV);
+                       props->odp_caps.per_transport_caps.ud_odp_caps &=
+                               ~(IB_ODP_SUPPORT_READ |
+                                 IB_ODP_SUPPORT_SRQ_RECV);
+                       props->odp_caps.per_transport_caps.xrc_odp_caps &=
+                               ~(IB_ODP_SUPPORT_READ |
+                                 IB_ODP_SUPPORT_SRQ_RECV);
+               }
        }
 
        if (MLX5_CAP_GEN(mdev, cd))