Skip to content

Commit 4bdd6d5

Browse files
michael2012zandreeaflorescu
authored andcommitted
Improve example code of VmFd::create_device() for ARM.
On ARM, the example code tried to create VGIC v3, it may fail due to hardware dependency. The error can be seen on machines with GIC v2, like Raspberry PI 4. Now we retry VGICv2 in that case. Change-Id: Ie4a5b2b86c234350e444f2f9e94630e4d68af7ab Signed-off-by: Michael Zhao <[email protected]>
1 parent 18bc6b9 commit 4bdd6d5

File tree

1 file changed

+12
-2
lines changed

1 file changed

+12
-2
lines changed

src/ioctls/vm.rs

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1070,6 +1070,7 @@ impl VmFd {
10701070
/// # use kvm_ioctls::Kvm;
10711071
/// use kvm_bindings::{
10721072
/// kvm_device_type_KVM_DEV_TYPE_VFIO,
1073+
/// kvm_device_type_KVM_DEV_TYPE_ARM_VGIC_V2,
10731074
/// kvm_device_type_KVM_DEV_TYPE_ARM_VGIC_V3,
10741075
/// KVM_CREATE_DEVICE_TEST,
10751076
/// };
@@ -1087,8 +1088,17 @@ impl VmFd {
10871088
/// fd: 0,
10881089
/// flags: KVM_CREATE_DEVICE_TEST,
10891090
/// };
1090-
/// let device_fd = vm
1091-
/// .create_device(&mut device).unwrap();
1091+
/// // On ARM, creating VGICv3 may fail due to hardware dependency.
1092+
/// // Retry to create VGICv2 in that case.
1093+
/// let device_fd = vm.create_device(&mut device).unwrap_or_else(|_| {
1094+
/// #[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
1095+
/// panic!("Cannot create VFIO device.");
1096+
/// #[cfg(any(target_arch = "arm", target_arch = "aarch64"))]
1097+
/// {
1098+
/// device.type_ = kvm_device_type_KVM_DEV_TYPE_ARM_VGIC_V2;
1099+
/// vm.create_device(&mut device).expect("Cannot create vGIC device")
1100+
/// }
1101+
/// });
10921102
/// ```
10931103
///
10941104
pub fn create_device(&self, device: &mut kvm_create_device) -> Result<DeviceFd> {

0 commit comments

Comments
 (0)