Module Name: src
Committed By: cliff
Date: Sat Feb 5 06:07:39 UTC 2011
Modified Files:
src/sys/arch/mips/mips [matt-nb5-mips64]: ipifuncs.c
Log Message:
- add support for MP ddb
- add IPI halt func
To generate a diff of this commit:
cvs rdiff -u -r1.1.2.4 -r1.1.2.5 src/sys/arch/mips/mips/ipifuncs.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/arch/mips/mips/ipifuncs.c
diff -u src/sys/arch/mips/mips/ipifuncs.c:1.1.2.4 src/sys/arch/mips/mips/ipifuncs.c:1.1.2.5
--- src/sys/arch/mips/mips/ipifuncs.c:1.1.2.4 Wed Dec 22 05:57:48 2010
+++ src/sys/arch/mips/mips/ipifuncs.c Sat Feb 5 06:07:38 2011
@@ -27,9 +27,11 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
+#include "opt_ddb.h"
+
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ipifuncs.c,v 1.1.2.4 2010/12/22 05:57:48 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ipifuncs.c,v 1.1.2.5 2011/02/05 06:07:38 cliff Exp $");
#include <sys/param.h>
#include <sys/cpu.h>
@@ -38,6 +40,13 @@
#include <uvm/uvm_extern.h>
#include <mips/cache.h>
+#ifdef DDB
+#include <mips/db_machdep.h>
+#endif
+
+
+static void ipi_halt(void) __attribute__((__noreturn__));
+
static const char * const ipi_names[] = {
[IPI_NOP] = "ipi nop",
@@ -46,6 +55,8 @@
[IPI_FPSAVE] = "ipi fpsave",
[IPI_SYNCICACHE] = "ipi isync",
[IPI_KPREEMPT] = "ipi kpreempt",
+ [IPI_SUSPEND] = "ipi suspend",
+ [IPI_HALT] = "ipi halt",
};
static void
@@ -89,6 +100,22 @@
}
#endif
+/*
+ * Process cpu stop-self event.
+ * XXX could maybe add/use locoresw halt function?
+ */
+static void
+ipi_halt(void)
+{
+ int index = cpu_index(curcpu());
+ printf("cpu%d: shutting down\n", index);
+ CPUSET_ADD(cpus_halted, index);
+ splhigh();
+ for (;;)
+ ;
+ /* NOTREACHED */
+}
+
void
ipi_process(struct cpu_info *ci, uint64_t ipi_mask)
{
@@ -114,12 +141,14 @@
ci->ci_evcnt_per_ipi[IPI_NOP].ev_count++;
ipi_syncicache(ci);
}
-#ifdef IPI_HALT
+ if (ipi_mask & __BIT(IPI_SUSPEND)) {
+ ci->ci_evcnt_per_ipi[IPI_SUSPEND].ev_count++;
+ cpu_pause(NULL);
+ }
if (ipi_mask & __BIT(IPI_HALT)) {
- ci->ci_evcnt_per_ipi[IPI_NOP].ev_count++;
+ ci->ci_evcnt_per_ipi[IPI_HALT].ev_count++;
ipi_halt();
}
-#endif
}
void