svn commit: r347722 - in stable/12/sys/dev: mlx4/mlx4_ib mlx5/mlx5_ib
Hans Petter Selasky
hselasky at FreeBSD.org
Thu May 16 15:49:37 UTC 2019
Author: hselasky
Date: Thu May 16 15:49:35 2019
New Revision: 347722
URL: https://svnweb.freebsd.org/changeset/base/347722
Log:
MFC r347258:
Make sure to error out when arming the CQ fails in mlx4ib and mlx5ib.
Sponsored by: Mellanox Technologies
Modified:
stable/12/sys/dev/mlx4/mlx4_ib/mlx4_ib_cq.c
stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/dev/mlx4/mlx4_ib/mlx4_ib_cq.c
==============================================================================
--- stable/12/sys/dev/mlx4/mlx4_ib/mlx4_ib_cq.c Thu May 16 15:48:56 2019 (r347721)
+++ stable/12/sys/dev/mlx4/mlx4_ib/mlx4_ib_cq.c Thu May 16 15:49:35 2019 (r347722)
@@ -878,7 +878,8 @@ int mlx4_ib_poll_cq(struct ib_cq *ibcq, int num_entrie
struct mlx4_ib_dev *mdev = to_mdev(cq->ibcq.device);
spin_lock_irqsave(&cq->lock, flags);
- if (mdev->dev->persist->state & MLX4_DEVICE_STATE_INTERNAL_ERROR) {
+ if (unlikely(mdev->dev->persist->state &
+ MLX4_DEVICE_STATE_INTERNAL_ERROR)) {
mlx4_ib_poll_sw_comp(cq, num_entries, wc, &npolled);
goto out;
}
@@ -898,11 +899,18 @@ out:
int mlx4_ib_arm_cq(struct ib_cq *ibcq, enum ib_cq_notify_flags flags)
{
- mlx4_cq_arm(&to_mcq(ibcq)->mcq,
+ struct mlx4_ib_cq *cq = to_mcq(ibcq);
+ struct mlx4_ib_dev *mdev = to_mdev(cq->ibcq.device);
+
+ if (unlikely(mdev->dev->persist->state &
+ MLX4_DEVICE_STATE_INTERNAL_ERROR))
+ return -1;
+
+ mlx4_cq_arm(&cq->mcq,
(flags & IB_CQ_SOLICITED_MASK) == IB_CQ_SOLICITED ?
MLX4_CQ_DB_REQ_NOT_SOL : MLX4_CQ_DB_REQ_NOT,
- to_mdev(ibcq->device)->uar_map,
- MLX4_GET_DOORBELL_LOCK(&to_mdev(ibcq->device)->uar_lock));
+ mdev->uar_map,
+ MLX4_GET_DOORBELL_LOCK(&mdev->uar_lock));
return 0;
}
Modified: stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c
==============================================================================
--- stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c Thu May 16 15:48:56 2019 (r347721)
+++ stable/12/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c Thu May 16 15:49:35 2019 (r347722)
@@ -673,7 +673,7 @@ int mlx5_ib_poll_cq(struct ib_cq *ibcq, int num_entrie
int npolled;
spin_lock_irqsave(&cq->lock, flags);
- if (mdev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR) {
+ if (unlikely(mdev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR)) {
mlx5_ib_poll_sw_comp(cq, num_entries, wc, &npolled);
goto out;
}
@@ -702,6 +702,9 @@ int mlx5_ib_arm_cq(struct ib_cq *ibcq, enum ib_cq_noti
unsigned long irq_flags;
int ret = 0;
+ if (unlikely(mdev->state == MLX5_DEVICE_STATE_INTERNAL_ERROR))
+ return -1;
+
spin_lock_irqsave(&cq->lock, irq_flags);
if (cq->notify_flags != IB_CQ_NEXT_COMP)
cq->notify_flags = flags & IB_CQ_SOLICITED_MASK;
@@ -715,7 +718,7 @@ int mlx5_ib_arm_cq(struct ib_cq *ibcq, enum ib_cq_noti
MLX5_CQ_DB_REQ_NOT_SOL : MLX5_CQ_DB_REQ_NOT,
uar_page,
MLX5_GET_DOORBELL_LOCK(&mdev->priv.cq_uar_lock),
- to_mcq(ibcq)->mcq.cons_index);
+ cq->mcq.cons_index);
return ret;
}
More information about the svn-src-stable
mailing list