summaryrefslogtreecommitdiffstats
path: root/drivers/char/hvc_xen.c
diff options
context:
space:
mode:
authorJeremy Fitzhardinge <jeremy@goop.org>2008-05-27 00:31:00 +0200
committerThomas Gleixner <tglx@linutronix.de>2008-05-27 10:11:35 +0200
commit0922abdc3982ae54cbe1b24ac5aa91a260eca1bb (patch)
tree3107fc3f1af7e4a1fd6edd78957c40486153990c /drivers/char/hvc_xen.c
parentxen: add raw console write functions for debug (diff)
downloadlinux-0922abdc3982ae54cbe1b24ac5aa91a260eca1bb.tar.xz
linux-0922abdc3982ae54cbe1b24ac5aa91a260eca1bb.zip
xen: make early console also write to debug console
When using "earlyprintk=xen", also write the console output to the raw debug console. This will appear on dom0's console if the hypervisor has been compiled to allow it. Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Diffstat (limited to 'drivers/char/hvc_xen.c')
-rw-r--r--drivers/char/hvc_xen.c29
1 files changed, 18 insertions, 11 deletions
diff --git a/drivers/char/hvc_xen.c b/drivers/char/hvc_xen.c
index e97d9d168325..2413af342a81 100644
--- a/drivers/char/hvc_xen.c
+++ b/drivers/char/hvc_xen.c
@@ -134,12 +134,27 @@ module_init(xen_init);
module_exit(xen_fini);
console_initcall(xen_cons_init);
+static void raw_console_write(const char *str, int len)
+{
+ while(len > 0) {
+ int rc = HYPERVISOR_console_io(CONSOLEIO_write, len, (char *)str);
+ if (rc <= 0)
+ break;
+
+ str += rc;
+ len -= rc;
+ }
+}
+
+#ifdef CONFIG_EARLY_PRINTK
static void xenboot_write_console(struct console *console, const char *string,
unsigned len)
{
unsigned int linelen, off = 0;
const char *pos;
+ raw_console_write(string, len);
+
while (off < len && NULL != (pos = strchr(string+off, '\n'))) {
linelen = pos-string+off;
if (off + linelen > len)
@@ -155,21 +170,13 @@ static void xenboot_write_console(struct console *console, const char *string,
struct console xenboot_console = {
.name = "xenboot",
.write = xenboot_write_console,
- .flags = CON_PRINTBUFFER | CON_BOOT,
+ .flags = CON_PRINTBUFFER | CON_BOOT | CON_ANYTIME,
};
+#endif /* CONFIG_EARLY_PRINTK */
void xen_raw_console_write(const char *str)
{
- int len = strlen(str);
-
- while(len > 0) {
- int rc = HYPERVISOR_console_io(CONSOLEIO_write, len, (char *)str);
- if (rc <= 0)
- break;
-
- str += rc;
- len -= rc;
- }
+ raw_console_write(str, strlen(str));
}
void xen_raw_printk(const char *fmt, ...)