powerpc/xmon: Fallback to printk() in xmon_printf() if udbg is not setup
authorMichael Ellerman <michael@ellerman.id.au>
Tue, 9 Oct 2012 04:20:47 +0000 (04:20 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 15 Nov 2012 02:00:02 +0000 (13:00 +1100)
It is possible to configure a kernel which has xmon enabled, but has no
udbg backend to provide IO. This can make xmon rather confusing, as it
produces no output, blocks for two seconds, and then returns.

As a last resort we can instead try to printk(), which may deadlock or
otherwise crash, but tries quite hard not to.

Signed-off-by: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/xmon/nonstdio.c

index 942d0f6b187459b5f8c9b1b3cda249883e6bef17..bce3dcfe50583440f09e7229e08305559acc12f9 100644 (file)
@@ -111,13 +111,19 @@ char *xmon_gets(char *str, int nb)
 void xmon_printf(const char *format, ...)
 {
        va_list args;
-       int n;
        static char xmon_outbuf[1024];
+       int rc, n;
 
        va_start(args, format);
        n = vsnprintf(xmon_outbuf, sizeof(xmon_outbuf), format, args);
        va_end(args);
-       xmon_write(xmon_outbuf, n);
+
+       rc = xmon_write(xmon_outbuf, n);
+
+       if (n && rc == 0) {
+               /* No udbg hooks, fallback to printk() - dangerous */
+               printk(xmon_outbuf);
+       }
 }
 
 void xmon_puts(const char *str)