Index: trunk/src/VBox/Runtime/r0drv/nt/initterm-r0drv-nt.cpp
===================================================================
--- trunk/src/VBox/Runtime/r0drv/nt/initterm-r0drv-nt.cpp	(revision 60769)
+++ trunk/src/VBox/Runtime/r0drv/nt/initterm-r0drv-nt.cpp	(revision 60771)
@@ -61,6 +61,4 @@
 /** HalRequestIpi, version valid up to windows vista?? */
 PFNHALREQUESTIPI_PRE_W7             g_pfnrtHalRequestIpiPreW7;
-/** HalSendSoftwareInterrupt, introduced in AMD64 version of W2K3. */
-PFNHALSENDSOFTWAREINTERRUPT         g_pfnrtNtHalSendSoftwareInterrupt;
 /** Worker for RTMpPokeCpu. */
 PFNRTSENDIPI                        g_pfnrtMpPokeCpuWorker;
@@ -227,5 +225,4 @@
     g_pfnrtHalRequestIpiW7Plus = NULL;
     g_pfnrtHalRequestIpiPreW7 = NULL;
-    g_pfnrtNtHalSendSoftwareInterrupt = NULL;
     g_pfnrtKeIpiGenericCall = NULL;
     g_pfnrtKeInitializeAffinityEx = NULL;
@@ -248,7 +245,4 @@
     g_pfnrtHalRequestIpiW7Plus = (PFNHALREQUESTIPI_W7PLUS)MmGetSystemRoutineAddress(&RoutineName);
     g_pfnrtHalRequestIpiPreW7 = (PFNHALREQUESTIPI_PRE_W7)g_pfnrtHalRequestIpiW7Plus;
-
-    RtlInitUnicodeString(&RoutineName, L"HalSendSoftwareInterrupt");
-    g_pfnrtNtHalSendSoftwareInterrupt = (PFNHALSENDSOFTWAREINTERRUPT)MmGetSystemRoutineAddress(&RoutineName);
 
     RtlInitUnicodeString(&RoutineName, L"KeIpiGenericCall");
@@ -412,9 +406,16 @@
      *
      * On Vista and later the DPC method doesn't seem to reliably send IPIs,
-     * so we have to use alternative methods.  The NtHalSendSoftwareInterrupt
-     * is preferrable, but it's AMD64 only.  The NalRequestIpip method changed
-     * in Windows 7 with the lots-of-processors-support, but it's the only
-     * targeted IPI game in town if we cannot use KeInsertQueueDpc.  Worst case
-     * we use broadcast IPIs.
+     * so we have to use alternative methods.
+     *
+     * On AMD64 We used to use the HalSendSoftwareInterrupt API (also x86 on
+     * W10+), it looks faster and more convenient to use, however we're either
+     * using it wrong or it doesn't reliably do what we want (see @bugref{8343}).
+     *
+     * The HalRequestIpip API is thus far the only alternative to KeInsertQueueDpc
+     * for doing targetted IPIs.  Trouble with this API is that it changed
+     * fundamentally in Window 7 when they added support for lots of processors.
+     *
+     * If we really think we cannot use KeInsertQueueDpc, we use the broadcast IPI
+     * API KeIpiGenericCall.
      */
     if (   OsVerInfo.uMajorVer > 6
@@ -426,16 +427,8 @@
     g_pfnrtMpPokeCpuWorker = rtMpPokeCpuUsingDpc;
 #ifndef IPRT_TARGET_NT4
-# if 0 /* Currently disabled as we're checking whether it's responsible for @bugref{8343} (smp windows performance issue). */
-    if (g_pfnrtNtHalSendSoftwareInterrupt && true /* don't do this, SMP performance regression. */)
-    {
-        DbgPrint("IPRT: RTMpPoke => rtMpPokeCpuUsingHalSendSoftwareInterrupt\n");
-        g_pfnrtMpPokeCpuWorker = rtMpPokeCpuUsingHalSendSoftwareInterrupt;
-    }
-    else
-#endif
-         if (   g_pfnrtHalRequestIpiW7Plus
-             && g_pfnrtKeInitializeAffinityEx
-             && g_pfnrtKeAddProcessorAffinityEx
-             && g_pfnrtKeGetProcessorIndexFromNumber)
+    if (   g_pfnrtHalRequestIpiW7Plus
+        && g_pfnrtKeInitializeAffinityEx
+        && g_pfnrtKeAddProcessorAffinityEx
+        && g_pfnrtKeGetProcessorIndexFromNumber)
     {
         DbgPrint("IPRT: RTMpPoke => rtMpPokeCpuUsingHalReqestIpiW7Plus\n");
Index: trunk/src/VBox/Runtime/r0drv/nt/internal-r0drv-nt.h
===================================================================
--- trunk/src/VBox/Runtime/r0drv/nt/internal-r0drv-nt.h	(revision 60769)
+++ trunk/src/VBox/Runtime/r0drv/nt/internal-r0drv-nt.h	(revision 60771)
@@ -79,5 +79,4 @@
 int __stdcall rtMpPokeCpuUsingDpc(RTCPUID idCpu);
 int __stdcall rtMpPokeCpuUsingBroadcastIpi(RTCPUID idCpu);
-int __stdcall rtMpPokeCpuUsingHalSendSoftwareInterrupt(RTCPUID idCpu);
 int __stdcall rtMpPokeCpuUsingHalReqestIpiW7Plus(RTCPUID idCpu);
 int __stdcall rtMpPokeCpuUsingHalReqestIpiPreW7(RTCPUID idCpu);
Index: trunk/src/VBox/Runtime/r0drv/nt/mp-r0drv-nt.cpp
===================================================================
--- trunk/src/VBox/Runtime/r0drv/nt/mp-r0drv-nt.cpp	(revision 60769)
+++ trunk/src/VBox/Runtime/r0drv/nt/mp-r0drv-nt.cpp	(revision 60771)
@@ -738,6 +738,5 @@
 #ifndef IPRT_TARGET_NT4
             if (   !pArgs->fExecuting
-                && (   g_pfnrtMpPokeCpuWorker == rtMpPokeCpuUsingHalSendSoftwareInterrupt
-                    || g_pfnrtMpPokeCpuWorker == rtMpPokeCpuUsingHalReqestIpiW7Plus
+                && (   g_pfnrtMpPokeCpuWorker == rtMpPokeCpuUsingHalReqestIpiW7Plus
                     || g_pfnrtMpPokeCpuWorker == rtMpPokeCpuUsingHalReqestIpiPreW7))
                 RTMpPokeCpu(idCpu);
@@ -820,19 +819,4 @@
 
 /**
- * RTMpPokeCpu worker that uses HalSendSoftwareInterrupt to get the job done.
- *
- * This is only really available on AMD64, at least at the time of writing.
- *
- * @returns VINF_SUCCESS
- * @param   idCpu           The CPU identifier.
- */
-int rtMpPokeCpuUsingHalSendSoftwareInterrupt(RTCPUID idCpu)
-{
-    g_pfnrtNtHalSendSoftwareInterrupt(idCpu, DISPATCH_LEVEL);
-    return VINF_SUCCESS;
-}
-
-
-/**
  * RTMpPokeCpu worker that uses the Windows 7 and later version of
  * HalRequestIpip to get the job done.
