bool assigned;
                int level;
 
-               if (!kvm_mem_is_private(kvm, gfn)) {
-                       pr_debug("%s: Failed to ensure GFN 0x%llx has private memory attribute set\n",
-                                __func__, gfn);
-                       ret = -EINVAL;
-                       goto err;
-               }
-
                ret = snp_lookup_rmpentry((u64)pfn + i, &assigned, &level);
                if (ret || assigned) {
                        pr_debug("%s: Failed to ensure GFN 0x%llx RMP entry is initial shared state, ret: %d assigned: %d\n",
 
 int kvm_arch_gmem_prepare(struct kvm *kvm, gfn_t gfn, kvm_pfn_t pfn, int max_order);
 #endif
 
+#ifdef CONFIG_KVM_GENERIC_PRIVATE_MEM
 /**
  * kvm_gmem_populate() - Populate/prepare a GPA range with guest data
  *
 
 long kvm_gmem_populate(struct kvm *kvm, gfn_t gfn, void __user *src, long npages,
                       kvm_gmem_populate_cb post_populate, void *opaque);
+#endif
 
 #ifdef CONFIG_HAVE_KVM_ARCH_GMEM_INVALIDATE
 void kvm_arch_gmem_invalidate(kvm_pfn_t start, kvm_pfn_t end);
 
 }
 EXPORT_SYMBOL_GPL(kvm_gmem_get_pfn);
 
+#ifdef CONFIG_KVM_GENERIC_PRIVATE_MEM
 long kvm_gmem_populate(struct kvm *kvm, gfn_t start_gfn, void __user *src, long npages,
                       kvm_gmem_populate_cb post_populate, void *opaque)
 {
                    (npages - i) < (1 << max_order))
                        max_order = 0;
 
+               ret = -EINVAL;
+               while (!kvm_range_has_memory_attributes(kvm, gfn, gfn + (1 << max_order),
+                                                       KVM_MEMORY_ATTRIBUTE_PRIVATE,
+                                                       KVM_MEMORY_ATTRIBUTE_PRIVATE)) {
+                       if (!max_order)
+                               goto put_folio_and_exit;
+                       max_order--;
+               }
+
                p = src ? src + i * PAGE_SIZE : NULL;
                ret = post_populate(kvm, gfn, pfn, p, max_order, opaque);
                if (!ret)
                        folio_mark_uptodate(folio);
 
+put_folio_and_exit:
                folio_put(folio);
                if (ret)
                        break;
        return ret && !i ? ret : i;
 }
 EXPORT_SYMBOL_GPL(kvm_gmem_populate);
+#endif