diff options
author | Justus Winter <justus@gnupg.org> | 2016-10-02 00:37:43 +0200 |
---|---|---|
committer | Justus Winter <justus@gnupg.org> | 2016-10-03 22:31:26 +0200 |
commit | 8d327ced8c2e539a0e845f522f56a84f6474f5ca (patch) | |
tree | 312d6cfc98ed78c56eb7743e43ab910218181fcc /device | |
parent | d8162a1f9e3baf1a6f0bf9f025ea7d0cdee13d3b (diff) | |
download | gnumach-8d327ced8c2e539a0e845f522f56a84f6474f5ca.tar.gz gnumach-8d327ced8c2e539a0e845f522f56a84f6474f5ca.tar.bz2 gnumach-8d327ced8c2e539a0e845f522f56a84f6474f5ca.zip |
Remove deprecated external memory management interface.
* NEWS: Update.
* device/dev_pager.c (device_pager_data_request): Prune unused branch.
(device_pager_data_request_done): Remove function.
(device_pager_data_write): Likewise.
(device_pager_data_write_done): Likewise.
(device_pager_copy): Use 'memory_object_ready'.
* device/dev_pager.h (device_pager_data_write_done): Remove prototype.
* device/device_pager.srv (memory_object_data_write): Remove macro.
* doc/mach.texi: Update documentation.
* include/mach/mach.defs (memory_object_data_provided): Drop RPC.
(memory_object_set_attributes): Likewise.
* include/mach/memory_object.defs: Update comments.
(memory_object_data_write): Drop RPC.
* include/mach/memory_object_default.defs: Update comments.
* include/mach_debug/vm_info.h (VOI_STATE_USE_OLD_PAGEOUT): Drop
macro.
* vm/memory_object.c (memory_object_data_provided): Remove function.
(memory_object_data_error): Simplify.
(memory_object_set_attributes_common): Make static, remove unused
parameters, simplify.
(memory_object_change_attributes): Update callsite.
(memory_object_set_attributes): Remove function.
(memory_object_ready): Update callsite.
* vm/vm_debug.c (mach_vm_object_info): Adapt to the changes.
* vm/vm_object.c (vm_object_bootstrap): Likewise.
* vm/vm_object.h (struct vm_object): Drop flag 'use_old_pageout'.
* vm/vm_pageout.c: Update comments.
(vm_pageout_page): Simplify.
Diffstat (limited to 'device')
-rw-r--r-- | device/dev_pager.c | 171 | ||||
-rw-r--r-- | device/dev_pager.h | 2 | ||||
-rw-r--r-- | device/device_pager.srv | 1 |
3 files changed, 6 insertions, 168 deletions
diff --git a/device/dev_pager.c b/device/dev_pager.c index 40331706..7130229b 100644 --- a/device/dev_pager.c +++ b/device/dev_pager.c @@ -356,45 +356,7 @@ kern_return_t device_pager_data_request( vm_object_deallocate(object); } else { - io_req_t ior; - mach_device_t device; - io_return_t result; - panic("(device_pager)data_request: dev pager"); - - device = ds->device; - mach_device_reference(device); - dev_pager_deallocate(ds); - - /* - * Package the read for the device driver. - */ - io_req_alloc(ior, 0); - - ior->io_device = device; - ior->io_unit = device->dev_number; - ior->io_op = IO_READ | IO_CALL; - ior->io_mode = 0; - ior->io_recnum = offset / device->bsize; - ior->io_data = 0; /* driver must allocate */ - ior->io_count = length; - ior->io_alloc_size = 0; /* no data allocated yet */ - ior->io_residual = 0; - ior->io_error = 0; - ior->io_done = device_pager_data_request_done; - ior->io_reply_port = pager_request; - ior->io_reply_port_type = MACH_MSG_TYPE_PORT_SEND; - - result = (*device->dev_ops->d_read)(device->dev_number, ior); - if (result == D_IO_QUEUED) - return (KERN_SUCCESS); - - /* - * Return by queuing IOR for io_done thread, to reply in - * correct environment (kernel). - */ - ior->io_error = result; - iodone(ior); } dev_pager_deallocate(ds); @@ -402,125 +364,6 @@ kern_return_t device_pager_data_request( return (KERN_SUCCESS); } -/* - * Always called by io_done thread. - */ -boolean_t device_pager_data_request_done(io_req_t ior) -{ - vm_offset_t start_alloc, end_alloc; - vm_size_t size_read; - - if (ior->io_error == D_SUCCESS) { - size_read = ior->io_count; - if (ior->io_residual) { - if (device_pager_debug) - printf("(device_pager)data_request_done: r: 0x%lx\n", ior->io_residual); - memset((&ior->io_data[ior->io_count - ior->io_residual]), 0, - (size_t) ior->io_residual); - } - } else { - size_read = ior->io_count - ior->io_residual; - } - - start_alloc = trunc_page(ior->io_data); - end_alloc = start_alloc + round_page(ior->io_alloc_size); - - if (ior->io_error == D_SUCCESS) { - vm_map_copy_t copy; - kern_return_t kr; - - kr = vm_map_copyin(kernel_map, (vm_offset_t)ior->io_data, - size_read, TRUE, ©); - if (kr != KERN_SUCCESS) - panic("device_pager_data_request_done"); - - (void) r_memory_object_data_provided( - ior->io_reply_port, - ior->io_recnum * ior->io_device->bsize, - (vm_offset_t)copy, - size_read, - VM_PROT_NONE); - } - else { - (void) r_memory_object_data_error( - ior->io_reply_port, - ior->io_recnum * ior->io_device->bsize, - (vm_size_t)ior->io_count, - ior->io_error); - } - - (void)vm_deallocate(kernel_map, - start_alloc, - end_alloc - start_alloc); - mach_device_deallocate(ior->io_device); - return (TRUE); -} - -kern_return_t device_pager_data_write( - const ipc_port_t pager, - const ipc_port_t pager_request, - vm_offset_t offset, - pointer_t addr, - vm_size_t data_count) -{ - dev_pager_t ds; - mach_device_t device; - io_req_t ior; - kern_return_t result; - - panic("(device_pager)data_write: called"); - - ds = dev_pager_hash_lookup(pager); - if (ds == DEV_PAGER_NULL) - panic("(device_pager)data_write: lookup failed"); - - if (ds->pager_request != pager_request) - panic("(device_pager)data_write: bad pager_request"); - - if (ds->type == CHAR_PAGER_TYPE) - panic("(device_pager)data_write: char pager"); - - device = ds->device; - mach_device_reference(device); - dev_pager_deallocate(ds); - - /* - * Package the write request for the device driver. - */ - io_req_alloc(ior, data_count); - - ior->io_device = device; - ior->io_unit = device->dev_number; - ior->io_op = IO_WRITE | IO_CALL; - ior->io_mode = 0; - ior->io_recnum = offset / device->bsize; - ior->io_data = (io_buf_ptr_t)addr; - ior->io_count = data_count; - ior->io_alloc_size = data_count; /* amount to deallocate */ - ior->io_residual = 0; - ior->io_error = 0; - ior->io_done = device_pager_data_write_done; - ior->io_reply_port = IP_NULL; - - result = (*device->dev_ops->d_write)(device->dev_number, ior); - - if (result != D_IO_QUEUED) { - device_write_dealloc(ior); - io_req_free((vm_offset_t)ior); - mach_device_deallocate(device); - } - - return (KERN_SUCCESS); -} - -boolean_t device_pager_data_write_done(io_req_t ior) -{ - device_write_dealloc(ior); - mach_device_deallocate(ior->io_device); - - return (TRUE); -} - kern_return_t device_pager_copy( const ipc_port_t pager, const ipc_port_t pager_request, @@ -618,15 +461,13 @@ kern_return_t device_pager_init_pager( /* * Reply that the object is ready */ - (void) r_memory_object_set_attributes(pager_request, - TRUE, /* ready */ - FALSE, /* do not cache */ - MEMORY_OBJECT_COPY_NONE); + (void) r_memory_object_ready(pager_request, + FALSE, /* do not cache */ + MEMORY_OBJECT_COPY_NONE); } else { - (void) r_memory_object_set_attributes(pager_request, - TRUE, /* ready */ - TRUE, /* cache */ - MEMORY_OBJECT_COPY_DELAY); + (void) r_memory_object_ready(pager_request, + TRUE, /* cache */ + MEMORY_OBJECT_COPY_DELAY); } dev_pager_deallocate(ds); diff --git a/device/dev_pager.h b/device/dev_pager.h index 7f97ee7e..7cced949 100644 --- a/device/dev_pager.h +++ b/device/dev_pager.h @@ -23,6 +23,4 @@ vm_offset_t device_map_page(void *dsp, vm_offset_t offset); boolean_t device_pager_data_request_done(io_req_t ior); -boolean_t device_pager_data_write_done(io_req_t ior); - #endif /* _DEVICE_DEV_PAGER_H_ */ diff --git a/device/device_pager.srv b/device/device_pager.srv index e4e52eac..410323d9 100644 --- a/device/device_pager.srv +++ b/device/device_pager.srv @@ -35,7 +35,6 @@ #define memory_object_copy device_pager_copy #define memory_object_data_request device_pager_data_request #define memory_object_data_unlock device_pager_data_unlock -#define memory_object_data_write device_pager_data_write #define memory_object_lock_completed device_pager_lock_completed #define memory_object_supply_completed device_pager_supply_completed #define memory_object_data_return device_pager_data_return |