[ros-diffs] [cgutman] 36198: - Call KeAcquireSpinLockAtDpcLevel instead of KeAcquireSpinLock when possible - Don't hold the spin lock as long in MiniportDpc

cgutman at svn.reactos.org cgutman at svn.reactos.org
Sat Sep 13 21:00:32 CEST 2008


Author: cgutman
Date: Sat Sep 13 14:00:32 2008
New Revision: 36198

URL: http://svn.reactos.org/svn/reactos?rev=36198&view=rev
Log:
 - Call KeAcquireSpinLockAtDpcLevel instead of KeAcquireSpinLock when possible
 - Don't hold the spin lock as long in MiniportDpc

Modified:
    branches/aicom-network-fixes/drivers/network/ndis/ndis/efilter.c
    branches/aicom-network-fixes/drivers/network/ndis/ndis/miniport.c
    branches/aicom-network-fixes/drivers/network/ndis/ndis/protocol.c

Modified: branches/aicom-network-fixes/drivers/network/ndis/ndis/efilter.c
URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/network/ndis/ndis/efilter.c?rev=36198&r1=36197&r2=36198&view=diff
==============================================================================
--- branches/aicom-network-fixes/drivers/network/ndis/ndis/efilter.c [iso-8859-1] (original)
+++ branches/aicom-network-fixes/drivers/network/ndis/ndis/efilter.c [iso-8859-1] Sat Sep 13 14:00:32 2008
@@ -112,7 +112,6 @@
  *     Filter = Pointer to Ethernet filter
  */
 {
-  KIRQL OldIrql;
   PLIST_ENTRY CurrentEntry;
   PLOGICAL_ADAPTER Adapter;
   PADAPTER_BINDING AdapterBinding;
@@ -124,7 +123,7 @@
   Adapter = (PLOGICAL_ADAPTER)((PETHI_FILTER)Filter)->Miniport;
 
   NDIS_DbgPrint(MAX_TRACE, ("acquiring miniport block lock\n"));
-  KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
+  KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
     {
       CurrentEntry = Adapter->ProtocolListHead.Flink;
 
@@ -138,7 +137,7 @@
           CurrentEntry = CurrentEntry->Flink;
         }
     }
-  KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
+  KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
 }
 
 /* EOF */

Modified: branches/aicom-network-fixes/drivers/network/ndis/ndis/miniport.c
URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/network/ndis/ndis/miniport.c?rev=36198&r1=36197&r2=36198&view=diff
==============================================================================
--- branches/aicom-network-fixes/drivers/network/ndis/ndis/miniport.c [iso-8859-1] (original)
+++ branches/aicom-network-fixes/drivers/network/ndis/ndis/miniport.c [iso-8859-1] Sat Sep 13 14:00:32 2008
@@ -767,15 +767,16 @@
   PVOID WorkItemContext;
   NDIS_WORK_ITEM_TYPE WorkItemType;
   PLOGICAL_ADAPTER Adapter = GET_LOGICAL_ADAPTER(DeferredContext);
-  KIRQL OldIrql;
 
   NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
 
-  KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
+  KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
 
   NdisStatus =
       MiniDequeueWorkItem
       (Adapter, &WorkItemType, &WorkItemContext);
+
+  KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
 
   if (NdisStatus == NDIS_STATUS_SUCCESS)
     {
@@ -869,8 +870,6 @@
             break;
         }
     }
-
-   KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
 }
 
 

Modified: branches/aicom-network-fixes/drivers/network/ndis/ndis/protocol.c
URL: http://svn.reactos.org/svn/reactos/branches/aicom-network-fixes/drivers/network/ndis/ndis/protocol.c?rev=36198&r1=36197&r2=36198&view=diff
==============================================================================
--- branches/aicom-network-fixes/drivers/network/ndis/ndis/protocol.c [iso-8859-1] (original)
+++ branches/aicom-network-fixes/drivers/network/ndis/ndis/protocol.c [iso-8859-1] Sat Sep 13 14:00:32 2008
@@ -63,7 +63,6 @@
  *     - XXX ATM, this only handles loopback packets - is that its designed function?
  */
 {
-  KIRQL OldIrql;
   UINT BufferedLength;
   UINT PacketLength;
 
@@ -76,12 +75,12 @@
   NdisQueryPacket(Packet, NULL, NULL, NULL, &PacketLength);
 
   NDIS_DbgPrint(MAX_TRACE, ("acquiring miniport block lock\n"));
-  KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
+  KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
     {
       Adapter->NdisMiniportBlock.IndicatedPacket[KeGetCurrentProcessorNumber()] = Packet;
       BufferedLength = CopyPacketToBuffer(Adapter->LookaheadBuffer, Packet, 0, Adapter->NdisMiniportBlock.CurrentLookahead);
     }
-  KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
+  KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
 
   if (BufferedLength > Adapter->MediumHeaderSize)
     {
@@ -96,11 +95,11 @@
     }
 
   NDIS_DbgPrint(MAX_TRACE, ("acquiring miniport block lock\n"));
-  KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
+  KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
     {
       Adapter->NdisMiniportBlock.IndicatedPacket[KeGetCurrentProcessorNumber()] = NULL;
     }
-  KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
+  KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
 
   return STATUS_SUCCESS;
 }



More information about the Ros-diffs mailing list