#undef XENVIF_RECEIVER_BATCH
}
-static FORCEINLINE VOID
-__ReceiverRingNotify(
- IN PXENVIF_RECEIVER_RING Ring
- )
-{
- __ReceiverRingAcquireLock(Ring);
- ReceiverRingPoll(Ring);
- __ReceiverRingReleaseLock(Ring);
-}
-
static FORCEINLINE VOID
__ReceiverRingUnmask(
IN PXENVIF_RECEIVER_RING Ring
)
{
PXENVIF_RECEIVER_RING Ring = Context;
- PXENVIF_RECEIVER Receiver;
- PXENVIF_FRONTEND Frontend;
UNREFERENCED_PARAMETER(Dpc);
UNREFERENCED_PARAMETER(Argument1);
ASSERT(Ring != NULL);
- Receiver = Ring->Receiver;
- Frontend = Receiver->Frontend;
+ Ring->Dpcs++;
- if (Ring->Enabled) {
- __ReceiverRingNotify(Ring);
- if (!FrontendIsSplit(Frontend))
- TransmitterNotify(FrontendGetTransmitter(Frontend),
- Ring->Index);
- }
+ __ReceiverRingAcquireLock(Ring);
+
+ if (Ring->Enabled)
+ ReceiverRingPoll(Ring);
+ __ReceiverRingReleaseLock(Ring);
__ReceiverRingUnmask(Ring);
}
)
{
PXENVIF_RECEIVER_RING Ring = Argument;
+ PXENVIF_RECEIVER Receiver;
+ PXENVIF_FRONTEND Frontend;
UNREFERENCED_PARAMETER(InterruptObject);
Ring->Events++;
- if (KeInsertQueueDpc(&Ring->Dpc, NULL, NULL))
- Ring->Dpcs++;
+ (VOID) KeInsertQueueDpc(&Ring->Dpc, NULL, NULL);
+
+ Receiver = Ring->Receiver;
+ Frontend = Receiver->Frontend;
+
+ if (!FrontendIsSplit(Frontend))
+ TransmitterNotify(FrontendGetTransmitter(Frontend),
+ Ring->Index);
return TRUE;
}
Ring->Enabled = TRUE;
- if (KeInsertQueueDpc(&Ring->Dpc, NULL, NULL))
- Ring->Dpcs++;
+ (VOID) KeInsertQueueDpc(&Ring->Dpc, NULL, NULL);
__ReceiverRingReleaseLock(Ring);
Ring->Channel = NULL;
Ring->Events = 0;
+ Ring->Dpcs = 0;
ASSERT3U(Ring->ResponsesProcessed, ==, Ring->RequestsPushed);
ASSERT3U(Ring->RequestsPushed, ==, Ring->RequestsPosted);
Receiver = Ring->Receiver;
Frontend = Receiver->Frontend;
- Ring->Dpcs = 0;
RtlZeroMemory(&Ring->Dpc, sizeof (KDPC));
Ring->BackfillSize = 0;
__TransmitterRingReleaseLock(Ring);
}
-static FORCEINLINE VOID
-__TransmitterRingNotify(
- IN PXENVIF_TRANSMITTER_RING Ring
- )
-{
- __TransmitterRingAcquireLock(Ring);
- TransmitterRingPoll(Ring);
- __TransmitterRingReleaseLock(Ring);
-}
-
static FORCEINLINE VOID
__TransmitterRingUnmask(
IN PXENVIF_TRANSMITTER_RING Ring
)
{
PXENVIF_TRANSMITTER_RING Ring = Context;
- PXENVIF_TRANSMITTER Transmitter;
UNREFERENCED_PARAMETER(Dpc);
UNREFERENCED_PARAMETER(Argument1);
ASSERT(Ring != NULL);
- Transmitter = Ring->Transmitter;
+ Ring->Dpcs++;
+
+ __TransmitterRingAcquireLock(Ring);
if (Ring->Enabled)
- __TransmitterRingNotify(Ring);
+ TransmitterRingPoll(Ring);
+ __TransmitterRingReleaseLock(Ring);
__TransmitterRingUnmask(Ring);
}
{
PXENVIF_TRANSMITTER_RING Ring = Argument;
PXENVIF_TRANSMITTER Transmitter;
+ PXENVIF_FRONTEND Frontend;
UNREFERENCED_PARAMETER(InterruptObject);
ASSERT(Ring != NULL);
Transmitter = Ring->Transmitter;
+ Frontend = Transmitter->Frontend;
+
+ ASSERT(FrontendIsSplit(Frontend));
Ring->Events++;
- if (KeInsertQueueDpc(&Ring->Dpc, NULL, NULL))
- Ring->Dpcs++;
+ (VOID) KeInsertQueueDpc(&Ring->Dpc, NULL, NULL);
return TRUE;
}
ASSERT(!Ring->Enabled);
Ring->Enabled = TRUE;
- if (FrontendIsSplit(Frontend) &&
- KeInsertQueueDpc(&Ring->Dpc, NULL, NULL))
- Ring->Dpcs++;
+ if (FrontendIsSplit(Frontend))
+ KeInsertQueueDpc(&Ring->Dpc, NULL, NULL);
__TransmitterRingReleaseLock(Ring);
Ring->Events = 0;
}
+ Ring->Dpcs = 0;
+
ASSERT3U(Ring->ResponsesProcessed, ==, Ring->RequestsPushed);
ASSERT3U(Ring->RequestsPushed, ==, Ring->RequestsPosted);
Transmitter = Ring->Transmitter;
Frontend = Transmitter->Frontend;
- Ring->Dpcs = 0;
RtlZeroMemory(&Ring->Dpc, sizeof (KDPC));
ASSERT3U(Ring->PacketsCompleted, ==, Ring->PacketsSent);
PIP_HEADER IpHeader;
ULONG Value;
- Value = 0;
-
StartVa = Packet->Header;
Info = &Packet->Info;
- if (Info->IpHeader.Length == 0)
+ if (Info->IpHeader.Length == 0) {
+ Value = KeGetCurrentProcessorNumberEx(NULL);
goto done;
+ }
IpHeader = (PIP_HEADER)(StartVa + Info->IpHeader.Offset);
+ Value = 0;
+
if (IpHeader->Version == 4) {
PIPV4_HEADER Version4 = &IpHeader->Version4;
IN ULONG Index
)
{
+ PXENVIF_FRONTEND Frontend;
PXENVIF_TRANSMITTER_RING Ring;
+ Frontend = Transmitter->Frontend;
+
+ ASSERT(!FrontendIsSplit(Frontend));
+
Ring = Transmitter->Ring[Index];
- __TransmitterRingNotify(Ring);
+ (VOID) KeInsertQueueDpc(&Ring->Dpc, NULL, NULL);
}
VOID