summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--datapath-windows/ovsext/Datapath.c5
-rw-r--r--datapath-windows/ovsext/Datapath.h2
-rw-r--r--datapath-windows/ovsext/Driver.c8
3 files changed, 11 insertions, 4 deletions
diff --git a/datapath-windows/ovsext/Datapath.c b/datapath-windows/ovsext/Datapath.c
index 066541217..8eb13f14a 100644
--- a/datapath-windows/ovsext/Datapath.c
+++ b/datapath-windows/ovsext/Datapath.c
@@ -448,10 +448,8 @@ OvsCreateDeviceObject(NDIS_HANDLE ovsExtDriverHandle)
if (ovsExt) {
ovsExt->numberOpenInstance = 0;
}
- } else {
- /* Initialize the associated data structures. */
- OvsInit();
}
+
OVS_LOG_TRACE("DeviceObject: %p", gOvsDeviceObject);
return status;
}
@@ -474,7 +472,6 @@ OvsDeleteDeviceObject()
gOvsDeviceHandle = NULL;
gOvsDeviceObject = NULL;
}
- OvsCleanup();
}
POVS_OPEN_INSTANCE
diff --git a/datapath-windows/ovsext/Datapath.h b/datapath-windows/ovsext/Datapath.h
index 2e3bac58f..ba31ece4b 100644
--- a/datapath-windows/ovsext/Datapath.h
+++ b/datapath-windows/ovsext/Datapath.h
@@ -81,6 +81,8 @@ typedef struct _OVS_OPEN_INSTANCE {
NDIS_STATUS OvsCreateDeviceObject(NDIS_HANDLE ovsExtDriverHandle);
VOID OvsDeleteDeviceObject();
+VOID OvsInit();
+VOID OvsCleanup();
POVS_OPEN_INSTANCE OvsGetOpenInstance(PFILE_OBJECT fileObject,
UINT32 dpNo);
diff --git a/datapath-windows/ovsext/Driver.c b/datapath-windows/ovsext/Driver.c
index 0a9c35ab2..13fcde200 100644
--- a/datapath-windows/ovsext/Driver.c
+++ b/datapath-windows/ovsext/Driver.c
@@ -95,6 +95,9 @@ DriverEntry(PDRIVER_OBJECT driverObject,
UNREFERENCED_PARAMETER(registryPath);
+ /* Initialize driver associated data structures. */
+ OvsInit();
+
gOvsExtDriverObject = driverObject;
RtlZeroMemory(&driverChars, sizeof driverChars);
@@ -145,6 +148,7 @@ DriverEntry(PDRIVER_OBJECT driverObject,
/* Create the communication channel for usersapce. */
status = OvsCreateDeviceObject(gOvsExtDriverHandle);
if (status != NDIS_STATUS_SUCCESS) {
+ OvsCleanup();
NdisFDeregisterFilterDriver(gOvsExtDriverHandle);
gOvsExtDriverHandle = NULL;
}
@@ -163,7 +167,11 @@ OvsExtUnload(struct _DRIVER_OBJECT *driverObject)
{
UNREFERENCED_PARAMETER(driverObject);
+ /* Release driver associated data structures. */
+ OvsCleanup();
+
OvsDeleteDeviceObject();
+
NdisFDeregisterFilterDriver(gOvsExtDriverHandle);
}