# SPDX-License-Identifier: GPL-2.0-or-later
from os.path import join
+from random import randbytes
from qemu_test import QemuSystemTest, Asset
-from qemu_test import exec_command, wait_for_console_pattern
-from qemu_test import exec_command_and_wait_for_pattern
-from random import randbytes
+from qemu_test import wait_for_console_pattern
+
-guest_script = '''
+GUEST_SCRIPT = '''
#!/usr/bin/env bash
set -euo pipefail
-device vfio-pci,host=$pci_iommufd,iommufd=iommufd0
'''
-nested_guest_script = '''
+NESTED_GUEST_SCRIPT = '''
#!/usr/bin/env bash
set -euo pipefail
echo device_passthrough_test_ok
'''
+
class Aarch64DevicePassthrough(QemuSystemTest):
# https://github.com/pbo-linaro/qemu-linux-stack/tree/device_passthrough
ASSET_DEVICE_PASSTHROUGH_STACK = Asset(
('https://github.com/pbo-linaro/qemu-linux-stack/'
'releases/download/build/device_passthrough-a9612a2.tar.xz'),
- 'f7d2f70912e7231986e6e293e1a2c4786dd02bec113a7acb6bfc619e96155455')
+ 'f7d2f70912e7231986e6e293e1a2c4786dd02bec113a7acb6bfc619e96155455')
# This tests the device passthrough implementation, by booting a VM
# supporting it with two nvme disks attached, and launching a nested VM
guest_cmd = join(stack, 'guest.sh')
nested_guest_cmd = join(stack, 'nested_guest.sh')
# we generate two random disks
- with open(disk_vfio, "wb") as d: d.write(randbytes(512))
- with open(disk_iommufd, "wb") as d: d.write(randbytes(1024))
- with open(guest_cmd, 'w') as s: s.write(guest_script)
- with open(nested_guest_cmd, 'w') as s: s.write(nested_guest_script)
+ with open(disk_vfio, "wb") as d:
+ d.write(randbytes(512))
+ with open(disk_iommufd, "wb") as d:
+ d.write(randbytes(1024))
+ with open(guest_cmd, 'w', encoding='utf-8') as s:
+ s.write(GUEST_SCRIPT)
+ with open(nested_guest_cmd, 'w', encoding='utf-8') as s:
+ s.write(NESTED_GUEST_SCRIPT)
self.vm.add_args('-cpu', 'max')
self.vm.add_args('-m', '2G')
wait_for_console_pattern(self, 'device_passthrough_test_ok',
failure_message='Kernel panic')
+
if __name__ == '__main__':
QemuSystemTest.main()