The initial goal of the project was to extend aarch64 support in rust-vmm/vmm-reference. Earlier it had support for x86_64 and proof-of-concept support for aarch64. The goal was to bring it par with x86_64. Some of the tasks that needed to be done as part of the project were:
- Set up an interrupt controller.
- Add a real-time clock device.
- Add a serial port.
- Add a flattened device tree (FDT) so guest has a machine description.
*(Not all of them are mentioned here and some of them were resolved before I picked up the tasks, but I still had plenty to do).
A kanban board was used to track the process of each task. You can view it here.
This is a chronological list of my contributions to rust-vmm during the summer:
- consume i8042 device from vm-superio #215 : Added i8042 device from vm-superio. (This was done as part of my early contributions.)
- Adding the system allocator POC #219 : This added the support to use dynamic memory allocation while adding devices to the vmm.
- Adding virtio support for arm #223 : This added support for virtio devices mainly block and net to aarch64. ARM specific changes were made to EnvMock which is used to test the virtio devices. Fdt was also extended to accommodate multiple virtio devices to be registered.
- Made relevant changes to generate resources for aarch64. #225 : This adds changes to the scripts that were used to generate resources for e2e python testing on x86_64, now supports generating disk files, kernel images etc on aarch64 as well.
- ported x86_64 python tests to be compatible with aarch64 #226: This ports the existing python test suite to support aarch64 as well. It was made generic enough so that it is easier to add more tests in the future that supports both platforms.
- Implementing IRQAllocator in vmm #229 : This adds support for dynamic irq allocation while adding devices to the vmm. It also moved away from hardcoding number of irqs to the each platforms. This along with dynamic memory allocation are used to add support for multiple virtio devices.
Some of the tasks were already done before my coding period started, which let me work on the different issues of the project, not directly related to GSoC scope. It helped me explore different parts of the project.
I also want to thank my mentor for always helping me out whenever I was stuck and helping me develop a more thorough thinking process. I got into this project with very little knowledge about the virtualization stack, but at the end of it I feel I have gained a lot more knowledge than I anticipated. I am looking forward to continuing work on this open-source project.