summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPawandeep Oza <[email protected]>2026-07-21 14:48:30 -0700
committerAnup Patel <[email protected]>2026-07-22 13:20:22 +0530
commit7a90f41fb966e48a160637e841b91864e7a2c81c (patch)
treeb0ed33368736b6497069b7dc33a3ac22e0e4a7be
parentb2ead3b037c0b864b0770891586d121c0dc68761 (diff)
lib: sbi_irqchip: fix MSI EIID gap and tail allocation logic in register_msi
Fix sbi_irqchip_register_msi() that prevented contiguous EIID allocation: - Gap check condition was inverted: the original `h->first_hwirq - hwirq < num_hwirq` incorrectly set `found = true` when the gap was too small to fit num_hwirq entries. Correct to `>= num_hwirq` so allocation only proceeds when sufficient space exists between registered handlers. - Tail-space check `!found && !hwirq` never triggered after iteration Replace with `(chip->num_hwirq - hwirq) >= num_hwirq` to correctly allocate if handler list is empty. Fixes: 79e63bc8348d ("irqchip: add sbi_irqchip_register_msi support") Signed-off-by: Oza Pawandeep <[email protected]> Reviewed-by: Anup Patel <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Anup Patel <[email protected]>
-rw-r--r--lib/sbi/sbi_irqchip.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/lib/sbi/sbi_irqchip.c b/lib/sbi/sbi_irqchip.c
index d6771fa8..b490a3ad 100644
--- a/lib/sbi/sbi_irqchip.c
+++ b/lib/sbi/sbi_irqchip.c
@@ -392,7 +392,7 @@ int sbi_irqchip_register_msi(struct sbi_irqchip_device *chip, u32 num_hwirq,
if (h->first_hwirq <= hwirq && hwirq < (h->first_hwirq + h->num_hwirq)) {
hwirq = h->first_hwirq + h->num_hwirq;
} else if (hwirq < h->first_hwirq) {
- if (h->first_hwirq - hwirq < num_hwirq) {
+ if (h->first_hwirq - hwirq >= num_hwirq) {
found = true;
break;
} else {
@@ -400,7 +400,7 @@ int sbi_irqchip_register_msi(struct sbi_irqchip_device *chip, u32 num_hwirq,
}
}
}
- if (!found && !hwirq)
+ if (!found && (chip->num_hwirq - hwirq) >= num_hwirq)
found = true;
if (!found)
return SBI_ENOSPC;