|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 1/2] Add registry override for EVTCHN ABI
Add a registry parameter DWORD:UseEvtchnFifoAbi than can be set to zero
to prevent use of the FIFO ABI or non-zero to allow it. The default value is
non-zero.
Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
---
src/xenbus/evtchn.c | 32 ++++++++++++++++++++++++++++----
1 file changed, 28 insertions(+), 4 deletions(-)
diff --git a/src/xenbus/evtchn.c b/src/xenbus/evtchn.c
index 2be0da8..1bd5e5f 100644
--- a/src/xenbus/evtchn.c
+++ b/src/xenbus/evtchn.c
@@ -39,6 +39,7 @@
#include "evtchn_fifo.h"
#include "fdo.h"
#include "hash_table.h"
+#include "registry.h"
#include "dbg_print.h"
#include "assert.h"
@@ -98,6 +99,7 @@ struct _XENBUS_EVTCHN_CONTEXT {
PXENBUS_EVTCHN_ABI_CONTEXT EvtchnTwoLevelContext;
PXENBUS_EVTCHN_ABI_CONTEXT EvtchnFifoContext;
XENBUS_EVTCHN_ABI EvtchnAbi;
+ BOOLEAN UseEvtchnFifoAbi;
PXENBUS_HASH_TABLE Table;
LIST_ENTRY List;
};
@@ -670,13 +672,19 @@ EvtchnAbiAcquire(
{
NTSTATUS status;
- EvtchnFifoGetAbi(Context->EvtchnFifoContext,
- &Context->EvtchnAbi);
+ if (Context->UseEvtchnFifoAbi) {
+ EvtchnFifoGetAbi(Context->EvtchnFifoContext,
+ &Context->EvtchnAbi);
- status = XENBUS_EVTCHN_ABI(Acquire, &Context->EvtchnAbi);
- if (NT_SUCCESS(status))
+ status = XENBUS_EVTCHN_ABI(Acquire, &Context->EvtchnAbi);
+ if (!NT_SUCCESS(status))
+ goto use_two_level;
+
+ Info("FIFO\n");
goto done;
+ }
+use_two_level:
EvtchnTwoLevelGetAbi(Context->EvtchnTwoLevelContext,
&Context->EvtchnAbi);
@@ -684,6 +692,8 @@ EvtchnAbiAcquire(
if (!NT_SUCCESS(status))
goto fail1;
+ Info("TWO LEVEL\n");
+
done:
return STATUS_SUCCESS;
@@ -1017,6 +1027,8 @@ EvtchnInitialize(
OUT PXENBUS_EVTCHN_CONTEXT *Context
)
{
+ HANDLE ParametersKey;
+ ULONG UseEvtchnFifoAbi;
NTSTATUS status;
Trace("====>\n");
@@ -1040,6 +1052,16 @@ EvtchnInitialize(
if (!NT_SUCCESS(status))
goto fail4;
+ ParametersKey = DriverGetParametersKey();
+
+ status = RegistryQueryDwordValue(ParametersKey,
+ "UseEvtchnFifoAbi",
+ &UseEvtchnFifoAbi);
+ if (!NT_SUCCESS(status))
+ UseEvtchnFifoAbi = 1;
+
+ (*Context)->UseEvtchnFifoAbi = (UseEvtchnFifoAbi != 0) ? TRUE : FALSE;
+
status = SuspendGetInterface(FdoGetSuspendContext(Fdo),
XENBUS_SUSPEND_INTERFACE_VERSION_MAX,
(PINTERFACE)&(*Context)->SuspendInterface,
@@ -1153,6 +1175,8 @@ EvtchnTeardown(
RtlZeroMemory(&Context->SuspendInterface,
sizeof (XENBUS_SUSPEND_INTERFACE));
+ Context->UseEvtchnFifoAbi = FALSE;
+
EvtchnFifoTeardown(Context->EvtchnFifoContext);
Context->EvtchnFifoContext = NULL;
--
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 |