[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 |