)
{
PDEVICE_OBJECT FunctionDeviceObject;
- PXENIFACE_DX Dx;
- PXENIFACE_FDO Fdo;
+ PXENIFACE_DX Dx;
+ PXENIFACE_FDO Fdo;
WCHAR Name[MAXNAMELEN * sizeof (WCHAR)];
ULONG Size;
NTSTATUS status;
- ULONG ProcessorCount;
- ULONG Index;
#pragma prefast(suppress:28197) // Possibly leaking memory 'FunctionDeviceObject'
status = IoCreateDevice(DriverObject,
if (!NT_SUCCESS(status))
goto fail15;
- ProcessorCount = KeQueryMaximumProcessorCountEx(ALL_PROCESSOR_GROUPS);
-
- Fdo->EvtchnDpc = __FdoAllocate(sizeof (KDPC) * ProcessorCount);
-
- status = STATUS_NO_MEMORY;
- if (Fdo->EvtchnDpc == NULL)
- goto fail16;
-
- for (Index = 0; Index < ProcessorCount; Index++) {
- PROCESSOR_NUMBER ProcNumber;
-
- status = KeGetProcessorNumberFromIndex(Index, &ProcNumber);
- ASSERT(NT_SUCCESS(status));
-
- KeInitializeDpc(&Fdo->EvtchnDpc[Index], EvtchnNotificationDpc, NULL);
- status = KeSetTargetProcessorDpcEx(&Fdo->EvtchnDpc[Index], &ProcNumber);
- ASSERT(NT_SUCCESS(status));
- }
-
Info("%p (%s)\n",
FunctionDeviceObject,
__FdoGetName(Fdo));
return STATUS_SUCCESS;
-fail16:
- Error("fail6\n");
-
- RtlZeroMemory(&Fdo->IrpQueue, sizeof (IO_CSQ));
-
fail15:
Error("fail15\n");
{
PXENIFACE_DX Dx = Fdo->Dx;
PDEVICE_OBJECT FunctionDeviceObject = Dx->DeviceObject;
- ULONG ProcessorCount;
ASSERT(IsListEmpty(&Dx->ListEntry));
ASSERT3U(Fdo->References, ==, 0);
Dx->Fdo = NULL;
- ProcessorCount = KeQueryMaximumProcessorCountEx(ALL_PROCESSOR_GROUPS);
- RtlZeroMemory(Fdo->EvtchnDpc, sizeof (KDPC) * ProcessorCount);
-
- __FdoFree(Fdo->EvtchnDpc);
- Fdo->EvtchnDpc = NULL;
-
RtlZeroMemory(&Fdo->GnttabCacheLock, sizeof (KSPIN_LOCK));
ASSERT(IsListEmpty(&Fdo->IrpList));
RtlZeroMemory(&Fdo->IrpList, sizeof (LIST_ENTRY));
__in_opt PVOID Argument2
)
{
- PXENIFACE_EVTCHN_CONTEXT Context = Argument1;
+ PXENIFACE_EVTCHN_CONTEXT Context = _Context;
UNREFERENCED_PARAMETER(Dpc);
- UNREFERENCED_PARAMETER(_Context);
+ UNREFERENCED_PARAMETER(Argument1);
UNREFERENCED_PARAMETER(Argument2);
ASSERT(Context != NULL);
ULONG ProcIndex;
UNREFERENCED_PARAMETER(Interrupt);
+
ASSERT(Context != NULL);
KeGetCurrentProcessorNumberEx(&ProcNumber);
ProcIndex = KeGetProcessorIndexFromNumber(&ProcNumber);
- if (!KeInsertQueueDpc(&Context->Fdo->EvtchnDpc[ProcIndex], Context, NULL)) {
+
+ if (!KeInsertQueueDpc(&Context->Dpc, NULL, NULL)) {
XenIfaceDebugPrint(TRACE, "NOT INSERTED: Context %p, Port %lu, FO %p, Cpu %lu\n",
Context, Context->LocalPort, Context->FileObject, ProcIndex);
}
if (!NT_SUCCESS(status))
goto fail3;
+ KeInitializeDpc(&Context->Dpc, EvtchnNotificationDpc, Context);
+
status = STATUS_UNSUCCESSFUL;
Context->Channel = XENBUS_EVTCHN(Open,
&Fdo->EvtchnInterface,
if (!NT_SUCCESS(status))
goto fail3;
+ KeInitializeDpc(&Context->Dpc, EvtchnNotificationDpc, Context);
+
status = STATUS_UNSUCCESSFUL;
Context->Channel = XENBUS_EVTCHN(Open,
&Fdo->EvtchnInterface,