MSI-X is not supported on aarch64
- Dominant language
- Rust
- Stars
- 1.5k
- Forks
- 132
- Avg merge
- 1d 14h
- Merged PRs (30d)
- 39
Description
MSI-X may allow us to support hypervisors that do not support legacy interrupts, which was the case for cloud-hypervisor (at least on x86). It also improves performance on x86 and supporting it on aarch64 may offer a similar benefit.
In order to add this feature, we need to figure out what is the correct pair of message address and message data. [The implementation for x86](https://github.com/hermit-os/kernel/blob/0662a40d84d700a7b550272bfb24ae54a2735982/src/drivers/pci.rs#L499) can serve as an example on how the values are written to the table once we figure out what they are. After configuration is implemented for x86, MSI-X related enum variants and declarations that are gated behind `cfg(target_arch = "x86_64")` will need to be modified to also allow aarch64. They cannot be removed completely for source files that are active under riscv, since we do not support PCI (which MSI-X is a feature of) at all on that platform.
It seems like message signalled interrupts on aarch64 need to be enabled before use. This configuration is probably interrupt controller specific, so any work on that will need to take into account the GIC version that is in use by hermit at that point.
Contributor guide
No contributing guide indexed for this repository
Research direction
Start with the x86 MSI-X implementation in src/drivers/pci.rs around line 499 and determine the correct message address and data values for aarch64. Investigate how MSI is enabled for the GIC version used by Hermit, then update the x86-gated MSI-X declarations without affecting riscv. Done means MSI-X is configured on aarch64 and works with the relevant interrupt controller.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- operating-systems
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100