unsigned long *isa);
 void kvm_riscv_vcpu_host_vector_save(struct kvm_cpu_context *cntx);
 void kvm_riscv_vcpu_host_vector_restore(struct kvm_cpu_context *cntx);
-int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu,
-                                       struct kvm_cpu_context *cntx);
+int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu);
 void kvm_riscv_vcpu_free_vector_context(struct kvm_vcpu *vcpu);
 #else
 
 {
 }
 
-static inline int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu,
-                                                     struct kvm_cpu_context *cntx)
+static inline int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu)
 {
        return 0;
 }
 
        struct kvm_vcpu_csr *reset_csr = &vcpu->arch.guest_reset_csr;
        struct kvm_cpu_context *cntx = &vcpu->arch.guest_context;
        struct kvm_cpu_context *reset_cntx = &vcpu->arch.guest_reset_context;
+       void *vector_datap = cntx->vector.datap;
        bool loaded;
 
        /**
 
        kvm_riscv_vcpu_fp_reset(vcpu);
 
+       /* Restore datap as it's not a part of the guest context. */
+       cntx->vector.datap = vector_datap;
        kvm_riscv_vcpu_vector_reset(vcpu);
 
        kvm_riscv_vcpu_timer_reset(vcpu);
        cntx->hstatus |= HSTATUS_SPV;
        spin_unlock(&vcpu->arch.reset_cntx_lock);
 
-       if (kvm_riscv_vcpu_alloc_vector_context(vcpu, cntx))
+       if (kvm_riscv_vcpu_alloc_vector_context(vcpu))
                return -ENOMEM;
 
        /* By default, make CY, TM, and IR counters accessible in VU mode */
 
        struct kvm_cpu_context *cntx = &vcpu->arch.guest_context;
 
        cntx->sstatus &= ~SR_VS;
+
+       cntx->vector.vlenb = riscv_v_vsize / 32;
+
        if (riscv_isa_extension_available(isa, v)) {
                cntx->sstatus |= SR_VS_INITIAL;
                WARN_ON(!cntx->vector.datap);
                __kvm_riscv_vector_restore(cntx);
 }
 
-int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu,
-                                       struct kvm_cpu_context *cntx)
+int kvm_riscv_vcpu_alloc_vector_context(struct kvm_vcpu *vcpu)
 {
-       cntx->vector.datap = kmalloc(riscv_v_vsize, GFP_KERNEL);
-       if (!cntx->vector.datap)
+       vcpu->arch.guest_context.vector.datap = kzalloc(riscv_v_vsize, GFP_KERNEL);
+       if (!vcpu->arch.guest_context.vector.datap)
                return -ENOMEM;
-       cntx->vector.vlenb = riscv_v_vsize / 32;
 
        vcpu->arch.host_context.vector.datap = kzalloc(riscv_v_vsize, GFP_KERNEL);
        if (!vcpu->arch.host_context.vector.datap)
 
 void kvm_riscv_vcpu_free_vector_context(struct kvm_vcpu *vcpu)
 {
-       kfree(vcpu->arch.guest_reset_context.vector.datap);
+       kfree(vcpu->arch.guest_context.vector.datap);
        kfree(vcpu->arch.host_context.vector.datap);
 }
 #endif