diff mbox

[1/1,2.6.28] cxgb3 - add one check in interrupt routine

Message ID 1223671728.2614.13.camel@wendyx.austin.ibm.com
State Rejected, archived
Delegated to: David Miller
Headers show

Commit Message

wendy xiong Oct. 10, 2008, 8:48 p.m. UTC
Hi Jeff,

We are submitting a patch to do the test before accessing A_PL_CLI register in interrupt routine for inclusion in 2.6.28, 
as follows:



Thanks,
Wendy




--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Comments

David Miller Oct. 11, 2008, 7:29 p.m. UTC | #1
From: wendy xiong <wendyx@us.ibm.com>
Date: Fri, 10 Oct 2008 15:48:48 -0500

> Hi Jeff,
> 
> We are submitting a patch to do the test before accessing A_PL_CLI register in interrupt routine for inclusion in 2.6.28, 
> as follows:

First, missing Signed-off-by:

Second, this is recidulious.

Every single interrupt we're going to check this error state value.  That's excessive,
and this is a performance critical fast path.

I do not want to see this begin to be a trend in the drivers, so I'm rejecting this
right now before it starts to spread.

If you want to handle this case, do something like quiesce the interrupt handler and
disable it when an error is detected.  That kind of scheme, at worst, will have the
same kinds of races that this silly test does.

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff -Nuarp linux-2.6.27-rc9/drivers/net/cxgb3/sge.c linux-2.6.27-rc9.cxgb3/drivers/net/cxgb3/sge.c
--- linux-2.6.27-rc9/drivers/net/cxgb3/sge.c    2008-10-10 15:09:31.000000000 -0500
+++ linux-2.6.27-rc9.cxgb3/drivers/net/cxgb3/sge.c      2008-10-10 15:11:44.000000000 -0500
@@ -2691,6 +2691,9 @@  static irqreturn_t t3b_intr_napi(int irq
        t3_write_reg(adap, A_PL_CLI, 0);
        map = t3_read_reg(adap, A_SG_DATA_INTR);

+       if (unlikely(pci_channel_offline(adap->pdev)))
+               return IRQ_NONE;
+
        if (unlikely(!map))     /* shared interrupt, most likely */
                return IRQ_NONE;