X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/cb529e7c1abcfe6b61241e47a780172031b82840..09a115a4c07e26b3a978c693c0d6d17abea80479:/lunaix-os/kernel/asm/x86/pfault.c diff --git a/lunaix-os/kernel/asm/x86/pfault.c b/lunaix-os/kernel/asm/x86/pfault.c index 9e12444..6df3182 100644 --- a/lunaix-os/kernel/asm/x86/pfault.c +++ b/lunaix-os/kernel/asm/x86/pfault.c @@ -41,17 +41,17 @@ intr_routine_page_fault(const isr_param* param) if (do_kernel(&mapping)) { return; } - goto segv_term; + // 如果不是,那么看看内核是不是需要用户页。 } struct mm_region* hit_region = region_get(&__current->mm.regions, ptr); if (!hit_region) { - // Into the void... + // 当你凝视深渊时…… goto segv_term; } - x86_pte_t* pte = &PTE_MOUNTED(PD_REFERENCED, ptr >> 12); + volatile x86_pte_t* pte = &PTE_MOUNTED(PD_REFERENCED, ptr >> 12); if ((*pte & PG_PRESENT)) { if ((hit_region->attr & COW_MASK) == COW_MASK) { // normal page fault, do COW @@ -93,7 +93,7 @@ segv_term: ptr, param->cs, param->eip); - signal_send(__current->pid, _SIGSEGV); + __SIGSET(__current->sig_pending, _SIGSEGV); schedule(); // should not reach while (1)