[ofa-general] [PATCH] IB/mlx4 mlx4_ib: eq interrupts

Eli Cohen eli at mellanox.co.il
Mon May 7 08:20:33 PDT 2007


In order to prevent losing interrupts, all EQs must be rearmed
whenever an interrupt occurs, regardless if that interrupt is
generated for the EQ or not.

Signed-off-by: Eli Cohen <eli at mellanox.co.il>

---

Index: connectx_kernel/drivers/net/mlx4/eq.c
===================================================================
--- connectx_kernel.orig/drivers/net/mlx4/eq.c	2007-05-07 12:32:35.000000000 +0300
+++ connectx_kernel/drivers/net/mlx4/eq.c	2007-05-07 17:33:09.000000000 +0300
@@ -266,13 +266,17 @@ static irqreturn_t mlx4_interrupt(int ir
 {
 	struct mlx4_dev *dev = dev_ptr;
 	struct mlx4_priv *priv = mlx4_priv(dev);
+	struct mlx4_eq *eq;
 	int work = 0;
 	int i;
 
 	writel(priv->eq_table.clr_mask, priv->eq_table.clr_int);
 
-	for (i = 0; i < MLX4_EQ_CATAS; ++i)
-		work |= mlx4_eq_int(dev, &priv->eq_table.eq[i]);
+	for (i = 0; i < MLX4_EQ_CATAS; ++i) {
+		eq = &priv->eq_table.eq[i];
+		work |= mlx4_eq_int(dev, eq);
+		eq_set_ci(eq, 1);
+	}
 
 	return IRQ_RETVAL(work);
 }




More information about the general mailing list