diff options
Diffstat (limited to 'device/dev_pager.c')
-rw-r--r-- | device/dev_pager.c | 39 |
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. |