hermit-os / hermit-os/kernel

MSI-X is not supported on aarch64

Open
#2,520 0 comments 0 reactions 0 assignees View on GitHub
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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.