Last active
August 29, 2015 13:56
-
-
Save nullnilaki/8941977 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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