From: Michael Guralnik <[email protected]>

Cache current ODP capabilities for DC in mlx5_ib device.

Signed-off-by: Michael Guralnik <[email protected]>
Reviewed-by: Moni Shoua <[email protected]>
Signed-off-by: Leon Romanovsky <[email protected]>
---
 drivers/infiniband/hw/mlx5/mlx5_ib.h |  1 +
 drivers/infiniband/hw/mlx5/odp.c     | 18 ++++++++++++++++++
 2 files changed, 19 insertions(+)

diff --git a/drivers/infiniband/hw/mlx5/mlx5_ib.h 
b/drivers/infiniband/hw/mlx5/mlx5_ib.h
index cb41a7e6255a..f99c71b3c876 100644
--- a/drivers/infiniband/hw/mlx5/mlx5_ib.h
+++ b/drivers/infiniband/hw/mlx5/mlx5_ib.h
@@ -967,6 +967,7 @@ struct mlx5_ib_dev {
        struct mutex                    slow_path_mutex;
        int                             fill_delay;
        struct ib_odp_caps      odp_caps;
+       uint32_t                dc_odp_caps;
        u64                     odp_max_size;
        struct mlx5_ib_pf_eq    odp_pf_eq;
 
diff --git a/drivers/infiniband/hw/mlx5/odp.c b/drivers/infiniband/hw/mlx5/odp.c
index b0c5de39d186..5e87a5e25574 100644
--- a/drivers/infiniband/hw/mlx5/odp.c
+++ b/drivers/infiniband/hw/mlx5/odp.c
@@ -353,6 +353,24 @@ void mlx5_ib_internal_fill_odp_caps(struct mlx5_ib_dev 
*dev)
        if (MLX5_CAP_ODP(dev->mdev, xrc_odp_caps.srq_receive))
                caps->per_transport_caps.xrc_odp_caps |= 
IB_ODP_SUPPORT_SRQ_RECV;
 
+       if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.send))
+               dev->dc_odp_caps |= IB_ODP_SUPPORT_SEND;
+
+       if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.receive))
+               dev->dc_odp_caps |= IB_ODP_SUPPORT_RECV;
+
+       if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.write))
+               dev->dc_odp_caps |= IB_ODP_SUPPORT_WRITE;
+
+       if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.read))
+               dev->dc_odp_caps |= IB_ODP_SUPPORT_READ;
+
+       if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.atomic))
+               dev->dc_odp_caps |= IB_ODP_SUPPORT_ATOMIC;
+
+       if (MLX5_CAP_ODP(dev->mdev, dc_odp_caps.srq_receive))
+               dev->dc_odp_caps |= IB_ODP_SUPPORT_SRQ_RECV;
+
        if (MLX5_CAP_GEN(dev->mdev, fixed_buffer_size) &&
            MLX5_CAP_GEN(dev->mdev, null_mkey) &&
            MLX5_CAP_GEN(dev->mdev, umr_extended_translation_offset))
-- 
2.20.1

Reply via email to