[PATCH V2 4/4] RISC-V: KVM: AIA: Use per-HART IMSIC guest files to compute final HGEI count
guoren at kernel.org
guoren at kernel.org
Fri Apr 24 17:59:16 PDT 2026
From: "Guo Ren (Alibaba DAMO Academy)" <guoren at kernel.org>
Now that `nr_guest_files` has been moved to `struct imsic_local_config`
and is computed per-HART, KVM must respect the actual number of guest
interrupt files available on each HART when setting up HGEI.
In `kvm_riscv_aia_enable()`:
- Retrieve the per-CPU IMSIC local config
- Take `min(hgctrl->nr_hgei, lc->nr_guest_files)` as the final usable
HGEI count for this HART
- Use the result to initialize `free_bitmap`
This ensures correct HGEI allocation on heterogeneous RISC-V SoCs
where different cores may have different IMSIC guest file counts, and
completes the per-HART conversion series.
Signed-off-by: Guo Ren (Alibaba DAMO Academy) <guoren at kernel.org>
---
arch/riscv/kvm/aia.c | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
diff --git a/arch/riscv/kvm/aia.c b/arch/riscv/kvm/aia.c
index 70ff1d25dd99..a5f4b7fe1dce 100644
--- a/arch/riscv/kvm/aia.c
+++ b/arch/riscv/kvm/aia.c
@@ -534,6 +534,9 @@ static void aia_hgei_exit(void)
void kvm_riscv_aia_enable(void)
{
struct aia_hgei_control *hgctrl;
+ const struct imsic_global_config *gc;
+ const struct imsic_local_config *lc;
+ unsigned int nr_hgei;
if (!kvm_riscv_aia_available())
return;
@@ -547,8 +550,13 @@ void kvm_riscv_aia_enable(void)
if (hgctrl->nr_hgei)
hgctrl->nr_hgei--;
- if (hgctrl->nr_hgei) {
- hgctrl->free_bitmap = BIT(hgctrl->nr_hgei + 1) - 1;
+ gc = imsic_get_global_config();
+ lc = (gc) ? this_cpu_ptr(gc->local) : NULL;
+ if (lc)
+ nr_hgei = min(hgctrl->nr_hgei, lc->nr_guest_files);
+
+ if (nr_hgei) {
+ hgctrl->free_bitmap = BIT(nr_hgei + 1) - 1;
hgctrl->free_bitmap &= ~BIT(0);
} else {
hgctrl->free_bitmap = 0;
--
2.43.0
More information about the linux-riscv
mailing list