[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 3/3] Return more error codes from Inflate/Deflate
Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx> --- src/xenbus/balloon.c | 69 ++++++++++++++++++++++++++++++++++------------------ 1 file changed, 45 insertions(+), 24 deletions(-) diff --git a/src/xenbus/balloon.c b/src/xenbus/balloon.c index e2ce8de..5ef30a1 100644 --- a/src/xenbus/balloon.c +++ b/src/xenbus/balloon.c @@ -590,7 +590,7 @@ BalloonLowMemory( return (status == STATUS_SUCCESS) ? TRUE : FALSE; } -static BOOLEAN +static NTSTATUS BalloonDeflate( IN PXENBUS_BALLOON_CONTEXT Context, IN ULONGLONG Requested @@ -598,28 +598,29 @@ BalloonDeflate( { LARGE_INTEGER Start; LARGE_INTEGER End; - BOOLEAN Abort; + NTSTATUS status; ULONGLONG Count; ULONGLONG TimeDelta; + status = STATUS_UNSUCCESSFUL; if (Context->FIST.Deflation) - return TRUE; + goto done; Info("====> %llu page(s)\n", Requested); KeQuerySystemTime(&Start); Count = 0; - Abort = FALSE; + status = STATUS_SUCCESS; - while (Count < Requested && !Abort) { + while (Count < Requested && NT_SUCCESS(status)) { ULONG ThisTime = (ULONG)__min(Requested - Count, XENBUS_BALLOON_PFN_ARRAY_SIZE); ULONG Populated; ULONG Freed; Populated = BalloonPopulatePfnArray(Context, ThisTime); if (Populated < ThisTime) - Abort = TRUE; + status = STATUS_RETRY; Freed = BalloonFreePfnArray(Context, Populated, TRUE); ASSERT(Freed == Populated); @@ -634,10 +635,11 @@ BalloonDeflate( Info("<==== %llu page(s) in %llums\n", Count, TimeDelta); Context->Size -= Count; - return Abort; +done: + return status; } -static BOOLEAN +static NTSTATUS BalloonInflate( IN PXENBUS_BALLOON_CONTEXT Context, IN ULONGLONG Requested @@ -645,23 +647,26 @@ BalloonInflate( { LARGE_INTEGER Start; LARGE_INTEGER End; - BOOLEAN Abort; + NTSTATUS status; ULONGLONG Count; ULONGLONG TimeDelta; + status = STATUS_UNSUCCESSFUL; if (Context->FIST.Inflation) - return TRUE; + goto done; + + status = STATUS_NO_MEMORY; if (BalloonLowMemory(Context)) - return TRUE; + goto done; Info("====> %llu page(s)\n", Requested); KeQuerySystemTime(&Start); Count = 0; - Abort = FALSE; + status = STATUS_SUCCESS; - while (Count < Requested && !Abort) { + while (Count < Requested && NT_SUCCESS(status)) { ULONG ThisTime = (ULONG)__min(Requested - Count, XENBUS_BALLOON_PFN_ARRAY_SIZE); ULONG Allocated; BOOLEAN Slow; @@ -669,7 +674,7 @@ BalloonInflate( Allocated = BalloonAllocatePfnArray(Context, ThisTime, &Slow); if (Allocated < ThisTime || Slow) - Abort = TRUE; + status = STATUS_RETRY; Released = BalloonReleasePfnArray(Context, Allocated); @@ -685,7 +690,7 @@ BalloonInflate( } if (Released == 0) - Abort = TRUE; + status = STATUS_RETRY; Count += Released; } @@ -697,7 +702,8 @@ BalloonInflate( Info("<==== %llu page(s) in %llums\n", Count, TimeDelta); Context->Size += Count; - return Abort; +done: + return status; } static VOID @@ -747,6 +753,20 @@ BalloonGetFISTEntries( Warning("deflation disallowed\n"); } +static FORCEINLINE PCHAR +__BalloonStatus( + IN NTSTATUS status + ) +{ + switch (status) { + case STATUS_SUCCESS: return ""; + case STATUS_UNSUCCESSFUL: return " [FIST]"; + case STATUS_RETRY: return " [RETRY]"; + case STATUS_NO_MEMORY: return " [LOW_MEM]"; + default: return " [UNKNOWN]"; + } +} + NTSTATUS BalloonAdjust( IN PINTERFACE Interface, @@ -754,28 +774,29 @@ BalloonAdjust( ) { PXENBUS_BALLOON_CONTEXT Context = Interface->Context; - BOOLEAN Abort; + NTSTATUS status; ASSERT3U(KeGetCurrentIrql(), <, DISPATCH_LEVEL); Info("====> (%llu page(s))\n", Context->Size); - Abort = FALSE; + status = STATUS_SUCCESS; BalloonGetFISTEntries(Context); - while (Context->Size != Size && !Abort) { + while (Context->Size != Size && NT_SUCCESS(status)) { if (Size > Context->Size) - Abort = BalloonInflate(Context, Size - Context->Size); + status = BalloonInflate(Context, Size - Context->Size); else if (Size < Context->Size) - Abort = BalloonDeflate(Context, Context->Size - Size); + status = BalloonDeflate(Context, Context->Size - Size); } - Info("<==== (%llu page(s))%s\n", + Info("<==== (%llu page(s))%s%s\n", Context->Size, - (Abort) ? " [ABORTED]" : ""); + NT_SUCCESS(status) ? "" : " [ABORTED]", + __BalloonStatus(status)); - return (Abort) ? STATUS_RETRY : STATUS_SUCCESS; + return status; } ULONGLONG -- 1.9.4.msysgit.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 |