[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 37/62] x86/guest: use PV console for Xen/Dom0 I/O
From: Sergey Dyasli <sergey.dyasli@xxxxxxxxxx> Signed-off-by: Sergey Dyasli <sergey.dyasli@xxxxxxxxxx> Signed-off-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- docs/misc/xen-command-line.markdown | 5 ++++- xen/arch/x86/guest/xen.c | 3 +++ xen/drivers/char/console.c | 16 ++++++++++++++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/docs/misc/xen-command-line.markdown b/docs/misc/xen-command-line.markdown index e5979bceee..da006dd4f7 100644 --- a/docs/misc/xen-command-line.markdown +++ b/docs/misc/xen-command-line.markdown @@ -365,7 +365,7 @@ The following are examples of correct specifications: Specify the size of the console ring buffer. ### console -> `= List of [ vga | com1[H,L] | com2[H,L] | dbgp | none ]` +> `= List of [ vga | com1[H,L] | com2[H,L] | pv | dbgp | none ]` > Default: `console=com1,vga` @@ -381,6 +381,9 @@ the converse; transmitted and received characters will have their MSB cleared. This allows a single port to be shared by two subsystems (e.g. console and debugger). +`pv` indicates that Xen should use Xen's PV console. This option is +only available when used together with `pv-in-pvh`. + `dbgp` indicates that Xen should use a USB debug port. `none` indicates that Xen should not use a console. This option only diff --git a/xen/arch/x86/guest/xen.c b/xen/arch/x86/guest/xen.c index 59871170c8..d4968b47aa 100644 --- a/xen/arch/x86/guest/xen.c +++ b/xen/arch/x86/guest/xen.c @@ -23,6 +23,7 @@ #include <xen/pfn.h> #include <xen/rangeset.h> #include <xen/types.h> +#include <xen/pv_console.h> #include <asm/apic.h> #include <asm/e820.h> @@ -194,6 +195,8 @@ static void xen_evtchn_upcall(struct cpu_user_regs *regs) vcpu_info->evtchn_upcall_pending = 0; write_atomic(&vcpu_info->evtchn_pending_sel, 0); + pv_console_rx(regs); + ack_APIC_irq(); } diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c index d05ebf9f70..8acd358395 100644 --- a/xen/drivers/char/console.c +++ b/xen/drivers/char/console.c @@ -32,6 +32,7 @@ #include <xen/warning.h> #ifdef CONFIG_X86 +#include <xen/pv_console.h> #include <asm/guest.h> #endif @@ -344,6 +345,11 @@ static void sercon_puts(const char *s) (*serial_steal_fn)(s); else serial_puts(sercon_handle, s); + +#ifdef CONFIG_X86 + /* Copy all serial output into PV console */ + pv_console_puts(s); +#endif } static void dump_console_ring_key(unsigned char key) @@ -805,6 +811,8 @@ void __init console_init_preirq(void) if ( !strncmp(p, "vga", 3) ) video_init(); #ifdef CONFIG_X86 + else if ( !strncmp(p, "pv", 2) ) + pv_console_init(); else if ( !strncmp(p, "xen", 3) ) opt_console_xen = true; #endif @@ -828,6 +836,10 @@ void __init console_init_preirq(void) serial_set_rx_handler(sercon_handle, serial_rx); +#ifdef CONFIG_X86 + pv_console_set_rx_handler(serial_rx); +#endif + /* HELLO WORLD --- start-of-day banner text. */ spin_lock(&console_lock); __putstr(xen_banner()); @@ -880,6 +892,10 @@ void __init console_init_postirq(void) { serial_init_postirq(); +#ifdef CONFIG_X86 + pv_console_init_postirq(); +#endif + if ( conring != _conring ) return; -- 2.11.0 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/mailman/listinfo/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |