signal: check_signal must be called after check_need_resched.
This commit is contained in:
10
kernel/mem.c
10
kernel/mem.c
@@ -1212,10 +1212,6 @@ static void page_fault_handler(void *fault_addr, uint64_t reason, void *regs)
|
||||
info._sifields._sigfault.si_addr = fault_addr;
|
||||
set_signal(SIGSEGV, regs, &info);
|
||||
}
|
||||
if(interrupt_from_user(regs)){
|
||||
cpu_enable_interrupt();
|
||||
check_signal(0, regs, 0);
|
||||
}
|
||||
goto out;
|
||||
}
|
||||
|
||||
@@ -1224,7 +1220,11 @@ static void page_fault_handler(void *fault_addr, uint64_t reason, void *regs)
|
||||
out:
|
||||
dkprintf("%s: addr: %p, reason: %lx, regs: %p -> error: %d\n",
|
||||
__FUNCTION__, fault_addr, reason, regs, error);
|
||||
check_need_resched();
|
||||
if(interrupt_from_user(regs)){
|
||||
cpu_enable_interrupt();
|
||||
check_need_resched();
|
||||
check_signal(0, regs, 0);
|
||||
}
|
||||
set_cputime(0);
|
||||
#ifdef PROFILE_ENABLE
|
||||
if (thread->profile)
|
||||
|
||||
Reference in New Issue
Block a user