[openib-general] Re: Disabling IRQ #201 message

Michael S. Tsirkin mst at mellanox.co.il
Wed Feb 2 05:37:05 PST 2005


Quoting r. Roland Dreier <roland at topspin.com>:
> Subject: Re: Disabling IRQ #201 message
> 
>     Robert> Am running current version of openib on a 2.6.11-rc1
>     Robert> kernel on a NewIsis dual Opteron system. Every 15-20
>     Robert> minutes the following occurs. Have others seen this
>     Robert> behavior? Is the system misconfigured?
> 
> Do the drivers work other than this messsage?
> 
> It seems occasionally an interrupt occurs but the driver is not
> finding an events in any of the event queues.  I've never seen this
> but on the other hand I've not done much testing on the
> Opteron/AMD-8131 platform.
> 
>  - R.

In my opinion, this is unavoidable on any platform in mthca
unless each EQ has a separate interrupt.
Roland, the reason you dont see it may be because you test more
with MSI.

Pls consider:

EQ0 drives interrupt (low)
IRQ handler clears interrupt (high)
EQ1 drives interrupt (low)
IRQ handler reads ECR
IRQ handler serves EQ0 and EQ1
IRQ handler responds with IRQ handled

all EQs are now empty, but interrupt line is low (asserted).

I propose returning IRQ_HANDLED *always* in regular interrupt.

Signed-off-by: Michael S. Tsirkin <mst at mellanox.co.il>

Index: hw/mthca/mthca_eq.c
===================================================================
--- hw/mthca/mthca_eq.c	(revision 1673)
+++ hw/mthca/mthca_eq.c	(working copy)
@@ -360,14 +360,12 @@ static irqreturn_t mthca_interrupt(int i
 {
 	struct mthca_dev *dev = dev_ptr;
 	u32 ecr;
-	int work = 0;
 	int i;
 
 	if (dev->eq_table.clr_mask)
 		writel(dev->eq_table.clr_mask, dev->eq_table.clr_int);
 
 	if ((ecr = readl(dev->ecr_base + 4)) != 0) {
-		work = 1;
 
 		writel(ecr, dev->ecr_base +
 		       MTHCA_ECR_CLR_BASE - MTHCA_ECR_BASE + 4);
@@ -377,7 +375,7 @@ static irqreturn_t mthca_interrupt(int i
 				mthca_eq_int(dev, &dev->eq_table.eq[i]);
 	}
 
-	return IRQ_RETVAL(work);
+	return IRQ_HANDLED;
 }
 
 static irqreturn_t mthca_msi_x_interrupt(int irq, void *eq_ptr,
-- 
MST - Michael S. Tsirkin



More information about the general mailing list