/* CPU context upon Guest VCPU reset */
        struct kvm_cpu_context guest_reset_context;
+       spinlock_t reset_cntx_lock;
 
        /* CPU CSR context upon Guest VCPU reset */
        struct kvm_vcpu_csr guest_reset_csr;
 
 
        memcpy(csr, reset_csr, sizeof(*csr));
 
+       spin_lock(&vcpu->arch.reset_cntx_lock);
        memcpy(cntx, reset_cntx, sizeof(*cntx));
+       spin_unlock(&vcpu->arch.reset_cntx_lock);
 
        kvm_riscv_vcpu_fp_reset(vcpu);
 
        spin_lock_init(&vcpu->arch.hfence_lock);
 
        /* Setup reset state of shadow SSTATUS and HSTATUS CSRs */
+       spin_lock_init(&vcpu->arch.reset_cntx_lock);
+
+       spin_lock(&vcpu->arch.reset_cntx_lock);
        cntx = &vcpu->arch.guest_reset_context;
        cntx->sstatus = SR_SPP | SR_SPIE;
        cntx->hstatus = 0;
        cntx->hstatus |= HSTATUS_VTW;
        cntx->hstatus |= HSTATUS_SPVP;
        cntx->hstatus |= HSTATUS_SPV;
+       spin_unlock(&vcpu->arch.reset_cntx_lock);
 
        if (kvm_riscv_vcpu_alloc_vector_context(vcpu, cntx))
                return -ENOMEM;
 
                goto out;
        }
 
+       spin_lock(&target_vcpu->arch.reset_cntx_lock);
        reset_cntx = &target_vcpu->arch.guest_reset_context;
        /* start address */
        reset_cntx->sepc = cp->a1;
        reset_cntx->a0 = target_vcpuid;
        /* private data passed from kernel */
        reset_cntx->a1 = cp->a2;
+       spin_unlock(&target_vcpu->arch.reset_cntx_lock);
+
        kvm_make_request(KVM_REQ_VCPU_RESET, target_vcpu);
 
        __kvm_riscv_vcpu_power_on(target_vcpu);