From 275516cd012d3414f6bccb0ba380ae5c6bb7013f Mon Sep 17 00:00:00 2001 From: Owen Smith Date: Tue, 15 Dec 2015 11:30:19 +0000 Subject: [PATCH] Move balloon failure conditions to Inflate/Deflate calls Signed-off-by: Owen Smith --- src/xenbus/balloon.c | 54 ++++++++++++++++++++++++-------------------- 1 file changed, 30 insertions(+), 24 deletions(-) diff --git a/src/xenbus/balloon.c b/src/xenbus/balloon.c index e697722..27968c8 100644 --- a/src/xenbus/balloon.c +++ b/src/xenbus/balloon.c @@ -571,6 +571,25 @@ done: return Count; } +static BOOLEAN +BalloonLowMemory( + IN PXENBUS_BALLOON_CONTEXT Context + ) +{ + LARGE_INTEGER Timeout; + NTSTATUS status; + + Timeout.QuadPart = 0; + + status = KeWaitForSingleObject(Context->LowMemoryEvent, + Executive, + KernelMode, + FALSE, + &Timeout); + + return (status == STATUS_SUCCESS) ? TRUE : FALSE; +} + static BOOLEAN BalloonDeflate( IN PXENBUS_BALLOON_CONTEXT Context, @@ -583,6 +602,9 @@ BalloonDeflate( ULONGLONG Count; ULONGLONG TimeDelta; + if (Context->FIST.Deflation) + return TRUE; + Info("====> %llu page(s)\n", Requested); KeQuerySystemTime(&Start); @@ -627,6 +649,12 @@ BalloonInflate( ULONGLONG Count; ULONGLONG TimeDelta; + if (Context->FIST.Inflation) + return TRUE; + + if (BalloonLowMemory(Context)) + return TRUE; + Info("====> %llu page(s)\n", Requested); KeQuerySystemTime(&Start); @@ -673,25 +701,6 @@ BalloonInflate( return Abort; } -static BOOLEAN -BalloonLowMemory( - IN PXENBUS_BALLOON_CONTEXT Context - ) -{ - LARGE_INTEGER Timeout; - NTSTATUS status; - - Timeout.QuadPart = 0; - - status = KeWaitForSingleObject(Context->LowMemoryEvent, - Executive, - KernelMode, - FALSE, - &Timeout); - - return (status == STATUS_SUCCESS) ? TRUE : FALSE; -} - static VOID BalloonGetFISTEntries( IN PXENBUS_BALLOON_CONTEXT Context @@ -758,12 +767,9 @@ BalloonAdjust( while (Context->Size != Size && !Abort) { if (Size > Context->Size) - Abort = Context->FIST.Inflation || - BalloonLowMemory(Context) || - BalloonInflate(Context, Size - Context->Size); + Abort = BalloonInflate(Context, Size - Context->Size); else if (Size < Context->Size) - Abort = Context->FIST.Deflation || - BalloonDeflate(Context, Context->Size - Size); + Abort = BalloonDeflate(Context, Context->Size - Size); } Info("<==== (%llu page(s))%s\n", -- 2.39.5