mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2025-01-18 10:35:23 +00:00
vmm: Allow simultaneously set serial and console as TTY mode
Cloud Hypovrisor supports legacy serial device and virito console device for VMs. Using legacy serial device, CH can capture full VM console logs, but its implementation is based on KVM PIO emulation and has poor performance. Using the virtio console device, the VM console logs will be sent to CH through the virtio ring, the performance is better, but CH will only capture the VM console logs after the virtio console device is initialized, the VM early startup logs will be discarded. This patch provides a way to enable both the legacy serial device and the virtio console device as a TTY mode by setting the leagcy serial port as the VM's early printk device and setting the virtio console as the VM's main console device. Then CH can capture early boot logs from the legacy serial device and capture later logs from the virito console device with better performance. Signed-off-by: Yong He <alexyonghe@tencent.com>
This commit is contained in:
parent
f5899d15f6
commit
bb38e4e599
@ -106,8 +106,6 @@ pub enum Error {
|
||||
|
||||
#[derive(Debug, PartialEq, Eq, Error)]
|
||||
pub enum ValidationError {
|
||||
/// Both console and serial are tty.
|
||||
DoubleTtyMode,
|
||||
/// No kernel specified
|
||||
KernelMissing,
|
||||
/// Missing file value for console
|
||||
@ -189,7 +187,6 @@ impl fmt::Display for ValidationError {
|
||||
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
|
||||
use self::ValidationError::*;
|
||||
match self {
|
||||
DoubleTtyMode => write!(f, "Console mode tty specified for both serial and console"),
|
||||
KernelMissing => write!(f, "No kernel specified"),
|
||||
ConsoleFileMissing => write!(f, "Path missing when using file console mode"),
|
||||
ConsoleSocketPathMissing => write!(f, "Path missing when using socket console mode"),
|
||||
@ -1930,9 +1927,18 @@ impl VmConfig {
|
||||
}
|
||||
}
|
||||
|
||||
// The 'conflict' check is introduced in commit 24438e0390d3
|
||||
// (vm-virtio: Enable the vmm support for virtio-console).
|
||||
//
|
||||
// Allow simultaneously set serial and console as TTY mode, for
|
||||
// someone want to use virtio console for better performance, and
|
||||
// want to keep legacy serial to catch boot stage logs for debug.
|
||||
// Using such double tty mode, you need to configure the kernel
|
||||
// properly, such as:
|
||||
// "console=hvc0 earlyprintk=ttyS0"
|
||||
if self.console.mode == ConsoleOutputMode::Tty && self.serial.mode == ConsoleOutputMode::Tty
|
||||
{
|
||||
return Err(ValidationError::DoubleTtyMode);
|
||||
warn!("Using TTY output for both virtio-console and serial port");
|
||||
}
|
||||
|
||||
if self.console.mode == ConsoleOutputMode::File && self.console.file.is_none() {
|
||||
@ -3110,10 +3116,7 @@ mod tests {
|
||||
let mut invalid_config = valid_config.clone();
|
||||
invalid_config.serial.mode = ConsoleOutputMode::Tty;
|
||||
invalid_config.console.mode = ConsoleOutputMode::Tty;
|
||||
assert_eq!(
|
||||
invalid_config.validate(),
|
||||
Err(ValidationError::DoubleTtyMode)
|
||||
);
|
||||
assert!(valid_config.validate().is_ok());
|
||||
|
||||
let mut invalid_config = valid_config.clone();
|
||||
invalid_config.payload = None;
|
||||
|
Loading…
x
Reference in New Issue
Block a user