From ba0e3dbcb8febb38b4c7644052bc52ea8074f0c2 Mon Sep 17 00:00:00 2001 From: Keiichi Watanabe Date: Wed, 30 Mar 2022 11:03:08 +0900 Subject: [PATCH] arch: Don't set up serial device when vhost-user console is set crosvm sets up an emulated serial device for ttyS0 as a default device unless virtio-console is specified. The setup should be skipped when a vhost-user console is specified as well. BUG=b:196186396 BUG=b:227407433 TEST=no serial output when one vhost-user console is specified. Change-Id: Ib17e218fd01a13c109fc1246fd3a6d99031d3181 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3557729 Reviewed-by: Morg Reviewed-by: Alexandre Courbot Tested-by: kokoro Commit-Queue: Keiichi Watanabe --- arch/src/serial.rs | 12 +++++++----- src/main.rs | 7 ++++++- x86_64/src/test_integration.rs | 2 +- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/arch/src/serial.rs b/arch/src/serial.rs index 52745dcbe7..d8b2e1b802 100644 --- a/arch/src/serial.rs +++ b/arch/src/serial.rs @@ -26,11 +26,12 @@ use crate::DeviceRegistrationError; /// configured explicitly. pub fn set_default_serial_parameters( serial_parameters: &mut BTreeMap<(SerialHardware, u8), SerialParameters>, + is_vhost_user_console_enabled: bool, ) { // If no console device exists and the first serial port has not been specified, // set the first serial port as a stdout+stdin console. let default_console = (SerialHardware::Serial, 1); - if !serial_parameters.iter().any(|(_, p)| p.console) { + if !serial_parameters.iter().any(|(_, p)| p.console) && !is_vhost_user_console_enabled { serial_parameters .entry(default_console) .or_insert(SerialParameters { @@ -148,6 +149,7 @@ pub type GetSerialCmdlineResult = std::result::Result, @@ -207,7 +209,7 @@ mod tests { let mut cmdline = Cmdline::new(4096); let mut serial_parameters = BTreeMap::new(); - set_default_serial_parameters(&mut serial_parameters); + set_default_serial_parameters(&mut serial_parameters, false); get_serial_cmdline(&mut cmdline, &serial_parameters, "io") .expect("get_serial_cmdline failed"); @@ -236,7 +238,7 @@ mod tests { }, ); - set_default_serial_parameters(&mut serial_parameters); + set_default_serial_parameters(&mut serial_parameters, false); get_serial_cmdline(&mut cmdline, &serial_parameters, "io") .expect("get_serial_cmdline failed"); @@ -281,7 +283,7 @@ mod tests { }, ); - set_default_serial_parameters(&mut serial_parameters); + set_default_serial_parameters(&mut serial_parameters, false); get_serial_cmdline(&mut cmdline, &serial_parameters, "io") .expect("get_serial_cmdline failed"); @@ -311,7 +313,7 @@ mod tests { }, ); - set_default_serial_parameters(&mut serial_parameters); + set_default_serial_parameters(&mut serial_parameters, false); get_serial_cmdline(&mut cmdline, &serial_parameters, "io") .expect_err("get_serial_cmdline succeeded"); } diff --git a/src/main.rs b/src/main.rs index a4ee9cbd35..a210335d3b 100644 --- a/src/main.rs +++ b/src/main.rs @@ -2462,7 +2462,12 @@ fn validate_arguments(cfg: &mut Config) -> std::result::Result<(), argument::Err "'balloon-control' requires enabled balloon".to_owned(), )); } - set_default_serial_parameters(&mut cfg.serial_parameters); + + set_default_serial_parameters( + &mut cfg.serial_parameters, + !cfg.vhost_user_console.is_empty(), + ); + Ok(()) } diff --git a/x86_64/src/test_integration.rs b/x86_64/src/test_integration.rs index 421ef2379f..01db29aeda 100644 --- a/x86_64/src/test_integration.rs +++ b/x86_64/src/test_integration.rs @@ -154,7 +154,7 @@ where let mut serial_params = BTreeMap::new(); - arch::set_default_serial_parameters(&mut serial_params); + arch::set_default_serial_parameters(&mut serial_params, false); X8664arch::setup_serial_devices( ProtectionType::Unprotected,