percpu.rs 404 B

12345678910111213141516
  1. use super::wrmsr;
  2. use core::{arch::asm, ptr::NonNull};
  3. fn save_percpu_pointer(percpu_area_base: NonNull<u8>) {
  4. wrmsr(0xC0000101, percpu_area_base.as_ptr() as u64);
  5. }
  6. pub unsafe fn init_percpu_area_thiscpu(percpu_area_base: NonNull<u8>) {
  7. save_percpu_pointer(percpu_area_base);
  8. asm!(
  9. "movq {}, %gs:0",
  10. in(reg) percpu_area_base.as_ptr(),
  11. options(att_syntax)
  12. );
  13. }