aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/infiniband/hw
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/infiniband/hw')
-rw-r--r--drivers/infiniband/hw/mlx5/cq.c26
1 files changed, 25 insertions, 1 deletions
diff --git a/drivers/infiniband/hw/mlx5/cq.c b/drivers/infiniband/hw/mlx5/cq.c
index b72627429745..b4c122eab484 100644
--- a/drivers/infiniband/hw/mlx5/cq.c
+++ b/drivers/infiniband/hw/mlx5/cq.c
@@ -818,7 +818,31 @@ void mlx5_ib_cq_clean(struct mlx5_ib_cq *cq, u32 qpn, struct mlx5_ib_srq *srq)
818 818
819int mlx5_ib_modify_cq(struct ib_cq *cq, u16 cq_count, u16 cq_period) 819int mlx5_ib_modify_cq(struct ib_cq *cq, u16 cq_count, u16 cq_period)
820{ 820{
821 return -ENOSYS; 821 struct mlx5_modify_cq_mbox_in *in;
822 struct mlx5_ib_dev *dev = to_mdev(cq->device);
823 struct mlx5_ib_cq *mcq = to_mcq(cq);
824 int err;
825 u32 fsel;
826
827 if (!(dev->mdev.caps.flags & MLX5_DEV_CAP_FLAG_CQ_MODER))
828 return -ENOSYS;
829
830 in = kzalloc(sizeof(*in), GFP_KERNEL);
831 if (!in)
832 return -ENOMEM;
833
834 in->cqn = cpu_to_be32(mcq->mcq.cqn);
835 fsel = (MLX5_CQ_MODIFY_PERIOD | MLX5_CQ_MODIFY_COUNT);
836 in->ctx.cq_period = cpu_to_be16(cq_period);
837 in->ctx.cq_max_count = cpu_to_be16(cq_count);
838 in->field_select = cpu_to_be32(fsel);
839 err = mlx5_core_modify_cq(&dev->mdev, &mcq->mcq, in);
840 kfree(in);
841
842 if (err)
843 mlx5_ib_warn(dev, "modify cq 0x%x failed\n", mcq->mcq.cqn);
844
845 return err;
822} 846}
823 847
824int mlx5_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata) 848int mlx5_ib_resize_cq(struct ib_cq *ibcq, int entries, struct ib_udata *udata)