Page MenuHomeFreeBSD

D40211.id.diff
No OneTemporary

D40211.id.diff

diff --git a/sys/arm/arm/mp_machdep.c b/sys/arm/arm/mp_machdep.c
--- a/sys/arm/arm/mp_machdep.c
+++ b/sys/arm/arm/mp_machdep.c
@@ -223,22 +223,24 @@
/* NOTREACHED */
}
-static void
+static int
ipi_rendezvous(void *dummy __unused)
{
CTR0(KTR_SMP, "IPI_RENDEZVOUS");
smp_rendezvous_action();
+ return (FILTER_HANDLED);
}
-static void
+static int
ipi_ast(void *dummy __unused)
{
CTR0(KTR_SMP, "IPI_AST");
+ return (FILTER_HANDLED);
}
-static void
+static int
ipi_stop(void *dummy __unused)
{
u_int cpu;
@@ -277,22 +279,25 @@
dbg_resume_dbreg();
#endif
CTR0(KTR_SMP, "IPI_STOP (restart)");
+ return (FILTER_HANDLED);
}
-static void
+static int
ipi_preempt(void *arg)
{
CTR1(KTR_SMP, "%s: IPI_PREEMPT", __func__);
sched_preempt(curthread);
+ return (FILTER_HANDLED);
}
-static void
+static int
ipi_hardclock(void *arg)
{
CTR1(KTR_SMP, "%s: IPI_HARDCLOCK", __func__);
hardclockintr();
+ return (FILTER_HANDLED);
}
static void
diff --git a/sys/arm64/arm64/mp_machdep.c b/sys/arm64/arm64/mp_machdep.c
--- a/sys/arm64/arm64/mp_machdep.c
+++ b/sys/arm64/arm64/mp_machdep.c
@@ -99,11 +99,11 @@
};
#endif
-static void ipi_ast(void *);
-static void ipi_hardclock(void *);
-static void ipi_preempt(void *);
-static void ipi_rendezvous(void *);
-static void ipi_stop(void *);
+static int ipi_ast(void *);
+static int ipi_hardclock(void *);
+static int ipi_preempt(void *);
+static int ipi_rendezvous(void *);
+static int ipi_stop(void *);
struct pcb stoppcbs[MAXCPU];
@@ -304,37 +304,42 @@
SYSINIT(smp_after_idle_runnable, SI_SUB_SMP, SI_ORDER_ANY,
smp_after_idle_runnable, NULL);
-static void
+static int
ipi_ast(void *dummy __unused)
{
CTR0(KTR_SMP, "IPI_AST");
+ return (FILTER_HANDLED);
}
-static void
+static int
ipi_hardclock(void *dummy __unused)
{
CTR1(KTR_SMP, "%s: IPI_HARDCLOCK", __func__);
hardclockintr();
+ return (FILTER_HANDLED);
}
-static void
+static int
ipi_preempt(void *dummy __unused)
{
+
CTR1(KTR_SMP, "%s: IPI_PREEMPT", __func__);
sched_preempt(curthread);
+ return (FILTER_HANDLED);
}
-static void
+static int
ipi_rendezvous(void *dummy __unused)
{
CTR0(KTR_SMP, "IPI_RENDEZVOUS");
smp_rendezvous_action();
+ return (FILTER_HANDLED);
}
-static void
+static int
ipi_stop(void *dummy __unused)
{
u_int cpu;
@@ -358,6 +363,7 @@
CPU_CLR_ATOMIC(cpu, &started_cpus);
CPU_CLR_ATOMIC(cpu, &stopped_cpus);
CTR0(KTR_SMP, "IPI_STOP (restart)");
+ return (FILTER_HANDLED);
}
struct cpu_group *
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
@@ -1770,7 +1770,7 @@
PIC_IPI_SEND(intr_irq_root_dev, ii->ii_isrc, cpus, ipi);
}
-void
+int
intr_ipi_dispatch(u_int ipi)
{
struct intr_ipi *ii;
@@ -1781,7 +1781,7 @@
intr_ipi_increment_count(ii->ii_count, PCPU_GET(cpuid));
- ii->ii_handler(ii->ii_handler_arg);
+ return (ii->ii_handler(ii->ii_handler_arg) != FILTER_HANDLED);
}
/*
diff --git a/sys/sys/intr.h b/sys/sys/intr.h
--- a/sys/sys/intr.h
+++ b/sys/sys/intr.h
@@ -159,12 +159,12 @@
/* Intr interface for IPIs. */
#ifdef SMP
-typedef void intr_ipi_handler_t(void *);
+typedef driver_filter_t intr_ipi_handler_t;
void intr_ipi_setup(u_int ipi, const char *name, intr_ipi_handler_t *hand,
void *arg);
void intr_ipi_send(cpuset_t cpus, u_int ipi);
-void intr_ipi_dispatch(u_int ipi);
+int intr_ipi_dispatch(u_int ipi);
#endif
#endif /* _SYS_INTR_H */

File Metadata

Mime Type
text/plain
Expires
Sat, Oct 11, 7:05 AM (10 h, 17 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
23567172
Default Alt Text
D40211.id.diff (3 KB)

Event Timeline