return ret;
 }
 
-int __pkvm_host_relax_perms_guest(u64 gfn, struct pkvm_hyp_vcpu *vcpu, enum kvm_pgtable_prot prot)
+static void assert_host_shared_guest(struct pkvm_hyp_vm *vm, u64 ipa)
 {
-       struct pkvm_hyp_vm *vm = pkvm_hyp_vcpu_to_hyp_vm(vcpu);
-       u64 ipa = hyp_pfn_to_phys(gfn);
        u64 phys;
        int ret;
 
-       if (prot & ~KVM_PGTABLE_PROT_RWX)
-               return -EINVAL;
+       if (!IS_ENABLED(CONFIG_NVHE_EL2_DEBUG))
+               return;
 
        host_lock_component();
        guest_lock_component(vm);
 
        ret = __check_host_shared_guest(vm, &phys, ipa);
-       if (!ret)
-               ret = kvm_pgtable_stage2_relax_perms(&vm->pgt, ipa, prot, 0);
 
        guest_unlock_component(vm);
        host_unlock_component();
 
-       return ret;
+       WARN_ON(ret && ret != -ENOENT);
 }
 
-int __pkvm_host_wrprotect_guest(u64 gfn, struct pkvm_hyp_vm *vm)
+int __pkvm_host_relax_perms_guest(u64 gfn, struct pkvm_hyp_vcpu *vcpu, enum kvm_pgtable_prot prot)
 {
+       struct pkvm_hyp_vm *vm = pkvm_hyp_vcpu_to_hyp_vm(vcpu);
        u64 ipa = hyp_pfn_to_phys(gfn);
-       u64 phys;
        int ret;
 
-       host_lock_component();
-       guest_lock_component(vm);
+       if (pkvm_hyp_vm_is_protected(vm))
+               return -EPERM;
 
-       ret = __check_host_shared_guest(vm, &phys, ipa);
-       if (!ret)
-               ret = kvm_pgtable_stage2_wrprotect(&vm->pgt, ipa, PAGE_SIZE);
+       if (prot & ~KVM_PGTABLE_PROT_RWX)
+               return -EINVAL;
 
+       assert_host_shared_guest(vm, ipa);
+       guest_lock_component(vm);
+       ret = kvm_pgtable_stage2_relax_perms(&vm->pgt, ipa, prot, 0);
        guest_unlock_component(vm);
-       host_unlock_component();
 
        return ret;
 }
 
-int __pkvm_host_test_clear_young_guest(u64 gfn, bool mkold, struct pkvm_hyp_vm *vm)
+int __pkvm_host_wrprotect_guest(u64 gfn, struct pkvm_hyp_vm *vm)
 {
        u64 ipa = hyp_pfn_to_phys(gfn);
-       u64 phys;
        int ret;
 
-       host_lock_component();
+       if (pkvm_hyp_vm_is_protected(vm))
+               return -EPERM;
+
+       assert_host_shared_guest(vm, ipa);
        guest_lock_component(vm);
+       ret = kvm_pgtable_stage2_wrprotect(&vm->pgt, ipa, PAGE_SIZE);
+       guest_unlock_component(vm);
 
-       ret = __check_host_shared_guest(vm, &phys, ipa);
-       if (!ret)
-               ret = kvm_pgtable_stage2_test_clear_young(&vm->pgt, ipa, PAGE_SIZE, mkold);
+       return ret;
+}
 
+int __pkvm_host_test_clear_young_guest(u64 gfn, bool mkold, struct pkvm_hyp_vm *vm)
+{
+       u64 ipa = hyp_pfn_to_phys(gfn);
+       int ret;
+
+       if (pkvm_hyp_vm_is_protected(vm))
+               return -EPERM;
+
+       assert_host_shared_guest(vm, ipa);
+       guest_lock_component(vm);
+       ret = kvm_pgtable_stage2_test_clear_young(&vm->pgt, ipa, PAGE_SIZE, mkold);
        guest_unlock_component(vm);
-       host_unlock_component();
 
        return ret;
 }
 {
        struct pkvm_hyp_vm *vm = pkvm_hyp_vcpu_to_hyp_vm(vcpu);
        u64 ipa = hyp_pfn_to_phys(gfn);
-       u64 phys;
        int ret;
 
-       host_lock_component();
-       guest_lock_component(vm);
-
-       ret = __check_host_shared_guest(vm, &phys, ipa);
-       if (!ret)
-               kvm_pgtable_stage2_mkyoung(&vm->pgt, ipa, 0);
+       if (pkvm_hyp_vm_is_protected(vm))
+               return -EPERM;
 
+       assert_host_shared_guest(vm, ipa);
+       guest_lock_component(vm);
+       kvm_pgtable_stage2_mkyoung(&vm->pgt, ipa, 0);
        guest_unlock_component(vm);
-       host_unlock_component();
 
        return ret;
 }