Page MenuHomeFreeBSD

D55284.id.diff
No OneTemporary

D55284.id.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,8 +1291,22 @@
irq_assign_cpu = true;
for (i = 0; i < intr_nirq; i++) {
isrc = irq_sources[i];
- if (isrc == NULL || isrc->isrc_handlers == 0 ||
- isrc->isrc_flags & (INTR_ISRCF_PPI | INTR_ISRCF_IPI))
+ if (isrc == NULL)
+ 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_flags & (INTR_ISRCF_PPI | INTR_ISRCF_IPI))
continue;
if (isrc->isrc_event != NULL &&

File Metadata

Mime Type
text/plain
Expires
Sun, Feb 15, 9:02 PM (4 h, 4 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28720896
Default Alt Text
D55284.id.diff (849 B)

Event Timeline