Since the per-processor data in the SYNC code was split out from the
main context structure, the code that zeroes that structure on resume
no longer clears the per-processor Exit flag. This means that a multi-
vcpu VM can only be suspended once; subsequent attempts will fail.
This patch fixes the problem by zeroing the full page containing the SYNC
context structure and any per-processor data.
Signed-off-by: Paul Durrant <paul.durrant@citrix.com>
Trace("====> (%u:%u)\n", Group, Number);
- ASSERT(IsZeroMemory(Context, sizeof (SYNC_CONTEXT)));
+ ASSERT(IsZeroMemory(Context, PAGE_SIZE));
Context->Sequence++;
Context->CompletionCount = 0;
KeMemoryBarrier();
}
- RtlZeroMemory(Context, sizeof (SYNC_CONTEXT));
+ RtlZeroMemory(Context, PAGE_SIZE);
Index = KeGetCurrentProcessorNumberEx(NULL);
__SyncRelease(Index);