On 10/22/2010 11:06 AM, Chris Friesen wrote:
> On 10/12/2010 11:08 AM, Chris Friesen wrote:
>   
>> On 10/08/2010 04:36 PM, Brandeburg, Jesse wrote:
>>     
>>> seems reasonable, it should work okay.  Does it fix the problem?  It seems 
>>> there must be a race between when the interrupt gets re-enabled and when 
>>> the hardware clears the mask via EIAM on the next interrupt.
>>>       
>> I'm about to give it a try.  The problem can take hours to reproduce, so
>> we won't know for a day or so whether it's really gone.
>>     
> It looks like the attached patch makes our problem go away.  I only did
> the msix/NAPI code path, so a complete solution would need some more
> changes.
>
> Where do we go from here?  If this is something that occurs on other
> boards would it make sense for the driver to provide a way to turn off
> the automasking?  (Module parameter perhaps?)
>   
Sorry everyone, apparently the list is removing my attachments, so I've 
included the patch inline below.

Chris




    This patch converts the driver to turn off auto-masking and explicitly
    mask interrupts in software.  This adds a pci message for each interrupt
    but seems to fix the problem.  NOTE: This patch only addresses msix
    interrupts in the NAPI code path.
    

diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c
index 706f7b8..c2e117a 100644
--- a/drivers/net/ixgbe/ixgbe_main.c
+++ b/drivers/net/ixgbe/ixgbe_main.c
@@ -1948,7 +1948,7 @@ static irqreturn_t ixgbe_msix_clean_tx(int irq, void 
*data)
        }
 
 #ifdef CONFIG_IXGBE_NAPI
-       /* EIAM disabled interrupts (on this vector) for us */
+       ixgbe_irq_disable_queues(adapter, ((u64)1 << q_vector->v_idx));
        napi_schedule(&q_vector->napi);
 #endif
        /*
@@ -1999,7 +1999,7 @@ static irqreturn_t ixgbe_msix_clean_rx(int irq, void 
*data)
        if (!q_vector->rxr_count)
                return IRQ_HANDLED;
 
-       /* EIAM disabled interrupts (on this vector) for us */
+       ixgbe_irq_disable_queues(adapter, ((u64)1 << q_vector->v_idx));
        napi_schedule(&q_vector->napi);
 #endif
 
@@ -2054,7 +2054,7 @@ static irqreturn_t ixgbe_msix_clean_many(int irq, void 
*data)
        }
 
        /* disable interrupts on this vector only */
-       /* EIAM disabled interrupts (on this vector) for us */
+       ixgbe_irq_disable_queues(adapter, ((u64)1 << q_vector->v_idx));
        napi_schedule(&q_vector->napi);
 #endif
 
@@ -3886,7 +3886,7 @@ static int ixgbe_up_complete(struct ixgbe_adapter 
*adapter)
                        break;
                default:
                case ixgbe_mac_82599EB:
-                       IXGBE_WRITE_REG(hw, IXGBE_EIAM_EX(0), 0xFFFFFFFF);
+                       IXGBE_WRITE_REG(hw, IXGBE_EIAM_EX(0), 0xFFFF0000);
                        IXGBE_WRITE_REG(hw, IXGBE_EIAM_EX(1), 0xFFFFFFFF);
                        break;
                }



-- 
Chris Friesen
Software Developer
GENBAND
chris.frie...@genband.com
www.genband.com


------------------------------------------------------------------------------
Nokia and AT&T present the 2010 Calling All Innovators-North America contest
Create new apps & games for the Nokia N8 for consumers in  U.S. and Canada
$10 million total in prizes - $4M cash, 500 devices, nearly $6M in marketing
Develop with Nokia Qt SDK, Web Runtime, or Java and Publish to Ovi Store 
http://p.sf.net/sfu/nokia-dev2dev
_______________________________________________
E1000-devel mailing list
E1000-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/e1000-devel
To learn more about Intel&#174; Ethernet, visit 
http://communities.intel.com/community/wired

Reply via email to