panic after acpi suspend/resume 9.1, 9.2rc3

John Baldwin jhb at freebsd.org
Mon Sep 9 17:46:04 UTC 2013


On Sunday, September 08, 2013 5:24:54 pm J.R. Oldroyd wrote:
> This problem may have existed for some time in the 9.x kernel.
> I've had similar panics for a while, but not had time to look into
> it.  I did not have this problem on 8.x kernels on this laptop.
> 
> It never happens when the system is cold-booted.  It only happens
> after a suspend/resume cycle or two which is why I am posting to
> freebsd-apci to start with...
> 
> 
> The repeat-by goes something like this:
> - boot system
> - suspend system
> - resume system
> - use as normal (mix of email/firefox/sh & nvi/openvpn)
> - perhaps suspend/resume again
> - keep using as normal
> - system panics, seems often to be when using firefox
> 
> 
> Fatal trap 12: page fault while in kernel mode
> cpuid = 0; apic id = 00
> fault virtual address   = 0x0
> fault code              = supervisor write data, page not present
> instruction pointer     = 0x20:0xffffffff80ceddcd
> stack pointer           = 0x28:0xffffff80dbfe25e0
> frame pointer           = 0x28:0xffffff80dbfe2660
> code segment            = base 0x0, limit 0xfffff, type 0x1b
>                         = DPL 0, pres 1, long 1, def32 0, gran 1
> processor eflags        = interrupt enabled, resume, IOPL = 0
> current process         = 52022 (firefox)
> trap number             = 12
> panic: page fault
> cpuid = 0
> KDB: stack backtrace:
> #0 0xffffffff80947986 at kdb_backtrace+0x66
> #1 0xffffffff8090d9ae at panic+0x1ce
> #2 0xffffffff80cf1db0 at trap_fatal+0x290
> #3 0xffffffff80cf2111 at trap_pfault+0x211
> #4 0xffffffff80cf26c4 at trap+0x344
> #5 0xffffffff80cdb9f3 at calltrap+0x8
> #6 0xffffffff80b797a7 at vm_fault_hold+0x1b87

This is where the NULL pointer is.  Frame 9 (listed below) is above this.

> (kgdb) list *0xffffffff80ceddcd
> 0xffffffff80ceddcd is in pmap_enter (../../../amd64/amd64/pmap.c:3577).
> 3572            if ((m->oflags & VPO_UNMANAGED) == 0) {
> 3573                    newpte |= PG_MANAGED;
> 3574                    pv = get_pv_entry(pmap, &lock);
> 3575                    pv->pv_va = va;
> 3576                    CHANGE_PV_LIST_LOCK_TO_PHYS(&lock, pa);
> 3577                    TAILQ_INSERT_TAIL(&m->md.pv_list, pv, pv_list);
> 3578                    if ((newpte & PG_RW) != 0)
> 3579                            vm_page_aflag_set(m, PGA_WRITEABLE);
> 3580            }
> 3581

So it seems like pv_list of a page might be busted?  Can you try looking at
the disassembly to see if you can find 'm' in one of the registers?

-- 
John Baldwin


More information about the freebsd-acpi mailing list