[Bug 292494] powerpc64: booting qemu + mac99 results in crash (kernel DSI write trap) after panic: witness_save: witness_cold

[email protected] Sun, 18 Jan 2026 05:51:35 +0000
Newsgroups gmane.os.freebsd.devel.ppc
Message-ID <[email protected]/bugzilla/>
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=292494

--- Comment #3 from Adrian Chadd <[email protected]> ---
wait a sec, ofwcall is generating a trap that's generating a panic in the
witness code.

Here's what happens when I set a breakpoint on powerpc_interrupt:

```
Breakpoint 1.2, powerpc_interrupt (framep=0xfffffcf0)
    at
/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/powerpc/powerpc/interrupt.c:90
90              switch (framep->exc) {
(kgdb) bt
#0  powerpc_interrupt (framep=0xfffffcf0)
    at
/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/powerpc/powerpc/interrupt.c:90
#1  <signal handler called>
#2  0x00000000fff0267c in ?? ()
#3  0x0000000000e4b454 in ofwcall ()
    at
/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/powerpc/ofw/ofwcall64.S:166
```

Then I step through it until I hit another interrupt, it takes a nice trip
through the VM code:


```
#0  powerpc_interrupt (framep=0xffffebe0)
    at
/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/powerpc/powerpc/interrupt.c:90
#1  <signal handler called>
#2  db_backtrace (td=<optimized out>, fp=<optimized out>, count=<optimized
out>)
    at
/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/powerpc/powerpc/db_trace.c:187
#3  0xc00000000021d984 in db_trace_self_wrapper ()
    at /home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/ddb/db_main.c:284
#4  0xc0000000008fbe98 in kdb_backtrace () at
/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/kern/subr_kdb.c:444
#5  0xc000000000893058 in vpanic (fmt=0xc00000000165606f "%s: witness_cold",
ap=<optimized out>)
    at
/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/kern/kern_shutdown.c:959
#6  0xc000000000892e94 in panic (fmt=<optimized out>)
    at
/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/kern/kern_shutdown.c:887
#7  0xc0000000009338ac in witness_save (lock=<optimized out>, filep=<optimized
out>, linep=<optimized out>)
    at
/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/kern/subr_witness.c:2365
#8  0xc0000000008a16cc in _sx_slock_hard (sx=0xc000000001be0828,
opts=<optimized out>, x=0, file=<optimized out>, 
    line=<optimized out>) at
/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/kern/kern_sx.c:1085
#9  0xc0000000008a11a8 in _sx_slock_int (sx=0xc000000001be0828, opts=0, 
    file=0xc000000001689d4a
"/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/vm/vm_map.c", line=5021)
    at /home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/kern/kern_sx.c:1279
#10 0xc0000000008a1a74 in _sx_slock (sx=<optimized out>, opts=<optimized out>,
file=<optimized out>, 
    line=<optimized out>) at
/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/kern/kern_sx.c:1295
#11 0xc000000000d71340 in _vm_map_lock_read (map=0xc000000001be07c8, line=5021,
file=<optimized out>)
    at /home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/vm/vm_map.c:682
#12 vm_map_lookup (var_map=0xfffff8a0, vaddr=0, fault_typea=2 '\002',
out_entry=0xfffff8a8, object=0xfffff888, 
    pindex=0xfffff890, out_prot=0xfffff831 "", wired=0xfffff838)
    at /home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/vm/vm_map.c:5021
#13 0xc000000000d5d8e8 in vm_fault_lookup (fs=<optimized out>)
    at /home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/vm/vm_fault.c:928
#14 vm_fault (map=<optimized out>, vaddr=<optimized out>, fault_type=2 '\002',
fault_flags=<optimized out>, 
    m_hold=<optimized out>) at
/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/vm/vm_fault.c:1706
#15 0xc000000000d5d564 in vm_fault_trap (map=<optimized out>, vaddr=<optimized
out>, fault_type=<optimized out>, 
    fault_flags=<optimized out>, signo=0x0, ucode=0x0)
    at /home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/vm/vm_fault.c:739
#16 0xc000000000e83c90 in trap_pfault (frame=0xfffffcf0, user=false, signo=0x0,
ucode=0x0)
    at
/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/powerpc/powerpc/trap.c:834
#17 0xc000000000e8322c in trap (frame=0xfffffcf0)
    at
/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/powerpc/powerpc/trap.c:484
#18 0xc000000000e7785c in powerpc_interrupt (framep=0xfffffcf0)
    at
/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/powerpc/powerpc/interrupt.c:137
#19 <signal handler called>
#20 0x00000000fff0267c in ?? ()
#21 0x0000000000e4b454 in ofwcall ()
    at
/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/powerpc/ofw/ofwcall64.S:166
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
(kgdb) frame 7
#7  0xc0000000009338ac in witness_save (lock=<optimized out>, filep=<optimized
out>, linep=<optimized out>)
    at
/home/adrian/work/freebsd/head/freebsd-src-ppc64/sys/kern/subr_witness.c:2365
2365            KASSERT(witness_cold == 0, ("%s: witness_cold", __func__));
(kgdb) print witness_cold
$2 = 1
(kgdb) 
```

So is this a case of witness not yet being available? like, did
vm_page_startup() not yet get called but we're already taking a page fault?

-- 
You are receiving this mail because:
You are the assignee for the bug.