Page MenuHomeFreeBSD

D47756.diff
No OneTemporary

D47756.diff

diff --git a/sys/powerpc/powerpc/intr_machdep.c b/sys/powerpc/powerpc/intr_machdep.c
--- a/sys/powerpc/powerpc/intr_machdep.c
+++ b/sys/powerpc/powerpc/intr_machdep.c
@@ -146,6 +146,10 @@
static void *ipi_cookie;
#endif
+static int powerpc_setup_intr_int(const char *name, u_int irq, driver_filter_t
+ filter, driver_intr_t handler, void *arg, enum intr_type flags, void
+ **cookiep, int domain, bool ipi);
+
static void
intrcnt_setname(const char *name, int index)
{
@@ -463,24 +467,15 @@
KASSERT(piclist[n].ipis != 0,
("%s: SMP root PIC does not supply any IPIs",
__func__));
- error = powerpc_setup_intr("IPI",
+ error = powerpc_setup_intr_int("IPI",
MAP_IRQ(piclist[n].node, piclist[n].irqs),
powerpc_ipi_handler, NULL, NULL,
INTR_TYPE_MISC | INTR_EXCL, &ipi_cookie,
- 0 /* domain XXX */);
+ 0 /* domain XXX */, true);
if (error) {
printf("unable to setup IPI handler\n");
return (error);
}
-
- /*
- * Some subterfuge: disable late EOI and mark this
- * as an IPI to the dispatch layer.
- */
- i = intr_lookup(MAP_IRQ(piclist[n].node,
- piclist[n].irqs));
- i->event->ie_post_filter = NULL;
- i->ipi = 1;
}
}
#endif
@@ -513,6 +508,17 @@
driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep,
int domain)
{
+
+ return (powerpc_setup_intr_int(name, irq, filter, handler, arg, flags,
+ cookiep, domain, false));
+}
+
+
+static int
+powerpc_setup_intr_int(const char *name, u_int irq, driver_filter_t filter,
+ driver_intr_t handler, void *arg, enum intr_type flags, void **cookiep,
+ int domain, bool ipi)
+{
struct powerpc_intr *i;
int error, enable = 0;
@@ -523,12 +529,14 @@
if (i->event == NULL) {
error = intr_event_create(&i->event, (void *)i, 0, irq,
powerpc_intr_pre_ithread, powerpc_intr_post_ithread,
- powerpc_intr_eoi, powerpc_assign_intr_cpu, "irq%u:", irq);
+ (ipi ? NULL : powerpc_intr_eoi), powerpc_assign_intr_cpu,
+ "irq%u:", irq);
if (error)
return (error);
enable = 1;
}
+ i->ipi = ipi;
error = intr_event_add_handler(i->event, name, filter, handler, arg,
intr_priority(flags), flags, cookiep);

File Metadata

Mime Type
text/plain
Expires
Tue, Feb 11, 12:15 PM (12 h, 29 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
14915199
Default Alt Text
D47756.diff (2 KB)

Event Timeline