--- Gnu-Mach/device/dev_pager.c 2020/09/02 04:43:00 1.1.1.2 +++ Gnu-Mach/device/dev_pager.c 2020/09/02 04:45:29 1.1.1.3 @@ -29,7 +29,8 @@ * * Device pager. */ -#include + +#include #include #include @@ -40,17 +41,20 @@ #include #include +#include +#include #include -#include -#include +#include #include #include +#include #include #include #include #include +#include extern vm_offset_t block_io_mmap(); /* dummy routine to allow mmap for block devices */ @@ -121,16 +125,16 @@ 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) +void dev_pager_reference(dev_pager_t ds) { simple_lock(&ds->lock); ds->ref_count++; simple_unlock(&ds->lock); } -void dev_pager_deallocate(register dev_pager_t ds) +void dev_pager_deallocate(dev_pager_t ds) { simple_lock(&ds->lock); if (--ds->ref_count > 0) { @@ -139,7 +143,7 @@ void dev_pager_deallocate(register dev_p } simple_unlock(&ds->lock); - zfree(dev_pager_zone, (vm_offset_t)ds); + kmem_cache_free(&dev_pager_cache, (vm_offset_t)ds); } /* @@ -156,25 +160,21 @@ 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) { - register int i; - register vm_size_t size; + int i; + vm_size_t size; size = sizeof(struct dev_pager_entry); - dev_pager_hash_zone = zinit( - size, - 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); @@ -184,9 +184,9 @@ void dev_pager_hash_insert( ipc_port_t name_port, dev_pager_t rec) { - register dev_pager_entry_t new_entry; + 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; @@ -198,8 +198,8 @@ void dev_pager_hash_insert( void dev_pager_hash_delete(ipc_port_t name_port) { - register queue_t bucket; - register dev_pager_entry_t entry; + queue_t bucket; + dev_pager_entry_t entry; bucket = &dev_pager_hashtable[dev_pager_hash(name_port)]; @@ -214,14 +214,14 @@ void dev_pager_hash_delete(ipc_port_t na } 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) { - register queue_t bucket; - register dev_pager_entry_t entry; - register dev_pager_t pager; + queue_t bucket; + dev_pager_entry_t entry; + dev_pager_t pager; bucket = &dev_pager_hashtable[dev_pager_hash(name_port)]; @@ -247,7 +247,7 @@ kern_return_t device_pager_setup( vm_size_t size, mach_port_t *pager) { - register dev_pager_t d; + dev_pager_t d; /* * Verify the device is indeed mappable @@ -267,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); @@ -329,14 +329,10 @@ kern_return_t device_pager_data_request( vm_size_t length, vm_prot_t protection_required) { - register dev_pager_t ds; - -#ifdef lint - protection_required++; -#endif /* lint */ + dev_pager_t ds; if (device_pager_debug) - printf("(device_pager)data_request: pager=%d, 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); @@ -347,14 +343,10 @@ kern_return_t device_pager_data_request( panic("(device_pager)data_request: bad pager_request"); if (ds->type == CHAR_PAGER_TYPE) { - register vm_object_t object; - vm_offset_t device_map_page(void *,vm_offset_t); + vm_object_t object; + vm_offset_t device_map_page(void *, vm_offset_t); -#if NORMA_VM - object = vm_object_lookup(pager); -#else /* NORMA_VM */ object = vm_object_lookup(pager_request); -#endif /* NORMA_VM */ if (object == VM_OBJECT_NULL) { (void) r_memory_object_data_error(pager_request, offset, length, @@ -370,8 +362,8 @@ kern_return_t device_pager_data_request( vm_object_deallocate(object); } else { - register io_req_t ior; - register mach_device_t device; + io_req_t ior; + mach_device_t device; io_return_t result; panic("(device_pager)data_request: dev pager"); @@ -419,7 +411,7 @@ kern_return_t device_pager_data_request( /* * Always called by io_done thread. */ -boolean_t device_pager_data_request_done(register io_req_t ior) +boolean_t device_pager_data_request_done(io_req_t ior) { vm_offset_t start_alloc, end_alloc; vm_size_t size_read; @@ -428,9 +420,8 @@ boolean_t device_pager_data_request_done size_read = ior->io_count; if (ior->io_residual) { if (device_pager_debug) - printf("(device_pager)data_request_done: r: 0x%x\n",ior->io_residual); - bzero( (char *) (&ior->io_data[ior->io_count - - ior->io_residual]), + printf("(device_pager)data_request_done: r: 0x%lx\n", ior->io_residual); + memset((&ior->io_data[ior->io_count - ior->io_residual]), 0, (unsigned) ior->io_residual); } } else { @@ -474,13 +465,13 @@ boolean_t device_pager_data_request_done kern_return_t device_pager_data_write( ipc_port_t pager, ipc_port_t pager_request, - register vm_offset_t offset, - register pointer_t addr, + vm_offset_t offset, + pointer_t addr, vm_size_t data_count) { - register dev_pager_t ds; - register mach_device_t device; - register io_req_t ior; + dev_pager_t ds; + mach_device_t device; + io_req_t ior; kern_return_t result; panic("(device_pager)data_write: called"); @@ -529,7 +520,7 @@ kern_return_t device_pager_data_write( } boolean_t device_pager_data_write_done(ior) - register io_req_t ior; + io_req_t ior; { device_write_dealloc(ior); mach_device_deallocate(ior->io_device); @@ -540,8 +531,8 @@ boolean_t device_pager_data_write_done(i kern_return_t device_pager_copy( ipc_port_t pager, ipc_port_t pager_request, - register vm_offset_t offset, - register vm_size_t length, + vm_offset_t offset, + vm_size_t length, ipc_port_t new_pager) { panic("(device_pager)copy: called"); @@ -564,7 +555,7 @@ device_pager_data_return( ipc_port_t pager, ipc_port_t pager_request, vm_offset_t offset, - register pointer_t addr, + pointer_t addr, vm_size_t data_cnt, boolean_t dirty, boolean_t kernel_copy) @@ -591,7 +582,7 @@ vm_offset_t device_map_page( void *dsp, vm_offset_t offset) { - register dev_pager_t ds = (dev_pager_t) dsp; + dev_pager_t ds = (dev_pager_t) dsp; return pmap_phys_address( (*(ds->device->dev_ops->d_mmap)) @@ -604,10 +595,10 @@ kern_return_t device_pager_init_pager( ipc_port_t pager_name, vm_size_t pager_page_size) { - register dev_pager_t ds; + dev_pager_t ds; if (device_pager_debug) - printf("(device_pager)init: pager=%d, request=%d, name=%d\n", + printf("(device_pager)init: pager=%p, request=%p, name=%p\n", pager, pager_request, pager_name); assert(pager_page_size == PAGE_SIZE); @@ -654,7 +645,7 @@ kern_return_t device_pager_terminate( ipc_port_t pager_request, ipc_port_t pager_name) { - register dev_pager_t ds; + dev_pager_t ds; assert(IP_VALID(pager_request)); assert(IP_VALID(pager_name)); @@ -698,10 +689,6 @@ kern_return_t device_pager_data_unlock( vm_size_t length, vm_prot_t desired_access) { -#ifdef lint - memory_object++; memory_control_port++; offset++; length++; desired_access++; -#endif /* lint */ - panic("(device_pager)data_unlock: called"); return (KERN_FAILURE); } @@ -712,27 +699,20 @@ kern_return_t device_pager_lock_complete vm_offset_t offset, vm_size_t length) { -#ifdef lint - memory_object++; pager_request_port++; offset++; length++; -#endif /* lint */ - panic("(device_pager)lock_completed: called"); return (KERN_FAILURE); } void device_pager_init(void) { - register vm_size_t size; + vm_size_t size; /* - * Initialize zone of paging structures. + * Initialize cache of paging structures. */ size = sizeof(struct dev_pager); - dev_pager_zone = zinit(size, - (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.