Move some variable name to task_cx to task_cx_ptr2(ch5 ver).
This commit is contained in:
parent
780a73ed6f
commit
3b45b483a0
4 changed files with 14 additions and 8 deletions
|
@ -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) {
|
||||||
|
|
|
@ -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,
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue