} while (InterlockedCompareExchangePointer(&Ring->PacketQueue, (PVOID)New, (PVOID)Old) != Old);
}
-static DECLSPEC_NOINLINE BOOLEAN
+static DECLSPEC_NOINLINE VOID
ReceiverRingPoll(
IN PXENVIF_RECEIVER_RING Ring
)
{
-#define XENVIF_RECEIVER_BATCH(_Ring) (RING_SIZE(&(_Ring)->Front) / 4)
-
PXENVIF_RECEIVER Receiver;
PXENVIF_FRONTEND Frontend;
- BOOLEAN Retry;
Receiver = Ring->Receiver;
Frontend = Receiver->Frontend;
- Retry = FALSE;
if (!Ring->Enabled)
- goto done;
+ return;
for (;;) {
BOOLEAN Error;
TailMdl = NULL;
EOP = TRUE;
- if (Retry)
- break;
-
KeMemoryBarrier();
rsp_prod = Ring->Shared->rsp_prod;
break;
}
- while (rsp_cons != rsp_prod && !Retry) {
+ while (rsp_cons != rsp_prod) {
netif_rx_response_t *rsp;
uint16_t id;
PXENVIF_RECEIVER_FRAGMENT Fragment;
__ReceiverRingQueuePacket(Ring, Packet);
}
- if (rsp_cons - Ring->Front.rsp_cons > XENVIF_RECEIVER_BATCH(Ring))
- Retry = TRUE;
-
Error = FALSE;
Info = 0;
MaximumSegmentSize = 0;
if (Ring->PacketQueue != NULL &&
KeInsertQueueDpc(&Ring->QueueDpc, NULL, NULL))
Ring->QueueDpcs++;
-
-done:
- return Retry;
-
-#undef XENVIF_RECEIVER_BATCH
}
static FORCEINLINE VOID
ASSERT(Ring != NULL);
for (;;) {
- BOOLEAN Retry;
-
__ReceiverRingAcquireLock(Ring);
- Retry = ReceiverRingPoll(Ring);
+ ReceiverRingPoll(Ring);
__ReceiverRingReleaseLock(Ring);
- if (!Retry) {
- __ReceiverRingUnmask(Ring);
- break;
- }
+ __ReceiverRingUnmask(Ring);
+ break;
}
}
Ring->PacketsCompleted++;
}
-static DECLSPEC_NOINLINE BOOLEAN
+static DECLSPEC_NOINLINE VOID
TransmitterRingPoll(
IN PXENVIF_TRANSMITTER_RING Ring
)
{
-#define XENVIF_TRANSMITTER_BATCH(_Ring) (RING_SIZE(&(_Ring)->Front) / 4)
-
PXENVIF_TRANSMITTER Transmitter;
PXENVIF_FRONTEND Frontend;
- BOOLEAN Retry;
Transmitter = Ring->Transmitter;
Frontend = Transmitter->Frontend;
- Retry = FALSE;
if (!Ring->Enabled)
- goto done;
+ return;
for (;;) {
RING_IDX rsp_prod;
RING_IDX rsp_cons;
ULONG Extra;
- if (Retry)
- break;
-
KeMemoryBarrier();
rsp_prod = Ring->Shared->rsp_prod;
}
Extra = 0;
- while (rsp_cons != rsp_prod && !Retry) {
+ while (rsp_cons != rsp_prod) {
netif_tx_response_t *rsp;
uint16_t id;
PXENVIF_TRANSMITTER_FRAGMENT Fragment;
Packet->Completion.Status = XENVIF_TRANSMITTER_PACKET_OK;
__TransmitterRingCompletePacket(Ring, Packet);
-
- if (rsp_cons - Ring->Front.rsp_cons > XENVIF_TRANSMITTER_BATCH(Ring))
- Retry = TRUE;
}
ASSERT3U(Extra, ==, 0);
Ring->Front.rsp_cons = rsp_cons;
}
-
-done:
- return Retry;
-
-#undef XENVIF_TRANSMITTER_BATCH
}
static FORCEINLINE VOID
ASSERT(Ring != NULL);
for (;;) {
- BOOLEAN Retry;
-
__TransmitterRingAcquireLock(Ring);
- Retry = TransmitterRingPoll(Ring);
+ TransmitterRingPoll(Ring);
__TransmitterRingReleaseLock(Ring);
- if (!Retry) {
- __TransmitterRingUnmask(Ring);
- break;
- }
+ __TransmitterRingUnmask(Ring);
+ break;
}
}