[RFC PATCH 2/3] iommu/riscv: Extract IRQ forwarding payload validation
From: fangyu . yu
Date: Thu Oct 08 2026 - 10:01:04 EST
From: Fangyu Yu <fangyu.yu@xxxxxxxxxxxxxxxxx>
Move the owner and MSI address mask/pattern checks from
riscv_iommu_ir_activate() into a separate helper so a second forwarding
backend can validate the same fields. No functional change.
Signed-off-by: Fangyu Yu <fangyu.yu@xxxxxxxxxxxxxxxxx>
---
drivers/iommu/riscv/iommu-ir.c | 22 ++++++++++++++++------
1 file changed, 16 insertions(+), 6 deletions(-)
diff --git a/drivers/iommu/riscv/iommu-ir.c b/drivers/iommu/riscv/iommu-ir.c
index b3f0a56475ed..b96baff9986d 100644
--- a/drivers/iommu/riscv/iommu-ir.c
+++ b/drivers/iommu/riscv/iommu-ir.c
@@ -104,15 +104,10 @@ static void riscv_iommu_ir_set_target(struct riscv_iommu_msipte *msipte,
}
}
-static int riscv_iommu_ir_activate(struct riscv_iommu_msi_table *msi_table,
- struct riscv_iommu_device *iommu,
- struct riscv_iommu_ir_vcpu_info *vcpu_info)
+static int riscv_iommu_ir_validate_vcpu_info(const struct riscv_iommu_ir_vcpu_info *vcpu_info)
{
u64 pattern = vcpu_info->msi_addr_pattern;
u64 mask = vcpu_info->msi_addr_mask;
- u64 required_caps = 0;
- size_t nr_ptes;
- int ret;
if (!vcpu_info->owner || (pattern & mask) ||
((pattern | mask) & ~RISCV_IOMMU_DC_MSI_ADDR_MASK))
@@ -129,6 +124,21 @@ static int riscv_iommu_ir_activate(struct riscv_iommu_msi_table *msi_table,
return -EINVAL;
}
+ return 0;
+}
+
+static int riscv_iommu_ir_activate(struct riscv_iommu_msi_table *msi_table,
+ struct riscv_iommu_device *iommu,
+ struct riscv_iommu_ir_vcpu_info *vcpu_info)
+{
+ u64 required_caps = 0;
+ size_t nr_ptes;
+ int ret;
+
+ ret = riscv_iommu_ir_validate_vcpu_info(vcpu_info);
+ if (ret)
+ return ret;
+
nr_ptes = riscv_iommu_ir_nr_ptes(vcpu_info);
ret = riscv_iommu_ir_validate_targets(vcpu_info, nr_ptes, &required_caps);
--
2.50.1