mirror of
https://github.com/reactos/reactos.git
synced 2025-08-05 16:02:56 +00:00
- Queue a work item to do our work that was previously done in MiniportDpc so SendHandler gets called at the correct IRQL
svn path=/branches/aicom-network-fixes/; revision=36206
This commit is contained in:
parent
86ca4446aa
commit
ac40a36ce9
1 changed files with 34 additions and 19 deletions
|
@ -748,35 +748,23 @@ NdisMQueryInformationComplete(
|
||||||
KeLowerIrql(OldIrql);
|
KeLowerIrql(OldIrql);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID NTAPI MiniportWorker(
|
||||||
VOID NTAPI MiniportDpc(
|
IN PDEVICE_OBJECT DeviceObject,
|
||||||
IN PKDPC Dpc,
|
IN PVOID Context)
|
||||||
IN PVOID DeferredContext,
|
|
||||||
IN PVOID SystemArgument1,
|
|
||||||
IN PVOID SystemArgument2)
|
|
||||||
/*
|
|
||||||
* FUNCTION: Deferred routine to handle serialization
|
|
||||||
* ARGUMENTS:
|
|
||||||
* Dpc = Pointer to DPC object
|
|
||||||
* DeferredContext = Pointer to context information (LOGICAL_ADAPTER)
|
|
||||||
* SystemArgument1 = Unused
|
|
||||||
* SystemArgument2 = Unused
|
|
||||||
*/
|
|
||||||
{
|
{
|
||||||
|
PLOGICAL_ADAPTER Adapter = GET_LOGICAL_ADAPTER(Context);
|
||||||
|
KIRQL OldIrql;
|
||||||
NDIS_STATUS NdisStatus;
|
NDIS_STATUS NdisStatus;
|
||||||
PVOID WorkItemContext;
|
PVOID WorkItemContext;
|
||||||
NDIS_WORK_ITEM_TYPE WorkItemType;
|
NDIS_WORK_ITEM_TYPE WorkItemType;
|
||||||
PLOGICAL_ADAPTER Adapter = GET_LOGICAL_ADAPTER(DeferredContext);
|
|
||||||
|
|
||||||
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
|
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
|
||||||
|
|
||||||
KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
|
|
||||||
|
|
||||||
NdisStatus =
|
NdisStatus =
|
||||||
MiniDequeueWorkItem
|
MiniDequeueWorkItem
|
||||||
(Adapter, &WorkItemType, &WorkItemContext);
|
(Adapter, &WorkItemType, &WorkItemContext);
|
||||||
|
|
||||||
KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
|
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
|
||||||
|
|
||||||
if (NdisStatus == NDIS_STATUS_SUCCESS)
|
if (NdisStatus == NDIS_STATUS_SUCCESS)
|
||||||
{
|
{
|
||||||
|
@ -872,6 +860,33 @@ VOID NTAPI MiniportDpc(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
VOID NTAPI MiniportDpc(
|
||||||
|
IN PKDPC Dpc,
|
||||||
|
IN PVOID DeferredContext,
|
||||||
|
IN PVOID SystemArgument1,
|
||||||
|
IN PVOID SystemArgument2)
|
||||||
|
/*
|
||||||
|
* FUNCTION: Deferred routine to handle serialization
|
||||||
|
* ARGUMENTS:
|
||||||
|
* Dpc = Pointer to DPC object
|
||||||
|
* DeferredContext = Pointer to context information (LOGICAL_ADAPTER)
|
||||||
|
* SystemArgument1 = Unused
|
||||||
|
* SystemArgument2 = Unused
|
||||||
|
*/
|
||||||
|
{
|
||||||
|
PIO_WORKITEM WorkItem;
|
||||||
|
PLOGICAL_ADAPTER Adapter = GET_LOGICAL_ADAPTER(DeferredContext);
|
||||||
|
|
||||||
|
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
|
||||||
|
|
||||||
|
WorkItem = IoAllocateWorkItem(Adapter->NdisMiniportBlock.DeviceObject);
|
||||||
|
if( !WorkItem ) return;
|
||||||
|
|
||||||
|
IoQueueWorkItem(WorkItem, MiniportWorker, CriticalWorkQueue, DeferredContext);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
VOID
|
VOID
|
||||||
NTAPI
|
NTAPI
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue