unsigned long *src_pfns;
        unsigned long *dst_pfns;
 
-       src_pfns = kcalloc(npages, sizeof(*src_pfns), GFP_KERNEL);
-       dst_pfns = kcalloc(npages, sizeof(*dst_pfns), GFP_KERNEL);
+       src_pfns = kvcalloc(npages, sizeof(*src_pfns), GFP_KERNEL | __GFP_NOFAIL);
+       dst_pfns = kvcalloc(npages, sizeof(*dst_pfns), GFP_KERNEL | __GFP_NOFAIL);
 
        migrate_device_range(src_pfns, start_pfn, npages);
        for (i = 0; i < npages; i++) {
        }
        migrate_device_pages(src_pfns, dst_pfns, npages);
        migrate_device_finalize(src_pfns, dst_pfns, npages);
-       kfree(src_pfns);
-       kfree(dst_pfns);
+       kvfree(src_pfns);
+       kvfree(dst_pfns);
 }
 
 /* Removes free pages from the free list so they can't be re-allocated */