diff --git a/src/context/list.rs b/src/context/list.rs
index 2e85ae8e150daa3df8f2e26e509231ff6ccc2432..fbc92dbbf547e3eed82d48436a8571decd7fdb14 100644
--- a/src/context/list.rs
+++ b/src/context/list.rs
@@ -92,7 +92,6 @@ impl ContextList {
             #[cfg(target_arch = "aarch64")]
             {
                 let context_id = context.id.into();
-                context.arch.set_tcb(context_id);
                 context.arch.set_lr(func as usize);
                 context.arch.set_context_handle();
             }
diff --git a/src/context/switch.rs b/src/context/switch.rs
index 2e17b42821bfa510802bb622c3657567830fa137..634aff32c2aded32d00a2844aeb173ed71d2cfd3 100644
--- a/src/context/switch.rs
+++ b/src/context/switch.rs
@@ -151,6 +151,11 @@ pub unsafe fn switch() -> bool {
             }
             gdt::set_tcb((*to_ptr).id.into());
         }
+        #[cfg(target_arch = "aarch64")]
+        {
+            let pid = (*to_ptr).id.into();
+            (*to_ptr).arch.set_tcb(pid);
+        }
         CONTEXT_ID.store((*to_ptr).id, Ordering::SeqCst);
     }