vmm: Send tty input to correct destination

Check the config to find out which device is attached to the tty and
then send the input from the user into that device (serial or
virtio-console.)

Fixes: #3005

Signed-off-by: Rob Bradford <robert.bradford@intel.com>
This commit is contained in:
Rob Bradford 2021-08-25 09:14:42 +01:00
parent c913f7da2f
commit 6233f6f68e
2 changed files with 16 additions and 25 deletions

View File

@ -535,21 +535,6 @@ pub struct Console {
}
impl Console {
pub fn queue_input_bytes(&self, out: &[u8]) -> vmm_sys_util::errno::Result<()> {
match self.input {
Some(ConsoleInput::Serial) => {
self.queue_input_bytes_serial(out)?;
}
Some(ConsoleInput::VirtioConsole) => {
self.queue_input_bytes_console(out);
}
None => {}
}
Ok(())
}
pub fn queue_input_bytes_serial(&self, out: &[u8]) -> vmm_sys_util::errno::Result<()> {
if self.serial.is_some() {
self.serial

View File

@ -14,8 +14,8 @@
#[cfg(any(target_arch = "aarch64", feature = "acpi"))]
use crate::config::NumaConfig;
use crate::config::{
DeviceConfig, DiskConfig, FsConfig, HotplugMethod, NetConfig, PmemConfig, UserDeviceConfig,
ValidationError, VmConfig, VsockConfig,
ConsoleOutputMode, DeviceConfig, DiskConfig, FsConfig, HotplugMethod, NetConfig, PmemConfig,
UserDeviceConfig, ValidationError, VmConfig, VsockConfig,
};
use crate::cpu;
use crate::device_manager::{
@ -1950,19 +1950,25 @@ impl Vm {
out[0] = 0x0d;
}
if self
.device_manager
.lock()
.unwrap()
.console()
.input_enabled()
{
if matches!(
self.config.lock().unwrap().serial.mode,
ConsoleOutputMode::Tty
) {
self.device_manager
.lock()
.unwrap()
.console()
.queue_input_bytes(&out[..count])
.queue_input_bytes_serial(&out[..count])
.map_err(Error::Console)?;
} else if matches!(
self.config.lock().unwrap().console.mode,
ConsoleOutputMode::Tty
) {
self.device_manager
.lock()
.unwrap()
.console()
.queue_input_bytes_console(&out[..count])
}
Ok(())