]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/vm/vm_purgeable_internal.h
xnu-4570.61.1.tar.gz
[apple/xnu.git] / osfmk / vm / vm_purgeable_internal.h
index 5e6d4e4afd8f61fea5b8a90988deaf12b2fbca0b..010c2ee227e622663690c7c8976cd86fadf6132b 100644 (file)
@@ -46,15 +46,9 @@ enum purgeable_q_type {
        PURGEABLE_Q_TYPE_MAX
 };
 
-#if (CONFIG_TOKEN_QUEUE_SMALL == 1)
-typedef uint16_t token_idx_t;
-typedef uint16_t token_cnt_t;
-#define TOKEN_COUNT_MAX UINT16_MAX
-#else
 typedef uint32_t token_idx_t;
 typedef uint32_t token_cnt_t;
 #define TOKEN_COUNT_MAX UINT32_MAX
-#endif
 
 #define NUM_VOLATILE_GROUPS 8
 struct purgeable_q {
@@ -73,6 +67,8 @@ struct purgeable_q {
 typedef struct purgeable_q * purgeable_q_t;
 
 extern struct purgeable_q purgeable_queues[PURGEABLE_Q_TYPE_MAX];
+extern queue_head_t purgeable_nonvolatile_queue;
+extern int purgeable_nonvolatile_count;
 extern int32_t token_new_pagecount;
 #define TOKEN_NEW_PAGECOUNT_MAX INT32_MAX
 extern int available_for_purge;
@@ -94,6 +90,7 @@ kern_return_t vm_purgeable_token_add(purgeable_q_t queue);
 
 /* enter with page queue locked */
 void vm_purgeable_token_delete_first(purgeable_q_t queue);
+void vm_purgeable_token_delete_last(purgeable_q_t queue);
 
 /*
  * decrement token counters.
@@ -103,7 +100,7 @@ void vm_purgeable_q_advance_all(void);
 
 /* the object purger. purges the next eligible object from memory. */
 /* returns TRUE if an object was purged, otherwise FALSE. */
-boolean_t vm_purgeable_object_purge_one(void);
+boolean_t vm_purgeable_object_purge_one(int force_purge_below_group, int flags);
 
 /* purge all volatile objects now */
 void vm_purgeable_object_purge_all(void);
@@ -114,4 +111,34 @@ void vm_purgeable_object_add(vm_object_t object, purgeable_q_t queue, int group)
 /* look for object. If found, remove from purgeable queue. */
 purgeable_q_t vm_purgeable_object_remove(vm_object_t object);
 
+/* statistics for purgable objects in all queues */
+void vm_purgeable_stats(vm_purgeable_info_t info, task_t target_task);
+
+#if DEVELOPMENT || DEBUG
+/* statistics for purgeable object usage in all queues for a task */
+kern_return_t vm_purgeable_account(task_t task, pvm_account_info_t acnt_info);
+#endif /* DEVELOPMENT || DEBUG */
+
+uint64_t vm_purgeable_purge_task_owned(task_t task);
+void vm_purgeable_nonvolatile_enqueue(vm_object_t object, task_t task);
+void vm_purgeable_nonvolatile_dequeue(vm_object_t object);
+void vm_purgeable_accounting(vm_object_t       object,
+                            vm_purgable_t      old_state,
+                            boolean_t          disown,
+                            boolean_t          task_objq_locked);
+void vm_purgeable_compressed_update(vm_object_t        object,
+                                   int         delta);
+
+#define PURGEABLE_LOOP_MAX 64
+
+#define TOKEN_ADD              0x40    /* 0x100 */
+#define TOKEN_DELETE           0x41    /* 0x104 */
+#define TOKEN_RIPEN            0x42    /* 0x108 */
+#define OBJECT_ADD             0x48    /* 0x120 */
+#define OBJECT_REMOVE          0x49    /* 0x124 */
+#define OBJECT_PURGE           0x4a    /* 0x128 */
+#define OBJECT_PURGE_ALL       0x4b    /* 0x12c */
+#define OBJECT_PURGE_ONE       0x4c    /* 0x12d */
+#define OBJECT_PURGE_LOOP      0x4e    /* 0x12e */
+
 #endif /* __VM_PURGEABLE_INTERNAL__ */