[PATCH] KVM: aia: skip silicon ID cap in EMUL mode

Jun Sun jsun at junsun.net
Tue Jun 9 11:41:42 PDT 2026


EMUL mode uses swfile MRIF in software, not the silicon vsfile, so
the per-vsfile ID limit (kvm_riscv_aia_max_ids) shouldn't gate
the maximum IDs userspace can request. Allow up to KVM_DEV_RISCV_AIA_IDS_MAX
in EMUL mode; HWACCEL/AUTO still enforce the silicon cap.
---
 arch/riscv/kvm/aia_device.c | 23 +++++++++++++++++++----
 1 file changed, 19 insertions(+), 4 deletions(-)

diff --git a/arch/riscv/kvm/aia_device.c b/arch/riscv/kvm/aia_device.c
index b195a93add1c..575f860e1dad 100644
--- a/arch/riscv/kvm/aia_device.c
+++ b/arch/riscv/kvm/aia_device.c
@@ -82,8 +82,16 @@ static int aia_config(struct kvm *kvm, unsigned long type,
 			if ((*nr < KVM_DEV_RISCV_AIA_IDS_MIN) ||
 			    (*nr >= KVM_DEV_RISCV_AIA_IDS_MAX) ||
 			    ((*nr & KVM_DEV_RISCV_AIA_IDS_MIN) !=
-			     KVM_DEV_RISCV_AIA_IDS_MIN) ||
-			    (kvm_riscv_aia_max_ids <= *nr))
+			     KVM_DEV_RISCV_AIA_IDS_MIN))
+				return -EINVAL;
+			/*
+			 * kvm_riscv_aia_max_ids reflects the per-vsfile
+			 * silicon limit, which only applies in HWACCEL
+			 * mode.  EMUL uses swfile, and AUTO is reconciled
+			 * later during init, so neither gates here.
+			 */
+			if (aia->mode == KVM_DEV_RISCV_AIA_MODE_HWACCEL &&
+			    kvm_riscv_aia_max_ids <= *nr)
 				return -EINVAL;
 			aia->nr_ids = *nr;
 		} else
@@ -91,8 +99,15 @@ static int aia_config(struct kvm *kvm, unsigned long type,
 		break;
 	case KVM_DEV_RISCV_AIA_CONFIG_SRCS:
 		if (write) {
-			if ((*nr >= KVM_DEV_RISCV_AIA_SRCS_MAX) ||
-			    (*nr >= kvm_riscv_aia_max_ids))
+			if (*nr >= KVM_DEV_RISCV_AIA_SRCS_MAX)
+				return -EINVAL;
+			/*
+			 * Same rationale as CONFIG_IDS: the silicon
+			 * per-vsfile cap only applies in HWACCEL mode.
+			 * EMUL uses swfile; AUTO is reconciled at init.
+			 */
+			if (aia->mode == KVM_DEV_RISCV_AIA_MODE_HWACCEL &&
+			    *nr >= kvm_riscv_aia_max_ids)
 				return -EINVAL;
 			aia->nr_sources = *nr;
 		} else
-- 
2.34.1




More information about the linux-riscv mailing list