diff options
| author | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-25 05:43:37 +0100 |
|---|---|---|
| committer | Aleksa Vuckovic <aleksa@vuckovic.cc> | 2023-02-25 05:47:59 +0100 |
| commit | aaa23fffd02fb49cdbc56a480dbb5a8fa95bff38 (patch) | |
| tree | cefd59478bb62a2edca523adc9f10cec605f57b0 /kernel/src/scheduler | |
| parent | 4931f266a72dccfb439badfa1070563003c80ce3 (diff) | |
x86_64_regs.S: (push/pop)_(callee/caller)_regs
Diffstat (limited to 'kernel/src/scheduler')
| -rw-r--r-- | kernel/src/scheduler/ap_init.S | 1 | ||||
| -rw-r--r-- | kernel/src/scheduler/switch.S | 18 |
2 files changed, 18 insertions, 1 deletions
diff --git a/kernel/src/scheduler/ap_init.S b/kernel/src/scheduler/ap_init.S index 47efc6f..ac758c8 100644 --- a/kernel/src/scheduler/ap_init.S +++ b/kernel/src/scheduler/ap_init.S @@ -1,6 +1,5 @@ .section .apinit, "a" - .SET stack_top, 0x3008000 .SET stack_off, 0x8000 diff --git a/kernel/src/scheduler/switch.S b/kernel/src/scheduler/switch.S new file mode 100644 index 0000000..f4d0e79 --- /dev/null +++ b/kernel/src/scheduler/switch.S @@ -0,0 +1,18 @@ +#include "x86_64_regs.S" + +.global context_switch +context_switch: + /* switch rsp to old task's %rsp */ + + /* save all old task's registers */ + push_caller_saved + push_callee_saved + + /* save old task's rsp & rip */ + call schedule + /* get new task's rsp & rip */ + + /* restore all new task's registers */ + pop_callee_saved + pop_caller_saved + iretq |
