Page MenuHomeFreeBSD

D55284.diff
No OneTemporary

D55284.diff

diff --git a/sys/kern/subr_intr.c b/sys/kern/subr_intr.c
--- a/sys/kern/subr_intr.c
+++ b/sys/kern/subr_intr.c
@@ -1291,10 +1291,22 @@
irq_assign_cpu = true;
for (i = 0; i < intr_nirq; i++) {
isrc = irq_sources[i];
- if (isrc == NULL || isrc->isrc_handlers == 0 ||
+ if (isrc == NULL ||
isrc->isrc_flags & (INTR_ISRCF_PPI | INTR_ISRCF_IPI))
continue;
+ /*
+ * We can reach this point with isrc_handlers == 0 if a
+ * driver allocates interrupts but does not set them up
+ * immediately; for example, a network driver might
+ * postpone calling bus_setup_intr on I/O IRQ(s) until
+ * the interface is brought up.
+ */
+ if (isrc->isrc_handlers == 0) {
+ CPU_ZERO(&isrc->isrc_cpu);
+ continue;
+ }
+
if (isrc->isrc_event != NULL &&
isrc->isrc_flags & INTR_ISRCF_BOUND &&
isrc->isrc_event->ie_cpu != CPU_FFS(&isrc->isrc_cpu) - 1)

File Metadata

Mime Type
text/plain
Expires
Wed, May 27, 6:19 PM (7 h, 34 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33562939
Default Alt Text
D55284.diff (886 B)

Event Timeline