Move some variable name to task_cx to task_cx_ptr2(ch5 ver).

This commit is contained in:
Yifan Wu 2021-01-04 16:20:09 +08:00
parent 76a8d7527c
commit 09c3be9d6f
4 changed files with 14 additions and 8 deletions

View file

@ -29,7 +29,7 @@ pub fn suspend_current_and_run_next() {
let task = take_current_task().unwrap(); let task = take_current_task().unwrap();
// ---- temporarily hold current PCB lock // ---- temporarily hold current PCB lock
let task_cx_ptr = task.acquire_inner_lock().get_task_cx_ptr2(); let task_cx_ptr2 = task.acquire_inner_lock().get_task_cx_ptr2();
// ---- release current PCB lock // ---- release current PCB lock
// ++++ temporarily hold current PCB lock // ++++ temporarily hold current PCB lock
@ -40,7 +40,7 @@ pub fn suspend_current_and_run_next() {
// push back to ready queue. // push back to ready queue.
add_task(task); add_task(task);
// jump to scheduling cycle // jump to scheduling cycle
schedule(task_cx_ptr); schedule(task_cx_ptr2);
} }
pub fn exit_current_and_run_next(exit_code: i32) { pub fn exit_current_and_run_next(exit_code: i32) {

View file

@ -33,16 +33,16 @@ impl Processor {
pub fn run(&self) { pub fn run(&self) {
loop { loop {
if let Some(task) = fetch_task() { if let Some(task) = fetch_task() {
let idle_task_cx_ptr = self.get_idle_task_cx_ptr2(); let idle_task_cx_ptr2 = self.get_idle_task_cx_ptr2();
// acquire // acquire
let next_task_cx_ptr = task.acquire_inner_lock().get_task_cx_ptr2(); let next_task_cx_ptr2 = task.acquire_inner_lock().get_task_cx_ptr2();
task.acquire_inner_lock().task_status = TaskStatus::Running; task.acquire_inner_lock().task_status = TaskStatus::Running;
// release // release
self.inner.lock().current = Some(task); self.inner.lock().current = Some(task);
unsafe { unsafe {
__switch( __switch(
idle_task_cx_ptr, idle_task_cx_ptr2,
next_task_cx_ptr, next_task_cx_ptr2,
); );
} }
} }

View file

@ -8,7 +8,10 @@
.section .text .section .text
.globl __switch .globl __switch
__switch: __switch:
# __switch(current_task_cx: &*const TaskContext, next_task_cx: &*const TaskContext) # __switch(
# current_task_cx_ptr2: &*const TaskContext,
# next_task_cx_ptr2: &*const TaskContext
# )
# push TaskContext to current sp and save its address to where a0 points to # push TaskContext to current sp and save its address to where a0 points to
addi sp, sp, -13*8 addi sp, sp, -13*8
sd sp, 0(a0) sd sp, 0(a0)

View file

@ -1,5 +1,8 @@
global_asm!(include_str!("switch.S")); global_asm!(include_str!("switch.S"));
extern "C" { extern "C" {
pub fn __switch(current_task_cx: *const usize, next_task_cx: *const usize); pub fn __switch(
current_task_cx_ptr2: *const usize,
next_task_cx_ptr2: *const usize
);
} }