diff options
author | Maksym Planeta <mcsim.planeta@gmail.com> | 2012-10-08 16:31:41 +0200 |
---|---|---|
committer | Maksym Planeta <mcsim.planeta@gmail.com> | 2012-10-28 12:23:28 +0100 |
commit | 74250405e042ecf0f11adc42f00968b39d93fe3e (patch) | |
tree | 7e647aaaf77adbae5384e5350f52d6c969d9d1a6 /vm | |
parent | e70ecc311676b9f30cbc5ca7c2029b7f522cbb25 (diff) |
Add RPC that supplies user with general information regarding memory advice.
Current implementation of vm_get_advice_info returns only maximal possible
size of cluster to be asked. This information is used by default pager,
because it can't rely on allocating of memory during processing requests
from kernel. That's why default pager allocates buffers, where it stores
data to be returned to kernel, beforehand for each thread. So, information
provided by vm_get_advice_info tells the default pager size of this buffer.
* include/mach/mach.defs (vm_get_advice_info): New ipc definition.
* vm/vm_user.c (vm_get_advice_info): New function.
Diffstat (limited to 'vm')
-rw-r--r-- | vm/vm_user.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/vm/vm_user.c b/vm/vm_user.c index c5530a69..1385b127 100644 --- a/vm/vm_user.c +++ b/vm/vm_user.c @@ -239,6 +239,21 @@ kern_return_t vm_machine_attribute(map, address, size, attribute, value) return vm_map_machine_attribute(map, address, size, attribute, value); } +/* + * Return machine-specific attribute for memory advice, such + * as maximal size of requested cluster. + */ +kern_return_t +vm_get_advice_info(vm_map_t map, vm_size_t* max_cluster /* OUT */) +{ + if (map == VM_MAP_NULL) + return(KERN_INVALID_ARGUMENT); + + *max_cluster = VM_ADVICE_MAX_READAHEAD * PAGE_SIZE; + + return KERN_SUCCESS; +} + kern_return_t vm_read(map, address, size, data, data_size) vm_map_t map; vm_address_t address; |