|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 13/14] Fix BUG on hibernate/shutdown
From: Owen Smith <owen.smith@xxxxxxxxxx>
It seems that raw PDOs do not get a set device power IRP on hibernate.
Force a PdoD3ToD0 transition, if its not already been done, when the
Fdo transitions to D3
Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
src/xencons/pdo.c | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/src/xencons/pdo.c b/src/xencons/pdo.c
index b7a90ca..877b21a 100755
--- a/src/xencons/pdo.c
+++ b/src/xencons/pdo.c
@@ -433,6 +433,8 @@ PdoD3ToD0(
KIRQL Irql;
NTSTATUS status;
+ Trace("=====>\n");
+
ASSERT3U(KeGetCurrentIrql(), == , PASSIVE_LEVEL);
KeRaiseIrql(DISPATCH_LEVEL, &Irql);
@@ -459,6 +461,8 @@ PdoD3ToD0(
#pragma prefast(suppress:28123)
(VOID) IoSetDeviceInterfaceState(&Pdo->Dx->Link, TRUE);
+ Trace("<=====\n");
+
return STATUS_SUCCESS;
fail3:
@@ -487,6 +491,8 @@ PdoD0ToD3(
{
KIRQL Irql;
+ Trace("=====>\n");
+
ASSERT3U(KeGetCurrentIrql(), == , PASSIVE_LEVEL);
#pragma prefast(suppress:28123)
@@ -504,6 +510,8 @@ PdoD0ToD3(
XENBUS_SUSPEND(Release, &Pdo->SuspendInterface);
KeLowerIrql(Irql);
+
+ Trace("<=====\n");
}
// This function must not touch pageable code or data
@@ -1838,7 +1846,15 @@ PdoResume(
IN PXENCONS_PDO Pdo
)
{
- return FrontendResume(Pdo->Frontend);
+ NTSTATUS status;
+
+ Trace("=====>\n");
+
+ status = FrontendResume(Pdo->Frontend);
+
+ Trace("<=====\n");
+
+ return status;
}
VOID
@@ -1846,7 +1862,13 @@ PdoSuspend(
IN PXENCONS_PDO Pdo
)
{
+ Trace("=====>\n");
+
+ if (__PdoGetDevicePowerState(Pdo) == PowerDeviceD0)
+ PdoD0ToD3(Pdo);
FrontendSuspend(Pdo->Frontend);
+
+ Trace("<=====\n");
}
NTSTATUS
--
2.8.3
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |