[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[win-pv-devel] [PATCH 1/3] BSOD if initial balloon thread has not completed within 20 minutes



Since there is no way of reporting balloon failures to the toolstack,
the only way of stopping a VM from attempting to balloon indefinitely
is to BSOD after a large timeout.

Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
 src/xenbus/fdo.c | 34 ++++++++++++++++++----------------
 1 file changed, 18 insertions(+), 16 deletions(-)

diff --git a/src/xenbus/fdo.c b/src/xenbus/fdo.c
index 9c9e380..722a4b3 100644
--- a/src/xenbus/fdo.c
+++ b/src/xenbus/fdo.c
@@ -3356,29 +3356,31 @@ not_active:
         goto fail8;
 
     if (Fdo->BalloonInterface.Interface.Context != NULL) {
-        BOOLEAN Warned;
+        LARGE_INTEGER   Timeout;
 
         ASSERT(__FdoIsActive(Fdo));
 
-        Warned = FALSE;
+        // Balloon should complete within 10s
+        Timeout.QuadPart = TIME_RELATIVE(TIME_S(10));
 
-        for (;;) {
-            LARGE_INTEGER   Timeout;
+        status = KeWaitForSingleObject(&Fdo->BalloonEvent,
+                                        Executive,
+                                        KernelMode,
+                                        FALSE,
+                                        &Timeout);
+        if (status == STATUS_TIMEOUT) {
+            Warning("waiting for balloon\n");
 
-            Timeout.QuadPart = TIME_RELATIVE(TIME_S(BALLOON_PAUSE));
+            // Wait for up to 20mins (total) before BSOD
+            Timeout.QuadPart = TIME_RELATIVE(TIME_S(1190ll));
 
             status = KeWaitForSingleObject(&Fdo->BalloonEvent,
-                                           Executive,
-                                           KernelMode,
-                                           FALSE,
-                                           &Timeout);
-            if (status != STATUS_TIMEOUT)
-                break;
-
-            if (!Warned) {
-                Warning("waiting for balloon\n");
-                Warned = TRUE;
-            }
+                                            Executive,
+                                            KernelMode,
+                                            FALSE,
+                                            &Timeout);
+            Error("Waited for Balloon (%08x)\n", status);
+            BUG_ON(status == STATUS_TIMEOUT);
         }
     }
 
-- 
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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.