summaryrefslogtreecommitdiff
path: root/device/dev_pager.c
diff options
context:
space:
mode:
Diffstat (limited to 'device/dev_pager.c')
-rw-r--r--device/dev_pager.c39
1 files changed, 15 insertions, 24 deletions
diff --git a/device/dev_pager.c b/device/dev_pager.c
index 224be850..e0ca2c76 100644
--- a/device/dev_pager.c
+++ b/device/dev_pager.c
@@ -44,8 +44,7 @@
#include <kern/debug.h>
#include <kern/printf.h>
#include <kern/queue.h>
-#include <kern/zalloc.h>
-#include <kern/kalloc.h>
+#include <kern/slab.h>
#include <vm/vm_page.h>
#include <vm/vm_kern.h>
@@ -55,6 +54,7 @@
#include <device/ds_routines.h>
#include <device/dev_hdr.h>
#include <device/io_req.h>
+#include <device/memory_object_reply.user.h>
extern vm_offset_t block_io_mmap(); /* dummy routine to allow
mmap for block devices */
@@ -125,7 +125,7 @@ typedef struct dev_pager *dev_pager_t;
#define DEV_PAGER_NULL ((dev_pager_t)0)
-zone_t dev_pager_zone;
+struct kmem_cache dev_pager_cache;
void dev_pager_reference(register dev_pager_t ds)
{
@@ -143,7 +143,7 @@ void dev_pager_deallocate(register dev_pager_t ds)
}
simple_unlock(&ds->lock);
- zfree(dev_pager_zone, (vm_offset_t)ds);
+ kmem_cache_free(&dev_pager_cache, (vm_offset_t)ds);
}
/*
@@ -160,12 +160,12 @@ struct dev_pager_entry {
typedef struct dev_pager_entry *dev_pager_entry_t;
queue_head_t dev_pager_hashtable[DEV_PAGER_HASH_COUNT];
-zone_t dev_pager_hash_zone;
+struct kmem_cache dev_pager_hash_cache;
decl_simple_lock_data(,
dev_pager_hash_lock)
#define dev_pager_hash(name_port) \
- (((natural_t)(name_port) & 0xffffff) % DEV_PAGER_HASH_COUNT)
+ (((vm_offset_t)(name_port) & 0xffffff) % DEV_PAGER_HASH_COUNT)
void dev_pager_hash_init(void)
{
@@ -173,13 +173,8 @@ void dev_pager_hash_init(void)
register vm_size_t size;
size = sizeof(struct dev_pager_entry);
- dev_pager_hash_zone = zinit(
- size,
- 0,
- size * 1000,
- PAGE_SIZE,
- FALSE,
- "dev_pager port hash");
+ kmem_cache_init(&dev_pager_hash_cache, "dev_pager_entry", size, 0,
+ NULL, NULL, NULL, 0);
for (i = 0; i < DEV_PAGER_HASH_COUNT; i++)
queue_init(&dev_pager_hashtable[i]);
simple_lock_init(&dev_pager_hash_lock);
@@ -191,7 +186,7 @@ void dev_pager_hash_insert(
{
register dev_pager_entry_t new_entry;
- new_entry = (dev_pager_entry_t) zalloc(dev_pager_hash_zone);
+ new_entry = (dev_pager_entry_t) kmem_cache_alloc(&dev_pager_hash_cache);
new_entry->name = name_port;
new_entry->pager_rec = rec;
@@ -219,7 +214,7 @@ void dev_pager_hash_delete(ipc_port_t name_port)
}
simple_unlock(&dev_pager_hash_lock);
if (entry)
- zfree(dev_pager_hash_zone, (vm_offset_t)entry);
+ kmem_cache_free(&dev_pager_hash_cache, (vm_offset_t)entry);
}
dev_pager_t dev_pager_hash_lookup(ipc_port_t name_port)
@@ -272,7 +267,7 @@ kern_return_t device_pager_setup(
return (D_SUCCESS);
}
- d = (dev_pager_t) zalloc(dev_pager_zone);
+ d = (dev_pager_t) kmem_cache_alloc(&dev_pager_cache);
if (d == DEV_PAGER_NULL)
return (KERN_RESOURCE_SHORTAGE);
@@ -341,7 +336,7 @@ kern_return_t device_pager_data_request(
#endif /* lint */
if (device_pager_debug)
- printf("(device_pager)data_request: pager=%p, offset=0x%x, length=0x%x\n",
+ printf("(device_pager)data_request: pager=%p, offset=0x%lx, length=0x%x\n",
pager, offset, length);
ds = dev_pager_hash_lookup((ipc_port_t)pager);
@@ -725,15 +720,11 @@ void device_pager_init(void)
register vm_size_t size;
/*
- * Initialize zone of paging structures.
+ * Initialize cache of paging structures.
*/
size = sizeof(struct dev_pager);
- dev_pager_zone = zinit(size,
- 0,
- (vm_size_t) size * 1000,
- PAGE_SIZE,
- FALSE,
- "device pager structures");
+ kmem_cache_init(&dev_pager_cache, "dev_pager", size, 0,
+ NULL, NULL, NULL, 0);
/*
* Initialize the name port hashing stuff.