Module Name: src
Committed By: thorpej
Date: Mon Jan 15 19:27:16 UTC 2024
Modified Files:
src/sys/arch/m68k/m68k: m68k_intr.c
Log Message:
Insert a spurious interrupt handler at auto-vector IPL 0 that simply
abosrbs them. They'll get counted during the normal course of auto-vector
interrupt handling.
To generate a diff of this commit:
cvs rdiff -u -r1.6 -r1.7 src/sys/arch/m68k/m68k/m68k_intr.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/m68k/m68k/m68k_intr.c
diff -u src/sys/arch/m68k/m68k/m68k_intr.c:1.6 src/sys/arch/m68k/m68k/m68k_intr.c:1.7
--- src/sys/arch/m68k/m68k/m68k_intr.c:1.6 Mon Jan 15 18:47:03 2024
+++ src/sys/arch/m68k/m68k/m68k_intr.c Mon Jan 15 19:27:16 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: m68k_intr.c,v 1.6 2024/01/15 18:47:03 thorpej Exp $ */
+/* $NetBSD: m68k_intr.c,v 1.7 2024/01/15 19:27:16 thorpej Exp $ */
/*-
* Copyright (c) 1996, 2023, 2024 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: m68k_intr.c,v 1.6 2024/01/15 18:47:03 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: m68k_intr.c,v 1.7 2024/01/15 19:27:16 thorpej Exp $");
#define _M68K_INTR_PRIVATE
@@ -110,6 +110,24 @@ const uint16_t ipl2psl_table[NIPL] = {
[IPL_HIGH] = PSL_S | PSL_IPL7,
};
+/*
+ * m68k_spurintr --
+ * Interrupt handler for the "spurious interrupt" that comes in
+ * on auto-vector level 0. All we do is claim it; it gets counted
+ * during the normal course of auto-vector interrupt handling.
+ */
+static int
+m68k_spurintr(void *arg)
+{
+ return 1;
+}
+
+static struct m68k_intrhand m68k_spurintr_ih = {
+ .ih_func = m68k_spurintr,
+ .ih_arg = m68k_spurintr,
+ .ih_evcnt = &bitbucket,
+};
+
static struct m68k_intrhand *
m68k_ih_stdalloc(int km_flag)
{
@@ -140,7 +158,9 @@ static void
m68k_ih_free(struct m68k_intrhand *ih)
{
KASSERT(ih_allocfuncs != NULL);
- ih_allocfuncs->free(ih);
+ if (__predict_true(ih != &m68k_spurintr_ih)) {
+ ih_allocfuncs->free(ih);
+ }
}
#ifdef __HAVE_M68K_INTR_VECTORED
@@ -219,6 +239,8 @@ m68k_intr_init(const struct m68k_ih_allo
evcnt_attach_static(&m68k_intr_evcnt[i]);
#endif
}
+ LIST_INSERT_HEAD(&m68k_intrhands_autovec[0],
+ &m68k_spurintr_ih, ih_link);
}
/*