#define XEN_SYSTEM_TAG 'TSYS'
typedef struct _SYSTEM_PROCESSOR {
+ KDPC Dpc;
CHAR Manufacturer[13];
UCHAR ApicID;
UCHAR ProcessorID;
)
{
PSYSTEM_CONTEXT Context = &SystemContext;
- PKEVENT Event = _Context;
+ PKEVENT Event = Argument1;
ULONG Index;
PROCESSOR_NUMBER ProcNumber;
PSYSTEM_PROCESSOR Processor;
ULONG EDX;
UNREFERENCED_PARAMETER(Dpc);
- UNREFERENCED_PARAMETER(Argument1);
+ UNREFERENCED_PARAMETER(_Context);
UNREFERENCED_PARAMETER(Argument2);
Index = KeGetCurrentProcessorNumberEx(&ProcNumber);
break;
}
case KeProcessorAddCompleteNotify: {
+ PSYSTEM_PROCESSOR Processor;
KEVENT Event;
- KDPC Dpc;
ASSERT3U(Index, <, Context->ProcessorCount);
+ Processor = &Context->Processor[Index];
+
KeInitializeEvent(&Event, NotificationEvent, FALSE);
- KeInitializeDpc(&Dpc, SystemProcessorInformation, &Event);
- KeSetImportanceDpc(&Dpc, HighImportance);
- KeSetTargetProcessorDpcEx(&Dpc, &ProcNumber);
+ KeInitializeDpc(&Processor->Dpc, SystemProcessorInformation, NULL);
+ KeSetImportanceDpc(&Processor->Dpc, HighImportance);
+ KeSetTargetProcessorDpcEx(&Processor->Dpc, &ProcNumber);
- KeInsertQueueDpc(&Dpc, NULL, NULL);
+ KeInsertQueueDpc(&Processor->Dpc, &Event, NULL);
(VOID) KeWaitForSingleObject(&Event,
Executive,
Context->ProcessorChangeHandle = NULL;
__SystemFree(Context->Processor);
+ Context->Processor = NULL;
Context->ProcessorCount = 0;
}