- /* boolean_t array */ all_wanted:11, /* Bit array of "want to be
- * awakened" notations. See
- * VM_OBJECT_EVENT_* items
- * below */
- /* boolean_t */ pager_created:1, /* Has pager been created? */
- /* boolean_t */ pager_initialized:1, /* Are fields ready to use? */
- /* boolean_t */ pager_ready:1, /* Will pager take requests? */
-
- /* boolean_t */ pager_trusted:1,/* The pager for this object
- * is trusted. This is true for
- * all internal objects (backed
- * by the default pager)
- */
- /* boolean_t */ can_persist:1, /* The kernel may keep the data
- * for this object (and rights
- * to the memory object) after
- * all address map references
- * are deallocated?
- */
- /* boolean_t */ internal:1, /* Created by the kernel (and
- * therefore, managed by the
- * default memory manger)
- */
- /* boolean_t */ temporary:1, /* Permanent objects may be
- * changed externally by the
- * memory manager, and changes
- * made in memory must be
- * reflected back to the memory
- * manager. Temporary objects
- * lack both of these
- * characteristics.
- */
- /* boolean_t */ private:1, /* magic device_pager object,
- * holds private pages only */
- /* boolean_t */ pageout:1, /* pageout object. contains
- * private pages that refer to
- * a real memory object. */
- /* boolean_t */ alive:1, /* Not yet terminated */
-
- /* boolean_t */ lock_in_progress:1,
- /* Is a multi-page lock
- * request in progress?
- */
- /* boolean_t */ lock_restart:1,
- /* Should lock request in
- * progress restart search?
- */
- /* boolean_t */ shadowed:1, /* Shadow may exist */
- /* boolean_t */ silent_overwrite:1,
- /* Allow full page overwrite
- * without data_request if
- * page is absent */
- /* boolean_t */ advisory_pageout:1,
- /* Instead of sending page
- * via OOL, just notify
- * pager that the kernel
- * wants to discard it, page
- * remains in object */
- /* boolean_t */ true_share:1,
- /* This object is mapped
- * in more than one place
- * and hence cannot be
- * coalesced */
- /* boolean_t */ terminating:1,
- /* Allows vm_object_lookup
- * and vm_object_deallocate
- * to special case their
- * behavior when they are
- * called as a result of
- * page cleaning during
- * object termination
- */
- /* boolean_t */ named:1, /* An enforces an internal
- * naming convention, by
- * calling the right routines
- * for allocation and
- * destruction, UBC references
- * against the vm_object are
- * checked.
- */
- /* boolean_t */ shadow_severed:1,
- /* When a permanent object
- * backing a COW goes away
- * unexpectedly. This bit
- * allows vm_fault to return
- * an error rather than a
- * zero filled page.
- */
- /* boolean_t */ phys_contiguous:1,
- /* Memory is wired and
- * guaranteed physically
- * contiguous. However
- * it is not device memory
- * and obeys normal virtual
- * memory rules w.r.t pmap
- * access bits.
- */
- /* boolean_t */ nophyscache:1;
- /* When mapped at the
- * pmap level, don't allow
- * primary caching. (for
- * I/O)
- */
-
-
-
- queue_chain_t cached_list; /* Attachment point for the
- * list of objects cached as a
- * result of their can_persist
- * value
- */
-
- queue_head_t msr_q; /* memory object synchronise
- request queue */
-
- vm_object_offset_t last_alloc; /* last allocation offset */
- vm_object_offset_t sequential; /* sequential access size */
- vm_size_t cluster_size; /* size of paging cluster */
-#if MACH_PAGEMAP
- vm_external_map_t existence_map; /* bitmap of pages written to
- * backing storage */
-#endif /* MACH_PAGEMAP */
- vm_offset_t cow_hint; /* last page present in */
- /* shadow but not in object */
-#if MACH_ASSERT
- struct vm_object *paging_object; /* object which pages to be
- * swapped out are temporary
- * put in current object
- */
+ /* boolean_t array */ all_wanted:11, /* Bit array of "want to be
+ * awakened" notations. See
+ * VM_OBJECT_EVENT_* items
+ * below */
+ /* boolean_t */ pager_created:1, /* Has pager been created? */
+ /* boolean_t */ pager_initialized:1, /* Are fields ready to use? */
+ /* boolean_t */ pager_ready:1, /* Will pager take requests? */
+
+ /* boolean_t */ pager_trusted:1, /* The pager for this object
+ * is trusted. This is true for
+ * all internal objects (backed
+ * by the default pager)
+ */
+ /* boolean_t */ can_persist:1, /* The kernel may keep the data
+ * for this object (and rights
+ * to the memory object) after
+ * all address map references
+ * are deallocated?
+ */
+ /* boolean_t */ internal:1, /* Created by the kernel (and
+ * therefore, managed by the
+ * default memory manger)
+ */
+ /* boolean_t */ private:1, /* magic device_pager object,
+ * holds private pages only */
+ /* boolean_t */ pageout:1, /* pageout object. contains
+ * private pages that refer to
+ * a real memory object. */
+ /* boolean_t */ alive:1, /* Not yet terminated */
+
+ /* boolean_t */ purgable:2, /* Purgable state. See
+ * VM_PURGABLE_*
+ */
+ /* boolean_t */ purgeable_only_by_kernel:1,
+ /* boolean_t */ purgeable_when_ripe:1, /* Purgeable when a token
+ * becomes ripe.
+ */
+ /* boolean_t */ shadowed:1, /* Shadow may exist */
+ /* boolean_t */ true_share:1,
+ /* This object is mapped
+ * in more than one place
+ * and hence cannot be
+ * coalesced */
+ /* boolean_t */ terminating:1,
+ /* Allows vm_object_lookup
+ * and vm_object_deallocate
+ * to special case their
+ * behavior when they are
+ * called as a result of
+ * page cleaning during
+ * object termination
+ */
+ /* boolean_t */ named:1, /* An enforces an internal
+ * naming convention, by
+ * calling the right routines
+ * for allocation and
+ * destruction, UBC references
+ * against the vm_object are
+ * checked.
+ */
+ /* boolean_t */ shadow_severed:1,
+ /* When a permanent object
+ * backing a COW goes away
+ * unexpectedly. This bit
+ * allows vm_fault to return
+ * an error rather than a
+ * zero filled page.
+ */
+ /* boolean_t */ phys_contiguous:1,
+ /* Memory is wired and
+ * guaranteed physically
+ * contiguous. However
+ * it is not device memory
+ * and obeys normal virtual
+ * memory rules w.r.t pmap
+ * access bits.
+ */
+ /* boolean_t */ nophyscache:1,
+ /* When mapped at the
+ * pmap level, don't allow
+ * primary caching. (for
+ * I/O)
+ */
+ /* boolean_t */ _object5_unused_bits:1;
+
+ queue_chain_t cached_list; /* Attachment point for the
+ * list of objects cached as a
+ * result of their can_persist
+ * value
+ */
+ /*
+ * the following fields are not protected by any locks
+ * they are updated via atomic compare and swap
+ */
+ vm_object_offset_t last_alloc; /* last allocation offset */
+ vm_offset_t cow_hint; /* last page present in */
+ /* shadow but not in object */
+ int sequential; /* sequential access size */
+
+ uint32_t pages_created;
+ uint32_t pages_used;
+ /* hold object lock when altering */
+ unsigned int
+ wimg_bits:8, /* cache WIMG bits */
+ code_signed:1, /* pages are signed and should be
+ * validated; the signatures are stored
+ * with the pager */
+ transposed:1, /* object was transposed with another */
+ mapping_in_progress:1, /* pager being mapped/unmapped */
+ phantom_isssd:1,
+ volatile_empty:1,
+ volatile_fault:1,
+ all_reusable:1,
+ blocked_access:1,
+ set_cache_attr:1,
+ object_is_shared_cache:1,
+ purgeable_queue_type:2,
+ purgeable_queue_group:3,
+ io_tracking:1,
+ no_tag_update:1, /* */
+#if CONFIG_SECLUDED_MEMORY
+ eligible_for_secluded:1,
+ can_grab_secluded:1,
+#else /* CONFIG_SECLUDED_MEMORY */
+ __object3_unused_bits:2,
+#endif /* CONFIG_SECLUDED_MEMORY */
+#if VM_OBJECT_ACCESS_TRACKING
+ access_tracking:1,
+#else /* VM_OBJECT_ACCESS_TRACKING */
+ __unused_access_tracking:1,
+#endif /* VM_OBJECT_ACCESS_TRACKING */
+ vo_ledger_tag:3,
+ vo_no_footprint:1;
+
+#if VM_OBJECT_ACCESS_TRACKING
+ uint32_t access_tracking_reads;
+ uint32_t access_tracking_writes;
+#endif /* VM_OBJECT_ACCESS_TRACKING */
+
+ uint8_t scan_collisions;
+ uint8_t __object4_unused_bits[1];
+ vm_tag_t wire_tag;
+
+#if CONFIG_PHANTOM_CACHE
+ uint32_t phantom_object_id;
+#endif
+#if CONFIG_IOSCHED || UPL_DEBUG
+ queue_head_t uplq; /* List of outstanding upls */