OSDN Git Service

IB/mlx5: Add XRC initiator ODP support
authorMoni Shoua <monis@mellanox.com>
Tue, 22 Jan 2019 06:48:45 +0000 (08:48 +0200)
committerJason Gunthorpe <jgg@mellanox.com>
Mon, 4 Feb 2019 21:34:07 +0000 (14:34 -0700)
Skip XRC segment in the beginning of a send WQE and fetch ODP XRC
capabilities when QP type is IB_QPT_XRC_INI. The rest of the handling is
the same as in RC QP.

Signed-off-by: Moni Shoua <monis@mellanox.com>
Reviewed-by: Majd Dibbiny <majd@mellanox.com>
Signed-off-by: Leon Romanovsky <leonro@mellanox.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/hw/mlx5/odp.c

index 649aaca..c3bd911 100644 (file)
@@ -1020,6 +1020,10 @@ static int mlx5_ib_mr_initiator_pfault_handler(
                 MLX5_WQE_CTRL_OPCODE_MASK;
 
        switch (qp->ibqp.qp_type) {
+       case IB_QPT_XRC_INI:
+               *wqe += sizeof(struct mlx5_wqe_xrc_seg);
+               transport_caps = dev->odp_caps.per_transport_caps.xrc_odp_caps;
+               break;
        case IB_QPT_RC:
                transport_caps = dev->odp_caps.per_transport_caps.rc_odp_caps;
                break;
@@ -1039,7 +1043,7 @@ static int mlx5_ib_mr_initiator_pfault_handler(
                return -EFAULT;
        }
 
-       if (qp->ibqp.qp_type != IB_QPT_RC) {
+       if (qp->ibqp.qp_type == IB_QPT_UD) {
                av = *wqe;
                if (av->dqp_dct & cpu_to_be32(MLX5_EXTENDED_UD_AV))
                        *wqe += sizeof(struct mlx5_av);