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