After upgrading an OpenBSD arm64 (pine64+ board) Go builder to 7.1, the
following has been triggered twice (once every couple of days):
panic: kernel diagnostic assertion "kn->kn_kq == kq" failed: file
"/usr/src/sys/kern/kern_event.c", line 1811
Stopped at panic+0x160: cmp w21, #0x0
TID PID UID PRFLAGS PFLAGS CPU COMMAND
152330 84924 1001 0x3 0x4000000 3 http.test
*427942 85055 1001 0x3 0x4000000 1 net.test
460437 53928 0 0x14000 0x200 2 tztq
197440 95098 0 0x14000 0x200 0 softnet
db_enter() at panic+0x15c
panic() at __assert+0x24
panic() at knote_remove+0x2c4
knote_remove() at knote_fdclose+0x88
knote_fdclose() at fdrelease+0x94
fdrelease() at svc_handler+0x2d4
svc_handler() at do_el0_sync+0xa0
This was stable with 7.0, hence seems to be a regression between 7.0 and 7.1
(presumably unlocking related).
ddb{3}> machine ddbcpu 0
Stopped at ampintc_ipi_ddb+0x1c: ldr x15, [sp,#16]
db_enter() at ampintc_ipi_ddb+0x18
ampintc_ipi_ddb() at ampintc_irq_handler+0x1c4
ampintc_irq_handler() at arm_cpu_irq+0x30
arm_cpu_irq() at handle_el1h_irq+0x6c
handle_el1h_irq() at msleep+0x10c
msleep() at msleep+0x10c
msleep() at taskq_next_work+0x64
ddb{0}> trace
db_enter() at ampintc_ipi_ddb+0x18
ampintc_ipi_ddb() at ampintc_irq_handler+0x1c4
ampintc_irq_handler() at arm_cpu_irq+0x30
arm_cpu_irq() at handle_el1h_irq+0x6c
handle_el1h_irq() at msleep+0x10c
msleep() at msleep+0x10c
msleep() at taskq_next_work+0x64
taskq_next_work() at taskq_thread+0x5c
taskq_thread() at proc_trampoline+0x10
ddb{0}> machine ddbcpu 1
Stopped at panic+0x160: cmp w21, #0x0
db_enter() at panic+0x15c
panic() at __assert+0x24
panic() at knote_remove+0x2c4
knote_remove() at knote_fdclose+0x88
knote_fdclose() at fdrelease+0x94
fdrelease() at svc_handler+0x2d4
svc_handler() at do_el0_sync+0xa0
ddb{1}> trace
db_enter() at panic+0x15c
panic() at __assert+0x24
panic() at knote_remove+0x2c4
knote_remove() at knote_fdclose+0x88
knote_fdclose() at fdrelease+0x94
fdrelease() at svc_handler+0x2d4
svc_handler() at do_el0_sync+0xa0
do_el0_sync() at handle_el0_sync+0x74
handle_el0_sync() at 0x41ca29af8
--- trap ---
ddb{1}> machine ddbcpu 2
Stopped at ampintc_ipi_ddb+0x1c: ldr x15, [sp,#16]
db_enter() at ampintc_ipi_ddb+0x18
ampintc_ipi_ddb() at ampintc_irq_handler+0x1c4
ampintc_irq_handler() at arm_cpu_irq+0x30
arm_cpu_irq() at handle_el1h_irq+0x6c
handle_el1h_irq() at msleep+0x12c
msleep() at msleep+0x12c
msleep() at taskq_next_work+0x64
ddb{2}> trace
db_enter() at ampintc_ipi_ddb+0x18
ampintc_ipi_ddb() at ampintc_irq_handler+0x1c4
ampintc_irq_handler() at arm_cpu_irq+0x30
arm_cpu_irq() at handle_el1h_irq+0x6c
handle_el1h_irq() at msleep+0x12c
msleep() at msleep+0x12c
msleep() at taskq_next_work+0x64
taskq_next_work() at taskq_thread+0x5c
taskq_thread() at proc_trampoline+0x10
ddb{2}> machine ddbcpu 3
Stopped at ampintc_ipi_ddb+0x1c: ldr x15, [sp,#16]
db_enter() at ampintc_ipi_ddb+0x18
ampintc_ipi_ddb() at ampintc_irq_handler+0x1c4
ampintc_irq_handler() at arm_cpu_irq+0x30
arm_cpu_irq() at handle_el0_irq+0x74
handle_el0_irq() at $d.0+0x160514
--- interrupt ---
ddb{3}> trace
db_enter() at ampintc_ipi_ddb+0x18
ampintc_ipi_ddb() at ampintc_irq_handler+0x1c4
ampintc_irq_handler() at arm_cpu_irq+0x30
arm_cpu_irq() at handle_el0_irq+0x74
handle_el0_irq() at $d.0+0x160514
--- interrupt ---