If using a kernel with xmon enabled, when triggering a BUG() we enter
xmon.  This effectively stalls the xm-tests process.  This patch teaches
xm-test to recognise the xmon prompt and FAIL the test.

This patch requires applies on top of my previous xm-test patches

Signed-off-by: Tony Breeds <[EMAIL PROTECTED]>

---
 tools/xm-test/lib/XmTestLib/Console.py |    5 +++++
 tools/xm-test/lib/XmTestLib/arch.py    |   20 ++++++++++++++++++++
 2 files changed, 25 insertions(+)
---
diff -r 21738b37ac32 tools/xm-test/lib/XmTestLib/Console.py
--- a/tools/xm-test/lib/XmTestLib/Console.py    Wed Oct 04 14:54:10 2006 +1000
+++ b/tools/xm-test/lib/XmTestLib/Console.py    Thu Oct 05 13:15:49 2006 +1000
@@ -31,6 +31,7 @@ import fcntl
 import fcntl
 import select
 
+import arch
 from Test import *
 
 TIMEDOUT = 1
@@ -120,6 +121,7 @@ class XmConsole:
     def __getprompt(self, fd):
         timeout = 0
         bytes = 0
+        buffer = ""
         while timeout < 180:
             # eat anything while total bytes less than limit else raise RUNAWAY
             while (not self.limit) or (bytes < self.limit):
@@ -130,6 +132,7 @@ class XmConsole:
                         if self.debugMe:
                             sys.stdout.write(foo)
                         bytes += 1
+                        buffer += foo
                     except Exception, exn:
                         raise ConsoleError(str(exn))
                 else:
@@ -137,6 +140,8 @@ class XmConsole:
             else:
                 raise ConsoleError("Console run-away (exceeded %i bytes)"
                                    % self.limit, RUNAWAY)
+            # Check to see if the buffer contains anything interetsing
+            arch.checkBuffer(buffer)
             # press enter
             os.write(self.consoleFd, "\n")
             # look for prompt
diff -r 21738b37ac32 tools/xm-test/lib/XmTestLib/arch.py
--- a/tools/xm-test/lib/XmTestLib/arch.py       Wed Oct 04 14:54:10 2006 +1000
+++ b/tools/xm-test/lib/XmTestLib/arch.py       Thu Oct 05 13:15:49 2006 +1000
@@ -25,6 +25,8 @@ import config
 import config
 import commands
 
+from Test import *
+
 BLOCK_ROOT_DEV = "hda"
 
 # This isn't truly platform related but it makes the code tidier
@@ -38,6 +40,9 @@ def getRdPath():
     return rdpath
 
 # Begin: Intel ia32 and ia64 as well as AMD 32-bit and 64-bit processors
+def ia_checkBuffer(buffer):
+    return
+
 def ia_minSafeMem():
     return 32
 
@@ -81,6 +86,19 @@ ia_HVMDefaults =      {"memory"       : 
 # End  : Intel ia32 and ia64 as well as AMD 32-bit and 64-bit processors
 
 # Begin: PowerPC
+def ppc_checkBuffer(buffer):
+    checks = [
+        {"pattern" : re.compile("^\d+:mon>\s*$", re.MULTILINE),
+         "message" : "domain trapped into XMON"},
+    ]
+
+    for i in range(0, len(checks)):
+        check=checks[i]
+        if check.get('pattern').search(buffer):
+               FAIL(check.get('message'))
+
+    return
+
 def ppc_minSafeMem():
     return 64
 
@@ -116,6 +134,7 @@ if _arch == "x86" or _arch == "ia64":
 if _arch == "x86" or _arch == "ia64":
     minSafeMem = ia_minSafeMem
     getDefaultKernel = ia_getDefaultKernel
+    checkBuffer = ia_checkBuffer
     if config.ENABLE_HVM_SUPPORT:
         configDefaults = ia_HVMDefaults
     else:
@@ -123,6 +142,7 @@ elif _arch == "powerpc":
 elif _arch == "powerpc":
     minSafeMem = ppc_minSafeMem
     getDefaultKernel = ppc_getDefaultKernel
+    checkBuffer = ppc_checkBuffer
     configDefaults = ppc_ParavirtDefaults
 else:
     raise ValueError, "Unknown architecture!"

Yours Tony

   linux.conf.au       http://linux.conf.au/ || http://lca2007.linux.org.au/
   Jan 15-20 2007      The Australian Linux Technical Conference!


_______________________________________________
Xen-ppc-devel mailing list
Xen-ppc-devel@lists.xensource.com
http://lists.xensource.com/xen-ppc-devel

Reply via email to