diff --git a/proto/hypervisor.c b/proto/hypervisor.c
index f0ed19ebc44c08fe121bb0b1ca81b3d60ff55f4b..6423599fd70fa67b9576dd7896ac90f0122ae724 100644
--- a/proto/hypervisor.c
+++ b/proto/hypervisor.c
@@ -188,7 +188,10 @@ static int my_init(void) {
         return -ENOMEM;
     }
 
-    vmxon_regions[0] = vmxon_reg;
+    if (init_vcpu(&vcpus[0], vmxon_reg) != 0) {
+        pr_err("VCPU initialization failed\n");
+        return -EFAULT;
+    }
 
     pr_info("VA of the allocated region = 0x%px\n", vmxon_reg);
     pr_info("PA of the allocated region = 0x%lx\n", __pa(vmxon_reg));
@@ -248,7 +251,7 @@ static void my_exit(void) {
     }
 
     pr_info("Freeing memory of the VMXON region\n");
-    kfree(vmxon_regions[0]);
+    kfree(vcpus[0].vmxon);
 
     pr_info("vmbr.ko has exited\n");
 }