]> xenbits.xensource.com Git - people/pauldu/xeniface.git/commitdiff
Clean up watches, suspend handlers and events on D0->D3
authorOwen Smith <owen.smith@citrix.com>
Wed, 20 Jul 2016 10:56:25 +0000 (11:56 +0100)
committerPaul Durrant <paul.durrant@citrix.com>
Fri, 22 Jul 2016 10:33:14 +0000 (11:33 +0100)
* Call XenIfaceCleanup on D0->D3 transition
* Change XenIfaceCleanup to accept a NULL file object, which will
  clean up everything, regardless of file object

Signed-off-by: Owen Smith <owen.smith@citrix.com>
src/xeniface/fdo.c
src/xeniface/ioctls.c
src/xeniface/ioctls.h

index 19e50fe69cb4b9611d8aedd8d04bdfe08887bd31..c1c3901fac1fc8c5ffa538f5b4e0fd6fe845bf62 100644 (file)
@@ -1050,6 +1050,7 @@ FdoD0ToD3(
     Trace("====>\n");
 
     WmiSessionsSuspendAll(Fdo);
+    XenIfaceCleanup(Fdo, NULL);
 
     PowerState.DeviceState = PowerDeviceD3;
     PoSetPowerState(Fdo->Dx->DeviceObject,
index 639b015af2472ef808d65f8c30c31f9b7fe11c8b..ca946580526687c18321daa1bb794f4709163f1b 100644 (file)
@@ -137,7 +137,7 @@ _IRQL_requires_(PASSIVE_LEVEL) // EvtchnFree calls KeFlushQueuedDpcs
 VOID
 XenIfaceCleanup(
     __in  PXENIFACE_FDO Fdo,
-    __in  PFILE_OBJECT  FileObject
+    __in_opt  PFILE_OBJECT  FileObject
     )
 {
     PLIST_ENTRY Node;
@@ -154,7 +154,8 @@ XenIfaceCleanup(
         StoreContext = CONTAINING_RECORD(Node, XENIFACE_STORE_CONTEXT, Entry);
 
         Node = Node->Flink;
-        if (StoreContext->FileObject != FileObject)
+        if (FileObject != NULL &&
+            StoreContext->FileObject != FileObject)
             continue;
 
         XenIfaceDebugPrint(TRACE, "Store context %p\n", StoreContext);
@@ -171,7 +172,8 @@ XenIfaceCleanup(
         EvtchnContext = CONTAINING_RECORD(Node, XENIFACE_EVTCHN_CONTEXT, Entry);
 
         Node = Node->Flink;
-        if (EvtchnContext->FileObject != FileObject)
+        if (FileObject != NULL &&
+            EvtchnContext->FileObject != FileObject)
             continue;
 
         XenIfaceDebugPrint(TRACE, "Evtchn context %p\n", EvtchnContext);
@@ -197,7 +199,8 @@ XenIfaceCleanup(
         SuspendContext = CONTAINING_RECORD(Node, XENIFACE_SUSPEND_CONTEXT, Entry);
 
         Node = Node->Flink;
-        if (SuspendContext->FileObject != FileObject)
+        if (FileObject != NULL &&
+            SuspendContext->FileObject != FileObject)
             continue;
 
         XenIfaceDebugPrint(TRACE, "Suspend context %p\n", SuspendContext);
index 14da674761ef1048fe732a005ea1d945b29f94f7..16af0a22481738cbef11a5b83d04ac76ad002a3b 100644 (file)
@@ -119,7 +119,7 @@ _IRQL_requires_(PASSIVE_LEVEL)
 VOID
 XenIfaceCleanup(
     __in  PXENIFACE_FDO Fdo,
-    __in  PFILE_OBJECT  FileObject
+    __in_opt  PFILE_OBJECT  FileObject
     );
 
 DECLSPEC_NOINLINE