Skip to content

Instantly share code, notes, and snippets.

@nullnilaki
Last active August 29, 2015 13:56
Show Gist options
  • Save nullnilaki/8941977 to your computer and use it in GitHub Desktop.
Save nullnilaki/8941977 to your computer and use it in GitHub Desktop.
Reading symbols from /netbsd.gdb...done.
Load new symbol table from "/netbsd.gdb"? (y or n) y
Reading symbols from /netbsd.gdb...done.
#0 0xc05a2358 in maybe_dump (howto=260)
at /usr/src/sys/arch/i386/i386/machdep.c:878
878 dumpsys();
#0 0xc05a2358 in maybe_dump (howto=260) at /usr/src/sys/arch/i386/i386/machdep.c:878
#1 cpu_reboot (howto=260, bootstr=0x0) at /usr/src/sys/arch/i386/i386/machdep.c:899
#2 0xc0790a5a in vpanic (fmt=0xc0bb1c7b "uvm", ap=0xdafaab7c "")
at /usr/src/sys/kern/subr_prf.c:308
#3 0xc0790aff in panic (fmt=0xc0bb1c7b "uvm") at /usr/src/sys/kern/subr_prf.c:205
#4 0xc0867e56 in udv_fault (ufi=0xdafaac78, vaddr=3148689408, pps=0xdafaabd8, npages=1,
centeridx=0, access_type=2, flags=66) at /usr/src/sys/uvm/uvm_device.c:390
#5 0xc08691d0 in uvm_fault_internal (orig_map=0xc2fcee5c, vaddr=3148689408, access_type=2,
fault_flag=0) at /usr/src/sys/uvm/uvm_fault.c:897
#6 0xc07de9e9 in trap (frame=0xdafaad48) at /usr/src/sys/arch/i386/i386/trap.c:688
#7 0xc010cf48 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
873 /* Disable interrupts. */
http://nxr.netbsd.org/source/xref/src/sys/arch/i386/i386/trap.c#657
でuvm_fault_internalが呼ばれるのは確定!
301 void
302 trap(struct trapframe *frame)
655 onfault = pcb->pcb_onfault;
656 pcb->pcb_onfault = NULL;
657 error = uvm_fault(map, va, ftype);
658 pcb->pcb_onfault = onfault;
659 if (error == 0) {
http://nxr.netbsd.org/source/xref/src/sys/uvm/uvm_fault.c#uvm_fault_internal
352 static int
353 udv_fault(struct uvm_faultinfo *ufi, vaddr_t vaddr, struct vm_page **pps,
354 int npages, int centeridx, vm_prot_t access_type,
355 int flags)
423 paddr = pmap_phys_address(mdpgno);
424 mmapflags = pmap_mmap_flags(mdpgno);
425 mapprot = ufi->entry->protection;
426 UVMHIST_LOG(maphist,
427 " MAPPING: device: pm=0x%x, va=0x%x, pa=0x%lx, at=%d",
428 ufi->orig_map->pmap, curr_va, paddr, mapprot);
429 if (pmap_enter(ufi->orig_map->pmap, curr_va, paddr, mapprot,
430 PMAP_CANFAIL | mapprot | mmapflags) != 0) {
431 /*
432 * pmap_enter() didn't have the resource to
433 * enter this mapping. Unlock everything,
434 * wait for the pagedaemon to free up some
435 * pages, and then tell uvm_fault() to start
436 * the fault again.
437 *
438 * XXX Needs some rethinking for the PGO_ALLPAGES
439 * XXX case.
440 */
ココの処理は発生しない!
441 pmap_update(ufi->orig_map->pmap); /* sync what we have so far */
442 uvmfault_unlockall(ufi, ufi->entry->aref.ar_amap,
443 uobj);
444 uvm_wait("udv_fault");
445 return (ERESTART);
446 }
447 }
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment