]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/kern/hibernate.c
xnu-1699.24.23.tar.gz
[apple/xnu.git] / osfmk / kern / hibernate.c
index 3bf72594e5d7b6e32f1b145cd6764b2e0fc4de63..018ea6b78719039e2848d5bc014c6e8b2ae06838 100644 (file)
 #include <vm/vm_pageout.h>
 #include <vm/vm_purgeable_internal.h>
 
-
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
 
 kern_return_t 
 hibernate_setup(IOHibernateImageHeader * header,
-                        uint32_t free_page_ratio,
-                        uint32_t free_page_time,
+                        uint32_t  free_page_ratio,
+                        uint32_t  free_page_time,
+                        boolean_t vmflush,
                        hibernate_page_list_t ** page_list_ret,
                        hibernate_page_list_t ** page_list_wired_ret,
+                       hibernate_page_list_t ** page_list_pal_ret,
                         boolean_t * encryptedswap)
 {
     hibernate_page_list_t * page_list = NULL;
     hibernate_page_list_t * page_list_wired = NULL;
+    hibernate_page_list_t * page_list_pal = NULL;
     uint32_t               gobble_count;
 
     *page_list_ret       = NULL;
     *page_list_wired_ret = NULL;
-
+       *page_list_pal_ret    = NULL;
+    
+    if (vmflush)
+        hibernate_flush_memory();
 
     page_list = hibernate_page_list_allocate();
     if (!page_list)
@@ -70,6 +75,13 @@ hibernate_setup(IOHibernateImageHeader * header,
         kfree(page_list, page_list->list_size);
         return (KERN_RESOURCE_SHORTAGE);
     }
+    page_list_pal = hibernate_page_list_allocate();
+    if (!page_list_pal)
+    {
+        kfree(page_list, page_list->list_size);
+        kfree(page_list_wired, page_list_wired->list_size);
+        return (KERN_RESOURCE_SHORTAGE);
+    }
 
     *encryptedswap = dp_encryption;
 
@@ -88,6 +100,7 @@ hibernate_setup(IOHibernateImageHeader * header,
 
     *page_list_ret       = page_list;
     *page_list_wired_ret = page_list_wired;
+    *page_list_pal_ret    = page_list_pal;
 
     return (KERN_SUCCESS);
 }