mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2025-02-22 11:22:26 +00:00
vm-virtio: Add IOMMU support to virtio-console
Adding virtio feature VIRTIO_F_IOMMU_PLATFORM when explicitly asked by the user. The need for this feature is to be able to attach the virtio device to a virtual IOMMU. Signed-off-by: Sebastien Boeuf <sebastien.boeuf@intel.com>
This commit is contained in:
parent
9fad680db1
commit
392f1ec155
@ -17,7 +17,7 @@ use std::thread;
|
||||
use super::Error as DeviceError;
|
||||
use super::{
|
||||
ActivateError, ActivateResult, DeviceEventT, Queue, VirtioDevice, VirtioDeviceType,
|
||||
VirtioInterruptType, VIRTIO_F_VERSION_1,
|
||||
VirtioInterruptType, VIRTIO_F_IOMMU_PLATFORM, VIRTIO_F_VERSION_1,
|
||||
};
|
||||
use crate::VirtioInterrupt;
|
||||
use std::sync::atomic::{AtomicU64, Ordering};
|
||||
@ -338,8 +338,13 @@ impl Console {
|
||||
out: Box<dyn io::Write + Send + Sync + 'static>,
|
||||
cols: u16,
|
||||
rows: u16,
|
||||
iommu: bool,
|
||||
) -> io::Result<(Console, Arc<ConsoleInput>)> {
|
||||
let avail_features = 1u64 << VIRTIO_F_VERSION_1 | 1u64 << VIRTIO_CONSOLE_F_SIZE;
|
||||
let mut avail_features = 1u64 << VIRTIO_F_VERSION_1 | 1u64 << VIRTIO_CONSOLE_F_SIZE;
|
||||
|
||||
if iommu {
|
||||
avail_features |= 1u64 << VIRTIO_F_IOMMU_PLATFORM;
|
||||
}
|
||||
|
||||
let input_evt = EventFd::new(EFD_NONBLOCK).unwrap();
|
||||
let config_evt = EventFd::new(EFD_NONBLOCK).unwrap();
|
||||
|
@ -50,6 +50,7 @@ const DEVICE_FEATURES_OK: u32 = 0x08;
|
||||
const DEVICE_FAILED: u32 = 0x80;
|
||||
|
||||
const VIRTIO_F_VERSION_1: u32 = 32;
|
||||
const VIRTIO_F_IOMMU_PLATFORM: u32 = 33;
|
||||
const VIRTIO_F_IN_ORDER: u32 = 35;
|
||||
|
||||
// Types taken from linux/virtio_ids.h
|
||||
|
@ -414,8 +414,9 @@ impl DeviceManager {
|
||||
};
|
||||
let (col, row) = get_win_size();
|
||||
let console_input = if let Some(writer) = console_writer {
|
||||
let (virtio_console_device, console_input) = vm_virtio::Console::new(writer, col, row)
|
||||
.map_err(DeviceManagerError::CreateVirtioConsole)?;
|
||||
let (virtio_console_device, console_input) =
|
||||
vm_virtio::Console::new(writer, col, row, false)
|
||||
.map_err(DeviceManagerError::CreateVirtioConsole)?;
|
||||
virtio_devices
|
||||
.push(Box::new(virtio_console_device) as Box<dyn vm_virtio::VirtioDevice>);
|
||||
Some(console_input)
|
||||
|
Loading…
x
Reference in New Issue
Block a user