hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/arch/x86/kernel/apic/io_apic.c
....@@ -2442,17 +2442,21 @@
24422442
24432443 unsigned int arch_dynirq_lower_bound(unsigned int from)
24442444 {
2445
+ unsigned int ret;
2446
+
24452447 /*
24462448 * dmar_alloc_hwirq() may be called before setup_IO_APIC(), so use
24472449 * gsi_top if ioapic_dynirq_base hasn't been initialized yet.
24482450 */
2449
- if (!ioapic_initialized)
2450
- return gsi_top;
2451
+ ret = ioapic_dynirq_base ? : gsi_top;
2452
+
24512453 /*
2452
- * For DT enabled machines ioapic_dynirq_base is irrelevant and not
2453
- * updated. So simply return @from if ioapic_dynirq_base == 0.
2454
+ * For DT enabled machines ioapic_dynirq_base is irrelevant and
2455
+ * always 0. gsi_top can be 0 if there is no IO/APIC registered.
2456
+ * 0 is an invalid interrupt number for dynamic allocations. Return
2457
+ * @from instead.
24542458 */
2455
- return ioapic_dynirq_base ? : from;
2459
+ return ret ? : from;
24562460 }
24572461
24582462 #ifdef CONFIG_X86_32