Author: hselasky
Date: Thu May 16 17:19:03 2019
New Revision: 347808
URL: https://svnweb.freebsd.org/changeset/base/347808

Log:
  MFC r347258:
  Make sure to error out when arming the CQ fails in mlx4ib and mlx5ib.
  
  Sponsored by: Mellanox Technologies

Modified:
  stable/11/sys/dev/mlx4/mlx4_ib/mlx4_ib_cq.c
  stable/11/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c
Directory Properties:
  stable/11/   (props changed)

Modified: stable/11/sys/dev/mlx4/mlx4_ib/mlx4_ib_cq.c
==============================================================================
--- stable/11/sys/dev/mlx4/mlx4_ib/mlx4_ib_cq.c Thu May 16 17:18:29 2019        
(r347807)
+++ stable/11/sys/dev/mlx4/mlx4_ib/mlx4_ib_cq.c Thu May 16 17:19:03 2019        
(r347808)
@@ -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/11/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c
==============================================================================
--- stable/11/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c Thu May 16 17:18:29 2019        
(r347807)
+++ stable/11/sys/dev/mlx5/mlx5_ib/mlx5_ib_cq.c Thu May 16 17:19:03 2019        
(r347808)
@@ -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;
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to