Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1343138
| From | Stefano Stabellini <stefano.stabellini@eu.citrix.com> |
|---|---|
| Newsgroups | linux.kernel |
| Subject | [PATCH v2 3/3] hvc_xen: make early_printk work with HVM guests |
| Date | 2016-02-25 13:20 +0100 |
| Message-ID | <r633H-3FK-9@gated-at.bofh.it> (permalink) |
| References | <r62U2-3BH-11@gated-at.bofh.it> |
| Organization | linux.* mail to news gateway |
Refactor the existing code in xen_raw_console_write to get the generic
early_printk console work with HVM guests.
Take the opportunity to replace the outb loop with a single outsb call
to reduce the number of vmexit.
Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com>
---
drivers/tty/hvc/hvc_xen.c | 27 ++++++++++++++++-----------
1 file changed, 16 insertions(+), 11 deletions(-)
diff --git a/drivers/tty/hvc/hvc_xen.c b/drivers/tty/hvc/hvc_xen.c
index bf787aa..a1c3746 100644
--- a/drivers/tty/hvc/hvc_xen.c
+++ b/drivers/tty/hvc/hvc_xen.c
@@ -605,6 +605,16 @@ static int xen_cons_init(void)
}
console_initcall(xen_cons_init);
+#ifdef CONFIG_X86
+static void xen_hvm_early_write(uint32_t vtermno, const char *str, int len)
+{
+ if (xen_cpuid_base())
+ outsb(0xe9, str, len);
+}
+#else
+static void xen_hvm_early_write(uint32_t vtermno, const char *str, int len) { }
+#endif
+
#ifdef CONFIG_EARLY_PRINTK
static int __init xenboot_setup_console(struct console *console, char *string)
{
@@ -624,8 +634,10 @@ static void xenboot_write_console(struct console *console, const char *string,
unsigned int linelen, off = 0;
const char *pos;
- if (!xen_pv_domain())
+ if (!xen_pv_domain()) {
+ xen_hvm_early_write(0, string, len);
return;
+ }
dom0_write_console(0, string, len);
@@ -661,17 +673,10 @@ void xen_raw_console_write(const char *str)
if (xen_domain()) {
rc = dom0_write_console(0, str, len);
-#ifdef CONFIG_X86
- if (rc == -ENOSYS && xen_hvm_domain())
- goto outb_print;
-
- } else if (xen_cpuid_base()) {
- int i;
-outb_print:
- for (i = 0; i < len; i++)
- outb(str[i], 0xe9);
-#endif
+ if (rc != -ENOSYS || !xen_hvm_domain())
+ return;
}
+ xen_hvm_early_write(0, str, len);
}
void xen_raw_printk(const char *fmt, ...)
--
1.7.10.4
Back to linux.kernel | Previous | Next — Previous in thread | Next in thread | Find similar | Unroll thread
[PATCH v2 0/3] hvc_xen: fix xenboot on x86 and export to ARM Stefano Stabellini <stefano.stabellini@eu.citrix.com> - 2016-02-25 13:10 +0100
[PATCH v2 3/3] hvc_xen: make early_printk work with HVM guests Stefano Stabellini <stefano.stabellini@eu.citrix.com> - 2016-02-25 13:20 +0100
Re: [PATCH v2 3/3] hvc_xen: make early_printk work with HVM guests Boris Ostrovsky <boris.ostrovsky@oracle.com> - 2016-02-25 16:20 +0100
[PATCH v2 2/3] hvc_xen: fix xenboot for DomUs Stefano Stabellini <stefano.stabellini@eu.citrix.com> - 2016-02-25 13:20 +0100
Re: [PATCH v2 2/3] hvc_xen: fix xenboot for DomUs Boris Ostrovsky <boris.ostrovsky@oracle.com> - 2016-02-25 16:10 +0100
Re: [PATCH v2 2/3] hvc_xen: fix xenboot for DomUs Stefano Stabellini <stefano.stabellini@eu.citrix.com> - 2016-02-26 16:50 +0100
Re: [PATCH v2 2/3] hvc_xen: fix xenboot for DomUs Boris Ostrovsky <boris.ostrovsky@oracle.com> - 2016-02-26 17:10 +0100
Re: [PATCH v2 2/3] hvc_xen: fix xenboot for DomUs Stefano Stabellini <stefano.stabellini@eu.citrix.com> - 2016-02-26 18:00 +0100
[PATCH v2 1/3] hvc_xen: add earlycon support Stefano Stabellini <stefano.stabellini@eu.citrix.com> - 2016-02-25 13:20 +0100
Re: [PATCH v2 1/3] hvc_xen: add earlycon support Boris Ostrovsky <boris.ostrovsky@oracle.com> - 2016-02-25 16:10 +0100
Re: [PATCH v2 0/3] hvc_xen: fix xenboot on x86 and export to ARM Stefano Stabellini <stefano.stabellini@eu.citrix.com> - 2016-02-26 15:30 +0100
Re: [PATCH v2 0/3] hvc_xen: fix xenboot on x86 and export to ARM David Vrabel <david.vrabel@citrix.com> - 2016-02-26 15:50 +0100
csiph-web