git://scm.lunaixsky.com
/
lunaix-os.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' into sata-ahci-dev
[lunaix-os.git]
/
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 9e124445de45ce370e74afeb53748b1a1ee19c42..6df3182622bce973794b360cb01cb91f5e138843 100644
(file)
--- 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;
}
if (do_kernel(&mapping)) {
return;
}
- goto segv_term;
+ // 如果不是,那么看看内核是不是需要用户页。
}
struct mm_region* hit_region = region_get(&__current->mm.regions, ptr);
if (!hit_region) {
}
struct mm_region* hit_region = region_get(&__current->mm.regions, ptr);
if (!hit_region) {
- //
Into the void...
+ //
当你凝视深渊时……
goto segv_term;
}
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
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);
ptr,
param->cs,
param->eip);
-
signal_send(__current->pid
, _SIGSEGV);
+
__SIGSET(__current->sig_pending
, _SIGSEGV);
schedule();
// should not reach
while (1)
schedule();
// should not reach
while (1)