PXENBUS_EVTCHN_ABI_CONTEXT EvtchnFifoContext;
XENBUS_EVTCHN_ABI EvtchnAbi;
BOOLEAN UseEvtchnFifoAbi;
+ BOOLEAN UseEvtchnUpcall;
PXENBUS_HASH_TABLE Table;
LIST_ENTRY List;
};
Trace("====>\n");
+ if (!Context->UseEvtchnUpcall)
+ {
+ Info("PER-CPU UPCALL DISABLED\n");
+ goto line;
+ }
+
for (Cpu = 0; Cpu < Context->ProcessorCount; Cpu++) {
PXENBUS_EVTCHN_PROCESSOR Processor;
unsigned int vcpu_id;
Processor->UpcallEnabled = TRUE;
}
+line:
Line = FdoGetInterruptLine(Context->Fdo, Context->Interrupt);
status = HvmSetParam(HVM_PARAM_CALLBACK_IRQ, Line);
{
HANDLE ParametersKey;
ULONG UseEvtchnFifoAbi;
+ ULONG UseEvtchnUpcall;
NTSTATUS status;
Trace("====>\n");
(*Context)->UseEvtchnFifoAbi = (UseEvtchnFifoAbi != 0) ? TRUE : FALSE;
+ status = RegistryQueryDwordValue(ParametersKey,
+ "UseEvtchnUpcall",
+ &UseEvtchnUpcall);
+ if (!NT_SUCCESS(status))
+ UseEvtchnUpcall = 1;
+
+ (*Context)->UseEvtchnUpcall = (UseEvtchnUpcall != 0) ? TRUE : FALSE;
+
status = SuspendGetInterface(FdoGetSuspendContext(Fdo),
XENBUS_SUSPEND_INTERFACE_VERSION_MAX,
(PINTERFACE)&(*Context)->SuspendInterface,
RtlZeroMemory(&Context->SuspendInterface,
sizeof (XENBUS_SUSPEND_INTERFACE));
+ Context->UseEvtchnUpcall = FALSE;
Context->UseEvtchnFifoAbi = FALSE;
EvtchnFifoTeardown(Context->EvtchnFifoContext);