x86/guest: use PV console for Xen/Dom0 I/O

Signed-off-by: Sergey Dyasli <sergey.dyasli@citrix.com>
Signed-off-by: Wei Liu <wei.liu2@citrix.com>
This commit is contained in:
Sergey Dyasli authored and Wei Liu committed 2018-01-16 18:34:04 +00:00
1 parent 335eba772b
commit 4f6609d6a6
3 files changed
+23 -1

No files matched your search

+4 -1
View File
@@ -381,7 +381,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`
@@ -397,6 +397,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
+3
View File
@@ -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();
}
+16
View File
@@ -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;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.