diff options
Diffstat (limited to 'kernel/traps.s')
| -rw-r--r-- | kernel/traps.s | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/kernel/traps.s b/kernel/traps.s index 73e7f64..36b3423 100644 --- a/kernel/traps.s +++ b/kernel/traps.s @@ -11,8 +11,10 @@ extern ctask extern idt extern panic extern printk -extern register_isr +extern register_trap +extern reschedule extern sighandler_default +extern ticked ; here we define offsets into task_struct. ; if task_struct is modified, this must be @@ -269,6 +271,7 @@ exc_reserved: syscall_handler: SAVE + mov dword [ticked], 0 ; push the arguments onto the stack, then ; calculate the offset for the appropriate ; handler function and call it @@ -282,8 +285,13 @@ syscall_handler: add esp, 12 ; preserve the syscall's return value mov [esp+30], eax - mov eax, esp + ; check if the timer fired while we were in kernel mode + mov eax, [ticked] + jz .skip + call reschedule +.skip: ; check pending signals and handle them (if any) + mov eax, esp push eax call check_signals add esp, 4 @@ -379,7 +387,7 @@ syscall_init: push syscall_handler push dword 3 push dword 0x80 - call register_isr + call register_trap add esp, 12 pop ebp ret |
