|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH xenvif 4/8] Remove KTIMERS from transmit and receive paths (again)
Even though the poller subsystem has been reverted, these still need to
go away as they do not adequately serve the purpose for which they were
added: DPC watchdog avoidance.
A subsequent patch will re-instate the threaded DPC in the receiver to
avoid the DPC watchdog.
Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
src/xenvif/receiver.c | 60 ++++--------------------------------------------
src/xenvif/transmitter.c | 58 ++++------------------------------------------
2 files changed, 10 insertions(+), 108 deletions(-)
diff --git a/src/xenvif/receiver.c b/src/xenvif/receiver.c
index 3ed5ee8..63f0e0e 100644
--- a/src/xenvif/receiver.c
+++ b/src/xenvif/receiver.c
@@ -91,8 +91,6 @@ typedef struct _XENVIF_RECEIVER_RING {
PXENBUS_EVTCHN_CHANNEL Channel;
KDPC Dpc;
ULONG Dpcs;
- KTIMER Timer;
- KDPC TimerDpc;
ULONG Events;
PXENVIF_RECEIVER_FRAGMENT Pending[XENVIF_RECEIVER_MAXIMUM_FRAGMENT_ID +
1];
ULONG RequestsPosted;
@@ -2211,37 +2209,6 @@ __ReceiverRingUnmask(
TRUE);
}
-static FORCEINLINE BOOLEAN
-__ReceiverRingDpcTimeout(
- IN PXENVIF_RECEIVER_RING Ring
- )
-{
- KDPC_WATCHDOG_INFORMATION Watchdog;
- NTSTATUS status;
-
- UNREFERENCED_PARAMETER(Ring);
-
- RtlZeroMemory(&Watchdog, sizeof (Watchdog));
-
- status = KeQueryDpcWatchdogInformation(&Watchdog);
- ASSERT(NT_SUCCESS(status));
-
- if (Watchdog.DpcTimeLimit == 0 ||
- Watchdog.DpcWatchdogLimit == 0)
- return FALSE;
-
- if (Watchdog.DpcTimeCount > (Watchdog.DpcTimeLimit / 2) &&
- Watchdog.DpcWatchdogCount > (Watchdog.DpcWatchdogLimit / 2))
- return FALSE;
-
- return TRUE;
-}
-
-#define TIME_US(_us) ((_us) * 10)
-#define TIME_MS(_ms) (TIME_US((_ms) * 1000))
-#define TIME_S(_s) (TIME_MS((_s) * 1000))
-#define TIME_RELATIVE(_t) (-(_t))
-
__drv_functionClass(KDEFERRED_ROUTINE)
__drv_maxIRQL(DISPATCH_LEVEL)
__drv_minIRQL(DISPATCH_LEVEL)
@@ -2274,15 +2241,6 @@ ReceiverRingDpc(
__ReceiverRingUnmask(Ring);
break;
}
-
- if (__ReceiverRingDpcTimeout(Ring)) {
- LARGE_INTEGER Delay;
-
- Delay.QuadPart = TIME_RELATIVE(TIME_US(100));
-
- KeSetTimer(&Ring->Timer, Delay, &Ring->TimerDpc);
- break;
- }
}
}
@@ -2317,6 +2275,11 @@ ReceiverRingEvtchnCallback(
return TRUE;
}
+#define TIME_US(_us) ((_us) * 10)
+#define TIME_MS(_ms) (TIME_US((_ms) * 1000))
+#define TIME_S(_s) (TIME_MS((_s) * 1000))
+#define TIME_RELATIVE(_t) (-(_t))
+
#define XENVIF_RECEIVER_WATCHDOG_PERIOD 30
static NTSTATUS
@@ -2438,8 +2401,6 @@ __ReceiverRingInitialize(
InitializeListHead(&(*Ring)->PacketList);
KeInitializeDpc(&(*Ring)->Dpc, ReceiverRingDpc, *Ring);
- KeInitializeTimer(&(*Ring)->Timer);
- KeInitializeDpc(&(*Ring)->TimerDpc, ReceiverRingDpc, *Ring);
status = RtlStringCbPrintfA(Name,
sizeof (Name),
@@ -2524,8 +2485,6 @@ fail4:
fail3:
Error("fail3\n");
- RtlZeroMemory(&(*Ring)->TimerDpc, sizeof (KDPC));
- RtlZeroMemory(&(*Ring)->Timer, sizeof (KTIMER));
RtlZeroMemory(&(*Ring)->Dpc, sizeof (KDPC));
RtlZeroMemory(&(*Ring)->PacketList, sizeof (LIST_ENTRY));
@@ -2641,7 +2600,6 @@ __ReceiverRingConnect(
ASSERT(NT_SUCCESS(status));
KeSetTargetProcessorDpcEx(&Ring->Dpc, &ProcNumber);
- KeSetTargetProcessorDpcEx(&Ring->TimerDpc, &ProcNumber);
(VOID) XENBUS_EVTCHN(Bind,
&Receiver->EvtchnInterface,
@@ -2846,12 +2804,6 @@ __ReceiverRingDisable(
__ReceiverRingReleaseLock(Ring);
- //
- // No new timers can be scheduled once Enabled goes to FALSE.
- // Cancel any existing ones.
- //
- (VOID) KeCancelTimer(&Ring->Timer);
-
Info("%s[%u]: <====\n",
FrontendGetPath(Frontend),
Ring->Index);
@@ -2925,8 +2877,6 @@ __ReceiverRingTeardown(
Frontend = Receiver->Frontend;
RtlZeroMemory(&Ring->Hash, sizeof (XENVIF_RECEIVER_HASH));
- RtlZeroMemory(&Ring->TimerDpc, sizeof (KDPC));
- RtlZeroMemory(&Ring->Timer, sizeof (KTIMER));
RtlZeroMemory(&Ring->Dpc, sizeof (KDPC));
Ring->BackfillSize = 0;
diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index 770aca9..02c0d3e 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -182,8 +182,6 @@ typedef struct _XENVIF_TRANSMITTER_RING {
PXENBUS_EVTCHN_CHANNEL Channel;
KDPC Dpc;
ULONG Dpcs;
- KTIMER Timer;
- KDPC TimerDpc;
ULONG Events;
BOOLEAN Connected;
BOOLEAN Enabled;
@@ -3250,37 +3248,6 @@ __TransmitterRingUnmask(
TRUE);
}
-static FORCEINLINE BOOLEAN
-__TransmitterRingDpcTimeout(
- IN PXENVIF_TRANSMITTER_RING Ring
- )
-{
- KDPC_WATCHDOG_INFORMATION Watchdog;
- NTSTATUS status;
-
- UNREFERENCED_PARAMETER(Ring);
-
- RtlZeroMemory(&Watchdog, sizeof (Watchdog));
-
- status = KeQueryDpcWatchdogInformation(&Watchdog);
- ASSERT(NT_SUCCESS(status));
-
- if (Watchdog.DpcTimeLimit == 0 ||
- Watchdog.DpcWatchdogLimit == 0)
- return FALSE;
-
- if (Watchdog.DpcTimeCount > (Watchdog.DpcTimeLimit / 2) &&
- Watchdog.DpcWatchdogCount > (Watchdog.DpcWatchdogLimit / 2))
- return FALSE;
-
- return TRUE;
-}
-
-#define TIME_US(_us) ((_us) * 10)
-#define TIME_MS(_ms) (TIME_US((_ms) * 1000))
-#define TIME_S(_s) (TIME_MS((_s) * 1000))
-#define TIME_RELATIVE(_t) (-(_t))
-
__drv_functionClass(KDEFERRED_ROUTINE)
__drv_maxIRQL(DISPATCH_LEVEL)
__drv_minIRQL(DISPATCH_LEVEL)
@@ -3313,15 +3280,6 @@ TransmitterRingDpc(
__TransmitterRingUnmask(Ring);
break;
}
-
- if (__TransmitterRingDpcTimeout(Ring)) {
- LARGE_INTEGER Delay;
-
- Delay.QuadPart = TIME_RELATIVE(TIME_US(100));
-
- KeSetTimer(&Ring->Timer, Delay, &Ring->TimerDpc);
- break;
- }
}
}
@@ -3354,6 +3312,11 @@ TransmitterRingEvtchnCallback(
return TRUE;
}
+#define TIME_US(_us) ((_us) * 10)
+#define TIME_MS(_ms) (TIME_US((_ms) * 1000))
+#define TIME_S(_s) (TIME_MS((_s) * 1000))
+#define TIME_RELATIVE(_t) (-(_t))
+
#define XENVIF_TRANSMITTER_WATCHDOG_PERIOD 30
static NTSTATUS
@@ -3467,8 +3430,6 @@ __TransmitterRingInitialize(
InitializeListHead(&(*Ring)->PacketComplete);
KeInitializeDpc(&(*Ring)->Dpc, TransmitterRingDpc, *Ring);
- KeInitializeTimer(&(*Ring)->Timer);
- KeInitializeDpc(&(*Ring)->TimerDpc, TransmitterRingDpc, *Ring);
status = RtlStringCbPrintfA(Name,
sizeof (Name),
@@ -3789,7 +3750,6 @@ __TransmitterRingConnect(
ASSERT(NT_SUCCESS(status));
KeSetTargetProcessorDpcEx(&Ring->Dpc, &ProcNumber);
- KeSetTargetProcessorDpcEx(&Ring->TimerDpc, &ProcNumber);
(VOID) XENBUS_EVTCHN(Bind,
&Transmitter->EvtchnInterface,
@@ -4046,12 +4006,6 @@ __TransmitterRingDisable(
__TransmitterRingReleaseLock(Ring);
- //
- // No new timers can be scheduled once Enabled goes to FALSE.
- // Cancel any existing ones.
- //
- (VOID) KeCancelTimer(&Ring->Timer);
-
Info("%s[%u]: <====\n",
FrontendGetPath(Frontend),
Ring->Index);
@@ -4127,8 +4081,6 @@ __TransmitterRingTeardown(
Ring->Dpcs = 0;
- RtlZeroMemory(&Ring->TimerDpc, sizeof (KDPC));
- RtlZeroMemory(&Ring->Timer, sizeof (KTIMER));
RtlZeroMemory(&Ring->Dpc, sizeof (KDPC));
ASSERT3U(Ring->PacketsCompleted, ==, Ring->PacketsSent);
--
2.5.3
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |