/*
- * Copyright (c) 2000-2006 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2020 Apple Inc. All rights reserved.
*
* @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
/* until component support available */
const struct memory_object_pager_ops device_pager_ops = {
- device_pager_reference,
- device_pager_deallocate,
- device_pager_init,
- device_pager_terminate,
- device_pager_data_request,
- device_pager_data_return,
- device_pager_data_initialize,
- device_pager_data_unlock,
- device_pager_synchronize,
- device_pager_map,
- device_pager_last_unmap,
- NULL, /* data_reclaim */
- "device pager"
+ .memory_object_reference = device_pager_reference,
+ .memory_object_deallocate = device_pager_deallocate,
+ .memory_object_init = device_pager_init,
+ .memory_object_terminate = device_pager_terminate,
+ .memory_object_data_request = device_pager_data_request,
+ .memory_object_data_return = device_pager_data_return,
+ .memory_object_data_initialize = device_pager_data_initialize,
+ .memory_object_data_unlock = device_pager_data_unlock,
+ .memory_object_synchronize = device_pager_synchronize,
+ .memory_object_map = device_pager_map,
+ .memory_object_last_unmap = device_pager_last_unmap,
+ .memory_object_data_reclaim = NULL,
+ .memory_object_backing_object = NULL,
+ .memory_object_pager_name = "device pager"
};
typedef uintptr_t device_port_t;
boolean_t is_mapped;
} *device_pager_t;
-lck_grp_t device_pager_lck_grp;
-lck_grp_attr_t device_pager_lck_grp_attr;
-lck_attr_t device_pager_lck_attr;
+LCK_GRP_DECLARE(device_pager_lck_grp, "device_pager");
-#define device_pager_lock_init(pager) \
- lck_mtx_init(&(pager)->lock, \
- &device_pager_lck_grp, \
- &device_pager_lck_attr)
-#define device_pager_lock_destroy(pager) \
+ZONE_DECLARE(device_pager_zone, "device node pager structures",
+ sizeof(struct device_pager), ZC_NONE);
+
+#define device_pager_lock_init(pager) \
+ lck_mtx_init(&(pager)->lock, &device_pager_lck_grp, LCK_ATTR_NULL)
+#define device_pager_lock_destroy(pager) \
lck_mtx_destroy(&(pager)->lock, &device_pager_lck_grp)
#define device_pager_lock(pager) lck_mtx_lock(&(pager)->lock)
#define device_pager_unlock(pager) lck_mtx_unlock(&(pager)->lock)
device_pager_t
device_object_create(void); /* forward */
-zone_t device_pager_zone;
-
-
#define DEVICE_PAGER_NULL ((device_pager_t) 0)
-
#define MAX_DNODE 10000
-
-
-
-/*
- *
- */
-void
-device_pager_bootstrap(void)
-{
- vm_size_t size;
-
- size = (vm_size_t) sizeof(struct device_pager);
- device_pager_zone = zinit(size, (vm_size_t) MAX_DNODE * size,
- PAGE_SIZE, "device node pager structures");
- zone_change(device_pager_zone, Z_CALLERACCT, FALSE);
-
- lck_grp_attr_setdefault(&device_pager_lck_grp_attr);
- lck_grp_init(&device_pager_lck_grp, "device_pager", &device_pager_lck_grp_attr);
- lck_attr_setdefault(&device_pager_lck_attr);
-
- return;
-}
-
/*
*
*/
&control);
object = memory_object_control_to_vm_object(control);
+ memory_object_mark_trusted(control);
+
assert(object != VM_OBJECT_NULL);
vm_object_lock(object);
object->true_share = TRUE;
device_object = device_pager_lookup(mem_obj);
os_ref_retain(&device_object->ref_count);
-
DTRACE_VM2(device_pager_reference,
device_pager_t, device_object,
unsigned int, os_ref_get_count(&device_object->ref_count));