#[repr(C)]pub struct CpuContext {
pub saved_rsp: u64,
}Expand description
CPU context saved/restored during context switches.
Only stores the saved RSP. All callee-saved registers (rbx, rbp, r12-r15)
are pushed onto the task’s kernel stack by switch_context().
Fields§
§saved_rsp: u64Saved stack pointer (points into the task’s kernel stack)
Implementations§
Source§impl CpuContext
impl CpuContext
Sourcepub fn new(entry_point: u64, kernel_stack: &KernelStack) -> Self
pub fn new(entry_point: u64, kernel_stack: &KernelStack) -> Self
Create a new CPU context for a task starting at the given entry point.
Sets up a fake stack frame on the kernel stack that looks like
switch_context() just pushed callee-saved registers. When
switch_context() or restore_first_task() pops them and does ret,
it will jump to task_entry_trampoline, which enables interrupts
and jumps to the real entry point (stored in r12).
Stack layout (growing downward):
[stack_top]
task_entry_trampoline <- ret target
0 (r15)
0 (r14)
0 (r13)
entry_point (r12) <- trampoline reads this
0 (rbp)
0 (rbx)
<- saved_rsp points hereAuto Trait Implementations§
impl Freeze for CpuContext
impl RefUnwindSafe for CpuContext
impl Send for CpuContext
impl Sync for CpuContext
impl Unpin for CpuContext
impl UnsafeUnpin for CpuContext
impl UnwindSafe for CpuContext
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more