pub use axplat::percpu::*;
#[percpu::def_percpu]
static CURRENT_TASK_PTR: usize = 0;
#[inline]
pub fn current_task_ptr<T>() -> *const T {
#[cfg(target_arch = "x86_64")]
unsafe {
CURRENT_TASK_PTR.read_current_raw() as _
}
#[cfg(any(
target_arch = "aarch64",
target_arch = "riscv32",
target_arch = "riscv64",
target_arch = "loongarch64"
))]
unsafe {
let _guard = kernel_guard::IrqSave::new();
CURRENT_TASK_PTR.read_current_raw() as _
}
}
#[inline]
pub unsafe fn set_current_task_ptr<T>(ptr: *const T) {
#[cfg(target_arch = "x86_64")]
{
unsafe { CURRENT_TASK_PTR.write_current_raw(ptr as usize) }
}
#[cfg(any(
target_arch = "aarch64",
target_arch = "riscv32",
target_arch = "riscv64",
target_arch = "loongarch64"
))]
{
let _guard = kernel_guard::IrqSave::new();
unsafe { CURRENT_TASK_PTR.write_current_raw(ptr as usize) }
}
}