Skip to main content

n3b_migrate_asm

Function n3b_migrate_asm 

Source
pub unsafe extern "C" fn n3b_migrate_asm(frame: *mut MigrationFrame)
Expand description

ASM migration primitive.

§Safety

  • frame must point to a valid MigrationFrame mapped at the same VA in both sender and receiver address spaces.
  • Interrupts must be enabled before calling (the primitive will CLI).
  • The caller must be on a valid kernel stack.

§Layout adjusted for a 64b align padding

Offset  Field
0x00    src_ctx.r15
0x08    src_ctx.r14
0x10    src_ctx.r13
0x18    src_ctx.r12
0x20    src_ctx.rbp
0x28    src_ctx.rbx
0x30    src_ctx.rdx
0x38    src_ctx.rax
0x40    src_ctx.rflags
0x48    src_ctx.rsp
0x50    src_ctx.rip
0x58    src_ctx.cr3_pcid
0x60-0x7F  (alignment padding)
0x80    dst_ctx.r15
0x88    dst_ctx.r14
0x90    dst_ctx.r13
0x98    dst_ctx.r12
0xA0    dst_ctx.rbp
0xA8    dst_ctx.rbx
0xB0    dst_ctx.rdx
0xB8    dst_ctx.rax
0xC0    dst_ctx.rflags
0xC8    dst_ctx.rsp
0xD0    dst_ctx.rip
0xD8    dst_ctx.cr3_pcid
0xE0-0xFF (alignment padding)
0x100   state (AtomicU8)
0x104   generation (AtomicU32)

§Behavior

  1. Saves source context to frame.src_ctx
  2. CLI (≤3 instructions) + CR3 switch to frame.dst_ctx.cr3_pcid
  3. Restores destination context from frame.dst_ctx
  4. Sets frame.state = Ready, increments generation
  5. Returns via ret (pops RIP from restored dst_ctx.rsp)