|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 1/5] Remove use of KeNumberProcessors from SYNC code
KeNumberProcessors is obsolete so replace it with an inital call to
KeQueryActiveProcessorCount() whenever we start a capture operation.
Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
src/xenbus/sync.c | 47 +++++++++++++++++------------------------------
1 file changed, 17 insertions(+), 30 deletions(-)
diff --git a/src/xenbus/sync.c b/src/xenbus/sync.c
index 78b5bef..5730039 100644
--- a/src/xenbus/sync.c
+++ b/src/xenbus/sync.c
@@ -82,6 +82,7 @@
typedef struct _SYNC_CONTEXT {
KDPC Dpc[MAXIMUM_PROCESSORS];
ULONG Sequence;
+ LONG CpuCount;
LONG CompletionCount;
BOOLEAN DisableInterrupts[MAXIMUM_PROCESSORS];
BOOLEAN Exit[MAXIMUM_PROCESSORS];
@@ -129,7 +130,6 @@ SyncWorker(
{
BOOLEAN InterruptsDisabled;
ULONG Cpu;
- LONG CpuCount;
UNREFERENCED_PARAMETER(Dpc);
UNREFERENCED_PARAMETER(Context);
@@ -142,8 +142,6 @@ SyncWorker(
Trace("====> (%u)\n", Cpu);
InterlockedIncrement(&SyncContext.CompletionCount);
- CpuCount = KeNumberProcessors;
-
for (;;) {
ULONG Sequence;
@@ -170,7 +168,7 @@ SyncWorker(
Attempts = 0;
while (SyncContext.Sequence == Sequence &&
- SyncContext.CompletionCount < CpuCount) {
+ SyncContext.CompletionCount < SyncContext.CpuCount) {
_mm_pause();
KeMemoryBarrier();
@@ -182,11 +180,11 @@ SyncWorker(
Old = SyncContext.CompletionCount;
New = Old - 1;
- if (Old == CpuCount)
+ if (Old == SyncContext.CpuCount)
break;
} while
(InterlockedCompareExchange(&SyncContext.CompletionCount, New, Old) != Old);
- if (Old < CpuCount) {
+ if (Old < SyncContext.CpuCount) {
#pragma prefast(suppress:28138) // Use constant rather than variable
KeLowerIrql(DISPATCH_LEVEL);
status = STATUS_UNSUCCESSFUL;
@@ -212,7 +210,7 @@ SyncWorker(
InterlockedIncrement(&SyncContext.CompletionCount);
while (SyncContext.Sequence == Sequence &&
- SyncContext.CompletionCount < CpuCount) {
+ SyncContext.CompletionCount < SyncContext.CpuCount) {
_mm_pause();
KeMemoryBarrier();
}
@@ -234,7 +232,6 @@ SyncCapture(
)
{
ULONG Cpu;
- LONG CpuCount;
ULONG Index;
ASSERT3U(KeGetCurrentIrql(), ==, DISPATCH_LEVEL);
@@ -248,10 +245,9 @@ SyncCapture(
SyncContext.Sequence++;
SyncContext.CompletionCount = 0;
+ SyncContext.CpuCount = KeQueryActiveProcessorCount(NULL);
- CpuCount = KeNumberProcessors;
-
- for (Index = 0; Index < (ULONG)CpuCount; Index++) {
+ for (Index = 0; Index < (ULONG)SyncContext.CpuCount; Index++) {
PKDPC Dpc = &SyncContext.Dpc[Index];
SyncContext.DisableInterrupts[Index] = FALSE;
@@ -267,7 +263,7 @@ SyncCapture(
InterlockedIncrement(&SyncContext.CompletionCount);
- while (SyncContext.CompletionCount < CpuCount) {
+ while (SyncContext.CompletionCount < SyncContext.CpuCount) {
_mm_pause();
KeMemoryBarrier();
}
@@ -282,7 +278,6 @@ SyncDisableInterrupts(
VOID
)
{
- LONG CpuCount;
ULONG Index;
ULONG Attempts;
NTSTATUS status;
@@ -292,9 +287,7 @@ SyncDisableInterrupts(
SyncContext.Sequence++;
SyncContext.CompletionCount = 0;
- CpuCount = KeNumberProcessors;
-
- for (Index = 0; Index < (ULONG)CpuCount; Index++)
+ for (Index = 0; Index < (ULONG)SyncContext.CpuCount; Index++)
SyncContext.DisableInterrupts[Index] = TRUE;
again:
@@ -304,7 +297,7 @@ again:
InterlockedIncrement(&SyncContext.CompletionCount);
Attempts = 0;
- while (SyncContext.CompletionCount < CpuCount) {
+ while (SyncContext.CompletionCount < SyncContext.CpuCount) {
_mm_pause();
KeMemoryBarrier();
@@ -316,15 +309,15 @@ again:
Old = SyncContext.CompletionCount;
New = Old - 1;
- if (Old == CpuCount)
+ if (Old == SyncContext.CpuCount)
break;
} while (InterlockedCompareExchange(&SyncContext.CompletionCount,
New, Old) != Old);
- if (Old < CpuCount) {
+ if (Old < SyncContext.CpuCount) {
LogPrintf(LOG_LEVEL_WARNING,
"SYNC: %d < %d\n",
Old,
- CpuCount);
+ SyncContext.CpuCount);
#pragma prefast(suppress:28138) // Use constant rather than variable
KeLowerIrql(DISPATCH_LEVEL);
@@ -347,7 +340,6 @@ SyncEnableInterrupts(
)
{
KIRQL Irql;
- LONG CpuCount;
ULONG Index;
_enable();
@@ -358,14 +350,12 @@ SyncEnableInterrupts(
SyncContext.Sequence++;
SyncContext.CompletionCount = 0;
- CpuCount = KeNumberProcessors;
-
- for (Index = 0; Index < (ULONG)CpuCount; Index++)
+ for (Index = 0; Index < (ULONG)SyncContext.CpuCount; Index++)
SyncContext.DisableInterrupts[Index] = FALSE;
InterlockedIncrement(&SyncContext.CompletionCount);
- while (SyncContext.CompletionCount < CpuCount) {
+ while (SyncContext.CompletionCount < SyncContext.CpuCount) {
_mm_pause();
KeMemoryBarrier();
}
@@ -383,7 +373,6 @@ SyncRelease(
VOID
)
{
- LONG CpuCount;
ULONG Cpu;
ULONG Index;
@@ -392,14 +381,12 @@ SyncRelease(
SyncContext.Sequence++;
SyncContext.CompletionCount = 0;
- CpuCount = KeNumberProcessors;
-
- for (Index = 0; Index < (ULONG)CpuCount; Index++)
+ for (Index = 0; Index < (ULONG)SyncContext.CpuCount; Index++)
SyncContext.Exit[Index] = TRUE;
InterlockedIncrement(&SyncContext.CompletionCount);
- while (SyncContext.CompletionCount < CpuCount) {
+ while (SyncContext.CompletionCount < SyncContext.CpuCount) {
_mm_pause();
KeMemoryBarrier();
}
--
2.1.1
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |