I have not had a chance to test the
pte += (idx ^ (PTED_HID(pted) ? pmap_ptab_mask : 0)) * 8;
change yet, because with the improvements Martin Pieuchot has
committed, my machines have been crash-free for many weeks.
(Happily, that means Go builder openbsd-ppc64 was keeping up
and enabled a Go fix for stack split size on openbsd.)
I did finally get a crash, copied below, that prompts me to ask
for help. When I told ddb on the remote serial port to "show uvm",
it stopped responding. Is there anything I can type remotely to
interrupt ddb and reboot? I'm physically distant for a while.
ddb{3}> show panic
*cpu0: kernel diagnostic assertion "UVM_PSEG_INUSE(pseg, id)" failed:
file "/sys/uvm/uvm_pager.c", line 207
ddb{3}> trace
_rb_remove+0x3a4
uvm_pmr_get1page+0x2b0
uvm_pagezero_thread+0x104
proc_trampoline+0x10
ddb{3}> show registers
r0 0xc5bc44 uvm_pmr_get1page+0x2b4
r1 0xc00000013b405750
r2 0x1052000 .TOC.
r3 0
r4 0x10
r5 0xc00000000b615000
r6 0
r7 0
r8 0x1
r9 0xfe0aaf95a2e48275
r10 0x82000808
r11 0xc5bc44 uvm_pmr_get1page+0x2b4
r12 0
r13 0x4f308d2b8
r14 0
r15 0
r16 0
r17 0xffffffffffffffff
r18 0
r19 0xc00000013b4058c0
r20 0
r21 0xc00000000b614f80
r22 0x1008f78 uvm_pmr_addr_RBT_INFO
r23 0x1008f98 uvm_pmr_size_RBT_INFO
r24 0x1
r25 0
r26 0
r27 0xc00000000b615090
r28 0xc00000000b615010
r29 0xc0000000000a1008
r30 0x1008f98 uvm_pmr_size_RBT_INFO
r31 0xc5def0 uvm_pagezero_thread
lr 0xc5bc44 uvm_pmr_get1page+0x2b4
cr 0x22222808
xer 0
ctr 0xb4ee34 tb_get_timecount
iar 0xb9b998 _rb_remove+0x3a4
msr 0x9000000000009032
dar 0x18
dsisr 0x40000000
_rb_remove+0x3a4: lwz r4,24(r3)
ddb{3}> show proc
PROC (zerothread) tid=92966 pid=31334 tcnt=1 stat=onproc
flags process=14000 proc=200
runpri=126, usrpri=126, slppri=127, nice=40
wchan=0x0, wmesg=, ps_single=0x0 scnt=0 ecnt=0
forw=0xffffffffffffffff, list=0xc00000013b3f0010,0xc00000013b3f0a60
process=0xc00000013b40b3d0 user=0xc00000013b401000, vmspace=0x11184a0
estcpu=36, cpticks=26, pctcpu=5.58, user=0, sys=11130657, intr=42872
ddb{3}> show uvm
...hangs...