diff --git a/tests/integration.rs b/tests/integration.rs index 85a6e2510..c28514ffd 100644 --- a/tests/integration.rs +++ b/tests/integration.rs @@ -9111,7 +9111,10 @@ mod vfio { .args(["--cpus", "boot=4"]) .args(["--memory", "size=4G"]) .args(["--kernel", fw_path(FwType::RustHypervisorFirmware).as_str()]) - .args(["--device", format!("path={NVIDIA_VFIO_DEVICE}").as_str()]) + .args([ + "--device", + format!("path={NVIDIA_VFIO_DEVICE},iommu=on").as_str(), + ]) .args(["--api-socket", &api_socket]) .default_disks() .default_net() @@ -9136,6 +9139,43 @@ mod vfio { handle_child_output(r, &output); } + + #[test] + fn test_nvidia_card_iommu_address_width() { + let jammy = UbuntuDiskConfig::new(JAMMY_VFIO_IMAGE_NAME.to_string()); + let guest = Guest::new(Box::new(jammy)); + let api_socket = temp_api_path(&guest.tmp_dir); + + let mut child = GuestCommand::new(&guest) + .args(["--cpus", "boot=4"]) + .args(["--memory", "size=4G"]) + .args(["--kernel", fw_path(FwType::RustHypervisorFirmware).as_str()]) + .args(["--device", format!("path={NVIDIA_VFIO_DEVICE}").as_str()]) + .args([ + "--platform", + "num_pci_segments=2,iommu_segments=1,iommu_address_width=42", + ]) + .args(["--api-socket", &api_socket]) + .default_disks() + .default_net() + .capture_output() + .spawn() + .unwrap(); + + let r = std::panic::catch_unwind(|| { + guest.wait_vm_boot(None).unwrap(); + + assert!(guest + .ssh_command("sudo dmesg") + .unwrap() + .contains("input address: 42 bits")); + }); + + let _ = child.kill(); + let output = child.wait_with_output().unwrap(); + + handle_child_output(r, &output); + } } mod live_migration {