2007-05-11 19:13:34

by Jeremy Fitzhardinge

[permalink] [raw]
Subject: [patch 19/28]xen: Add early printk support via hvc console

Add early printk support via hvc console, enable using
"earlyprintk=xen" on the kernel command line.

From: Gerd Hoffmann <[email protected]>
Signed-off-by: Jeremy Fitzhardinge <[email protected]>
Signed-off-by: Chris Wright <[email protected]>
Acked-by: Ingo Molnar <[email protected]>

---
arch/x86_64/kernel/early_printk.c | 5 +++++
drivers/char/hvc_xen.c | 25 +++++++++++++++++++++++++
drivers/xen/Makefile | 1 +
include/xen/hvc-console.h | 6 ++++++
4 files changed, 37 insertions(+)

===================================================================
--- a/arch/x86_64/kernel/early_printk.c
+++ b/arch/x86_64/kernel/early_printk.c
@@ -6,6 +6,7 @@
#include <asm/io.h>
#include <asm/processor.h>
#include <asm/fcntl.h>
+#include <xen/hvc-console.h>

/* Simple VGA output */

@@ -242,6 +243,10 @@ static int __init setup_early_printk(cha
simnow_init(buf + 6);
early_console = &simnow_console;
keep_early = 1;
+#ifdef CONFIG_XEN
+ } else if (!strncmp(buf, "xen", 3)) {
+ early_console = &xenboot_console;
+#endif
}
register_console(early_console);
return 0;
===================================================================
--- a/drivers/char/hvc_xen.c
+++ b/drivers/char/hvc_xen.c
@@ -28,6 +28,7 @@
#include <xen/page.h>
#include <xen/events.h>
#include <xen/interface/io/console.h>
+#include <xen/hvc-console.h>

#include "hvc_console.h"

@@ -132,3 +133,27 @@ module_init(xen_init);
module_init(xen_init);
module_exit(xen_fini);
console_initcall(xen_cons_init);
+
+static void xenboot_write_console(struct console *console, const char *string,
+ unsigned len)
+{
+ unsigned int linelen, off = 0;
+ const char *pos;
+
+ while (off < len && NULL != (pos = strchr(string+off, '\n'))) {
+ linelen = pos-string+off;
+ if (off + linelen > len)
+ break;
+ write_console(0, string+off, linelen);
+ write_console(0, "\r\n", 2);
+ off += linelen + 1;
+ }
+ if (off < len)
+ write_console(0, string+off, len-off);
+}
+
+struct console xenboot_console = {
+ .name = "xenboot",
+ .write = xenboot_write_console,
+ .flags = CON_PRINTBUFFER | CON_BOOT,
+};
===================================================================
--- /dev/null
+++ b/drivers/xen/Makefile
@@ -0,0 +1,1 @@
+obj-y += grant-table.o
===================================================================
--- /dev/null
+++ b/include/xen/hvc-console.h
@@ -0,0 +1,6 @@
+#ifndef XEN_HVC_CONSOLE_H
+#define XEN_HVC_CONSOLE_H
+
+extern struct console xenboot_console;
+
+#endif /* XEN_HVC_CONSOLE_H */

--


2007-05-12 19:08:27

by Bastian Blank

[permalink] [raw]
Subject: Re: [Xen-devel] [patch 19/28]xen: Add early printk support via hvc console

On Thu, May 10, 2007 at 05:07:02PM -0700, Jeremy Fitzhardinge wrote:
> +#ifdef CONFIG_XEN

xenboot_console is only available with CONFIG_HVC_XEN.

> + } else if (!strncmp(buf, "xen", 3)) {
> + early_console = &xenboot_console;
> +#endif

2007-05-12 19:57:45

by Jeremy Fitzhardinge

[permalink] [raw]
Subject: Re: [Xen-devel] [patch 19/28]xen: Add early printk support via hvc console

Bastian Blank wrote:
> On Thu, May 10, 2007 at 05:07:02PM -0700, Jeremy Fitzhardinge wrote:
>
>> +#ifdef CONFIG_XEN
>>
>
> xenboot_console is only available with CONFIG_HVC_XEN.
>

Good point. I added CONFIG_HVC_XEN, but forgot to update this.

J