+ kfree(page_list, page_list->list_size);
+
+ retval = KERN_RESOURCE_SHORTAGE;
+ goto done;
+ }
+ page_list_pal = hibernate_page_list_allocate(FALSE);
+ if (!page_list_pal)
+ {
+ kfree(page_list, page_list->list_size);
+ kfree(page_list_wired, page_list_wired->list_size);
+
+ retval = KERN_RESOURCE_SHORTAGE;
+ goto done;
+ }
+ *page_list_ret = page_list;
+ *page_list_wired_ret = page_list_wired;
+ *page_list_pal_ret = page_list_pal;
+
+done:
+ return (retval);
+
+}
+
+extern int sync_internal(void);
+
+kern_return_t
+hibernate_setup(IOHibernateImageHeader * header,
+ uint32_t free_page_ratio,
+ uint32_t free_page_time,
+ boolean_t vmflush,
+ hibernate_page_list_t * page_list,
+ hibernate_page_list_t * page_list_wired __unused,
+ hibernate_page_list_t * page_list_pal __unused)
+{
+ uint32_t gobble_count;
+ kern_return_t retval = KERN_SUCCESS;
+
+ hibernate_create_paddr_map();
+
+ hibernate_reset_stats();
+
+ if (vmflush && (COMPRESSED_PAGER_IS_ACTIVE || dp_isssd)) {
+
+ sync_internal();
+
+ if (COMPRESSED_PAGER_IS_ACTIVE) {
+ vm_decompressor_lock();
+ need_to_unlock_decompressor = TRUE;
+ }
+ hibernate_flush_memory();