|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH] Remove watchdog affinitisation on Windows 2008
From: Ben Chalmers <Ben.Chalmers@xxxxxxxxxx>
Despite the presence of a compatability library, the
Windows 2008 calls to affinitise the watchdog thread
to a particular processor group are leading to lockups.
So detect if we are running on a version prior to
Windows 7 (or 2008 R2), and don't try to affinitise if
we are.
Signed-off-by: Ben.Chalmers@xxxxxxxxxx
---
src/xenvif/receiver.c | 24 ++++++++++++++----------
src/xenvif/transmitter.c | 24 ++++++++++++++----------
vs2012/xenvif/xenvif.vcxproj | 2 +-
vs2013/xenvif/xenvif.vcxproj | 4 ++--
4 files changed, 31 insertions(+), 23 deletions(-)
diff --git a/src/xenvif/receiver.c b/src/xenvif/receiver.c
index 76c4e0c..07fa642 100644
--- a/src/xenvif/receiver.c
+++ b/src/xenvif/receiver.c
@@ -2282,16 +2282,20 @@ ReceiverRingWatchdog(
Trace("====>\n");
- //
- // Affinitize this thread to the same CPU as the event channel
- // and DPC.
- //
- status = KeGetProcessorNumberFromIndex(Ring->Index, &ProcNumber);
- ASSERT(NT_SUCCESS(status));
-
- Affinity.Group = ProcNumber.Group;
- Affinity.Mask = (KAFFINITY)1 << ProcNumber.Number;
- KeSetSystemGroupAffinityThread(&Affinity, NULL);
+ if (RtlIsNtDdiVersionAvailable(NTDDI_WIN7) ) {
+ //
+ // Affinitize this thread to the same CPU as the event channel
+ // and DPC.
+ //
+ // The following functions don't work before Windows 7
+ //
+ status = KeGetProcessorNumberFromIndex(Ring->Index, &ProcNumber);
+ ASSERT(NT_SUCCESS(status));
+
+ Affinity.Group = ProcNumber.Group;
+ Affinity.Mask = (KAFFINITY)1 << ProcNumber.Number;
+ KeSetSystemGroupAffinityThread(&Affinity, NULL);
+ }
Timeout.QuadPart = TIME_RELATIVE(TIME_S(XENVIF_RECEIVER_WATCHDOG_PERIOD));
diff --git a/src/xenvif/transmitter.c b/src/xenvif/transmitter.c
index fae7b1b..b196e0a 100644
--- a/src/xenvif/transmitter.c
+++ b/src/xenvif/transmitter.c
@@ -3349,16 +3349,20 @@ TransmitterRingWatchdog(
Trace("====>\n");
- //
- // Affinitize this thread to the same CPU as the event channel
- // and DPC.
- //
- status = KeGetProcessorNumberFromIndex(Ring->Index, &ProcNumber);
- ASSERT(NT_SUCCESS(status));
-
- Affinity.Group = ProcNumber.Group;
- Affinity.Mask = (KAFFINITY)1 << ProcNumber.Number;
- KeSetSystemGroupAffinityThread(&Affinity, NULL);
+ if (RtlIsNtDdiVersionAvailable(NTDDI_WIN7) ) {
+ //
+ // Affinitize this thread to the same CPU as the event channel
+ // and DPC.
+ //
+ // The following functions don't work before Windows 7
+ //
+ status = KeGetProcessorNumberFromIndex(Ring->Index, &ProcNumber);
+ ASSERT(NT_SUCCESS(status));
+
+ Affinity.Group = ProcNumber.Group;
+ Affinity.Mask = (KAFFINITY)1 << ProcNumber.Number;
+ KeSetSystemGroupAffinityThread(&Affinity, NULL);
+ }
Timeout.QuadPart =
TIME_RELATIVE(TIME_S(XENVIF_TRANSMITTER_WATCHDOG_PERIOD));
PacketsQueued = 0;
diff --git a/vs2012/xenvif/xenvif.vcxproj b/vs2012/xenvif/xenvif.vcxproj
index 170ab53..2271bd7 100644
--- a/vs2012/xenvif/xenvif.vcxproj
+++ b/vs2012/xenvif/xenvif.vcxproj
@@ -34,7 +34,7 @@
</ClCompile>
<Link>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-
<AdditionalDependencies>$(DDK_LIB_PATH)/libcntpr.lib;$(DDK_LIB_PATH)/aux_klib.lib;$(DDK_LIB_PATH)/ksecdd.lib;$(DDK_LIB_PATH)/procgrp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+
<AdditionalDependencies>$(DDK_LIB_PATH)/Rtlver.lib;$(DDK_LIB_PATH)/libcntpr.lib;$(DDK_LIB_PATH)/aux_klib.lib;$(DDK_LIB_PATH)/ksecdd.lib;$(DDK_LIB_PATH)/procgrp.lib;%(AdditionalDependencies)</AdditionalDependencies>
<EnableCOMDATFolding>false</EnableCOMDATFolding>
</Link>
<Inf>
diff --git a/vs2013/xenvif/xenvif.vcxproj b/vs2013/xenvif/xenvif.vcxproj
index 9d1dba3..ed72de2 100644
--- a/vs2013/xenvif/xenvif.vcxproj
+++ b/vs2013/xenvif/xenvif.vcxproj
@@ -37,7 +37,7 @@
</ResourceCompile>
<Link>
<ImageHasSafeExceptionHandlers>false</ImageHasSafeExceptionHandlers>
-
<AdditionalDependencies>$(DDK_LIB_PATH)/libcntpr.lib;$(DDK_LIB_PATH)/aux_klib.lib;$(DDK_LIB_PATH)/ksecdd.lib;$(DDK_LIB_PATH)/procgrp.lib;%(AdditionalDependencies)</AdditionalDependencies>
+
<AdditionalDependencies>$(DDK_LIB_PATH)/Rtlver.lib;$(DDK_LIB_PATH)/libcntpr.lib;$(DDK_LIB_PATH)/aux_klib.lib;$(DDK_LIB_PATH)/ksecdd.lib;$(DDK_LIB_PATH)/procgrp.lib;%(AdditionalDependencies)</AdditionalDependencies>
<EnableCOMDATFolding>false</EnableCOMDATFolding>
</Link>
<Inf>
@@ -96,4 +96,4 @@
<None Include="..\package\package.vcxproj" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
-</Project>
\ No newline at end of file
+</Project>
--
2.7.0.windows.1
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |