irqchip/riscv-imsic: Add nr_guest_files in per-HART local config

Add nr_guest_files in per-HART local config to represent the number of
guest files available on a particular HART whereas the nr_guest_files
in the global config represents the number of guest files available
across all HARTs.

This allows KVM RISC-V to use nr_guest_files from per-HART local
config for asymmetric big.Little systems.

Signed-off-by: Guo Ren (Alibaba DAMO Academy) <guoren@kernel.org>
Acked-by: Thomas Gleixner <tglx@kernel.org>
Signed-off-by: Anup Patel <anup.patel@oss.qualcomm.com>
Link: https://lore.kernel.org/r/20260525094945.3721783-2-anup.patel@oss.qualcomm.com
Signed-off-by: Anup Patel <anup@brainfault.org>
This commit is contained in:
Guo Ren (Alibaba DAMO Academy) 2026-05-25 15:19:44 +05:30 committed by Anup Patel
parent 5eb6d68fe2
commit 59ebc16276
2 changed files with 8 additions and 6 deletions

View File

@ -920,13 +920,12 @@ int __init imsic_setup_state(struct fwnode_handle *fwnode, void *opaque)
local->msi_va = mmios_va[index] + reloff;
/*
* KVM uses global->nr_guest_files to determine the available guest
* interrupt files on each CPU. Take the minimum number of guest
* interrupt files across all CPUs to avoid KVM incorrectly allocating
* an unexisted or unmapped guest interrupt file on some CPUs.
* KVM uses both local->nr_guest_files and global->nr_guest_files
* to determine the available guest interrupt files on each CPU.
*/
nr_guest_files = (resource_size(&mmios[index]) - reloff) / IMSIC_MMIO_PAGE_SZ - 1;
global->nr_guest_files = min(global->nr_guest_files, nr_guest_files);
local->nr_guest_files = min((BIT(global->guest_index_bits) - 1), nr_guest_files);
global->nr_guest_files = min(global->nr_guest_files, local->nr_guest_files);
nr_handlers++;
}

View File

@ -40,6 +40,9 @@
struct imsic_local_config {
phys_addr_t msi_pa;
void __iomem *msi_va;
/* Number of guest interrupt files per-HART */
u32 nr_guest_files;
};
struct imsic_global_config {
@ -68,7 +71,7 @@ struct imsic_global_config {
/* Number of guest interrupt identities */
u32 nr_guest_ids;
/* Number of guest interrupt files per core */
/* Number of guest interrupt files across all HARTs */
u32 nr_guest_files;
/* Per-CPU IMSIC addresses */