From c20dd5efa78bcfef187fa024ee65fe7f4e8b0256 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A9=20van=20Geldorp?= Date: Sat, 10 Dec 2005 22:21:28 +0000 Subject: [PATCH] Multiple interrupt status bits can be active at the same time, process them all instead of just one and ignoring the rest. On an active network card, this would eventually cause all transmit buffers to be marked "in use", blocking all transmits. Sinds no TCP acks would go out, it would block TCP receives too. svn path=/trunk/; revision=20043 --- reactos/drivers/net/dd/pcnet/pcnet.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/reactos/drivers/net/dd/pcnet/pcnet.c b/reactos/drivers/net/dd/pcnet/pcnet.c index 9295ff7a896..6fde82e5da6 100644 --- a/reactos/drivers/net/dd/pcnet/pcnet.c +++ b/reactos/drivers/net/dd/pcnet/pcnet.c @@ -87,11 +87,11 @@ MiniportHandleInterrupt( if (Data & CSR0_CERR) Adapter->Statistics.XmtCollisions++; } - else if(Data & CSR0_IDON) + if(Data & CSR0_IDON) { DPRINT("IDON\n"); } - else if(Data & CSR0_RINT) + if(Data & CSR0_RINT) { DPRINT("receive interrupt\n"); @@ -147,7 +147,7 @@ MiniportHandleInterrupt( Adapter->Statistics.RcvGoodFrames++; } } - else if(Data & CSR0_TINT) + if(Data & CSR0_TINT) { PTRANSMIT_DESCRIPTOR Descriptor; @@ -201,10 +201,9 @@ MiniportHandleInterrupt( } NdisMSendResourcesAvailable(Adapter->MiniportAdapterHandle); } - else + if(Data & ~(CSR0_ERR | CSR0_IDON | CSR0_RINT | CSR0_TINT)) { - DPRINT1("UNHANDLED INTERRUPT\n"); - ASSERT(FALSE); + DPRINT("UNHANDLED INTERRUPT CSR0 0x%x\n", Data); } NdisRawReadPortUshort(Adapter->PortOffset + RDP, &Data); @@ -1081,7 +1080,7 @@ MiniportSend( (Adapter->CurrentTransmitEndIndex == NUMBER_OF_BUFFERS - 1 && Adapter->CurrentTransmitStartIndex == 0)) { - DPRINT("No free space in circular buffer\n"); + DPRINT1("No free space in circular buffer\n"); NdisDprReleaseSpinLock(&Adapter->Lock); return NDIS_STATUS_RESOURCES; }