Do the cards not support interrupt coalescing? Best regards, Alex Ionescu
On Fri, Oct 23, 2009 at 1:27 AM, <[email protected]> wrote: > Author: cgutman > Date: Fri Oct 23 02:27:00 2009 > New Revision: 43693 > > URL: http://svn.reactos.org/svn/reactos?rev=43693&view=rev > Log: > - Limit the number of interrupts that are handled per call to > MiniportHandleInterrupt to prevent us from staying at DISPATCH_LEVEL for too > long > > Modified: > trunk/reactos/drivers/network/dd/ne2000/include/ne2000.h > trunk/reactos/drivers/network/dd/ne2000/ne2000/8390.c > trunk/reactos/drivers/network/dd/pcnet/pcnet.c > trunk/reactos/drivers/network/dd/pcnet/pcnet.h > > Modified: trunk/reactos/drivers/network/dd/ne2000/include/ne2000.h > URL: > http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/dd/ne2000/include/ne2000.h?rev=43693&r1=43692&r2=43693&view=diff > ============================================================================== > --- trunk/reactos/drivers/network/dd/ne2000/include/ne2000.h [iso-8859-1] > (original) > +++ trunk/reactos/drivers/network/dd/ne2000/include/ne2000.h [iso-8859-1] Fri > Oct 23 02:27:00 2009 > @@ -55,7 +55,8 @@ > /* Interrupt Mask Register value */ > #define DRIVER_INTERRUPT_MASK IMR_ALLE - IMR_RDCE > > - > +/* Maximum number of interrupts handled per call to MiniportHandleInterrupt > */ > +#define INTERRUPT_LIMIT 10 > > /* Global structures */ > > > Modified: trunk/reactos/drivers/network/dd/ne2000/ne2000/8390.c > URL: > http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/dd/ne2000/ne2000/8390.c?rev=43693&r1=43692&r2=43693&view=diff > ============================================================================== > --- trunk/reactos/drivers/network/dd/ne2000/ne2000/8390.c [iso-8859-1] > (original) > +++ trunk/reactos/drivers/network/dd/ne2000/ne2000/8390.c [iso-8859-1] Fri > Oct 23 02:27:00 2009 > @@ -1315,6 +1315,7 @@ > UCHAR ISRMask; > UCHAR Mask; > PNIC_ADAPTER Adapter = (PNIC_ADAPTER)MiniportAdapterContext; > + UINT i = 0; > > ISRMask = Adapter->InterruptMask; > NdisRawReadPortUchar(Adapter->IOBase + PG0_ISR, &ISRValue); > @@ -1323,12 +1324,14 @@ > > Adapter->InterruptStatus |= (ISRValue & ISRMask); > > - if (ISRValue != 0x00) > - /* Acknowledge interrupts */ > - NdisRawWritePortUchar(Adapter->IOBase + PG0_ISR, ISRValue); > - > Mask = 0x01; > - while (Adapter->InterruptStatus != 0x00) { > + while (Adapter->InterruptStatus != 0x00 && i++ < INTERRUPT_LIMIT) { > + > + if (ISRValue != 0x00) { > + /* Acknowledge interrupts */ > + NdisRawWritePortUchar(Adapter->IOBase + PG0_ISR, ISRValue); > + Mask = 0x01; > + } > > NDIS_DbgPrint(MID_TRACE, ("Adapter->InterruptStatus (0x%X) Mask > (0x%X).\n", > Adapter->InterruptStatus, Mask)); > @@ -1409,12 +1412,6 @@ > NDIS_DbgPrint(MID_TRACE, ("ISRValue (0x%X).\n", ISRValue)); > > Adapter->InterruptStatus |= (ISRValue & ISRMask); > - > - if (ISRValue != 0x00) { > - /* Acknowledge interrupts */ > - NdisRawWritePortUchar(Adapter->IOBase + PG0_ISR, ISRValue); > - Mask = 0x01; > - } > } > > NICEnableInterrupts((PNIC_ADAPTER)MiniportAdapterContext); > > Modified: trunk/reactos/drivers/network/dd/pcnet/pcnet.c > URL: > http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/dd/pcnet/pcnet.c?rev=43693&r1=43692&r2=43693&view=diff > ============================================================================== > --- trunk/reactos/drivers/network/dd/pcnet/pcnet.c [iso-8859-1] (original) > +++ trunk/reactos/drivers/network/dd/pcnet/pcnet.c [iso-8859-1] Fri Oct 23 > 02:27:00 2009 > @@ -66,6 +66,7 @@ > { > PADAPTER Adapter = (PADAPTER)MiniportAdapterContext; > USHORT Data; > + UINT i = 0; > > DPRINT("Called\n"); > > @@ -78,7 +79,7 @@ > > DPRINT("CSR0 is 0x%x\n", Data); > > - while(Data & CSR0_INTR) > + while((Data & CSR0_INTR) && i++ < INTERRUPT_LIMIT) > { > /* Clear interrupt flags early to avoid race conditions. */ > NdisRawWritePortUshort(Adapter->PortOffset + RDP, Data); > > Modified: trunk/reactos/drivers/network/dd/pcnet/pcnet.h > URL: > http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/network/dd/pcnet/pcnet.h?rev=43693&r1=43692&r2=43693&view=diff > ============================================================================== > --- trunk/reactos/drivers/network/dd/pcnet/pcnet.h [iso-8859-1] (original) > +++ trunk/reactos/drivers/network/dd/pcnet/pcnet.h [iso-8859-1] Fri Oct 23 > 02:27:00 2009 > @@ -149,6 +149,9 @@ > /* flags */ > #define RESET_IN_PROGRESS 0x1 > > +/* Maximum number of interrupts handled per call to MiniportHandleInterrupt > */ > +#define INTERRUPT_LIMIT 10 > + > #if DBG > #define BREAKPOINT DbgBreakPoint(); > #else > > > _______________________________________________ Ros-dev mailing list [email protected] http://www.reactos.org/mailman/listinfo/ros-dev
