mirror of
https://chromium.googlesource.com/crosvm/crosvm
synced 2025-02-06 02:25:23 +00:00
devices: vfio: Avoid arch-dependent type conversion for IommuType
Since ioctl_with_val takes c_ulong, whose size is 64-bit in x86 but 32-bit in ARM, we must not assume it can be converted to u64. BUG=none TEST=cargo check Change-Id: Ib0060bbbe2e06c94bf8802c8e775c808c07ff6a6 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/crosvm/+/3320123 Reviewed-by: Alexandre Courbot <acourbot@chromium.org> Auto-Submit: Keiichi Watanabe <keiichiw@chromium.org> Tested-by: kokoro <noreply+kokoro@google.com> Commit-Queue: Dennis Kempin <denniskempin@google.com>
This commit is contained in:
parent
bbec8ebf65
commit
0d801c9cd2
1 changed files with 6 additions and 4 deletions
|
@ -8,6 +8,7 @@ use std::ffi::CString;
|
|||
use std::fs::{File, OpenOptions};
|
||||
use std::io;
|
||||
use std::mem;
|
||||
use std::os::raw::c_ulong;
|
||||
use std::os::unix::prelude::FileExt;
|
||||
use std::path::{Path, PathBuf};
|
||||
use std::sync::Arc;
|
||||
|
@ -90,9 +91,10 @@ enum KvmVfioGroupOps {
|
|||
Delete,
|
||||
}
|
||||
|
||||
#[repr(u32)]
|
||||
enum IommuType {
|
||||
Type1V2 = VFIO_TYPE1v2_IOMMU as isize,
|
||||
NoIommu = VFIO_NOIOMMU_IOMMU as isize,
|
||||
Type1V2 = VFIO_TYPE1v2_IOMMU,
|
||||
NoIommu = VFIO_NOIOMMU_IOMMU,
|
||||
}
|
||||
|
||||
/// VfioContainer contain multi VfioGroup, and delegate an IOMMU domain table
|
||||
|
@ -140,13 +142,13 @@ impl VfioContainer {
|
|||
|
||||
fn check_extension(&self, val: IommuType) -> bool {
|
||||
// Safe as file is vfio container and make sure val is valid.
|
||||
let ret = unsafe { ioctl_with_val(self, VFIO_CHECK_EXTENSION(), val as u64) };
|
||||
let ret = unsafe { ioctl_with_val(self, VFIO_CHECK_EXTENSION(), val as c_ulong) };
|
||||
ret == 1
|
||||
}
|
||||
|
||||
fn set_iommu(&self, val: IommuType) -> i32 {
|
||||
// Safe as file is vfio container and make sure val is valid.
|
||||
unsafe { ioctl_with_val(self, VFIO_SET_IOMMU(), val as u64) }
|
||||
unsafe { ioctl_with_val(self, VFIO_SET_IOMMU(), val as c_ulong) }
|
||||
}
|
||||
|
||||
pub unsafe fn vfio_dma_map(
|
||||
|
|
Loading…
Reference in a new issue